commit
27fa4ac199
|
@ -0,0 +1,811 @@
|
||||||
|
# ISCE2
|
||||||
|
|
||||||
|
This is the Interferometric synthetic aperture radar Scientific Computing
|
||||||
|
Environment (ISCE). Its initial development was funded by NASA's Earth Science
|
||||||
|
Technology Office (ESTO) under the Advanced Information Systems Technology
|
||||||
|
(AIST) 2008 and is currently being funded under the NASA-ISRO SAR (NISAR)
|
||||||
|
project.
|
||||||
|
|
||||||
|
THIS IS RESEARCH CODE PROVIDED TO YOU "AS IS" WITH NO WARRANTIES OF CORRECTNESS.
|
||||||
|
USE AT YOUR OWN RISK.
|
||||||
|
|
||||||
|
This software is open source under the terms of the the Apache License. Its export
|
||||||
|
classification is 'EAR99 NLR', which entails some restrictions and responsibilities.
|
||||||
|
Please read the accompanying LICENSE.txt and LICENSE-2.0 files.
|
||||||
|
|
||||||
|
ISCE is a framework designed for the purpose of processing Interferometric
|
||||||
|
Synthetic Aperture Radar (InSAR) data. The framework aspects of it have been
|
||||||
|
designed as a general software development framework. It may have additional
|
||||||
|
utility in a general sense for building other types of software packages. In
|
||||||
|
its InSAR aspect ISCE supports data from many space-borne satellites and one
|
||||||
|
air-borne platform. We continue to increase the number of sensors supported.
|
||||||
|
At this time the sensors that are supported are the following: ALOS, ALOS2,
|
||||||
|
COSMO_SKYMED, ENVISAT, ERS, KOMPSAT5, RADARSAT1, RADARSAT2, RISAT1, Sentinel1,
|
||||||
|
TERRASARX, and UAVSAR.
|
||||||
|
|
||||||
|
## Contents
|
||||||
|
|
||||||
|
1. [Software Dependencies](#software-dependencies)
|
||||||
|
- [Installing dependencies with Anaconda](#with-anaconda)
|
||||||
|
- [Installing dependencies with Macports](#with-macports)
|
||||||
|
- [Note On 'python3' Exectuable Convention](#python3-convention)
|
||||||
|
- [License required for dependencies to enable some workflows in ISCE](#license-required-for-dependencies-to-enable-some-workflows-in-isce)
|
||||||
|
2. [Building ISCE](#building-isce)
|
||||||
|
- [Configuration control: SCONS\_CONFIG\_DIR and SConfigISCE](#configuration-control)
|
||||||
|
- [Install ISCE](#install-isce)
|
||||||
|
- [Setup Your Environment](#setup-your-environment)
|
||||||
|
3. [Running ISCE](#running-isce)
|
||||||
|
- [Running ISCE from the command line](#running-isce-from-the-command-line)
|
||||||
|
- [Running ISCE in the Python interpreter](#running-isce-in-the-python-interpreter)
|
||||||
|
- [Running ISCE with steps](#running-isce-with-steps)
|
||||||
|
- [Notes on Digital Elevation Models (DEMs)](#notes-on-digital-elevation-models)
|
||||||
|
4. [Input Files](#input-files)
|
||||||
|
5. [Component Configurability](#component-configurability)
|
||||||
|
- [Component Names: Family and Instance](#component-names-family-and-instance)
|
||||||
|
- [Component Configuration Files: Locations, Names, Priorities](#component-configuration-files-locations-names-priorities)
|
||||||
|
- [Component Configuration Help](#component-configuration-help)
|
||||||
|
6. [User community Forums](#user-community-forums)
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 1. Software Dependencies
|
||||||
|
|
||||||
|
### Basic:
|
||||||
|
|
||||||
|
* gcc >= 4.8+ (with C++11 support)
|
||||||
|
* fftw >= 3.2.2 (with single precision support)
|
||||||
|
* Python >= 3.5 (3.6 preferred)
|
||||||
|
* scons >= 2.0.1
|
||||||
|
* curl - for automatic DEM downloads
|
||||||
|
* GDAL and its Python bindings >= 2.2
|
||||||
|
|
||||||
|
### Optional:
|
||||||
|
#### For a few sensor types:
|
||||||
|
|
||||||
|
* hdf5 >= 1.8.5 and h5py >= 1.3.1 - for COSMO-SkyMed, Kompsat5, and 'Generic' sensor
|
||||||
|
|
||||||
|
#### For mdx (image visualization tool) options:
|
||||||
|
|
||||||
|
* Motif libraries and include files
|
||||||
|
* ImageMagick - for mdx production of kml file (advanced feature)
|
||||||
|
* grace - for mdx production of color table and line plots (advanced feature)
|
||||||
|
|
||||||
|
#### For the "unwrap 2 stage" option:
|
||||||
|
|
||||||
|
RelaxIV and Pulp are required. Information on getting these packages if
|
||||||
|
you want to try the unwrap 2 stage option:
|
||||||
|
|
||||||
|
* RelaxIV (a minimum cost flow relaxation algorithm coded in C++ by
|
||||||
|
Antonio Frangioni and Claudio Gentile at the University of Pisa,
|
||||||
|
based on the Fortran code developed by by Dimitri Bertsekas while
|
||||||
|
at MIT) available by request at http://www.di.unipi.it/~frangio.
|
||||||
|
So that ISCE will compile it properly, the RelaxIV files should
|
||||||
|
be placed in the directory: 'contrib/UnwrapComp/src/RelaxIV'.
|
||||||
|
|
||||||
|
* PULP: Use easy\_install or pip to install it or else clone it from,
|
||||||
|
https://github.com/coin-or/pulp. Make sure the path to the installed
|
||||||
|
pulp.py is on your PYTHONPATH environment variable (it should be the case
|
||||||
|
if you use easy\_install or pip).
|
||||||
|
|
||||||
|
#### For splitSpectrum and GPU modules:
|
||||||
|
|
||||||
|
* cython3 - must have an executable named cython3 (use a symbolic link)
|
||||||
|
* cuda - for GPUtopozero and GPUgeo2rdr
|
||||||
|
* opencv - for split spectrum
|
||||||
|
|
||||||
|
### With Anaconda
|
||||||
|
|
||||||
|
The conda requirements file is shown below:
|
||||||
|
```bash
|
||||||
|
cython
|
||||||
|
gdal
|
||||||
|
git
|
||||||
|
h5py
|
||||||
|
libgdal
|
||||||
|
pytest
|
||||||
|
numpy
|
||||||
|
fftw
|
||||||
|
scipy
|
||||||
|
basemap
|
||||||
|
scons
|
||||||
|
opencv
|
||||||
|
```
|
||||||
|
|
||||||
|
With the above contents in a textfile named "requirements.txt"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> conda install --yes --file requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Ensure that you create a link in the anaconda bin directory for cython3.
|
||||||
|
|
||||||
|
|
||||||
|
### With Macports
|
||||||
|
|
||||||
|
The following ports (assuming gcc7 and python36) are needed on OSX
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gcc7
|
||||||
|
openmotif
|
||||||
|
python36
|
||||||
|
fftw-3 +gcc7
|
||||||
|
fftw-3-single +gcc7
|
||||||
|
xorg-libXt +flat_namespace
|
||||||
|
git
|
||||||
|
hdf5 +gcc7
|
||||||
|
h5utils
|
||||||
|
netcdf +gcc7
|
||||||
|
netcdf-cxx
|
||||||
|
netcdf-fortran
|
||||||
|
postgresql95
|
||||||
|
postgresql95-server
|
||||||
|
proj
|
||||||
|
cairo
|
||||||
|
scons
|
||||||
|
opencv +python36
|
||||||
|
ImageMagick
|
||||||
|
gdal +expat +geos +hdf5 +netcdf +postgresql95 +sqlite3
|
||||||
|
py36-numpy +gcc7 +openblas
|
||||||
|
py36-scipy +gcc7 +openblas
|
||||||
|
py36-matplotlib +cairo +tkinter
|
||||||
|
py36-matplotlib-basemap
|
||||||
|
py36-h5py
|
||||||
|
```
|
||||||
|
|
||||||
|
### Python3 Convention
|
||||||
|
|
||||||
|
We follow the convention of most package managers in using the executable
|
||||||
|
'python3' for Python3.x and 'python' for Python2.x. This makes it easy to turn
|
||||||
|
Python code into executable commands that know which version of Python they
|
||||||
|
should invoke by naming the appropriate version at the top of the executable
|
||||||
|
file (as in #!/usr/bin/env python3 or #!/usr/bin/env python). Unfortunately,
|
||||||
|
not all package managers (such as macports) follow this convention. Therefore,
|
||||||
|
if you use one of a package manager that does not create the 'python3'
|
||||||
|
executable automatically, then you should place a soft link on your path to
|
||||||
|
have the command 'python3' on your path. Then you will be able to execute an
|
||||||
|
ISCE application such as 'stripmapApp.py as "> stripmapApp.py" rather than as
|
||||||
|
"> /path-to-Python3/python stripmapApp.py".
|
||||||
|
|
||||||
|
### License required for dependencies to enable some workflows in ISCE
|
||||||
|
|
||||||
|
Some of the applications, or workflows (such as stripmapApp.py and isceApp.py),
|
||||||
|
in ISCE that may be familiar to users will not work with this open source version
|
||||||
|
of ISCE without obtaining licensed components. WinSAR users who have downloaded
|
||||||
|
ISCE from the UNAVCO website (https://winsar.unavco.org/software/isce) have signed
|
||||||
|
the licence agreement and will be given access to those licensed components. Others
|
||||||
|
wanting to use those specific workflows and components may be able to sign the
|
||||||
|
agreement through UNAVCO if they become members there. Further instructions will
|
||||||
|
be available for a possible other procedure for obtaining a license directly from
|
||||||
|
the supplier of those components.
|
||||||
|
|
||||||
|
ISCE provides workflows that do not require the licensed components that
|
||||||
|
may be used effectively and that will be supported going forward by the ISCE team.
|
||||||
|
Users that need to work with newly processed data along with older processed data
|
||||||
|
may require those licensed components as a convenience unless they also reprocess
|
||||||
|
the older data with the same workflows available in this open source release.
|
||||||
|
|
||||||
|
|
||||||
|
-------
|
||||||
|
|
||||||
|
## Building ISCE
|
||||||
|
|
||||||
|
### Configuration control
|
||||||
|
|
||||||
|
Scons requires that configuration information be present in a directory
|
||||||
|
specified by the environment variable SCONS\_CONFIG\_DIR. First, create a
|
||||||
|
build configuration file, called SConfigISCE and place it in your chosen
|
||||||
|
SCONS\_CONFIG\_DIR. The SConfigISCE file should contain the following
|
||||||
|
information, note that the #-symbol denotes a comment and does not need
|
||||||
|
to be present in the SConfigISCE file:
|
||||||
|
|
||||||
|
NOTE: Locations vary from system to system, so make sure to use the appropriate location.
|
||||||
|
The one listed here are just for illustrative purpose.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# The directory in which ISCE will be built
|
||||||
|
PRJ_SCONS_BUILD = $ISCE_BUILD_ROOT/isce
|
||||||
|
|
||||||
|
# The directory into which ISCE will be installed
|
||||||
|
PRJ_SCONS_INSTALL = $ISCE_INSTALL_ROOT/isce
|
||||||
|
|
||||||
|
# The location of libraries, such as libstdc++, libfftw3 (for most system
|
||||||
|
# it's /usr/lib and/or /usr/local/lib/ and/or /opt/local/lib)
|
||||||
|
LIBPATH = $YOUR_LIB_LOCATION_HOME/lib64 $YOUR_LIB_LOCATION_HOME/lib
|
||||||
|
|
||||||
|
# The location of Python.h. If you have multiple installations of python
|
||||||
|
# make sure that it points to the right one
|
||||||
|
CPPPATH = $YOUR_PYTHON_INSTALLATION_LOCATION/include/python3.xm $YOUR_PYTHON_INSTALLATION_LOCATION/lib/python3.x/site-packages/numpy/core/include
|
||||||
|
|
||||||
|
# The location of the fftw3.h (most likely something like /usr/include or
|
||||||
|
# /usr/local/include /opt/local/include
|
||||||
|
FORTRANPATH = $YOUR_FFTW3_INSTALLATION_LOCATION/include
|
||||||
|
|
||||||
|
# The location of your Fortran compiler. If not specified it will use the system one
|
||||||
|
FORTRAN = $YOUR_COMPILER_LOCATION/bin/gfortran
|
||||||
|
|
||||||
|
# The location of your C compiler. If not specified it will use the system one
|
||||||
|
CC = $YOUR_COMPILER_LOCATION/bin/gcc
|
||||||
|
|
||||||
|
# The location of your C++ compiler. If not specified it will use the system one
|
||||||
|
CXX = $YOUR_COMPILER_LOCATION/bin/g++
|
||||||
|
|
||||||
|
#libraries needed for mdx display utility
|
||||||
|
MOTIFLIBPATH = /opt/local/lib # path to libXm.dylib
|
||||||
|
X11LIBPATH = /opt/local/lib # path to libXt.dylib
|
||||||
|
MOTIFINCPATH = /opt/local/include # path to location of the Xm
|
||||||
|
# directory with various include files (.h)
|
||||||
|
X11INCPATH = /opt/local/include # path to location of the X11 directory
|
||||||
|
# with various include files
|
||||||
|
|
||||||
|
#Explicitly enable cuda if needed
|
||||||
|
ENABLE_CUDA = True
|
||||||
|
CUDA_TOOLKIT_PATH = $YOUR_CUDA_INSTALLATION #/usr/local/cuda
|
||||||
|
```
|
||||||
|
|
||||||
|
In the above listing of the SConfigISCE file, ISCE\_BUILD\_ROOT and
|
||||||
|
ISCE\_INSTALL\_ROOT may be actual environment variables that you create or else
|
||||||
|
you can replace them with the actual paths you choose to use for the build files
|
||||||
|
and the install files. Also, in the following the capitalization of 'isce' as
|
||||||
|
lower case does matter. This is the case-sensitive package name that Python
|
||||||
|
code uses for importing isce.
|
||||||
|
|
||||||
|
### Install ISCE
|
||||||
|
|
||||||
|
cd isce
|
||||||
|
scons install
|
||||||
|
|
||||||
|
For a verbose install run:
|
||||||
|
scons -Q install
|
||||||
|
|
||||||
|
The scons command also allows you to explicitly specify the name of the
|
||||||
|
SConfigISCE file, which could be used to specify an alternative file for
|
||||||
|
(say SConfigISCE\_NEW) which must still be located in the same
|
||||||
|
SCONS\_CONFIG\_DIR, run
|
||||||
|
|
||||||
|
```
|
||||||
|
scons install --setupfile=SConfigISCE_NEW
|
||||||
|
```
|
||||||
|
|
||||||
|
This will build the necessary components and install them into the location
|
||||||
|
specified in the configuration file as PRJ\_SCONS\_INSTALL.
|
||||||
|
|
||||||
|
|
||||||
|
#### Note about compiling ISCE after an unsuccessful build.
|
||||||
|
|
||||||
|
When building ISCE, scons will check the list of header files and libraries that
|
||||||
|
ISCE requires. Scons will cache the results of this dependency checking. So,
|
||||||
|
if you try to build ISCE and scons tells you that you are missing headers or
|
||||||
|
libraries, then you should remove the cached files before trying to build ISCE
|
||||||
|
again after installing the missing headers and libraries. The cached files are
|
||||||
|
config.log, .sconfig.dblite, and the files in directory .sconf_temp. You should
|
||||||
|
run the following command while in the top directory of the ISCE source (the
|
||||||
|
directory containing the SConstruct file):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> rm -rf config.log .sconfig.dblite .sconf_temp
|
||||||
|
```
|
||||||
|
|
||||||
|
and then try "scons install" again.
|
||||||
|
|
||||||
|
### Setup Your Environment
|
||||||
|
|
||||||
|
Once everything is installed, you will need to set the following environment
|
||||||
|
variables to run the programs included in ISCE ($ISCE_INSTALL_ROOT may be an
|
||||||
|
environment variable you created [above](#configuration-control) or else replace it with the actual
|
||||||
|
path to where you installed ISCE):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export PYTHONPATH=$ISCE\_INSTALL\_ROOT:$PYTHONPATH
|
||||||
|
```
|
||||||
|
|
||||||
|
and to put the executable commands in the ISCE applications directory on your
|
||||||
|
PATH for convenience,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export ISCE_HOME=$ISCE_INSTALL_ROOT/isce
|
||||||
|
export PATH=$ISCE_HOME/applications:$PATH
|
||||||
|
```
|
||||||
|
|
||||||
|
An optional environment variable is $ISCEDB. This variable points to a
|
||||||
|
directory in which you may place xml files containing global preferences. More
|
||||||
|
information on this directory and the files that you might place there is
|
||||||
|
given below in Section on [Input Files](#input-files). For now you can ignore this environment variable.
|
||||||
|
|
||||||
|
To test your installation and your environment, do the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> python3
|
||||||
|
>>> import isce
|
||||||
|
>>> isce.version.release_version
|
||||||
|
```
|
||||||
|
-----
|
||||||
|
|
||||||
|
## Running ISCE
|
||||||
|
|
||||||
|
### Running ISCE from the command line
|
||||||
|
|
||||||
|
Copy the example xml files located in the example directory in the ISCE source
|
||||||
|
tree to a working directory and modify them to point to your own data. Run
|
||||||
|
them using the command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> $ISCE_HOME/applications/stripmapApp.py isceInputFile.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
or (with $ISCE\_HOME/applications on your PATH) simply,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> stripmapApp.py isceInputFile.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
The name of the input file on the command line is arbitrary. ISCE also looks
|
||||||
|
for appropriately named input files in the local directory
|
||||||
|
|
||||||
|
You can also ask ISCE for help from the command line:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> stripmapApp.py --help
|
||||||
|
```
|
||||||
|
|
||||||
|
This will tell you the basic command and the options for the input file.
|
||||||
|
Example input files are also given in the 'examples/input\_files' directory.
|
||||||
|
|
||||||
|
As explained in the [Component Configurability](#component-configurability) section below, it is also possible
|
||||||
|
to run stripmapApp.py without giving an input file on the command line. ISCE will
|
||||||
|
automatically find configuration files for applications and components if they
|
||||||
|
are named appropriately.
|
||||||
|
|
||||||
|
### Running ISCE in the Python interpreter
|
||||||
|
|
||||||
|
It is also possible to run ISCE from within the Python interpreter. If you have
|
||||||
|
an input file named insarInputs.xml you can do the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
%> python3
|
||||||
|
>>> import isce
|
||||||
|
>>> from stripmapApp import Insar
|
||||||
|
>>> a = Insar(name="stripmapApp", cmdline="insarInputs.xml")
|
||||||
|
>>> a.configure()
|
||||||
|
>>> a.run()
|
||||||
|
```
|
||||||
|
|
||||||
|
(As explained in the [Component Configurability](#component-configurability) section below, if the file
|
||||||
|
insarInputs.xml were named stripmapApp.xml or insar.xml, then the 'cmdline' input
|
||||||
|
on the line creating 'a' would not be necessary. The file 'stripmapApp.xml' would
|
||||||
|
be loaded automatically because when 'a' is created above it is given the name
|
||||||
|
'stripmapApp'. A file named 'insar.xml' would also be loaded automatically if it
|
||||||
|
exists because the code defining stripmapApp.py gives all instances of it the
|
||||||
|
'family' name 'insar'. See the Component Configurability section below for
|
||||||
|
details.)
|
||||||
|
|
||||||
|
### Running ISCE with steps
|
||||||
|
|
||||||
|
An other way to run ISCE is the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stripmapApp.py insar.xml --steps
|
||||||
|
```
|
||||||
|
|
||||||
|
This will run stripmapApp.py from beginning to end as is done without the
|
||||||
|
\-\-steps option, but with the added feature that the workflow state is
|
||||||
|
stored in files after each step in the processing using Python's pickle
|
||||||
|
module. This method of running stripmapApp.py is only a little slower
|
||||||
|
and it uses extra disc space to store the pickle files, but it
|
||||||
|
provides some advantage for debugging and for stopping and starting a
|
||||||
|
workflow at any predetermined point in the flow.
|
||||||
|
|
||||||
|
The full options for running stripmapApp.py with steps is the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stripmapApp.py insar.xml [--steps] [--start=<s>] [--end=<s>] [--dostep=<s>]
|
||||||
|
```
|
||||||
|
|
||||||
|
where "\<s\>" is the name of a step. To see the full ordered list of steps
|
||||||
|
the user can issue the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stripmapApp.py insar.xml --steps --help
|
||||||
|
```
|
||||||
|
|
||||||
|
The \-\-steps option was explained above.
|
||||||
|
The \-\-start and \-\-end option can be used together to process a range of steps.
|
||||||
|
The \-\-dostep option is used to process a single step.
|
||||||
|
|
||||||
|
For the \-\-start and \-\-dostep options to work, of course, requires that the
|
||||||
|
steps preceding the starting step have been run previously because the
|
||||||
|
state of the work flow at the beginning of the first step to be run must
|
||||||
|
be stored from a previous run.
|
||||||
|
|
||||||
|
An example for using steps might be to execute the end-to-end workflow
|
||||||
|
with \-\-steps to store the state of the workflow after every step as in,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stripmapApp.py insar.xml --steps
|
||||||
|
```
|
||||||
|
|
||||||
|
Then use \-\-steps to rerun some of the steps (perhaps you made a code
|
||||||
|
modification for one of the steps and want to test it without starting
|
||||||
|
from the beginning) as in
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stripmapApp.py insar.xml --start=<step-name1> --end=<step-name2>
|
||||||
|
```
|
||||||
|
|
||||||
|
or to rerun a single step as in
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stripmapApp.py insar.xml --dostep=<step-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
Running stripmapApp.py with \-\-steps also enables one to enter the Python
|
||||||
|
interpreter after a run and load the state of the workflow at any stage
|
||||||
|
and introspect the objects in the flow and play with them as follows,
|
||||||
|
for example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
%> python3
|
||||||
|
>>> import isce
|
||||||
|
>>> f = open("PICKLE/formslc")
|
||||||
|
>>> import pickle
|
||||||
|
>>> a = pickle.load(f)
|
||||||
|
>>> o = f.getMasterOrbit()
|
||||||
|
>>> t, x, p, off = o._unpackOrbit()
|
||||||
|
>>> print(t)
|
||||||
|
>>> print(x)
|
||||||
|
```
|
||||||
|
|
||||||
|
Someone with familiarity of the inner workings of ISCE can exploit
|
||||||
|
this mode of interacting with the pickle object to discover much about
|
||||||
|
the workflow states and also to edit the state to see its effect
|
||||||
|
on a subsequent run with \-\-dostep or \-\-start.
|
||||||
|
|
||||||
|
### Notes on Digital Elevation Models
|
||||||
|
|
||||||
|
- ISCE will automatically download SRTM Digital Elevation Models when you run an
|
||||||
|
application that requires a DEM. In order for this to work follow the next 2
|
||||||
|
instructions:
|
||||||
|
|
||||||
|
1. You will need to have a user name and password from urs.earthdata.nasa.gov and
|
||||||
|
you need to include LPDAAC applications to your account.
|
||||||
|
|
||||||
|
a. If you don't already have an earthdata username and password,
|
||||||
|
you can set them at https://urs.earthdata.nasa.gov/
|
||||||
|
|
||||||
|
b. If you already have an earthdata account, please ensure that
|
||||||
|
you add LPDAAC applications to your account:
|
||||||
|
- Login to earthdata here: https://urs.earthdata.nasa.gov/home
|
||||||
|
- Click on my applications on the profile
|
||||||
|
- Click on “Add More Applications”
|
||||||
|
- Search for “LP DAAC”
|
||||||
|
- Select “LP DAAC Data Pool” and “LP DAAC OpenDAP” and approve.
|
||||||
|
|
||||||
|
2. create a file named .netrc with the following 3 lines:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
machine urs.earthdata.nasa.gov
|
||||||
|
login your_earthdata_login_name
|
||||||
|
password your_earthdata_password
|
||||||
|
```
|
||||||
|
|
||||||
|
3. set permissions to prevent others from viewing your credentials:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> chmod go-rwx .netrc
|
||||||
|
```
|
||||||
|
|
||||||
|
- When you run applications that require a dem, such as stripmapApp.py, if a dem
|
||||||
|
component is provided but the dem is referenced to the EGM96 geo reference (which
|
||||||
|
is the case for SRTM DEMs) it will be converted to have the WGS84 ellipsoid as its
|
||||||
|
reference. A new dem file with suffix wgs84 will be created.
|
||||||
|
|
||||||
|
- If no dem component is specified as an input a EGM96 will be automatically
|
||||||
|
downloaded (provided you followed the preceding instructions to register at
|
||||||
|
earthdata) and then it will be converted into WGS84.
|
||||||
|
|
||||||
|
- If you define an environment variable named DEMDB to contain the path to a
|
||||||
|
directory, then ISCE applications will download the DEM (and water body mask files
|
||||||
|
into the directory indicated by DEMDB. Also ISCE applications will look for the
|
||||||
|
DEMs in the DEMDB directory and the local processing directory before downloading
|
||||||
|
a new DEM. This will prevent ISCE from downloading multiple copies of a DEM if
|
||||||
|
you work with data in different subdirectories that cover similar geographic
|
||||||
|
locations.
|
||||||
|
|
||||||
|
|
||||||
|
## Input Files
|
||||||
|
|
||||||
|
Input files are structured 'xml' documents. This section will briefly
|
||||||
|
introduce their structure using a special case appropriate for processing ALOS
|
||||||
|
data. Examples for the other sensor types can be found in the directory
|
||||||
|
'examples/input\_files'.
|
||||||
|
|
||||||
|
The basic (ALOS) input file looks like this (indentation is optional):
|
||||||
|
|
||||||
|
### stripmapApp.xml (Option 1)
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<stripmapApp>
|
||||||
|
<component name="stripmapApp">
|
||||||
|
<property name="sensor name">ALOS</property>
|
||||||
|
<component name="Master">
|
||||||
|
<property name="IMAGEFILE">
|
||||||
|
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
|
||||||
|
</property>
|
||||||
|
<property name="LEADERFILE">
|
||||||
|
/a/b/c/20070215/LED-ALPSRP056480670-H1.0__A
|
||||||
|
</property>
|
||||||
|
<property name="OUTPUT">20070215</property>
|
||||||
|
</component>
|
||||||
|
<component name="Slave">
|
||||||
|
<property name="IMAGEFILE">
|
||||||
|
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
|
||||||
|
</property>
|
||||||
|
<property name="LEADERFILE">
|
||||||
|
/a/b/c/20061231/LED-ALPSRP049770670-H1.0__A
|
||||||
|
</property>
|
||||||
|
<property name="OUTPUT">20061231</property>
|
||||||
|
</component>
|
||||||
|
</component>
|
||||||
|
</stripmapApp>
|
||||||
|
```
|
||||||
|
|
||||||
|
The data are enclosed between an opening tag and a closing tag. The \<stripmapApp\>
|
||||||
|
tag is closed by the \<\/stripmapApp\> tag for example. This outer tag is necessary
|
||||||
|
but its name has no significance. You can give it any name you like. The
|
||||||
|
other tags, however, need to have the names shown above. There are 'property',
|
||||||
|
and 'component' tags shown in this example.
|
||||||
|
|
||||||
|
The component tags have names that match a Component name in the ISCE code.
|
||||||
|
The component tag named 'stripmapApp' refers to the configuration information for
|
||||||
|
the Application (which is a Component) named "stripmapApp". Components contain
|
||||||
|
properties and other components that are configurable. The property tags
|
||||||
|
give the values of a single variable in the ISCE code. One of the properties
|
||||||
|
defined in stripmapApp.py is the "sensor name" property. In the above example
|
||||||
|
it is given the value ALOS. In order to run stripmapApp.py two images need to
|
||||||
|
be specified. These are defined as components named 'Master' and 'Slave'.
|
||||||
|
These components have properties named 'IMAGEFILE', 'LEADERFILE', and 'OUTPUT'
|
||||||
|
with the values given in the above example.
|
||||||
|
|
||||||
|
NOTE: the capitalization of the property and component names are not of any
|
||||||
|
importance. You could enter 'imagefile' instead of 'IMAGEFILE', for example,
|
||||||
|
and it would work correctly. Also extra spaces in names that include spaces,
|
||||||
|
such as "sensor name" do not matter.
|
||||||
|
|
||||||
|
There is a lot of flexibility provided by ISCE when constructing these input
|
||||||
|
files through the use of "catalog" tags and "constant" tags.
|
||||||
|
|
||||||
|
A "catalog" tag can be used to indicate that the contents that would normally
|
||||||
|
be found between an opening ad closing "component" tag are defined in another
|
||||||
|
xml file. For example, the stripmapApp.xml file shown above could have been split
|
||||||
|
between three files as follows:
|
||||||
|
|
||||||
|
### stripmapApp.xml (Option 2)
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<stripmapApp>
|
||||||
|
<component name="insar">
|
||||||
|
<property name="Sensor name">ALOS</property>
|
||||||
|
<component name="master">
|
||||||
|
<catalog>20070215.xml</catalog>
|
||||||
|
</component>
|
||||||
|
<component name="slave">
|
||||||
|
<catalog>20061231.xml</catalog>
|
||||||
|
</component>
|
||||||
|
</component>
|
||||||
|
</stripmapApp>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 20070215.xml
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<component name="Master">
|
||||||
|
<property name="IMAGEFILE">
|
||||||
|
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
|
||||||
|
</property>
|
||||||
|
<property name="LEADERFILE">
|
||||||
|
/a/b/c/20070215/LED-ALPSRP056480670-H1.0__A
|
||||||
|
</property>
|
||||||
|
<property name="OUTPUT">20070215 </property>
|
||||||
|
</component>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 20061231.xml
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<component name="Slave">
|
||||||
|
<property name="IMAGEFILE">
|
||||||
|
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
|
||||||
|
</property>
|
||||||
|
<property name="LEADERFILE">
|
||||||
|
/a/b/c/20061231/LED-ALPSRP049770670-H1.0__A
|
||||||
|
</property>
|
||||||
|
<property name="OUTPUT">20061231</property>
|
||||||
|
</component>
|
||||||
|
```
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
## Component Configurability
|
||||||
|
|
||||||
|
In the examples for running stripmapApp.py ([Here](#running-isce-from-the-command-line) and [Here](#running-isce-in-the-python-interpreter) above) the input
|
||||||
|
data were entered by giving the name of an 'xml' file on the command line. The
|
||||||
|
ISCE framework parses that 'xml' file to assign values to the configurable
|
||||||
|
variables in the isce Application stripmapApp.py. The Application executes
|
||||||
|
several steps in its workflow. Each of those steps are handled by a Component
|
||||||
|
that is also configurable from input data. Each component may be configured
|
||||||
|
independently from user input using appropriately named and placed xml files.
|
||||||
|
This section will explain how to name these xml files and where to place them.
|
||||||
|
|
||||||
|
### Component Names: Family and Instance
|
||||||
|
|
||||||
|
Each configurable component has two "names" associated with it. These names
|
||||||
|
are used in locating possible configuration xml files for those components. The
|
||||||
|
first name associated with a configurable component is its "family" name. For
|
||||||
|
stripmapApp.py, the family name is "insar". Inside the stripmapApp.py file an
|
||||||
|
Application is created from a base class named Insar. That base class defines
|
||||||
|
the family name "insar" that is given to every instance created from it. The
|
||||||
|
particular instance that is created in the file stripmapApp.py is given the
|
||||||
|
'instance name' 'stripmapApp'. If you look in the file near the bottom you will
|
||||||
|
see the line,
|
||||||
|
|
||||||
|
```python
|
||||||
|
insar = Insar(name="stripmapApp")
|
||||||
|
```
|
||||||
|
|
||||||
|
This line creates an instance of the class Insar (that is given the family name
|
||||||
|
'insar' elsewhere in the file) and gives it the instance name "stripmapApp".
|
||||||
|
|
||||||
|
Other applications could be created that could make several different instances
|
||||||
|
of the Insar. Each instance would have the family name "insar" and would be
|
||||||
|
given a unique instance name. This is possible for every component. In the
|
||||||
|
above example xml files instances name "Master" and "Slave" of a family named
|
||||||
|
"alos" are created.
|
||||||
|
|
||||||
|
### Component Configuration Files: Locations, Names, Priorities
|
||||||
|
|
||||||
|
The ISCE framework looks for xml configuration files when configuring every
|
||||||
|
Component in its flow in 3 different places with different priorities. The
|
||||||
|
configuration sequence loads configuration parameters found in these xml files
|
||||||
|
in the sequence lowest to highest priority overwriting any parameters defined
|
||||||
|
as it moves up the priority sequence. This layered approach allows a couple
|
||||||
|
of advantages. It allows the user to define common parameters for all instances
|
||||||
|
in one file while defining specific instance parameters in files named for those
|
||||||
|
specific instances. It also allows global preferences to be set in a special
|
||||||
|
directory that will apply unless the user overrides them with a higher priority
|
||||||
|
xml file.
|
||||||
|
|
||||||
|
The priority sequence has two layers. The first layer is location of the xml
|
||||||
|
file and the second is the name of the file. Within each of the 3 location
|
||||||
|
priorities indicated below, the filename priority goes from 'family name' to
|
||||||
|
'instance name'. That is, within a given location priority level, a file
|
||||||
|
named after the 'family name' is loaded first and then a file with the
|
||||||
|
'instance name' is loaded next and overwrites any property values read from the
|
||||||
|
'family name' file.
|
||||||
|
|
||||||
|
The priority sequence for location is as follows:
|
||||||
|
|
||||||
|
(1) The highest priority location is on the command line. On the command line
|
||||||
|
the filename can be anything you choose. Configuration parameters can also be
|
||||||
|
entered directly on the command line as in the following example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> stripmapApp.py insar.master.output=master_c.raw
|
||||||
|
```
|
||||||
|
|
||||||
|
This example indicates that the variable named 'output' of the Component
|
||||||
|
named 'master' belonging to the Component (or Application) named 'insar'
|
||||||
|
will be given the name "master\_c.raw".
|
||||||
|
|
||||||
|
The priority sequence on the command line goes from lowest priority on the left
|
||||||
|
to highest priority on the right. So, if we use the command line,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> stripmapApp.py myInputFile.xml insar.master.output=master_c.raw
|
||||||
|
```
|
||||||
|
|
||||||
|
where the myInputFile.xml file also gives a value for the insar master output
|
||||||
|
file as master\_d.raw, then the one defined on the right will win, i.e.,
|
||||||
|
master\_c.raw.
|
||||||
|
|
||||||
|
(2) The next priority location is the local directory in which stripmapApp.py is
|
||||||
|
executed. Any xml file placed in this directory named according to either the
|
||||||
|
family name or the instance name for any configurable component in ISCE will be
|
||||||
|
read while configuring the component.
|
||||||
|
|
||||||
|
(3) If you define an environment variable named ISCEDB, you can place xml files
|
||||||
|
with family names or instance names that will be read when configuring
|
||||||
|
Configurable Components. These files placed in the ISCEDB directory have the
|
||||||
|
lowest priority when configuring properties of the Components. The files placed
|
||||||
|
in the ISCEDB directory can be used to define global settings that will apply
|
||||||
|
unless the xml files in the local directory or the command line override those
|
||||||
|
preferences.
|
||||||
|
|
||||||
|
### Component Configuration Structure
|
||||||
|
|
||||||
|
However, the component tag has to have the family name of the Component/
|
||||||
|
Application. In the above examples you see
|
||||||
|
that the outermost component tag has the name "insar", which is the family name
|
||||||
|
of the class Insar of which stripmapApp is an instance.
|
||||||
|
|
||||||
|
|
||||||
|
### Component Configuration Help
|
||||||
|
|
||||||
|
At this time there is limited information about component configurability
|
||||||
|
through the command
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> stripmapApp.py --help
|
||||||
|
```
|
||||||
|
|
||||||
|
Future deliveries will improve this situation. In the meantime we describe
|
||||||
|
here how to discover from the code which Components and parameters are
|
||||||
|
configurable. One note of caution is that it is possible for a parameter
|
||||||
|
to appear to be configurable from user input when the particular flow will
|
||||||
|
not allow this degree of freedom. Experience and evolving documentation will
|
||||||
|
be of use in determining these cases.
|
||||||
|
|
||||||
|
How to find out whether a component is configurable, what its configurable
|
||||||
|
parameters are, what "name" to use in the xml file, and what name to give to
|
||||||
|
the xml file.
|
||||||
|
|
||||||
|
Let's take as an example, Ampcor.py, which is in components/mroipac/ampcor.
|
||||||
|
|
||||||
|
Open it in an editor and search for the string "class Ampcor". It is on
|
||||||
|
line 263. You will see that it inherits from Component. This is the minimum
|
||||||
|
requirement for it to be a configurable component.
|
||||||
|
|
||||||
|
Now look above that line and you will see several variable names being set
|
||||||
|
equal to a call to Component.Parameter. These declarations define these
|
||||||
|
variables as configurable parameters. They are entered in the "parameter\_list"
|
||||||
|
starting on line 268. That is the method by which these Parameters are made
|
||||||
|
configurable parameters of the Component Nstage.
|
||||||
|
|
||||||
|
Each of the parameters defines the "public\_name", which is the "name" that you
|
||||||
|
would enter in the xml file. For instance if you want to set the gross offset
|
||||||
|
in range, which is defined starting on line 88 in the variable
|
||||||
|
ACROSS\_GROSS\_OFFSET, then you would use an xml tag like the following (assuming
|
||||||
|
you have determined that the gross offset in range is about 150 pixels):
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<property name="ACROSS_GROSS_OFFSET">150</property>
|
||||||
|
```
|
||||||
|
|
||||||
|
Now, to determine what to call the xml file and what "name" to use in the
|
||||||
|
component tag. A configurable component has a "family" name and an instance
|
||||||
|
"name". It is registered as having these names by calling the
|
||||||
|
Component.\_\_init\_\_ constructor, which is done on line 806. On that line you
|
||||||
|
will see that the call to \_\_init\_\_ passes 'family=self.class.family' and
|
||||||
|
'name=name' to the Component constructor (super class of Ampcor). The family
|
||||||
|
name is given as "nstage" on line 265. The instance name is passed as the
|
||||||
|
value of the 'name=name' and was passed to it from whatever program created it.
|
||||||
|
Nstage is created in components/isceobj/StripmapProc/runRefineSlaveTiming.py where
|
||||||
|
it is given the name 'master_offset1' on line 35. If you are setting a parameter that
|
||||||
|
should be the same for all uses of Ampcor, then you can use the
|
||||||
|
family name 'ampcor' for the name of the xml file as 'ampcor.xml'. It is more
|
||||||
|
likely that you will want to use the instance name 'master\_offset1.xml'
|
||||||
|
Use the family name 'ampcor' for the component tag 'name'.
|
||||||
|
|
||||||
|
Example for SLC matching use of Ampcor:
|
||||||
|
|
||||||
|
Filename: master\_offset1.xml:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<dummy>
|
||||||
|
<component name="ampcor">
|
||||||
|
<property name="ACROSS_GROSS_OFFSET">150</property>
|
||||||
|
</component>
|
||||||
|
</dummy>
|
||||||
|
```
|
||||||
|
|
||||||
|
## User community forums
|
||||||
|
|
||||||
|
Sign up to participate in the ISCE user communities at the following website:
|
||||||
|
|
||||||
|
[http://earthdef.caltech.edu/account/register](http://earthdef.caltech.edu/account/register)
|
||||||
|
|
||||||
|
|
||||||
|
After you sign up read helpful information and participate in discussion with
|
||||||
|
the user/developer community at the following website:
|
||||||
|
|
||||||
|
[http://earthdef.caltech.edu/projects/isce_forum/boards](http://earthdef.caltech.edu/projects/isce_forum/boards)
|
||||||
|
|
||||||
|
|
968
README.txt
968
README.txt
|
@ -1,968 +0,0 @@
|
||||||
================================================================================
|
|
||||||
ISCE2
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
This is the Interferometric synthetic aperture radar Scientific Computing
|
|
||||||
Environment (ISCE). Its initial development was funded by NASA's Earth Science
|
|
||||||
Technology Office (ESTO) under the Advanced Information Systems Technology
|
|
||||||
(AIST) 2008 and is currently being funded under the NASA-ISRO SAR (NISAR)
|
|
||||||
project.
|
|
||||||
|
|
||||||
THIS IS RESEARCH CODE PROVIDED TO YOU "AS IS" WITH NO WARRANTIES OF CORRECTNESS.
|
|
||||||
USE AT YOUR OWN RISK.
|
|
||||||
|
|
||||||
This software is open source under the terms of the the Apache License. Its export
|
|
||||||
classification is 'EAR99 NLR', which entails some restrictions and responsibilities.
|
|
||||||
Please read the accompanying LICENSE.txt and LICENSE-2.0 files.
|
|
||||||
|
|
||||||
ISCE is a framework designed for the purpose of processing Interferometric
|
|
||||||
Synthetic Aperture Radar (InSAR) data. The framework aspects of it have been
|
|
||||||
designed as a general software development framework. It may have additional
|
|
||||||
utility in a general sense for building other types of software packages. In
|
|
||||||
its InSAR aspect ISCE supports data from many space-borne satellites and one
|
|
||||||
air-borne platform. We continue to increase the number of sensors supported.
|
|
||||||
At this time the sensors that are supported are the following: ALOS, ALOS2,
|
|
||||||
COSMO_SKYMED, ENVISAT, ERS, KOMPSAT5, RADARSAT1, RADARSAT2, RISAT1, Sentinel1,
|
|
||||||
TERRASARX, and UAVSAR.
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Contents
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
1. Software Dependencies
|
|
||||||
1.1 Installing software dependencies with standard package managers
|
|
||||||
1.2 Installing Virtual Machine Images with Dependencies Pre-Installed
|
|
||||||
1.3 Installing dependencies with provided setup script
|
|
||||||
1.4 Hints for installing dependencies by hand.
|
|
||||||
1.5 Note On 'python3' Exectuable Convention
|
|
||||||
1.6 License required for dependencies to enable some workflows in ISCE
|
|
||||||
2. Building ISCE
|
|
||||||
2.1 Configuration control: SCONS_CONFIG_DIR and SConfigISCE
|
|
||||||
2.2 Install ISCE
|
|
||||||
2.3 Setup Your Environment
|
|
||||||
3. Running ISCE
|
|
||||||
3.1 Running ISCE from the command line
|
|
||||||
3.2 Running ISCE in the Python interpreter
|
|
||||||
3.3 Running ISCE with steps
|
|
||||||
3.4 Notes on Digital Elevation Models (DEMs)
|
|
||||||
4. Input Files
|
|
||||||
5. Component Configurability
|
|
||||||
5.1 Component Names: Family and Instance
|
|
||||||
5.2 Component Configuration Files: Locations, Names, Priorities
|
|
||||||
5.3 Component Configuration Help
|
|
||||||
6. User community Forums
|
|
||||||
================================================================================
|
|
||||||
1. Software Dependencies
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
Basic:
|
|
||||||
------
|
|
||||||
gcc >= 4.7
|
|
||||||
fftw 3.2.2
|
|
||||||
Python >= 3.2 (3.3 preferred)
|
|
||||||
scons >= 2.0.1
|
|
||||||
curl - for automatic DEM downloads
|
|
||||||
gdal, gdal.py >= 2.0
|
|
||||||
|
|
||||||
For a few sensor types:
|
|
||||||
-----------------------
|
|
||||||
hdf5 >= 1.8.5 and h5py >= 1.3.1 - for COSMO-SkyMed, Kompsat5, and 'Generic' sensor
|
|
||||||
spiceypy - for RadarSAT1
|
|
||||||
|
|
||||||
For mdx (image visualization tool) options:
|
|
||||||
-------------------------------------------
|
|
||||||
Motif libraries and include files
|
|
||||||
ImageMagick - for mdx production of kml file (advanced feature)
|
|
||||||
grace - for mdx production of color table and line plots (advanced feature)
|
|
||||||
|
|
||||||
For the "unwrap 2 stage" option:
|
|
||||||
--------------------------------
|
|
||||||
RelaxIV and Pulp are required. Information on getting these packages if
|
|
||||||
you want to try the unwrap 2 stage option:
|
|
||||||
* RelaxIV (a minimum cost flow relaxation algorithm coded in C++ by
|
|
||||||
Antonio Frangioni and Claudio Gentile at the University of Pisa,
|
|
||||||
based on the Fortran code developed by by Dimitri Bertsekas while
|
|
||||||
at MIT) available by request at http://www.di.unipi.it/~frangio.
|
|
||||||
So that ISCE will compile it properly, the RelaxIV files should
|
|
||||||
be placed in the directory: 'contrib/UnwrapComp/src/RelaxIV'.
|
|
||||||
* PULP: Use easy_install or pip to install it or else clone it from,
|
|
||||||
https://github.com/coin-or/pulp. Make sure the path to the installed
|
|
||||||
pulp.py is on your PYTHONPATH environment variable (it should be the case
|
|
||||||
if you use easy_install or pip).
|
|
||||||
|
|
||||||
Optional for splitSpectrum, GPUtopozero, and GPUgeo2rdr:
|
|
||||||
--------------------------------------------------------
|
|
||||||
cython3 - must have an executable named cython3 (use a symbolic link)
|
|
||||||
cuda - for GPUtopozero and GPUgeo2rdr
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
1.1 Installing software dependencies with standard package managers
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
The easiest way to install most of these is with package managers such as
|
|
||||||
'apt-get' on Linux systems or 'macports' on MacOsX. To use these, however,
|
|
||||||
will require that you have superuser permission on your computer. The
|
|
||||||
following URL gives additional information on installing prerequisites for
|
|
||||||
ISCE:
|
|
||||||
|
|
||||||
https://winsar.unavco.org/portal/wiki/Manual%20installation%20using%20repository%20managers/
|
|
||||||
|
|
||||||
|
|
||||||
If it is not possible for you to install the software yourself and you
|
|
||||||
can't convince the System Administrator on your computer to install the
|
|
||||||
dependencies, then we provide virtual machine images (VMs) with the
|
|
||||||
dependencies pre-installed (see Section 1.2).
|
|
||||||
|
|
||||||
As a last resort we provide an *experimental* setup script named install.sh
|
|
||||||
described in Section 1.3 that will allow you to do a "user" installation of the
|
|
||||||
basic dependencies, setup your environment variables, and install ISCE for you.
|
|
||||||
|
|
||||||
For the truly adventurous who want to install dependencies by hand we provide
|
|
||||||
some hints in Section 1.4.
|
|
||||||
|
|
||||||
When you have installed the dependencies you can skip the other sections about
|
|
||||||
installing the dependencies and read Section 1.5 about the 'python3' convention
|
|
||||||
and then Section 2 on building ISCE and configuring your environment.
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
1.2 Installing Virtual Machine Images with Dependencies Pre-Installed
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
If you don't have superuser privileges on your machine and your system is not
|
|
||||||
up to date with the software dependencies required to use ISCE, then you can
|
|
||||||
download Virtual Machine Images (VMs) at the following URL:
|
|
||||||
|
|
||||||
Full link: http://earthdef.caltech.edu/boards/4/topics/305
|
|
||||||
Simple link: http://tinyurl.com/iscevm
|
|
||||||
|
|
||||||
Instructions on how to install the Virtual Machines are given there.
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
1.3 Installing dependencies with provided setup script
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
This distribution includes an *experimental* script that is designed to
|
|
||||||
download, build, and install all relevant packages needed for ISCE (except for
|
|
||||||
h5py, which presently must be built by hand but is only needed for Cosmo-Skymed,
|
|
||||||
spiceypy, only needed for RadarSAT1, and gdal python bindings). This script is
|
|
||||||
meant as a last resort for those adventurous persons who may not have root
|
|
||||||
privileges on their machine to install software with standard package managers
|
|
||||||
or a virutal machine (VM) image (see Section 1.1 or 1.2).
|
|
||||||
|
|
||||||
The script is in the setup directory, and is called install.sh. To run it, you
|
|
||||||
should cd to the setup directory, then issue the command
|
|
||||||
|
|
||||||
> install.sh -h
|
|
||||||
|
|
||||||
to see instructions on how to run the script. The minimal command option is
|
|
||||||
simply,
|
|
||||||
|
|
||||||
> install.sh -p <INSTALL_PATH>
|
|
||||||
|
|
||||||
where <INSTALL_PATH> is a path where you have permission to create files. This
|
|
||||||
will check whether the dependencies exist on your default paths and then install
|
|
||||||
those that do not on the specified path.
|
|
||||||
|
|
||||||
The path should be in a local directory away from the system areas to avoid
|
|
||||||
conflicts and so that administrator privileges are not needed. The config.py
|
|
||||||
file contains a list of urls where the packages are currently downloaded from
|
|
||||||
Commenting out a particular package will prevent installation of that package.
|
|
||||||
If the specified server for a particular package in this file is not available,
|
|
||||||
then you can simply browse the web for a different server for this package and
|
|
||||||
replace it in the config.py file. Below under the "Building ISCE" section,
|
|
||||||
there are instructions on how to point to these packages for building ISCE.
|
|
||||||
|
|
||||||
Once all these packages are built, you must setup your PATH and LD_LIBRARY_PATH
|
|
||||||
variables in the unix shell to ensure that these packages are used for compiling
|
|
||||||
and linking rather than the default system packages.
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
1.4 Hints for installing dependencies by hand.
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
If you would prefer to install all these packages by hand, follow this procedure:
|
|
||||||
|
|
||||||
Compile the following
|
|
||||||
|
|
||||||
for Radarsat2, Sentinel1A and Tandem-X gdal with python bindings >= 1.9
|
|
||||||
|
|
||||||
Building gcc/gfortran
|
|
||||||
---------------------
|
|
||||||
Building gcc from source code can be a difficult undertaking. Refer to the
|
|
||||||
detailed directions at http://gcc.gnu.org/install/ for further help.
|
|
||||||
|
|
||||||
Building fftw-3.2.2
|
|
||||||
-------------------
|
|
||||||
Get fftw-3.2.2 from: http://www.fftw.org/fftw-3.2.2.tar.gz
|
|
||||||
Untar the file fftw-3.2.2.tar.gz using
|
|
||||||
tar -zxvf fftw-3.2.2.tar.gz
|
|
||||||
cd fftw-3.2.2
|
|
||||||
then run ./configure --enable-single --enable-shared --prefix=<directory>
|
|
||||||
where <directory> is the full path to an installation location where you have
|
|
||||||
write access. Then run,
|
|
||||||
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
Building Python
|
|
||||||
---------------
|
|
||||||
Get the Python source code from http://www.python.org/ftp/python/3.3.5/Python-3.3.5.tgz
|
|
||||||
|
|
||||||
Untar the file Python-3.3.5.tgz using
|
|
||||||
|
|
||||||
tar -zxvf Python-3.3.5.tgz
|
|
||||||
cd Python-3.3.5
|
|
||||||
|
|
||||||
Then run
|
|
||||||
|
|
||||||
./configure --prefix=<directory>
|
|
||||||
|
|
||||||
where <directory> is the full path to an installation location where you
|
|
||||||
have write access. Then run,
|
|
||||||
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
Building scons
|
|
||||||
At this time scons only works with Python2. The scons developers have
|
|
||||||
announced that they are working on a Python3 version of scons. In the
|
|
||||||
meantime, you should have Python2.6 or Python2.7 available to you by
|
|
||||||
default if your computer is new enough. Otherwise repeat the above
|
|
||||||
steps with 3.3.5 replaced with 2.7.8.
|
|
||||||
|
|
||||||
Get scons http://prdownloads.sourceforge.net/scons/scons-2.0.1.tar.gz
|
|
||||||
Untar the file scons-2.0.1.tar.gz using
|
|
||||||
tar -zxvf scons-2.0.1.tar.gz
|
|
||||||
cd scons-2.0.1.tar.gz
|
|
||||||
Then, using the version of Python you just built, run
|
|
||||||
|
|
||||||
python2.6 setup.py build
|
|
||||||
python2.6 setup.py install
|
|
||||||
|
|
||||||
Building hdf5 [Only necessary for COSMO-SkyMed support]
|
|
||||||
-------------
|
|
||||||
Get the source code from:
|
|
||||||
http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.8.6.tar.gz
|
|
||||||
|
|
||||||
Building h5py [Only necessary for COSMO-SkyMed support]
|
|
||||||
Get the h5py source code from:
|
|
||||||
http://code.google.com/p/h5py/downloads/detail?name=h5py-1.3.1.tar.gz
|
|
||||||
|
|
||||||
|
|
||||||
Building gdal-bindings [Only necessary for Radarsat2, Tandem-X and Sentinel 1A]
|
|
||||||
----------------
|
|
||||||
On most linux distributions, gdal can installed along with its python bindings
|
|
||||||
using standard repository management tools.
|
|
||||||
|
|
||||||
If you don't have gdal, you can find instructions on building GDAL here
|
|
||||||
http://trac.osgeo.org/gdal/wiki/BuildHints
|
|
||||||
|
|
||||||
Remember to use configure with --with-python option to automatically build
|
|
||||||
python bindings.
|
|
||||||
|
|
||||||
Else, if you already have gdal installed on your system but without python
|
|
||||||
buindings, use easy_install corresponding to your python 3 version. You may
|
|
||||||
need to setup LD_LIBRARY_PATH correctly to include path to libgdal.so
|
|
||||||
|
|
||||||
easy_install GDAL
|
|
||||||
|
|
||||||
|
|
||||||
Building SpiceyPy [Only necessary for Radarsat1]
|
|
||||||
----------------
|
|
||||||
JPL's CSPICE library (http://naif.jpl.nasa.gov/naif/toolkit_C.html) is needed
|
|
||||||
for this. Follow instructions at https://github.com/Apollo117/SpiceyPy to
|
|
||||||
install SpiceyPy, after installing CSPICE.
|
|
||||||
|
|
||||||
Once all these packages are built, you must setup your PATH and LD_LIBRARY_PATH
|
|
||||||
variables in the unix shell to ensure that these packages are used for compiling
|
|
||||||
and linking rather than the default system packages.
|
|
||||||
|
|
||||||
To use the Spice software you will need to download the data files indicated in
|
|
||||||
the component/isceobj/Orbit/db/kernels.list file. You should download those
|
|
||||||
files into that directory (or else make soft links in that directory to where
|
|
||||||
you download them) so that ISCE can find them in the place it expects.
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
1.5 Note On 'python3' Exectuable Convention
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
We follow the convention of most package managers in using the executable
|
|
||||||
'python3' for Python3.x and 'python' for Python2.x. This makes it easy to turn
|
|
||||||
Python code into executable commands that know which version of Python they
|
|
||||||
should invoke by naming the appropriate version at the top of the executable
|
|
||||||
file (as in #!/usr/bin/env python3 or #!/usr/bin/env python). Unfortunately,
|
|
||||||
not all package managers (such as macports) follow this convention. Therefore,
|
|
||||||
if you use one of a package manager that does not create the 'python3'
|
|
||||||
executable automatically, then you should place a soft link on your path to
|
|
||||||
have the command 'python3' on your path. Then you will be able to execute an
|
|
||||||
ISCE application such as 'insarApp.py as "> insarApp.py" rather than as
|
|
||||||
"> /path-to-Python3/python insarApp.py".
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
1.6 License required for dependencies to enable some workflows in ISCE
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Some of the applications, or workflows (such as insarApp.py and isceApp.py),
|
|
||||||
in ISCE that may be familiar to users will not work with this open source version
|
|
||||||
of ISCE without obtaining licensed components. WinSAR users who have downloaded
|
|
||||||
ISCE from the UNAVCO website (https://winsar.unavco.org/software/isce) have signed
|
|
||||||
the licence agreement and will be given access to those licensed components. Others
|
|
||||||
wanting to use those specific workflows and components may be able to sign the
|
|
||||||
agreement through UNAVCO if they become members there. Further instructions will
|
|
||||||
be available for a possible other procedure for obtaining a license directly from
|
|
||||||
the supplier of those components.
|
|
||||||
|
|
||||||
ISCE provides workflows that do not require the licensed components that
|
|
||||||
may be used effectively and that will be supported going forward by the ISCE team.
|
|
||||||
Users that need to work with newly processed data along with older processed data
|
|
||||||
may require those licensed components as a convenience unless they also reprocess
|
|
||||||
the older data with the same workflows available in this open source release.
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
2. Building ISCE
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
2.1 Configuration control: SCONS_CONFIG_DIR and SConfigISCE
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Scons requires that configuration information be present in a directory
|
|
||||||
specified by the environment variable SCONS_CONFIG_DIR. First, create a
|
|
||||||
build configuration file, called SConfigISCE and place it in your chosen
|
|
||||||
SCONS_CONFIG_DIR. The SConfigISCE file should contain the following
|
|
||||||
information, note that the #-symbol denotes a comment and does not need
|
|
||||||
to be present in the SConfigISCE file:
|
|
||||||
|
|
||||||
NOTE: Locations vary from system to system, so make sure to use the appropriate location.
|
|
||||||
The one listed here are just for illustrative purpose.
|
|
||||||
|
|
||||||
# The directory in which ISCE will be built
|
|
||||||
PRJ_SCONS_BUILD = $ISCE_BUILD_ROOT/isce
|
|
||||||
# The directory into which ISCE will be installed
|
|
||||||
PRJ_SCONS_INSTALL = $ISCE_INSTALL_ROOT/isce
|
|
||||||
# The location of libraries, such as libstdc++, libfftw3 (for most system
|
|
||||||
# it's /usr/lib and/or /usr/local/lib/ and/or /opt/local/lib)
|
|
||||||
LIBPATH = $YOUR_LIB_LOCATION_HOME/lib64 $YOUR_LIB_LOCATION_HOME/lib
|
|
||||||
# The location of Python.h. If you have multiple installations of python
|
|
||||||
# make sure that it points to the right one
|
|
||||||
CPPPATH = $YOUR_PYTHON_INSTALLATION_LOCATION/include/python3.xm $YOUR_PYTHON_INSTALLATION_LOCATION/lib/python3.x/site-packages/numpy/core/include
|
|
||||||
# The location of the fftw3.h (most likely something like /usr/include or
|
|
||||||
# /usr/local/include /opt/local/include
|
|
||||||
FORTRANPATH = $YOUR_FFTW3_INSTALLATION_LOCATION/include
|
|
||||||
# The location of your Fortran compiler. If not specified it will use the system one
|
|
||||||
FORTRAN = $YOUR_COMPILER_LOCATION/bin/gfortran
|
|
||||||
# The location of your C compiler. If not specified it will use the system one
|
|
||||||
CC = $YOUR_COMPILER_LOCATION/bin/gcc
|
|
||||||
# The location of your C++ compiler. If not specified it will use the system one
|
|
||||||
CXX = $YOUR_COMPILER_LOCATION/bin/g++
|
|
||||||
|
|
||||||
#libraries needed for mdx display utility
|
|
||||||
MOTIFLIBPATH = /opt/local/lib # path to libXm.dylib
|
|
||||||
X11LIBPATH = /opt/local/lib # path to libXt.dylib
|
|
||||||
MOTIFINCPATH = /opt/local/include # path to location of the Xm
|
|
||||||
# directory with various include files (.h)
|
|
||||||
X11INCPATH = /opt/local/include # path to location of the X11 directory
|
|
||||||
# with various include files
|
|
||||||
|
|
||||||
#Explicitly enable cuda if needed
|
|
||||||
ENABLE_CUDA = True
|
|
||||||
CUDA_TOOLKIT_PATH = $YOUR_CUDA_INSTALLATION #/usr/local/cuda
|
|
||||||
|
|
||||||
In the above listing of the SConfigISCE file, $ISCE_BUILD_ROOT and
|
|
||||||
$ISCE_INSTALL_ROOT may be actual environment variables that you create or else
|
|
||||||
you can replace them with the actual paths you choose to use for the build files
|
|
||||||
and the install files. Also, in the following the capitalization of 'isce' as
|
|
||||||
lower case does matter. This is the case-sensitive package name that Python
|
|
||||||
code uses for importing isce.
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
2.2 Install ISCE
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
cd isce
|
|
||||||
scons install
|
|
||||||
|
|
||||||
For a verbose install run:
|
|
||||||
scons -Q install
|
|
||||||
|
|
||||||
The scons command also allows you to explicitly specify the name of the
|
|
||||||
SConfigISCE file, which could be used to specify an alternative file for
|
|
||||||
(say SConfigISCE_NEW) which must still be located in the same
|
|
||||||
SCONS_CONFIG_DIR, run
|
|
||||||
|
|
||||||
scons install --setupfile=SConfigISCE_NEW
|
|
||||||
|
|
||||||
This will build the necessary components and install them into the location
|
|
||||||
specified in the configuration file as PRJ_SCONS_INSTALL.
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
2.2.a Note about compiling ISCE after an unsuccessful build.
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
When building ISCE, scons will check the list of header files and libraries that
|
|
||||||
ISCE requires. Scons will cache the results of this dependency checking. So,
|
|
||||||
if you try to build ISCE and scons tells you that you are missing headers or
|
|
||||||
libraries, then you should remove the cached files before trying to build ISCE
|
|
||||||
again after installing the missing headers and libraries. The cached files are
|
|
||||||
config.log, .sconfig.dblite, and the files in directory .sconf_temp. You should
|
|
||||||
run the following command while in the top directory of the ISCE source (the
|
|
||||||
directory containing the SConstruct file):
|
|
||||||
|
|
||||||
> rm -rf config.log .sconfig.dblite .sconf_temp
|
|
||||||
|
|
||||||
and then try "scons install" again.
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
2.3 Setup Your Environment
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Once everything is installed, you will need to set the following environment
|
|
||||||
variables to run the programs included in ISCE ($ISCE_INSTALL_ROOT may be an
|
|
||||||
environment variable you created in 2.1 above or else replace it with the actual
|
|
||||||
path to where you installed ISCE):
|
|
||||||
|
|
||||||
export PYTHONPATH=$ISCE_INSTALL_ROOT:$PYTHONPATH
|
|
||||||
|
|
||||||
and to put the executable commands in the ISCE applications directory on your
|
|
||||||
PATH for convenience,
|
|
||||||
|
|
||||||
export ISCE_HOME=$ISCE_INSTALL_ROOT/isce
|
|
||||||
export PATH=$ISCE_HOME/applications:$PATH
|
|
||||||
|
|
||||||
An optional environment variable is $ISCEDB. This variable points to a
|
|
||||||
directory in which you may place xml files containing global preferences. More
|
|
||||||
information on this directory and the files that you might place there is
|
|
||||||
given below in Section 4. For now you can ignore this environment variable.
|
|
||||||
|
|
||||||
To test your installation and your environment, do the following:
|
|
||||||
|
|
||||||
> python3
|
|
||||||
>>> import isce
|
|
||||||
>>> isce.version.release_version
|
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
3. Running ISCE
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
3.1 Running ISCE from the command line
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Copy the example xml files located in the example directory in the ISCE source
|
|
||||||
tree to a working directory and modify them to point to your own data. Run
|
|
||||||
them using the command:
|
|
||||||
|
|
||||||
> $ISCE_HOME/applications/insarApp.py isceInputFile.xml
|
|
||||||
|
|
||||||
or (with $ISCE_HOME/applications on your PATH) simply,
|
|
||||||
|
|
||||||
> insarApp.py isceInputFile.xml
|
|
||||||
|
|
||||||
The name of the input file on the command line is arbitrary. ISCE also looks
|
|
||||||
for appropriately named input files in the local directory
|
|
||||||
|
|
||||||
You can also ask ISCE for help from the command line:
|
|
||||||
|
|
||||||
> insarApp.py --help
|
|
||||||
|
|
||||||
This will tell you the basic command and the options for the input file.
|
|
||||||
Example input files are also given in the 'examples/input_files' directory.
|
|
||||||
|
|
||||||
As explained in the Component Configurability section below, it is also possible
|
|
||||||
to run insarApp.py without giving an input file on the command line. ISCE will
|
|
||||||
automatically find configuration files for applications and components if they
|
|
||||||
are named appropriately.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
3.2 Running ISCE in the Python interpreter
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
It is also possible to run ISCE from within the Python interpreter. If you have
|
|
||||||
an input file named insarInputs.xml you can do the following:
|
|
||||||
|
|
||||||
%> python3
|
|
||||||
>>> import isce
|
|
||||||
>>> from insarApp import Insar
|
|
||||||
>>> a = Insar(name="insarApp", cmdline="insarInputs.xml")
|
|
||||||
>>> a.configure()
|
|
||||||
>>> a.run()
|
|
||||||
|
|
||||||
(As explained in the Component Configurability section below, if the file
|
|
||||||
insarInputs.xml were named insarApp.xml or insar.xml, then the 'cmdline' input
|
|
||||||
on the line creating 'a' would not be necessary. The file 'insarApp.xml' would
|
|
||||||
be loaded automatically because when 'a' is created above it is given the name
|
|
||||||
'insarApp'. A file named 'insar.xml' would also be loaded automatically if it
|
|
||||||
exists because the code defining insarApp.py gives all instances of it the
|
|
||||||
'family' name 'insar'. See the Component Configurability section below for
|
|
||||||
details.)
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
3.3 Running ISCE with steps
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
An other way to run ISCE is the following:
|
|
||||||
|
|
||||||
insarApp.py insar.xml --steps
|
|
||||||
|
|
||||||
This will run insarApp.py from beginning to end as is done without the
|
|
||||||
--steps option, but with the added feature that the workflow state is
|
|
||||||
stored in files after each step in the processing using Python's pickle
|
|
||||||
module. This method of running insarApp.py is only a little slower
|
|
||||||
and it uses extra disc space to store the pickle files, but it
|
|
||||||
provides some advantage for debugging and for stopping and starting a
|
|
||||||
workflow at any predetermined point in the flow.
|
|
||||||
|
|
||||||
The full options for running insarApp.py with steps is the following:
|
|
||||||
|
|
||||||
insarApp.py insar.xml [--steps] [--start=<s>] [--end=<s>] [--dostep=<s>]
|
|
||||||
|
|
||||||
|
|
||||||
where <s> is the name of a step. To see the full ordered list of steps
|
|
||||||
the user can issue the following command:
|
|
||||||
|
|
||||||
insarApp.py insar.xml --steps --help
|
|
||||||
|
|
||||||
The --steps option was explained above.
|
|
||||||
The --start and --end option can be used together to process a range of steps.
|
|
||||||
The --dostep option is used to process a single step.
|
|
||||||
|
|
||||||
For the --start and --dostep options to work, of course, requires that the
|
|
||||||
steps preceding the starting step have been run previously because the
|
|
||||||
state of the work flow at the beginning of the first step to be run must
|
|
||||||
be stored from a previous run.
|
|
||||||
|
|
||||||
An example for using steps might be to execute the end-to-end workflow
|
|
||||||
with --steps to store the state of the workflow after every step as in,
|
|
||||||
|
|
||||||
insarApp.py insar.xml --steps
|
|
||||||
|
|
||||||
Then use --steps to rerun some of the steps (perhaps you made a code
|
|
||||||
modification for one of the steps and want to test it without starting
|
|
||||||
from the beginning) as in
|
|
||||||
|
|
||||||
insarApp.py insar.xml --start=<step-name1> --end=<step-name2>
|
|
||||||
|
|
||||||
or to rerun a single step as in
|
|
||||||
|
|
||||||
insarApp.py insar.xml --dostep=<step-name>
|
|
||||||
|
|
||||||
Running insarApp.py with --steps also enables one to enter the Python
|
|
||||||
interpreter after a run and load the state of the workflow at any stage
|
|
||||||
and introspect the objects in the flow and play with them as follows,
|
|
||||||
for example:
|
|
||||||
|
|
||||||
%> python3
|
|
||||||
>>> import isce
|
|
||||||
>>> f = open("PICKLE/formslc")
|
|
||||||
>>> import pickle
|
|
||||||
>>> a = pickle.load(f)
|
|
||||||
>>> o = f.getMasterOrbit()
|
|
||||||
>>> t, x, p, off = o._unpackOrbit()
|
|
||||||
>>> print t
|
|
||||||
>>> print x
|
|
||||||
>>>
|
|
||||||
|
|
||||||
Someone with familiarity of the inner workings of ISCE can exploit
|
|
||||||
this mode of interacting with the pickle object to discover much about
|
|
||||||
the workflow states and also to edit the state to see its effect
|
|
||||||
on a subsequent run with --dostep or --start.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
3.4 Notes on Digital Elevation Models (DEMs)
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
- ISCE will automatically download SRTM Digital Elevation Models when you run an
|
|
||||||
application that requires a DEM. In order for this to work follow the next 2
|
|
||||||
instructions:
|
|
||||||
|
|
||||||
1. You will need to have a user name and password from urs.earthdata.nasa.gov and
|
|
||||||
you need to include LPDAAC applications to your account.
|
|
||||||
|
|
||||||
a. If you don't already have an earthdata username and password,
|
|
||||||
you can set them at https://urs.earthdata.nasa.gov/
|
|
||||||
|
|
||||||
b. If you already have an earthdata account, please ensure that
|
|
||||||
you add LPDAAC applications to your account:
|
|
||||||
- Login to earthdata here: https://urs.earthdata.nasa.gov/home
|
|
||||||
- Click on my applications on the profile
|
|
||||||
- Click on “Add More Applications”
|
|
||||||
- Search for “LP DAAC”
|
|
||||||
- Select “LP DAAC Data Pool” and “LP DAAC OpenDAP” and approve.
|
|
||||||
|
|
||||||
2. create a file named .netrc with the following 3 lines:
|
|
||||||
|
|
||||||
machine urs.earthdata.nasa.gov
|
|
||||||
login your_earthdata_login_name
|
|
||||||
password your_earthdata_password
|
|
||||||
|
|
||||||
3. set permissions to prevent others from viewing your credentials:
|
|
||||||
|
|
||||||
> chmod go-rwx .netrc
|
|
||||||
|
|
||||||
|
|
||||||
- When you run applications that require a dem, such as stripmapApp.py, if a dem
|
|
||||||
component is provided but the dem is referenced to the EGM96 geo reference (which
|
|
||||||
is the case for SRTM DEMs) it will be converted to have the WGS84 ellipsoid as its
|
|
||||||
reference. A new dem file with suffix wgs84 will be created.
|
|
||||||
|
|
||||||
- If no dem component is specified as an input a EGM96 will be automatically
|
|
||||||
downloaded (provided you followed the preceding instructions to register at
|
|
||||||
earthdata) and then it will be converted into WGS84.
|
|
||||||
|
|
||||||
- If you define an environment variable named DEMDB to contain the path to a
|
|
||||||
directory, then ISCE applications will download the DEM (and water body mask files
|
|
||||||
into the directory indicated by $DEMDB. Also ISCE applications will look for the
|
|
||||||
DEMs in the $DEMDB directory and the local processing directory before downloading
|
|
||||||
a new DEM. This will prevent ISCE from downloading multiple copies of a DEM if
|
|
||||||
you work with data in different subdirectories that cover similar geographic
|
|
||||||
locations.
|
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
4. Input Files
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
Input files are structured 'xml' documents. This section will briefly
|
|
||||||
introduce their structure using a special case appropriate for processing ALOS
|
|
||||||
data. Examples for the other sensor types can be found in the directory
|
|
||||||
'examples/input_files'.
|
|
||||||
|
|
||||||
The basic (ALOS) input file looks like this (indentation is optional):
|
|
||||||
|
|
||||||
insarApp.xml:
|
|
||||||
-------------
|
|
||||||
<insarApp>
|
|
||||||
<component name="insarApp">
|
|
||||||
<property name="sensor name">ALOS</property>
|
|
||||||
<component name="Master">
|
|
||||||
<property name="IMAGEFILE">
|
|
||||||
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="LEADERFILE">
|
|
||||||
/a/b/c/20070215/LED-ALPSRP056480670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="OUTPUT">20070215.raw </property>
|
|
||||||
</component>
|
|
||||||
<component name="Slave">
|
|
||||||
<property name="IMAGEFILE">
|
|
||||||
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="LEADERFILE">
|
|
||||||
/a/b/c/20061231/LED-ALPSRP049770670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="OUTPUT">20061231.raw </property>
|
|
||||||
</component>
|
|
||||||
</component>
|
|
||||||
</insarApp>
|
|
||||||
|
|
||||||
The data are enclosed between an opening tag and a closing tag. The <insarApp>
|
|
||||||
tag is closed by the </insarApp> tag for example. This outer tag is necessary
|
|
||||||
but its name has no significance. You can give it any name you like. The
|
|
||||||
other tags, however, need to have the names shown above. There are 'property',
|
|
||||||
and 'component' tags shown in this example.
|
|
||||||
|
|
||||||
The component tags have names that match a Component name in the ISCE code.
|
|
||||||
The component tag named 'insarApp' refers to the configuration information for
|
|
||||||
the Application (which is a Component) named "insarApp". Components contain
|
|
||||||
properties and other components that are configurable. The property tags
|
|
||||||
give the values of a single variable in the ISCE code. One of the properties
|
|
||||||
defined in insarApp.py is the "sensor name" property. In the above example
|
|
||||||
it is given the value ALOS. In order to run insarApp.py two images need to
|
|
||||||
be specified. These are defined as components named 'Master' and 'Slave'.
|
|
||||||
These components have properties named 'IMAGEFILE', 'LEADERFILE', and 'OUTPUT'
|
|
||||||
with the values given in the above example.
|
|
||||||
|
|
||||||
NOTE: the capitalization of the property and component names are not of any
|
|
||||||
importance. You could enter 'imagefile' instead of 'IMAGEFILE', for example,
|
|
||||||
and it would work correctly. Also extra spaces in names that include spaces,
|
|
||||||
such as "sensor name" do not matter.
|
|
||||||
|
|
||||||
There is a lot of flexibility provided by ISCE when constructing these input
|
|
||||||
files through the use of "catalog" tags and "constant" tags.
|
|
||||||
|
|
||||||
A "catalog" tag can be used to indicate that the contents that would normally
|
|
||||||
be found between an opening ad closing "component" tag are defined in another
|
|
||||||
xml file. For example, the insarApp.xml file shown above could have been split
|
|
||||||
between three files as follows:
|
|
||||||
|
|
||||||
insarApp.xml
|
|
||||||
------------
|
|
||||||
<insarApp>
|
|
||||||
<component name="insar">
|
|
||||||
<property name="Sensor name">ALOS</property>
|
|
||||||
<component name="master">
|
|
||||||
<catalog>20070215.xml</catalog>
|
|
||||||
</component>
|
|
||||||
<component name="slave">
|
|
||||||
<catalog>20061231.xml</catalog>
|
|
||||||
</component>
|
|
||||||
</component>
|
|
||||||
</insarApp>
|
|
||||||
|
|
||||||
20070215.xml
|
|
||||||
------------
|
|
||||||
<component name="Master">
|
|
||||||
<property name="IMAGEFILE">
|
|
||||||
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="LEADERFILE">
|
|
||||||
/a/b/c/20070215/LED-ALPSRP056480670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="OUTPUT">20070215.raw </property>
|
|
||||||
</component>
|
|
||||||
|
|
||||||
20061231.xml
|
|
||||||
------------
|
|
||||||
<component name="Slave">
|
|
||||||
<property name="IMAGEFILE">
|
|
||||||
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="LEADERFILE">
|
|
||||||
/a/b/c/20061231/LED-ALPSRP049770670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="OUTPUT">20061231.raw</property>
|
|
||||||
</component>
|
|
||||||
|
|
||||||
|
|
||||||
A "constant" tag can be used to define a constant for convenience inside
|
|
||||||
an xml file. For example, the dates '20070215' and '20061231' are used
|
|
||||||
multiple times in the above files. Also, the base path '/a/b/c/' is used
|
|
||||||
multiple times. A constant defined in a constant tag is used in constructing
|
|
||||||
values by sandwiching it between two '$' symbols. For example, if a constant
|
|
||||||
named "date1" is defined then to use it we would enter '$date1'. The following
|
|
||||||
example insarApp.xml file should make this clear:
|
|
||||||
|
|
||||||
insarApp.xml
|
|
||||||
------------
|
|
||||||
<insarApp>
|
|
||||||
<constant name="dir">/a/b/c </constant>
|
|
||||||
<constant name="date1">20070215</constant>
|
|
||||||
<constant name="date2">20061231</constant>
|
|
||||||
<constant name="dir1">$dir$/$date1$</constant>
|
|
||||||
<constant name="dir2">$dir$/$date2$</constant>
|
|
||||||
<component name="insarApp">
|
|
||||||
<property name="sensor name">ALOS</property>
|
|
||||||
<component name="Master">
|
|
||||||
<property name="IMAGEFILE">
|
|
||||||
$dir1$/IMG-HH-ALPSRP056480670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="LEADERFILE">
|
|
||||||
$dir1$/LED-ALPSRP056480670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="OUTPUT">$date1$.raw </property>
|
|
||||||
</component>
|
|
||||||
<component name="Slave">
|
|
||||||
<property name="IMAGEFILE">
|
|
||||||
$dir2$/IMG-HH-ALPSRP049770670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="LEADERFILE">
|
|
||||||
$dir2$/LED-ALPSRP049770670-H1.0__A
|
|
||||||
</property>
|
|
||||||
<property name="OUTPUT">$date2$.raw </property>
|
|
||||||
</component>
|
|
||||||
</component>
|
|
||||||
</insarApp>
|
|
||||||
|
|
||||||
Note: as of the time of this release constants do not work with catalog files.
|
|
||||||
This will be fixed in a future release.
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
5. Component Configurability
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
In the examples for running insarApp.py (Section 3.1 and 3.3 above) the input
|
|
||||||
data were entered by giving the name of an 'xml' file on the command line. The
|
|
||||||
ISCE framework parses that 'xml' file to assign values to the configurable
|
|
||||||
variables in the isce Application insarApp.py. The Application executes
|
|
||||||
several steps in its workflow. Each of those steps are handled by a Component
|
|
||||||
that is also configurable from input data. Each component may be configured
|
|
||||||
independently from user input using appropriately named and placed xml files.
|
|
||||||
This section will explain how to name these xml files and where to place them.
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
5.1 Component Names: Family and Instance
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Each configurable component has two "names" associated with it. These names
|
|
||||||
are used in locating possible configuration xml files for those components. The
|
|
||||||
first name associated with a configurable component is its "family" name. For
|
|
||||||
insarApp.py, the family name is "insar". Inside the insarApp.py file an
|
|
||||||
Application is created from a base class named Insar. That base class defines
|
|
||||||
the family name "insar" that is given to every instance created from it. The
|
|
||||||
particular instance that is created in the file insarApp.py is given the
|
|
||||||
'instance name' 'insarApp'. If you look in the file near the bottom you will
|
|
||||||
see the line,
|
|
||||||
|
|
||||||
insar = Insar(name="insarApp")
|
|
||||||
|
|
||||||
This line creates an instance of the class Insar (that is given the family name
|
|
||||||
'insar' elsewhere in the file) and gives it the instance name "insarApp".
|
|
||||||
|
|
||||||
Other applications could be created that could make several different instances
|
|
||||||
of the Insar. Each instance would have the family name "insar" and would be
|
|
||||||
given a unique instance name. This is possible for every component. In the
|
|
||||||
above example xml files instances name "Master" and "Slave" of a family named
|
|
||||||
"alos" are created.
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
5.2 Component Configuration Files: Locations, Names, Priorities
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
The ISCE framework looks for xml configuration files when configuring every
|
|
||||||
Component in its flow in 3 different places with different priorities. The
|
|
||||||
configuration sequence loads configuration parameters found in these xml files
|
|
||||||
in the sequence lowest to highest priority overwriting any parameters defined
|
|
||||||
as it moves up the priority sequence. This layered approach allows a couple
|
|
||||||
of advantages. It allows the user to define common parameters for all instances
|
|
||||||
in one file while defining specific instance parameters in files named for those
|
|
||||||
specific instances. It also allows global preferences to be set in a special
|
|
||||||
directory that will apply unless the user overrides them with a higher priority
|
|
||||||
xml file.
|
|
||||||
|
|
||||||
The priority sequence has two layers. The first layer is location of the xml
|
|
||||||
file and the second is the name of the file. Within each of the 3 location
|
|
||||||
priorities indicated below, the filename priority goes from 'family name' to
|
|
||||||
'instance name'. That is, within a given location priority level, a file
|
|
||||||
named after the 'family name' is loaded first and then a file with the
|
|
||||||
'instance name' is loaded next and overwrites any property values read from the
|
|
||||||
'family name' file.
|
|
||||||
|
|
||||||
The priority sequence for location is as follows:
|
|
||||||
|
|
||||||
(1) The highest priority location is on the command line. On the command line
|
|
||||||
the filename can be anything you choose. Configuration parameters can also be
|
|
||||||
entered directly on the command line as in the following example:
|
|
||||||
|
|
||||||
> insarApp.py insar.master.output=master_c.raw
|
|
||||||
|
|
||||||
This example indicates that the variable named 'output' of the Component
|
|
||||||
named 'master' belonging to the Component (or Application) named 'insar'
|
|
||||||
will be given the name "master_c.raw".
|
|
||||||
|
|
||||||
The priority sequence on the command line goes from lowest priority on the left
|
|
||||||
to highest priority on the right. So, if we use the command line,
|
|
||||||
|
|
||||||
> insarApp.py myInputFile.xml insar.master.output=master_c.raw
|
|
||||||
|
|
||||||
where the myInputFile.xml file also gives a value for the insar master output
|
|
||||||
file as master_d.raw, then the one defined on the right will win, i.e.,
|
|
||||||
master_c.raw.
|
|
||||||
|
|
||||||
(2) The next priority location is the local directory in which insarApp.py is
|
|
||||||
executed. Any xml file placed in this directory named according to either the
|
|
||||||
family name or the instance name for any configurable component in ISCE will be
|
|
||||||
read while configuring the component.
|
|
||||||
|
|
||||||
(3) If you define an environment variable named $ISCEDB, you can place xml files
|
|
||||||
with family names or instance names that will be read when configuring
|
|
||||||
Configurable Components. These files placed in the $ISCEDB directory have the
|
|
||||||
lowest priority when configuring properties of the Components. The files placed
|
|
||||||
in the ISCEDB directory can be used to define global settings that will apply
|
|
||||||
unless the xml files in the local directory or the command line override those
|
|
||||||
preferences.
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
5.2 Component Configuration Structure
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
However, the component tag has to have the family name of the Component/
|
|
||||||
Application. In the above examples you see
|
|
||||||
that the outermost component tag has the name "insar", which is the family name
|
|
||||||
of the class Insar of which insarApp is an instance.
|
|
||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
5.3 Component Configuration Help
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
At this time there is limited information about component configurability
|
|
||||||
through the command
|
|
||||||
|
|
||||||
> insarApp.py --help
|
|
||||||
|
|
||||||
Future deliveries will improve this situation. In the meantime we describe
|
|
||||||
here how to discover from the code which Components and parameters are
|
|
||||||
configurable. One note of caution is that it is possible for a parameter
|
|
||||||
to appear to be configurable from user input when the particular flow will
|
|
||||||
not allow this degree of freedom. Experience and evolving documentation will
|
|
||||||
be of use in determining these cases.
|
|
||||||
|
|
||||||
How to find out whether a component is configurable, what its configurable
|
|
||||||
parameters are, what "name" to use in the xml file, and what name to give to
|
|
||||||
the xml file.
|
|
||||||
|
|
||||||
Let's take as an example, Nstage.py, which is in components/mroipac/ampcor.
|
|
||||||
|
|
||||||
Open it in an editor and search for the string "class Nstage". It is on
|
|
||||||
line 243. You will see that it inherits from Component. This is the minimum
|
|
||||||
requirement for it to be a configurable component.
|
|
||||||
|
|
||||||
Now look above that line and you will see several variable names being set
|
|
||||||
equal to a call to Component.Parameter. These declarations define these
|
|
||||||
variables as configurable parameters. They are entered in the "parameter_list"
|
|
||||||
starting on line 248. That is the method by which these Parameters are made
|
|
||||||
configurable parameters of the Component Nstage.
|
|
||||||
|
|
||||||
Each of the parameters defines the "public_name", which is the "name" that you
|
|
||||||
would enter in the xml file. For instance if you want to set the gross offset
|
|
||||||
in range, which is defined starting on line 130 in the variable
|
|
||||||
ACROSS_GROSS_OFFSET, then you would use an xml tag like the following (assuming
|
|
||||||
you have determined that the gross offset in range is about 150 pixels):
|
|
||||||
|
|
||||||
<property name="ACROSS_GROSS_OFFSET">150</property>
|
|
||||||
|
|
||||||
|
|
||||||
Now, to determine what to call the xml file and what "name" to use in the
|
|
||||||
component tag. A configurable component has a "family" name and an instance
|
|
||||||
"name". It is registered as having these names by calling the
|
|
||||||
Component.__init__ constructor, which is done on line 672. On that line you
|
|
||||||
will see that the call to __init__ passes 'family=self.__class__.family' and
|
|
||||||
'name=name' to the Component constructor (super class of Nstage). The family
|
|
||||||
name is given as "nstage" on line 245. The instance name is passed as the
|
|
||||||
value of the 'name=name' and was passed to it from whatever program created it.
|
|
||||||
Nstage is created in components/isceobj/InsarProc/runOffsetprf_nstage.py where
|
|
||||||
it is given the name 'insarapp_slcs_nstage' on line 107 and also in
|
|
||||||
components/isceobj/InsarProc/runRgoffset_nstage.py where it is given the name
|
|
||||||
'insarapp_intsim_nstage' on line 58. If you are setting a parameter that
|
|
||||||
should be the same for both of these uses of Nstage, then you can use the
|
|
||||||
family name 'nstage' for the name of the xml file as 'nstage.xml'. It is more
|
|
||||||
likely that you will want to use the instance names, 'insarapp_slcs_nstage.xml'
|
|
||||||
and 'insarapp_intsim_nstage.xml'. Use the family name 'nstage' for the
|
|
||||||
component tag 'name'.
|
|
||||||
|
|
||||||
Example for SLC matching use of Nstage:
|
|
||||||
|
|
||||||
Filename: insarapp_slcs_nstage.xml:
|
|
||||||
<dummy>
|
|
||||||
<component name="nstage">
|
|
||||||
<property name="ACROSS_GROSS_OFFSET">150</property>
|
|
||||||
</component>
|
|
||||||
</dummy>
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
6. Join the ISCE user Forums for additional help and information from the
|
|
||||||
ISCE user and developer community
|
|
||||||
----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Sign up to participate in the ISCE user communities at the following website:
|
|
||||||
|
|
||||||
http://earthdef.caltech.edu/account/register
|
|
||||||
|
|
||||||
|
|
||||||
After you sign up read helpful information and participate in discussion with
|
|
||||||
the user/developer community at the following website:
|
|
||||||
|
|
||||||
http://earthdef.caltech.edu/projects/isce_forum/boards
|
|
||||||
|
|
||||||
|
|
||||||
For bug reports and technical usage issues use the folowing website:
|
|
||||||
|
|
||||||
http://earthdef.caltech.edu/projects/isce_forum/issues
|
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
END OF FILE
|
|
||||||
==============================================================================
|
|
Loading…
Reference in New Issue