├── .gitignore ├── Archives ├── explore_tsx_archive.ipynb └── readme.md ├── Batch ├── __pycache__ │ └── prep_topsApp.cpython-35.pyc ├── prep_sequential_processing.py ├── prep_topsApp.py └── runall.py ├── BatchProcessing.md ├── CheatSheat.md ├── Docker ├── Dockerfile ├── SConfigISCE └── readme.md ├── OSX ├── Readme.md ├── Readme_201604.md ├── isce.yml ├── isce_201609.yml └── scons.yml ├── Readme.md ├── Ubuntu ├── Readme.md ├── Readme_201609.md ├── Readme_GIAnT.md ├── conda-forge-packages.txt ├── giant.yml ├── giant_102016.yml ├── isce.yml ├── isce_201609.yml └── scons.yml └── archives.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .ipynb_checkpoints 3 | Archives/* 4 | -------------------------------------------------------------------------------- /Archives/explore_tsx_archive.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# TSX Catalog Bogota Acquisitions\n", 8 | "\n", 9 | "## full catalog search\n", 10 | "https://centaurus.caf.dlr.de:8443/eoweb-ng/template/default/welcome/entryPage.vm\n" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 68, 16 | "metadata": { 17 | "collapsed": true 18 | }, 19 | "outputs": [], 20 | "source": [ 21 | "import pandas as pd\n", 22 | "import matplotlib.pyplot as plt\n", 23 | "import numpy as np" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 3, 29 | "metadata": { 30 | "collapsed": true 31 | }, 32 | "outputs": [], 33 | "source": [ 34 | "%matplotlib inline\n", 35 | "%qtconsole" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 5, 41 | "metadata": { 42 | "collapsed": true 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "df = pd.read_csv('tsx_stripmap_bogota.txt', sep='|')" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": 11, 52 | "metadata": {}, 53 | "outputs": [ 54 | { 55 | "name": "stdout", 56 | "output_type": "stream", 57 | "text": [ 58 | "Index(['Id', 'Avail.', 'Transfer', 'Abstract', 'Identifier', 'Item Type',\n", 59 | " 'Mission/Satellite', 'Sensor', 'Orbit', 'Start Date', 'End Date',\n", 60 | " 'Mission-Satellite', 'Sensor/Instrument', 'Sensor Mode',\n", 61 | " 'Polarization Mode', 'Polarization Channels',\n", 62 | " 'Sat2 Polarisation Channels', 'Relative Orbit', 'Beam',\n", 63 | " 'Incidence Angle Scene Center', 'Minimum Incidence Angle',\n", 64 | " 'Maximum Incidence Angle', 'Pass Direction', 'Looking Direction',\n", 65 | " 'System Order Identification', 'System Order Path', 'Path', 'Pass',\n", 66 | " 'Row', 'Cloud Coverage', 'Order ID', 'RESA ID', 'Satellite',\n", 67 | " 'Acquisition Item ID', 'Datatake Filenumber', 'Revision',\n", 68 | " 'Commanded Starttime UTC', 'Scene Number', 'Master Satellite',\n", 69 | " 'Master Starttime UTC', 'Applied To', 'Satellite 1', 'Satellite 2',\n", 70 | " 'Datatake Class', 'Satellite Mode', 'Sat1 Satellite Mode',\n", 71 | " 'Sat2 Satellite Mode', 'Common Cooperative Mode', 'Imaging Mode',\n", 72 | " 'Antenna Look Direction', 'Antenna Receive Configuration',\n", 73 | " 'Polarisation Mode', 'Polarisation Channels', 'Orbit Direction',\n", 74 | " 'Time Period', 'Region', 'Project ID', 'Scene ID', 'Test Site',\n", 75 | " 'Station', 'SWACI Product Type', 'DEM Identifier', 'DEM Posting Class',\n", 76 | " 'DEM Tile Status', 'DEM Valids [%]', 'Average Terrain Height',\n", 77 | " 'Product Availability', 'Request Priority', 'Datatake Quality',\n", 78 | " 'Datatake State', 'Datatake State Explanation',\n", 79 | " 'Product Quality Explanation', 'Radiometric Cal Quality',\n", 80 | " 'Off Nadir Angle', 'Geometric Cal Quality', 'Ground Resolution VIS',\n", 81 | " 'Ground Resolution IR', 'Hot Spot Count', 'Max Effective Fire Power',\n", 82 | " 'Max Effective Fire Area', 'Datatake ID', 'Quality', 'Product Type',\n", 83 | " 'Operations Type', 'Item Descriptor Identifier', 'THUMBNAIL DATA',\n", 84 | " 'FOOTPRINT', 'ACQUISITIONDESCRIPTOR', 'Display'],\n", 85 | " dtype='object')\n" 86 | ] 87 | }, 88 | { 89 | "data": { 90 | "text/html": [ 91 | "
\n", 92 | "\n", 105 | "\n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | "
IdAvail.TransferAbstractIdentifierItem TypeMission/SatelliteSensorOrbitStart Date...Max Effective Fire AreaDatatake IDQualityProduct TypeOperations TypeItem Descriptor IdentifierTHUMBNAIL DATAFOOTPRINTACQUISITIONDESCRIPTORDisplay
01FalseNaNTSX-1.SAR.L1b-StripmapNaNCatalogueSceneTSX-1SARNaN2008-05-18T23:07:41,308...NaNNaNAUTO_APPROVEDNaNOPERATIONALPID_TSX-1.SAR.L1b-Stripmap:/dims_nz_pl_dfd_XXX...NaN4.4838515518588 -73.957855 5.0227940285278 -74...PID_TSX-1.SAR.L1b-Stripmap:/dims_nz_pl_dfd_XXX...True
\n", 159 | "

1 rows × 89 columns

\n", 160 | "
" 161 | ], 162 | "text/plain": [ 163 | " Id Avail. Transfer Abstract Identifier Item Type \\\n", 164 | "0 1 False NaN TSX-1.SAR.L1b-Stripmap NaN CatalogueScene \n", 165 | "\n", 166 | " Mission/Satellite Sensor Orbit Start Date ... \\\n", 167 | "0 TSX-1 SAR NaN 2008-05-18T23:07:41,308 ... \n", 168 | "\n", 169 | " Max Effective Fire Area Datatake ID Quality Product Type \\\n", 170 | "0 NaN NaN AUTO_APPROVED NaN \n", 171 | "\n", 172 | " Operations Type Item Descriptor Identifier \\\n", 173 | "0 OPERATIONAL PID_TSX-1.SAR.L1b-Stripmap:/dims_nz_pl_dfd_XXX... \n", 174 | "\n", 175 | " THUMBNAIL DATA FOOTPRINT \\\n", 176 | "0 NaN 4.4838515518588 -73.957855 5.0227940285278 -74... \n", 177 | "\n", 178 | " ACQUISITIONDESCRIPTOR Display \n", 179 | "0 PID_TSX-1.SAR.L1b-Stripmap:/dims_nz_pl_dfd_XXX... True \n", 180 | "\n", 181 | "[1 rows x 89 columns]" 182 | ] 183 | }, 184 | "execution_count": 11, 185 | "metadata": {}, 186 | "output_type": "execute_result" 187 | } 188 | ], 189 | "source": [ 190 | "print(df.keys())\n", 191 | "df.head(1)" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": 14, 197 | "metadata": {}, 198 | "outputs": [ 199 | { 200 | "data": { 201 | "text/plain": [ 202 | "Relative Orbit\n", 203 | "44 4\n", 204 | "66 107\n", 205 | "135 5\n", 206 | "157 2\n", 207 | "Name: Id, dtype: int64" 208 | ] 209 | }, 210 | "execution_count": 14, 211 | "metadata": {}, 212 | "output_type": "execute_result" 213 | } 214 | ], 215 | "source": [ 216 | "gb = df.groupby('Relative Orbit')\n", 217 | "gb.Id.count()" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": 27, 223 | "metadata": {}, 224 | "outputs": [ 225 | { 226 | "name": "stdout", 227 | "output_type": "stream", 228 | "text": [ 229 | "['strip_008' 'strip_007']\n" 230 | ] 231 | }, 232 | { 233 | "data": { 234 | "text/plain": [ 235 | "Beam\n", 236 | "strip_007 2\n", 237 | "strip_008 105\n", 238 | "Name: Id, dtype: int64" 239 | ] 240 | }, 241 | "execution_count": 27, 242 | "metadata": {}, 243 | "output_type": "execute_result" 244 | } 245 | ], 246 | "source": [ 247 | "# Find scenes from previous RAW order, note keywords get truncated for some reason...\n", 248 | "df66 = df[ (df[\"Relative Orbit\"] == 66)] \n", 249 | "print(df66.Beam.unique())\n", 250 | "df66.groupby('Beam').Id.count()" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 28, 256 | "metadata": {}, 257 | "outputs": [ 258 | { 259 | "data": { 260 | "text/plain": [ 261 | "Polarization Channels\n", 262 | "HH 4\n", 263 | "VV 103\n", 264 | "Name: Id, dtype: int64" 265 | ] 266 | }, 267 | "execution_count": 28, 268 | "metadata": {}, 269 | "output_type": "execute_result" 270 | } 271 | ], 272 | "source": [ 273 | "df66.groupby(\"Polarization Channels\").Id.count()" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 43, 279 | "metadata": {}, 280 | "outputs": [], 281 | "source": [ 282 | "orbit = 66\n", 283 | "strip = 'strip_008'\n", 284 | "pol = 'VV'\n", 285 | "dfs = df[ (df[\"Relative Orbit\"] == orbit) & (df[\"Beam\"] == strip) & (df[\"Polarization Channels\"] == pol) ]\n", 286 | "dfs[\"Date\"] = pd.to_datetime(dfs[\"Start Date\"])" 287 | ] 288 | }, 289 | { 290 | "cell_type": "code", 291 | "execution_count": 44, 292 | "metadata": {}, 293 | "outputs": [ 294 | { 295 | "name": "stdout", 296 | "output_type": "stream", 297 | "text": [ 298 | "Relative Orbit: 66\n", 299 | "Beam: strip_008\n", 300 | "Polarization: VV\n", 301 | "Descending\n", 302 | "Incidence: 31.1 to 35.1\n", 303 | "Dates : 103\n" 304 | ] 305 | } 306 | ], 307 | "source": [ 308 | "print('Relative Orbit: {}'.format(orbit))\n", 309 | "print('Beam: {}'.format(strip))\n", 310 | "print('Polarization: {}'.format(pol))\n", 311 | "print(df66[\"Pass Direction\"].iloc[0])\n", 312 | "print('Incidence: {:.1f} to {:.1f}'.format(dfs[\"Minimum Incidence Angle\"].iloc[0], dfs[\"Maximum Incidence Angle\"].iloc[0]))\n", 313 | "print('Dates :', len(dfs))" 314 | ] 315 | }, 316 | { 317 | "cell_type": "code", 318 | "execution_count": 50, 319 | "metadata": {}, 320 | "outputs": [ 321 | { 322 | "data": { 323 | "text/plain": [ 324 | "" 325 | ] 326 | }, 327 | "execution_count": 50, 328 | "metadata": {}, 329 | "output_type": "execute_result" 330 | }, 331 | { 332 | "data": { 333 | "image/png": "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\n", 334 | "text/plain": [ 335 | "" 336 | ] 337 | }, 338 | "metadata": {}, 339 | "output_type": "display_data" 340 | } 341 | ], 342 | "source": [ 343 | "dfs.plot(y='Relative Orbit', x='Date', style='.')" 344 | ] 345 | }, 346 | { 347 | "cell_type": "code", 348 | "execution_count": 59, 349 | "metadata": {}, 350 | "outputs": [ 351 | { 352 | "name": "stdout", 353 | "output_type": "stream", 354 | "text": [ 355 | "Archive order cutoff date: 2015/12/09\n" 356 | ] 357 | } 358 | ], 359 | "source": [ 360 | "# Archive orders must be 18months old\n", 361 | "today = pd.to_datetime('today')\n", 362 | "cutoff = today - pd.Timedelta(18*30, 'D')\n", 363 | "print('Archive order cutoff date: ', cutoff.strftime('%Y/%m/%d'))" 364 | ] 365 | }, 366 | { 367 | "cell_type": "code", 368 | "execution_count": 63, 369 | "metadata": {}, 370 | "outputs": [ 371 | { 372 | "name": "stdout", 373 | "output_type": "stream", 374 | "text": [ 375 | "69 scenes older than 18months in archive\n" 376 | ] 377 | } 378 | ], 379 | "source": [ 380 | "print(len(dfs.query('Date <= @cutoff')), ' scenes older than 18months in archive')\n" 381 | ] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "execution_count": 99, 386 | "metadata": {}, 387 | "outputs": [ 388 | { 389 | "data": { 390 | "image/png": "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\n", 391 | "text/plain": [ 392 | "" 393 | ] 394 | }, 395 | "metadata": {}, 396 | "output_type": "display_data" 397 | } 398 | ], 399 | "source": [ 400 | "dfb = dfs.query('Date <= @cutoff')\n", 401 | "dfa = dfs.query('Date > @cutoff')\n", 402 | "fig,ax = plt.subplots(figsize=(8.5,2))\n", 403 | "plt.plot(dfb.Date, np.ones(len(dfb)), 'g.')\n", 404 | "plt.plot(dfa.Date, np.ones(len(dfa)), 'r.')\n", 405 | "\n", 406 | "plt.text(cutoff, 1.01, '{} '.format(len(dfs.query('Date <= @cutoff'))), ha='right', color='g')\n", 407 | "plt.text(cutoff, 1.01, ' {}'.format(len(dfs.query('Date > @cutoff'))), ha='left', color='r')\n", 408 | "\n", 409 | "plt.axvline(cutoff, linestyle='dashed', color='k', label='today - 18 months\\n{}'.format(cutoff.strftime('%Y/%m/%d')))\n", 410 | "plt.legend(loc='upper left')\n", 411 | "plt.tick_params(labelleft=False)\n", 412 | "plt.title('Archived TSX available for order')\n", 413 | "fig.autofmt_xdate()\n" 414 | ] 415 | }, 416 | { 417 | "cell_type": "code", 418 | "execution_count": null, 419 | "metadata": { 420 | "collapsed": true 421 | }, 422 | "outputs": [], 423 | "source": [] 424 | } 425 | ], 426 | "metadata": { 427 | "anaconda-cloud": {}, 428 | "kernelspec": { 429 | "display_name": "Python 3", 430 | "language": "python", 431 | "name": "python3" 432 | }, 433 | "language_info": { 434 | "codemirror_mode": { 435 | "name": "ipython", 436 | "version": 3 437 | }, 438 | "file_extension": ".py", 439 | "mimetype": "text/x-python", 440 | "name": "python", 441 | "nbconvert_exporter": "python", 442 | "pygments_lexer": "ipython3", 443 | "version": "3.6.3" 444 | } 445 | }, 446 | "nbformat": 4, 447 | "nbformat_minor": 2 448 | } 449 | -------------------------------------------------------------------------------- /Archives/readme.md: -------------------------------------------------------------------------------- 1 | # Finding SAR data for processing 2 | 3 | ## Exploring with a Jupyter notebook & python 4 | Many archives have web interfaces that allow exporting to CSV. This folder contains a few notebooks for sorting and plotting the contents of those CSV files to quickly ascertain what to download and process. 5 | 6 | ``` 7 | conda env create -f jas.yml 8 | source activate jas 9 | jupyter notebook 10 | ``` 11 | 12 | ## Main archives 13 | The list below is points to the main archive hosted by the space agency of a particular satellite. 14 | 15 | ### Sentinel-1 (S1) 16 | https://scihub.copernicus.eu/dhus/#/home 17 | 18 | 19 | ### ERS1, ERS2, & Envisat 20 | https://earth.esa.int/web/guest/eoli 21 | 22 | on-demand processing and delivery of SLCs via EOLI software ("ESA's Link to Earth Observation") 23 | 24 | ### TerraSAR-X (TSX) 25 | https://centaurus.caf.dlr.de:8443 26 | 27 | ### CosmoSkyMed (CSK) 28 | http://87.241.31.78/index.php 29 | 30 | ### ALOS 31 | https://auig2.jaxa.jp/ips/home?language=en_US 32 | 33 | ### Radarsat-1 & Radarsat-2 (RS1 & RS2) 34 | https://neodf.nrcan.gc.ca/neodf_cat3 35 | 36 | 37 | 38 | 39 | 40 | ## Mirror / Subset archives 41 | Unfortunately most SAR data is not freely available. Some subsets of data over particular regions are hosted on mirrored archives below. 42 | 43 | ### [ASF Vertex](https://vertex.daac.asf.alaska.edu) 44 | NASA DAAC hosting entire S1 archive, as well as some ALOS, ERS, Envisat, mostly over north america 45 | 46 | ### [GEO Supersites](http://eo-virtual-archive4.esa.int) 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Batch/__pycache__/prep_topsApp.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottyhq/isce_notes/e30b8430ee63c1fb2f9013853e8e4addd3fea166/Batch/__pycache__/prep_topsApp.cpython-35.pyc -------------------------------------------------------------------------------- /Batch/prep_sequential_processing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | """ 4 | Create processing directories for all consecutive pairs given a directory of S1 zip files 5 | ISCE VERSION: 201704 6 | 7 | Usage: prep_sequential_processing.py datadir/ 8 | 9 | @author: scott 10 | """ 11 | import argparse 12 | import glob 13 | import matplotlib.pyplot as plt 14 | import sys 15 | import os 16 | import pandas as pd 17 | from matplotlib.dates import YearLocator, MonthLocator, DateFormatter 18 | 19 | import prep_topsApp 20 | 21 | 22 | def cmdLineParse(): 23 | ''' 24 | Command line parser. 25 | ''' 26 | 27 | parser = argparse.ArgumentParser( description='prep_sequential_processing.py') 28 | parser.add_argument('-p', type=str, dest='path', required=True, 29 | help='Path to S1 data (zip files)') 30 | parser.add_argument('-s', type=int, dest='separation', #required=True, 31 | default=1, 32 | help='s=1 for sequential pairs (e.g. 12 day), s=2 skip 1 date (e.g. 24 day)') 33 | parser.add_argument('-n', type=int, nargs='+', dest='swaths', #required=True, 34 | default=[1,2,3], #NOTE passed as variable number of ints: -n 1 2 35 | help='Subswath number to process') 36 | parser.add_argument('-d', type=str, dest='dem', required=False, 37 | help='Path to DEM file') 38 | parser.add_argument('-o', type=str, dest='orbitdir', required=False, 39 | default='/22t1/common_data/s1_poeorb', 40 | help='Orbit directory') 41 | parser.add_argument('-a', type=str, dest='auxdir', required=False, 42 | default='/22t1/common_data/s1_auxcal', 43 | help='Auxilary file directory') 44 | parser.add_argument('-r', type=float, nargs=4, dest='roi', required=False, 45 | help='Region of interest bbox [S,N,W,E]') 46 | parser.add_argument('-g', type=float, nargs=4, dest='gbox', required=False, 47 | help='Geocode bbox [S,N,W,E]') 48 | 49 | return parser.parse_args() 50 | 51 | 52 | def create_dataframe(inps): 53 | ''' 54 | Gather S1 zip files into pandas data frame 55 | ''' 56 | datadir = inps.path 57 | paths = glob.glob(os.path.join(datadir,'S1*zip')) 58 | zips = [os.path.basename(x) for x in paths] 59 | zips.sort() #chronological order 60 | timestamps = [x.split('_')[5] for x in zips] 61 | dates = [x.split('T')[0] for x in timestamps] 62 | df = pd.DataFrame(dict(file=zips)) 63 | df['date'] = pd.to_datetime(dates) 64 | #df['gmt'] = #get time if desired 65 | df['satellite'] = df.file.str[:3] 66 | df['ones'] = 1 67 | 68 | DF = df.ix[:,['date','satellite']].drop_duplicates('date').reset_index(drop=True) 69 | DF.sort_values(by='date', inplace=True) 70 | DF['dt'] = DF.date.diff() 71 | n = len(DF) 72 | print('Total acquisitions: ', n) 73 | print(DF) 74 | DF.to_csv('acquisitions.csv') 75 | 76 | return df, DF 77 | 78 | 79 | def create_processing_directories(df,DF,inps): 80 | ''' 81 | Create a bunch of directories for topsApp.py 82 | ''' 83 | 84 | for i in range(len(DF)-inps.separation): 85 | inps.slave = DF.date.iloc[i].strftime('%Y%m%d') 86 | inps.master = DF.date.iloc[i+inps.separation].strftime('%Y%m%d') 87 | intdir = 'int_{0}_{1}'.format(inps.master, inps.slave) 88 | os.mkdir(intdir) 89 | os.chdir(intdir) 90 | #df.query('date == @master')['file'].tolist() 91 | inps.master_scenes = prep_topsApp.find_scenes(inps.path, inps.master) 92 | inps.slave_scenes = prep_topsApp.find_scenes(inps.path, inps.slave) 93 | prep_topsApp.write_topsApp_xml(inps) 94 | os.chdir('../') 95 | 96 | 97 | def create_figure(df,DF,inps): 98 | ''' 99 | Graphical representation of pairs to make 100 | ''' 101 | #Neater 102 | dfA = df.query('satellite == "S1A"').drop_duplicates('date').reset_index(drop=True) 103 | dfB = df.query('satellite == "S1B"').drop_duplicates('date').reset_index(drop=True) 104 | print('S1A acquisitions: ', len(dfA)) 105 | print('S1B acquisitions: ', len(dfB)) 106 | 107 | fig,ax = plt.subplots(figsize=(12,4)) 108 | plt.plot(dfA.date, dfA.ones, 'mo', label='S1A') 109 | plt.plot(dfB.date, dfB.ones, 'co', label='S1B') 110 | plt.legend() 111 | plt.yticks([1,],['']) 112 | plt.ylim(0,2) 113 | 114 | #NOTE: could annotate full dates with vertical text 115 | ''' 116 | for i,row in DF.iterrows(): 117 | #print(row.date, row.date.strftime('%Y-%m-%d')) 118 | plt.text(row.date, 0.9, row.date.strftime('%m-%d'), 119 | ha='center', 120 | rotation=90) 121 | ''' 122 | 123 | #show connections 124 | n = len(DF) 125 | for i in range(n-inps.separation): 126 | # Sequential (e.g. 12 day) 127 | ann = ax.annotate('', xy=(DF.date.iloc[i], 1.), xycoords='data', 128 | xytext=(DF.date.iloc[i+inps.separation], 1), textcoords='data', 129 | arrowprops=dict(arrowstyle="-",connectionstyle="arc3,rad=0.8"), 130 | ) 131 | 132 | ax = plt.gca() 133 | ax.xaxis.set_minor_locator(MonthLocator()) 134 | ax.xaxis.set_major_locator(YearLocator()) 135 | ax.fmt_xdata = DateFormatter('%Y-%m-%d') 136 | fig.autofmt_xdate() 137 | plt.title('Acquisitions={}, Pairs={}'.format(n, n-inps.separation)) 138 | plt.savefig('acquisition_timeline.pdf', bbox_inches='tight') 139 | 140 | 141 | 142 | 143 | 144 | if __name__ == '__main__': 145 | inps = cmdLineParse() 146 | #ensure absolute paths 147 | inps.path = os.path.abspath(inps.path) 148 | inps.dem = os.path.abspath(inps.dem) 149 | inps.auxdir = os.path.abspath(inps.auxdir) 150 | inps.orbitdir = os.path.abspath(inps.orbitdir) 151 | 152 | df,DF = create_dataframe(inps) 153 | create_processing_directories(df,DF,inps) 154 | create_figure(df,DF,inps) 155 | 156 | 157 | -------------------------------------------------------------------------------- /Batch/prep_topsApp.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Make symbolic links and topsApp.xml in order to create an interferogram 4 | with topsApp.py (ISCE 2.0.0_201704 5 | 6 | Examples: 7 | # process just subswaths 1 and 2 8 | prep_topsApp.py -m 20160910 -s 20160724 -p /media/hdd2/data/insar/sentinel/colombia_north/A150 -n 1 2 9 | 10 | prep_topsApp.py -m 20160910 -s 20160724 -p ../data/A150 -n 1 -r 4.3 5.3 -75.6 -74.6 -d /home/data/dems/srtmGL1/colombia/demLat_S04_N12_Lon_W081_W070.dem.wgs84 11 | 12 | Author Scott Henderson 13 | ''' 14 | import argparse 15 | import os 16 | import glob 17 | #import pprint 18 | 19 | import isce 20 | from isceobj.XmlUtil import FastXML as xml 21 | 22 | 23 | def cmdLineParse(): 24 | ''' 25 | Command line parser. 26 | ''' 27 | 28 | parser = argparse.ArgumentParser( description='prep topsApp.py') 29 | parser.add_argument('-m', type=str, dest='master', required=True, 30 | help='Master date') 31 | parser.add_argument('-s', type=str, dest='slave', required=True, 32 | help='Slave date') 33 | parser.add_argument('-p', type=str, dest='path', required=True, 34 | help='Path to S1 data (zip files)') 35 | parser.add_argument('-n', type=int, nargs='+', dest='swaths', required=True, 36 | help='Subswath numbers to process') 37 | parser.add_argument('-d', type=str, dest='dem', required=False, 38 | help='Path to DEM file') 39 | parser.add_argument('-o', type=str, dest='orbitdir', required=False, 40 | default='/22t1/common_data/s1_poeorb', 41 | help='Orbit directory') 42 | parser.add_argument('-a', type=str, dest='auxdir', required=False, 43 | default='/22t1/common_data/s1_auxcal', 44 | help='Auxilary file directory') 45 | parser.add_argument('-r', type=float, nargs=4, dest='roi', required=False, 46 | help='Region of interest bbox [S,N,W,E]') 47 | parser.add_argument('-g', type=float, nargs=4, dest='gbox', required=False, 48 | help='Geocode bbox [S,N,W,E]') 49 | 50 | return parser.parse_args() 51 | 52 | 53 | def find_scenes(datadir, date): 54 | files = glob.glob(os.path.join(datadir,'S1*_{}*zip'.format(date))) 55 | files.sort() 56 | filenames = [os.path.basename(f) for f in files] 57 | 58 | # create symlinks 59 | for f in files: 60 | os.symlink(f, os.path.basename(f)) 61 | 62 | return filenames 63 | 64 | def write_topsApp_xml(inps): 65 | ''' use built in isce utility to write XML programatically (based on unoffical isce guide Sep2014''' 66 | insar = xml.Component('topsinsar') 67 | common = {} 68 | common['orbit directory'] = inps.orbitdir 69 | common['auxiliary data directory'] = inps.auxdir 70 | #common['swath number'] = inps.subswath 71 | if inps.roi: 72 | common['region of interest'] = inps.roi 73 | master = {} 74 | master['safe'] = inps.master_scenes 75 | master['output directory'] = 'masterdir' 76 | master.update(common) 77 | slave = {} 78 | slave['safe'] = inps.slave_scenes 79 | slave['output directory'] = 'slavedir' 80 | slave.update(common) 81 | #####Set sub-component 82 | insar['master'] = master 83 | insar['slave'] = slave 84 | ####Set properties 85 | #insar['doppler method'] = 'useDEFAULT' only insarApp 86 | insar['sensor name'] = 'SENTINEL1' 87 | insar['do unwrap'] = True 88 | insar['unwrapper name'] = 'snaphu_mcf' 89 | insar['swaths'] = inps.swaths 90 | if inps.gbox: 91 | insar['geocode bounding box'] = inps.gbox 92 | # Just essentials for batch processing 93 | insar['geocode list'] = ['merged/filt_topophase.unw.conncomp','merged/filt_topophase.unw','merged/phsig.cor'] 94 | if inps.dem: 95 | insar['demfilename'] = inps.dem 96 | #####Catalog example 97 | #insar['dem'] = xml.Catalog('dem.xml') #Components include a writeXML method 98 | insar.writeXML('topsApp.xml', root='topsApp') 99 | 100 | 101 | 102 | if __name__ == '__main__': 103 | inps = cmdLineParse() 104 | #print(inps) 105 | intdir = 'int_{0}_{1}'.format(inps.master, inps.slave) 106 | os.mkdir(intdir) 107 | os.chdir(intdir) 108 | inps.master_scenes = find_scenes(inps.path, inps.master) 109 | inps.slave_scenes = find_scenes(inps.path, inps.slave) 110 | write_topsApp_xml(inps) 111 | print('Ready to run topsApp.py in {}'.format(intdir)) 112 | -------------------------------------------------------------------------------- /Batch/runall.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import os 3 | import glob 4 | 5 | def run_topsApp_sequential(): 6 | ''' 7 | for now, simple external system call, run one at a time 8 | ''' 9 | intDirs = glob.glob('int*') 10 | intDirs.sort() #chronological order 11 | print(len(intDirs), 'interferograms to be made...') 12 | 13 | for i,intdir in enumerate(intDirs): 14 | print('\n--------\n',i,intdir,'\n--------\n') 15 | os.chdir(intdir) 16 | if not os.path.exists('./merged'): 17 | os.system('topsApp.py --steps 2>&1 | tee topsApp.log') 18 | 19 | #Keep only merged/ directory to save space, keep xml files 20 | os.system('rm -r coarse_coreg coarse_interferogram coarse_offsets ESD fine_coreg fine_interferogram fine_offsets geom_master slavedir masterdir') 21 | if i > 1: #keep geometry files onlt for first date to save space 22 | cmd = 'rm {0}/dem.crop* {0}/lat.rdr* {0}/lon.rdr* {0}/los.rdr {0}/los.rdr.full* {0}/z.rdr*'.format('merged') 23 | os.system(cmd) 24 | else: 25 | print(intdir, '"merged" folder already exists... skipping') 26 | os.chdir('../') 27 | 28 | if __name__ == '__main__': 29 | run_topsApp_sequential() 30 | -------------------------------------------------------------------------------- /BatchProcessing.md: -------------------------------------------------------------------------------- 1 | # Notes for batch processing Sentinel1 with topsApp.py 2 | last update: 06/2017 3 | 4 | ISCE version: [20170403](https://winsar.unavco.org/isce.html) 5 | 6 | * Assumes ISCE installed and paths set up correctly. If not see notes in this folder. 7 | 8 | ## 1) Get polygon for region of interest 9 | from [here](http://arthur-e.github.io/Wicket/sandbox-gmaps3.html). Be sure to select 'format for URLs'. As an example, here is a square polygon surrounding the town of Ithaca, NY: 10 | ``` 11 | POLYGON((-76.59221649169922+42.515227293635355,-76.41368865966797+42.515227293635355,-76.41368865966797+42.38298910865197,-76.59221649169922+42.38298910865197,-76.59221649169922+42.515227293635355)) 12 | ``` 13 | 14 | ## 2) Check available data from [ASF Vertex](https://vertex.daac.asf.alaska.edu/) 15 | Modify the bash script below and run. Note there are a lot of search variations that you can do with instructions [here](https://www.asf.alaska.edu/get-data/api/) 16 | ``` 17 | #!/bin/bash 18 | 19 | export PLATFORM=Sentinel-1A 20 | #export PLATFORM=Sentinel-1B 21 | export POLYGON="POLYGON((-76.59221649169922+42.515227293635355,-76.41368865966797+42.515227293635355,-76.41368865966797+42.38298910865197,-76.59221649169922+42.38298910865197,-76.59221649169922+42.515227293635355))" 22 | 23 | export OUTPUT=kml 24 | #also csv,json,metalink 25 | 26 | curl https://api.daac.asf.alaska.edu/services/search/param?intersectsWith=$POLYGON\&platform=$PLATFROM\&processingLevel=SLC\&output=$OUTPUT > query.$OUTPUT 27 | ``` 28 | 29 | ## 3) Download all available IW SLCS 30 | first create a configuration file for aria2 download program 31 | `/home/CHANGE/.aria2/asf.conf` 32 | ``` 33 | http-user=CHANGE 34 | http-passwd=CHANGE 35 | 36 | max-concurrent-downloads=5 37 | check-certificate=false 38 | 39 | allow-overwrite=false 40 | auto-file-renaming=false 41 | always-resume=true 42 | ``` 43 | 44 | for a particular track/relative Orbit modify and run bash script below 45 | ``` 46 | #!/bin/bash 47 | 48 | export ORBIT=106 49 | export POLYGON="POLYGON((-76.59221649169922+42.515227293635355,-76.41368865966797+42.515227293635355,-76.41368865966797+42.38298910865197,-76.59221649169922+42.38298910865197,-76.59221649169922+42.515227293635355))" 50 | 51 | # Sentinel-1A 52 | curl https://api.daac.asf.alaska.edu/services/search/param?intersectsWith=$POLYGON\&platform=Sentinel-1A\&processingLevel=SLC\&beamMode=IW\&relativeOrbit=$ORBIT\&output=metalink > query$ORBIT\_S1A.metalink 53 | 54 | aria2c --http-auth-challenge=true --conf-path=/home/mpguest/.aria2/asf.conf query$ORBIT\_S1A.metalink 55 | 56 | 57 | # Sentinel-1B 58 | curl https://api.daac.asf.alaska.edu/services/search/param?intersectsWith=$POLYGON\&platform=Sentinel-1B\&processingLevel=SLC\&beamMode=IW\&relativeOrbit=$ORBIT\&output=metalink > query$ORBIT\_S1B.metalink 59 | 60 | aria2c --http-auth-challenge=true --conf-path=/home/mpguest/.aria2/asf.conf query$ORBIT\_S1B.metalink 61 | ``` 62 | 63 | ## Download SRTM30m 64 | with SNWE bounds from full IW swath range rounded to nearest integer. The command below will create the dem file needed for processing: 65 | ``` 66 | dem.py -c -b 41 44 -78 -74 67 | fixImageXml.py -f -i demLat_N41_N44_Lon_W078_W074.dem.wgs84 68 | ``` 69 | 70 | ## Download Sentinel-1 Instrument calibration files 71 | run the following bash script 72 | ``` 73 | #!/bin/bash 74 | URL=https://s1qc.asf.alaska.edu/aux_cal 75 | cd s1_auxcal 76 | wget -r -l2 -nc -nd -np -nH -A SAFE $URL 77 | ``` 78 | 79 | ## Download all Sentinel-1 precise orbits 80 | script below does not re-download existing files 81 | ``` 82 | #!/bin/bash 83 | URL=https://s1qc.asf.alaska.edu/aux_poeorb/ 84 | cd ./s1_poeorb 85 | wget -r -l2 -nc -nd -np -nH -A EOF $URL 86 | ``` 87 | 88 | 89 | ## Prepare batch interferogram directories 90 | The following will only process bursts that intersect the polygon region of interest and geocode each interferogram to matching grids with the polygon extents. If you know you only want a specific subswath, for example IW2, use `-n 2`. To process every other pair (e.g. 24 day) use `-s 2` 91 | ``` 92 | prep_sequential_processing.py -p ./A106 -s 1 -d -r 42.515 42.382 -76.592 -76.413 -g 42.515 42.382 -76.592 -76.413 93 | ``` 94 | 95 | ## 4) Process all sequential pairs (e.g. 12 day) 96 | Warning... this will take a while. the runall.py script is very basic, processing one at a time in chronological order to not use up all computer resources. 97 | ``` 98 | runall.py 99 | ``` 100 | -------------------------------------------------------------------------------- /CheatSheat.md: -------------------------------------------------------------------------------- 1 | # ISCE/Python Cheat Sheet 2 | 3 | A collection of common and helpful commands using ISCE, GDAL, Python 4 | Tested with ISCE version 2 (20160908), mostly with outputs from topsApp.py 5 | 6 | ## Command Line 7 | 8 | #### Use gdal tools on zipped Sentinel1 files 9 | ``` 10 | export FILE=S1B_IW_SLC__1SDV_20170204T160912_20170204T160940_004152_0072F4_9D51 11 | gdalinfo /vsizip/${FILE}.zip/${FILE}.SAFE 12 | ``` 13 | 14 | #### Save unwrapped phase as single band geotiff with control over colorbar 15 | ``` 16 | isce2geotiff.py -i filt_topophase.unw.geo -o filt_topophase.unw.geo.tif -b 2 -c -10 10 17 | ``` 18 | 19 | #### Create kmz to view in Google Earth 20 | (Note: Google Earth Pro is now free, and can open geotifs directly, so do not really need this...) 21 | ``` 22 | gdal_translate -of KMLSUPEROVERLAY filt_topophase.unw.geo.tif filt_topophase.unw.geo.kmz 23 | ``` 24 | 25 | #### Convert unwrapped radians to displacements [m] 26 | (Note: example for C-band Sentinel-1A Wavelength 5.55 cm) 27 | ``` 28 | gdal_calc.py -A filt_topophase.unw.geo.vrt --A_band=2 --calc="A*0.05546576/12.5663706" --outfile=filt_topophase.unw_m.geo --format=ENVI --NoDataValue=-9999 --overwrite 29 | ``` 30 | 31 | #### East-North-Up (ENU) Cartesian vector mapping to radar Line-Of-Sight (LOS) 32 | ``` 33 | imageMath.py --eval='sin(rad(a_0))*cos(rad(a_1+90));sin(rad(a_0)) * sin(rad(a_1+90));cos(rad(a_0))' --a=los.rdr.geo -t FLOAT -s BIL -o enu.rdr.geo 34 | ``` 35 | 36 | #### Convert displacement file to UTM coordinates for modeling 37 | if you are unsure of the UTM zone, here is a nice utility: http://www.geoplaner.com/ 38 | and EPSG codes can be found here: http://www.spatialreference.org/ 39 | ``` 40 | gdalwarp -of VRT -t_srs EPSG:32718 filt_topophase.unw_m.geo filt_topophase.unw_m.utm 41 | ``` 42 | 43 | 44 | #### Help on particular ISCE component 45 | ``` 46 | iscehelp.py -t Sensor -a sensor=SENTINEL1 47 | ``` 48 | 49 | #### Look down an ISCE file 50 | ``` 51 | looks.py -i filt_topophase.flat -r 4 -a 4 -o filt_topophase.flat.4lks 52 | ``` 53 | 54 | #### Get quick stats on an image 55 | For example mean incidence and heading angles. Band 1 is incidence (radar los to surface normal), Band 2 is heading (positive clockwise from due east): 56 | ``` 57 | isce2gis.py vrt -i los.rdr.geo 58 | gdal_edit.py -a_nodata 0.0 los.rdr.geo.vrt 59 | gdalinfo -stats los.rdr.geo.vrt 60 | ``` 61 | 62 | #### Geocode File 63 | ``` 64 | topsApp.py —-dostep=geocode topsApp_geocodeonly.xml 65 | ``` 66 | 67 | where topApps_geocodeonly.xml has: 68 | ``` 69 | 70 | 71 | 72 | ["filt_topophase.flat.4lks"] 73 | 74 | 75 | ``` 76 | 77 | 78 | #### Unwrap specific file with Snaphu 79 | ``` 80 | ``` 81 | 82 | #### Merge wrapped, geocoded, Sentinel-IW subswaths 83 | ``` 84 | gdalwarp -of ENVI -ot CFloat32 -srcnodata 0 -dstnodata 0 20160322_20160415_*/merged/*filt_topophase.flat.geo.vrt filt_topophase_merged.flat.geo.vrt 85 | ``` 86 | 87 | #### Put separate geocoded phase files on same grid (with GDAL) 88 | note image size (-ts 450 450) can be determined from `gdalinfo filt_topophase.unw.8alks_8rlks.geo.vrt` 89 | ``` 90 | gdaltindex clipper.shp filt_topophase.unw.8alks_8rlks.geo.vrt 91 | gdalwarp -ts 450 450 -cutline clipper.shp -crop_to_cutline /dems/demLat_S04_N12_Lon_W081_W070.dem.wgs84.vrt dem.tif 92 | ``` 93 | 94 | #### Extract wrapped phase from complex-valued files 95 | ``` 96 | isce2gis.py vrt -i filt_topophase.flat.8alks_8rlks.geo 97 | 98 | gdal_calc.py --type Float32 -A filt_topophase.flat.8alks_8rlks.geo.vrt --calc="numpy.angle(A)" --outfile=filt_topophase.flat.8alks_8rlks.geo.phs.tif --NoDataValue=0.0 --overwrite 99 | ``` 100 | 101 | #### Create RGBA Geotiff for Google Earth 102 | ``` 103 | gdaldem color-relief -alpha filt_topophase.flat.8alks_8rlks.geo.phs.tif colors.txt filt_topophase.flat.geo.8alks_8rlks.phs.rgba.tif 104 | ``` 105 | where colors.txt is something like this: 106 | ``` 107 | -3.14 46 154 88 255 108 | -1.57 251 255 128 255 109 | 0 224 108 31 255 110 | 1.57 200 55 55 255 111 | 3.14 215 244 244 255 112 | nv 0 0 0 0 113 | ``` 114 | 115 | ## Python Module 116 | 117 | #### Load Processing information from PICKLE (when running insarApp.py with --steps) 118 | ```python 119 | import isce 120 | import pickle 121 | with open('PICKLE/updatepreprocinfo', 'rb') as f: 122 | insar = pickle.load(f) 123 | # insar is a dictionary in this case: 124 | insar['sensor'] 125 | ``` 126 | 127 | #### Plot array in map view and profile 128 | ``` 129 | ``` 130 | 131 | 132 | ## Other stuff 133 | 134 | #### Download specific file from ASF 135 | ``` 136 | wget https://datapool.asf.alaska.edu/SLC/SA/S1A_IW_SLC__1SSV_20141024T160957_20141024T161028_002973_003616_3171.zip 137 | ``` 138 | 139 | #### Download All Sentinel-1A SLC products for a particular point and orbit from ASF 140 | ``` 141 | export LAT=1.22 142 | export LON=-77.37 143 | export ORBIT=120 144 | curl https://api.daac.asf.alaska.edu/services/search/param?intersectsWith=point%28$LON+$LAT%29\&platform=Sentinel-1A\&processingLevel=SLC\&relativeOrbit=$ORBIT\&output=metalink > query$ORBIT.metalink 145 | aria2c --http-auth-challenge=true --conf-path=asf.conf query$ORBIT.metalink 146 | ``` 147 | Where asf.conf contains the following: 148 | ``` 149 | http-user= 150 | http-passwd= 151 | max-concurrent-downloads=5 152 | check-certificate=false 153 | allow-overwrite=false 154 | auto-file-renaming=false 155 | always-resume=true 156 | ``` 157 | 158 | 159 | -------------------------------------------------------------------------------- /Docker/Dockerfile: -------------------------------------------------------------------------------- 1 | # Scott Henderson (scottyh@uw.edu) 2 | # Date: July 2018 3 | FROM ubuntu:18.04 as build 4 | 5 | WORKDIR /tmp 6 | 7 | COPY isce-2.2.0.tar.bz2 SConfigISCE /tmp/ 8 | 9 | # Update Base Ubuntu installation 10 | ENV DEBIAN_FRONTEND noninteractive 11 | RUN apt update && \ 12 | apt install -y gfortran libmotif-dev libhdf5-dev libfftw3-dev libgdal-dev scons python3 cython3 python3-scipy python3-matplotlib python3-h5py python3-gdal python3-pip && \ 13 | rm -rf /var/lib/apt/lists/* 14 | 15 | # Install ISCE and remove files from /tmp folder 16 | RUN bunzip2 isce-2.2.0.tar.bz2 && \ 17 | tar -xf isce-2.2.0.tar && \ 18 | cd isce-2.2.0 && \ 19 | export PYTHONPATH=/tmp/isce-2.2.0/configuration && \ 20 | export SCONS_CONFIG_DIR=/tmp && \ 21 | scons install --skipcheck && \ 22 | rm -rf /tmp/* 23 | 24 | # Multistage build reduces size (no need for all development libraries) 25 | FROM ubuntu:18.04 as run 26 | 27 | # Install run-time libraries 28 | ENV DEBIAN_FRONTEND noninteractive 29 | RUN apt update && \ 30 | apt install -y zip curl libmotif-common libfftw3-3 python3 cython3 python3-scipy python3-matplotlib python3-h5py python3-gdal python3-pip && \ 31 | rm -rf /var/lib/apt/lists/* 32 | 33 | # Setup ISCE environment 34 | ENV ISCE_ROOT /opt/isce-2.2.0 35 | ENV ISCE_HOME $ISCE_ROOT/isce 36 | ENV PATH $ISCE_HOME/bin:$ISCE_HOME/applications:$PATH 37 | ENV PYTHONPATH $ISCE_ROOT:$ISCE_HOME/applications:$ISCE_HOME/component 38 | 39 | # Don't run container as root user 40 | RUN groupadd -r ubuntu && \ 41 | useradd -r -l -s /bin/bash -g ubuntu ubuntu 42 | USER ubuntu 43 | WORKDIR /home/ubuntu 44 | 45 | # Copy ISCE installation files 46 | COPY --from=build /opt /opt 47 | 48 | CMD /bin/bash 49 | -------------------------------------------------------------------------------- /Docker/SConfigISCE: -------------------------------------------------------------------------------- 1 | PRJ_SCONS_BUILD=/tmp/isce-2.2.0/build 2 | PRJ_SCONS_INSTALL=/opt/isce-2.2.0/isce 3 | 4 | LIBPATH=/usr/lib/x86_64-linux-gnu 5 | CPPPATH=/usr/include/python3.6m /usr/include /usr/include/x86_64-linux-gnu /usr/include/hdf5/serial /usr/include/gdal 6 | FORTRANPATH=/usr/include /usr/lib/gcc/x86_64-linux-gnu/7/finclude 7 | 8 | FORTRAN=/usr/bin/gfortran 9 | CC=/usr/bin/gcc 10 | CXX=/usr/bin/g++ 11 | 12 | MOTIFLIBPATH = /usr/lib/x86_64-linux-gnu 13 | X11LIBPATH = /usr/lib/x86_64-linux-gnu 14 | MOTIFINCPATH = /usr/include/Xm 15 | X11INCPATH = /usr/include/X11 16 | 17 | ENABLE_CUDA=False 18 | CUDA_TOOLKIT_PATH=/usr/local/cuda-9.2 19 | -------------------------------------------------------------------------------- /Docker/readme.md: -------------------------------------------------------------------------------- 1 | # Instructions for running and installing ISCE with Docker 2 | 3 | ## Last tested July 2018 with ISCE 2.2.0 and Docker 18.03.1-ce 4 | 5 | 6 | These instructions are for installing ISCE on Ubuntu 18.04. 7 | Docker allows you then run ISCE on any machine (MacOSX, CentOS server, AWS EC2, etc). 8 | The resulting image takes up about 700 Mb of disk space. 9 | 10 | ## Create a Docker Image 11 | ``` 12 | wget https://imaging.unavco.org/software/ISCE/isce-2.2.0.tar.bz2 13 | docker build --rm -t isce:v2.2.0 . 14 | ``` 15 | 16 | ## Run ISCE in an interactive Docker Container 17 | ``` 18 | docker run -it --rm isce:v2.2.0 /bin/bash 19 | ``` 20 | 21 | ## Mapping a local folder (where you have SAR data stored) 22 | ``` 23 | docker run -it --rm -v /local/path:/tmp isce:v2.2.0 /bin/bash 24 | ``` 25 | 26 | ## Using MDX (this works on MacOSX 27 | ``` 28 | ip=$(ifconfig en0 | awk '/inet /{print $2 ":0"}') 29 | xhost + 30 | docker run -it --rm -e DISPLAY=$ip -v /my/local/data:/tmp/data -v /tmp/.X11-unix:/tmp/.X11-unix isce:v2.2.0 /bin/bash 31 | ``` 32 | -------------------------------------------------------------------------------- /OSX/Readme.md: -------------------------------------------------------------------------------- 1 | # Notes for installing ISCE_201609 (on Mac OSX 10.11.5 ) 2 | ###https://winsar.unavco.org/isce.html 3 | ###updated 09/2016 4 | 5 | ## Installing single version from scratch 6 | 7 | 8 | 1) Download ISCE: 9 | ``` 10 | wget https://winsar.unavco.org/software/ISCE/isce-2.0.0_20160908.tar.bz2 11 | bunzip2 isce-2.0.0_20160908.bz2 12 | tar -xzf isce-2.0.0_20160908.tar 13 | ``` 14 | 15 | 16 | 2) Install dependencies with Homebrew: 17 | ``` 18 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 19 | brew install gcc gfortran fftw lesstif imagemagick 20 | ``` 21 | Or if you already have homebrew, it might be a good idea to upgrade packages before installing: 22 | ``` 23 | brew update 24 | brew upgrade 25 | ``` 26 | Check the versions: 27 | ``` 28 | gcc-6 --version 29 | gcc-6 (Homebrew gcc 6.2.0) 6.2.0 30 | gfortran-6 --version 31 | GNU Fortran (Homebrew gcc 6.2.0) 6.2.0 32 | ``` 33 | 34 | 35 | 3) ISCE requires Python2 to install and Python3 to run. Use Anaconda Python installations for this: 36 | ``` 37 | wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh 38 | bash Miniconda3-latest-Linux-x86_64.sh 39 | conda env create -f isce_201609.yml 40 | conda env create -f scons.yml 41 | ``` 42 | 43 | Check the versions (need GDAL>2.0) 44 | ``` 45 | source activate isce_201609 46 | gdalinfo --version 47 | GDAL 2.1.0, released 2016/04/25 48 | ``` 49 | 50 | 4) Update ISCE configuration file (here is mine as a template): 51 | `vi ~/.isce/SConfigISCE` 52 | ``` 53 | PRJ_SCONS_BUILD=/Users/scott/Software/ISCE_SRC/isce-2.0.0_20160908/build 54 | PRJ_SCONS_INSTALL=/Users/scott/Software/ISCE/isce_201609 55 | 56 | LIBPATH=/Users/scott/miniconda3/envs/isce_201609/lib /usr/local/lib /usr/local/gfortran/lib 57 | CPPPATH=/Users/scott/miniconda3/envs/isce_201609/include/python3.5m /usr/local/include 58 | FORTRANPATH=/usr/local/include 59 | 60 | FORTRAN=/usr/local/bin/gfortran-6 61 | CC=/usr/local/bin/gcc-6 62 | CXX=/usr/local/bin/g++-6 63 | 64 | MOTIFLIBPATH=/usr/local/lib 65 | MOTIFINCPATH=/usr/local/include 66 | X11LIBPATH=/opt/X11/lib 67 | X11INCPATH=/opt/X11/include 68 | ``` 69 | 70 | 71 | 4) Compile ISCE using scons: 72 | ``` 73 | cd /Users/scott/Software/ISCE_SRC/isce-2.0.0_20160908 74 | export PYTHONPATH=/Users/scott/Software/ISCE_SRC/isce-2.0.0_20160908/configuration 75 | export SCONS_CONFIG_DIR=/Users/scott/.isce 76 | source activate scons 77 | scons install 78 | # if scons fails for some reason, run this before running again: 79 | rm -rf config.log .sconsign.dblite .sconf_temp build/ 80 | ``` 81 | 82 | 5) Create an alias in `.bashrc` to activate Python3 whenever you want to run isce 83 | `alias start_isce_201609="source activate isce_201609; source ~/.isce/.isceenv_201609"` 84 | Where `.isceenv` contains: 85 | ``` 86 | export ISCE_ROOT=/Users/scott/Software/ISCE/isce_201609 87 | export ISCE_HOME=$ISCE_ROOT/isce 88 | export PATH=$ISCE_HOME/applications:$ISCE_HOME/bin:$PATH 89 | export PYTHONPATH=$ISCE_ROOT:$PYTHONPATH 90 | ``` 91 | 92 | 6) Check installation: 93 | ``` 94 | start_isce_201609 95 | python3 96 | import isce 97 | isce.version.release_version 98 | ``` 99 | 100 | 7) Run ISCE! here is an easy place to get test data: http://topex.ucsd.edu/gmtsar/downloads/ 101 | ``` 102 | start_isce_201609 103 | insarApp.py --steps 104 | ``` 105 | -------------------------------------------------------------------------------- /OSX/Readme_201604.md: -------------------------------------------------------------------------------- 1 | # Notes for installing ISCE (on Mac OSX 10.11.5 ) 2 | ###https://winsar.unavco.org/isce.html 3 | ###updated June 2016 4 | 5 | ## Installing single version from scratch 6 | 7 | 8 | 1) Download ISCE: 9 | ``` 10 | wget https://winsar.unavco.org/software/ISCE/isce-2.0.0_201604.bz2 11 | bunzip2 isce-2.0.0_201604.bz2 12 | tar -xzf isce-2.0.0_201604.tar 13 | ``` 14 | 15 | 16 | 2) Install dependencies with Homebrew: 17 | ``` 18 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 19 | brew install gcc gfortran fftw lesstif imagemagick 20 | ``` 21 | Or if you already have homebrew, it might be a good idea to upgrade packages before installing: 22 | ``` 23 | brew update 24 | brew upgrade 25 | ``` 26 | Check the versions: 27 | ``` 28 | gcc-5 --version 29 | gcc-5 (Homebrew gcc 5.3.0) 5.3.0 30 | gfortran-5 --version 31 | GNU Fortran (Homebrew gcc 5.3.0) 5.3.0 32 | ``` 33 | 34 | 35 | 3) ISCE requires Python2 to install and Python3 to run. Use Anaconda Python installations for this: 36 | ``` 37 | wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh 38 | bash Miniconda3-latest-Linux-x86_64.sh 39 | conda env create -f isce.yml 40 | conda env create -f scons.yml 41 | ``` 42 | 43 | 44 | 4) Update ISCE configuration file (here is mine as a template): 45 | `vi ~/.isce/SConfigISCE` 46 | ``` 47 | PRJ_SCONS_BUILD=/Users/scott/Software/ISCE_SRC/isce-2.0.0_201604/build 48 | PRJ_SCONS_INSTALL=/Users/scott/Software/ISCE/isce-2.0.0_201604 49 | 50 | LIBPATH= /usr/local/Cellar/gcc/5.3.0/lib/gcc/5 /Users/scott/Software/miniconda3/envs/isce/lib /usr/local/lib /opt/X11/lib 51 | CPPPATH=/Users/scott/Software/miniconda3/envs/isce/include/python3.5m /usr/local/include /opt/X11/include 52 | FORTRANPATH=/usr/local/include 53 | 54 | FORTRAN=/usr/local/bin/gfortran-5 55 | CC=/usr/local/bin/gcc-5 56 | CXX=/usr/local/bin/g++-5 57 | 58 | MOTIFLIBPATH=/usr/local/lib 59 | MOTIFINCPATH=/usr/local/include 60 | X11LIBPATH=/opt/X11/lib 61 | X11INCPATH=/opt/X11/include 62 | ``` 63 | 64 | 65 | 4) Compile ISCE using scons: 66 | ``` 67 | cd /Users/scott/Software/ISCE_SRC/isce-2.0.0_201604 68 | export SCONS_CONFIG_DIR=/Users/scott/.isce 69 | source activate scons 70 | scons install 71 | ln -s /Users/scott/Software/ISCE/isce-2.0.0_201604 /Users/scott/Software/ISCE/isce 72 | ``` 73 | 74 | 5) Create an alias in `.bashrc` to activate Python3 whenever you want to run isce 75 | `alias start_isce="source activate isce; source ~/.isce/.isceenv"` 76 | Where `.isceenv` contains: 77 | ``` 78 | export ISCE_ROOT_DIR=/Users/scott/Software/ISCE 79 | export ISCE_HOME=$ISCE_ROOT_DIR/isce 80 | export PATH=$ISCE_HOME/applications:$ISCE_HOME/bin:$PATH 81 | export PYTHONPATH=$ISCE_ROOT_DIR:$PYTHONPATH 82 | ``` 83 | 84 | 6) Check installation: 85 | ``` 86 | start_isce 87 | python3 88 | import isce 89 | isce.version.release_version 90 | ``` 91 | 92 | 7) Run ISCE! 93 | ``` 94 | start_isce 95 | insarApp.py --steps 96 | ``` 97 | -------------------------------------------------------------------------------- /OSX/isce.yml: -------------------------------------------------------------------------------- 1 | name: isce 2 | dependencies: 3 | - curl=7.45.0=0 4 | - freetype=2.5.5=1 5 | - gdal=2.0.0=np111py35_3 6 | - geos=3.4.2=0 7 | - hdf4=4.2.11=0 8 | - hdf5=1.8.16=0 9 | - jpeg=8d=1 10 | - kealib=1.4.5=2 11 | - libgdal=2.0.0=4 12 | - libnetcdf=4.4.0=1 13 | - libpng=1.6.22=0 14 | - mkl=11.3.3=0 15 | - numpy=1.11.0=py35_1 16 | - openssl=1.0.2h=1 17 | - pip=8.1.1=py35_1 18 | - proj4=4.9.1=0 19 | - python=3.5.1=0 20 | - qt=4.8.7=2 21 | - readline=6.2=2 22 | - scipy=0.17.1=np111py35_0 23 | - setuptools=21.2.1=py35_0 24 | - sqlite=3.13.0=0 25 | - tk=8.5.18=0 26 | - wheel=0.29.0=py35_0 27 | - xerces-c=3.1.2=0 28 | - xz=5.0.5=1 29 | - zlib=1.2.8=0 30 | -------------------------------------------------------------------------------- /OSX/isce_201609.yml: -------------------------------------------------------------------------------- 1 | name: isce_201609 2 | dependencies: 3 | - curl=7.45.0=0 4 | - freetype=2.5.5=1 5 | - gdal=2.0.0=np111py35_3 6 | - geos=3.4.2=0 7 | - hdf4=4.2.11=0 8 | - hdf5=1.8.16=0 9 | - jpeg=8d=1 10 | - kealib=1.4.5=2 11 | - libgdal=2.0.0=4 12 | - libnetcdf=4.4.0=1 13 | - libpng=1.6.22=0 14 | - nomkl=1.0 15 | - numpy=1.11.0=py35_1 16 | - openssl=1.0.2h=1 17 | - pip=8.1.1=py35_1 18 | - proj4=4.9.1=0 19 | - python=3.5.1=0 20 | - qt=4.8.7=2 21 | - readline=6.2=2 22 | - scipy=0.17.1=np111py35_0 23 | - setuptools=21.2.1=py35_0 24 | - sqlite=3.13.0=0 25 | - tk=8.5.18=0 26 | - wheel=0.29.0=py35_0 27 | - xerces-c=3.1.2=0 28 | - xz=5.0.5=1 29 | - zlib=1.2.8=0 30 | -------------------------------------------------------------------------------- /OSX/scons.yml: -------------------------------------------------------------------------------- 1 | name: scons 2 | channels: 3 | - defaults 4 | dependencies: 5 | - openssl=1.0.2h=2 6 | - pip=8.1.2=py27_0 7 | - python=2.7.12=1 8 | - readline=6.2=2 9 | - scons=2.3.0=py27_0 10 | - setuptools=27.2.0=py27_0 11 | - sqlite=3.13.0=0 12 | - tk=8.5.18=0 13 | - wheel=0.29.0=py27_0 14 | - zlib=1.2.8=3 15 | prefix: /Users/scott/miniconda3/envs/scons 16 | 17 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Tools for ISCE (InSAR Scientific Computing Environment) 2 | 3 | 4 | * *NOTE: most of ISCE now open source! as of Feb 2019: https://github.com/isce-framework/isce2* 5 | 6 | * Last Updated: 04/2018 7 | 8 | * [ISCE software page](https://winsar.unavco.org/isce.html) - version 2.1.0 as of 08/2017 9 | 10 | * Platform-independent installation with [Docker](Docker) 11 | 12 | * Instructions for both [OSX](OSX) or [Ubuntu](Ubuntu) in respective folders 13 | 14 | * [Cheat sheat](CheatSheat.md) for working with ISCE also in this repository 15 | 16 | * Looking for SAR data? [See here](Archives) 17 | 18 | * [Notes](Ubuntu/Readme_GIAnT.md) on installing JPL Earthdef software (e.g. GIAnT 19 | ) 20 | -------------------------------------------------------------------------------- /Ubuntu/Readme.md: -------------------------------------------------------------------------------- 1 | # Notes for installing ISCE 2.2.0 (on Ubuntu 18.04 LTS) 2 | ### https://winsar.unavco.org/isce.html 3 | 4 | ### Last update 07/2018 5 | 6 | ## NOTE: this is a simplified instruction set for installing [ISCE 2.2.0](https://winsar.unavco.org/software/isce) on [Ubuntu 18.04 LTS](https://wiki.ubuntu.com/BionicBeaver/ReleaseNotes?_ga=2.87047249.813606057.1533187033-1771092189.1532981728) 7 | 8 | [Notes](Readme_201609.md) on installing previous versions used the [conda](https://conda.io/docs/) package manager for custom Python environments. The drawback with conda is that you can run into errors if conda packages and system libraries are built against different compiler versions (see [this ISCE user forum post](http://earthdef.caltech.edu/boards/4/topics/1925)). See these notes [here](https://conda.io/docs/user-guide/tasks/build-packages/compiler-tools.html) about conda compilers. 9 | 10 | One solution is either use entirely system installed dependencies or install all dependencies with conda, and the following notes are for installing ISCE without conda. Check out other installation notes [here](https://github.com/piyushrpt/oldLinuxSetup). Or consider using [Docker](../Docker)! 11 | 12 | 13 | 1) A list of Ubuntu packages that need to be installed (if they aren't already): 14 | ``` 15 | sudo apt update 16 | sudo apt install -y gfortran libmotif-dev libhdf5-dev libfftw3-dev libgdal-dev scons python3 cython3 python3-scipy python3-matplotlib python3-h5py python3-gdal python3-pip 17 | ``` 18 | 19 | 2) Download ISCE to location where you want to keep the source code: 20 | ``` 21 | cd /opt 22 | wget https://imaging.unavco.org/software/ISCE/isce-2.2.0.tar.bz2 23 | bunzip2 isce-2.2.0.tar.bz2 24 | tar -xvf isce-2.2.0.tar.bz2 25 | ``` 26 | 27 | 3) Update this ISCE scons installation configuration file (and move to /opt/isce-2.2.0): 28 | ``` 29 | PRJ_SCONS_BUILD=/opt/isce-2.2.0/build 30 | PRJ_SCONS_INSTALL=/opt/isce-2.2.0/install/isce 31 | 32 | LIBPATH=/usr/lib/x86_64-linux-gnu /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial 33 | CPPPATH=/usr/include/x86_64-linux-gnu /usr/include /usr/include/python3.6m /usr/include/hdf5/serial /usr/include/gdal 34 | FORTRANPATH=/usr/include /usr/lib/gcc/x86_64-linux-gnu/7/finclude 35 | 36 | FORTRAN=/usr/bin/gfortran 37 | CC=/usr/bin/gcc 38 | CXX=/usr/bin/g++ 39 | 40 | MOTIFLIBPATH = /usr/lib/x86_64-linux-gnu 41 | X11LIBPATH = /usr/lib/x86_64-linux-gnu 42 | MOTIFINCPATH = /usr/include/Xm 43 | X11INCPATH = /usr/include/X11 44 | 45 | ENABLE_CUDA=False 46 | ``` 47 | 48 | 4) Install ISCE with scons 49 | ``` 50 | cd isce-2.2.0 51 | export PYTHONPATH=/opt/isce-2.2.0/configuration 52 | export SCONS_CONFIG_DIR=/opt/isce-2.2.0 53 | scons install --skipcheck 54 | ``` 55 | 56 | 5) Create a configuration file (`~/ISCE_CONFIG`) with the correct evironment variables to run ISCE 57 | ``` 58 | export ISCE_ROOT=/opt/isce-2.2.0/install 59 | export ISCE_HOME=$ISCE_ROOT/isce 60 | export PATH=$ISCE_HOME/bin:$ISCE_HOME/applications:$PATH 61 | export PYTHONPATH=$ISCE_ROOT:$ISCE_HOME/applications:$ISCE_HOME/component 62 | ``` 63 | 64 | 6) After sourcing the configuration file, you should be able to run ISCE! 65 | ``` 66 | source ~/ISCE_CONFIG 67 | topsApp.py --steps --help 68 | ``` 69 | -------------------------------------------------------------------------------- /Ubuntu/Readme_201609.md: -------------------------------------------------------------------------------- 1 | # Notes for installing ISCE 2.0.0_20160908 (on Ubuntu 16.04 LTS) 2 | ###https://winsar.unavco.org/isce.html 3 | 4 | ### Last update 09/2016 5 | 6 | ## Installing single version from scratch 7 | 8 | 9 | 1) A list of ubuntu packages that need to be installed (if they aren't already): 10 | ``` 11 | apt-get install libgmp-dev libmpfr-dev libmpc-dev libc6-dev-i386 12 | ``` 13 | 14 | 15 | 2) ISCE requires Python2 to install and Python3 to run. Use Anaconda Python installations for this: 16 | ``` 17 | wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh 18 | bash Miniconda3-latest-Linux-x86_64.sh 19 | 20 | conda env create -f isce_201609.yml 21 | conda env create -f scons.yml 22 | ``` 23 | 24 | 25 | 3) Download ISCE to location where you want to keep the source code: 26 | ``` 27 | wget http://winsar.unavco.org/software/ISCE/isce-2.0.0_20160908.tar.bz2 28 | mv ~/Downloads/isce-2.0.0_20160908.tar.bz2 ~/Software/ISCE 29 | bunzip2 isce-2.0.0_20160908.tar.bz2 30 | tar -xvf isce-2.0.0_20160908.tar 31 | ``` 32 | 33 | 34 | 4) Update ISCE configuration file (here is mine as a template): 35 | `vi ~/.isce/SConfigISCE` 36 | ``` 37 | PRJ_SCONS_BUILD=/home/scott/Software/ISCE/isce-2.0.0_20160908/build 38 | PRJ_SCONS_INSTALL=/usr/local/isce-2.0.0_20160908/isce 39 | 40 | LIBPATH=/home/scott/miniconda3/envs/isce_201609/lib /usr/lib/x86_64-linux-gnu 41 | CPPPATH=/home/scott/miniconda3/envs/isce_201609/include/python3.5m 42 | FORTRANPATH=/usr/include 43 | 44 | FORTRAN=/usr/bin/gfortran 45 | CC=/usr/bin/gcc 46 | CXX=/usr/bin/g++ 47 | 48 | MOTIFLIBPATH = /usr/lib/x86_64-linux-gnu 49 | X11LIBPATH = /usr/lib/x86_64-linux-gnu 50 | MOTIFINCPATH = /usr/include/Xm 51 | X11INCPATH = /usr/include/X11 52 | ``` 53 | 54 | 55 | 4) Install ISCE with scons (example as root to install to `/usr/local`) 56 | ``` 57 | su 58 | cd isce-2.0.0_20160908 59 | export PYTHONPATH=/home/scott/Software/isce-2.0.0_20160908/configuration 60 | export SCONS_CONFIG_DIR=/home/scott/.isce 61 | 62 | source activate scons 63 | scons install 64 | ``` 65 | 66 | 5) Create an alias in `.bashrc` to activate Python3 whenever you want to run isce 67 | `alias start_isce_201609="source activate isce_201609; source ~/.isce/.isceenv_201609"` 68 | Where `.isceenv_201609` contains: 69 | ``` 70 | export ISCE_ROOT=/usr/local/isce-2.0.0_20160908 71 | export ISCE_HOME=$ISCE_ROOT/isce 72 | export PATH=$ISCE_HOME/bin:$ISCE_HOME/applications:$PATH 73 | export PYTHONPATH=$ISCE_ROOT:$ISCE_HOME/applications:$ISCE_HOME/component 74 | ``` 75 | 76 | 6) To Run ISCE: 77 | ``` 78 | alias start_isce="source activate isce_201609; source ~/.isce/.isceenv_201609" 79 | insarApp.py --steps 80 | ``` 81 | 82 | 83 | ## Installing multiple versions / development snapshots 84 | 1) Clone the previous conda environment and update packages (if you want). 85 | ``` 86 | conda create --name isce_XXXXX --clone isce_201609 87 | conda update --all 88 | ``` 89 | 90 | 2) Change the SConfigISCE file 91 | ``` 92 | cp ~/.isce/SConfigISCE ~/.isce/SConfigISCE_201609 93 | vi ~/.isce/SConfigISCE 94 | PRJ_SCONS_BUILD=/home/scott/Software/isce-2.0.0_XXXXX/build 95 | PRJ_SCONS_INSTALL=/usr/local/isce-2.0.0_XXXXX/isce 96 | LIBPATH=/home/scott/miniconda3/envs/isce_XXXXX/lib /usr/lib/x86_64-linux-gnu 97 | CPPPATH=/home/scott/miniconda3/envs/isce_XXXXX/include/python3.5m 98 | 99 | 3) Install with scons as root 100 | ``` 101 | su 102 | cd /home/scott/Software/isce-2.0.0_XXXXX 103 | export PYTHONPATH=/home/scott/Software/isce-2.0.0_XXXXX/configuration 104 | export SCONS_CONFIG_DIR=/home/scott/.isce 105 | 106 | source activate scons 107 | scons install 108 | ``` 109 | 110 | 4) Create a new alias and environment file 111 | ``` 112 | alias start_isce_XXXXX="source activate isce_XXXXX; source ~/.isce/.isceenv_XXXX"` 113 | ``` 114 | 115 | 116 | 5) Update the environment file `~/.isce/.isceenv_XXXXX`: 117 | ``` 118 | export ISCE_ROOT=/usr/local/isce-2.0.0_XXXXX 119 | export ISCE_HOME=$ISCE_ROOT/isce 120 | export PATH=$ISCE_HOME/bin:$ISCE_HOME/applications:$PATH 121 | export PYTHONPATH=$ISCE_ROOT:$ISCE_HOME/applications:$ISCE_HOME/component 122 | ``` 123 | 124 | -------------------------------------------------------------------------------- /Ubuntu/Readme_GIAnT.md: -------------------------------------------------------------------------------- 1 | # Notes on installing CalTechs Earthdef on Ubuntu 14 2 | ## (GIAnT, PyAps, Varres) 3 | http://earthdef.caltech.edu 4 | 5 | ## Register for an account (you will be asked for a password to download with svn) 6 | http://earthdef.caltech.edu/account/register 7 | 8 | ## Download software 9 | ``` 10 | cd ~/Software/earthdef 11 | svn co http://earthdef.caltech.edu/svn/giant 12 | svn co http://earthdef.caltech.edu/svn/varres 13 | svn co http://earthdef.caltech.edu/svn/pyaps 14 | ``` 15 | 16 | ## Create a Python Environment with necessary dependencies 17 | Some packages need to be downloaded from a non-default repository, so you have to first register it in a `~/.condarc` file: 18 | ``` 19 | channels: 20 | - defaults 21 | - https://conda.anaconda.org/conda-forge 22 | ``` 23 | Then run: 24 | ``` 25 | conda env create -f giant.yml 26 | ``` 27 | 28 | ## Create an alias for initializing environment variables and correct python 29 | ``` 30 | alias start_giant="source ~/.giant/.giantenv; source activate giant" 31 | ``` 32 | where `~/.giant/.giantenv` contains: 33 | ``` 34 | export GIANT=~/Software/earthdef/giant/GIAnT 35 | export PYAPS=~/Software/earthdef 36 | export VARRES=~/Software/earthdef/varres 37 | export PYTHONPATH=$GIANT:$PYAPS:$VARRES 38 | export PATH=~/Software/earthdef/giant/GIAnT/SCR:$PATH 39 | ``` 40 | -------------------------------------------------------------------------------- /Ubuntu/conda-forge-packages.txt: -------------------------------------------------------------------------------- 1 | ecmwf_grib 2 | ffmpeg 3 | pygrib 4 | pyhdf 5 | pykdtree 6 | pykml 7 | pyresample 8 | pywavelets 9 | -------------------------------------------------------------------------------- /Ubuntu/giant.yml: -------------------------------------------------------------------------------- 1 | name: giant 2 | dependencies: 3 | - anaconda-client=1.4.0=py27_0 4 | - backports=1.0=py27_0 5 | - cairo=1.12.18=6 6 | - clyent=1.2.2=py27_0 7 | - configobj=5.0.6=py27_0 8 | - curl=7.45.0=0 9 | - cycler=0.10.0=py27_0 10 | - cython=0.24=py27_0 11 | - decorator=4.0.9=py27_0 12 | - ecmwf_grib=1.14.7=3 13 | - ffmpeg=2.8.6=1 14 | - fontconfig=2.11.1=5 15 | - freetype=2.5.5=0 16 | - gdal=2.0.0=py27_1 17 | - geos=3.4.2=0 18 | - get_terminal_size=1.0.0=py27_0 19 | - h5py=2.6.0=np111py27_0 20 | - hdf4=4.2.11=0 21 | - hdf5=1.8.15.1=2 22 | - ipython=4.2.0=py27_0 23 | - ipython_genutils=0.1.0=py27_0 24 | - jasper=1.900.1=1 25 | - jpeg=9b=0 26 | - kealib=1.4.5=0 27 | - libgdal=2.0.0=2 28 | - libgfortran=3.0=0 29 | - libnetcdf=4.3.3.1=3 30 | - libpng=1.6.17=0 31 | - libxml2=2.9.2=0 32 | - libxslt=1.1.28=0 33 | - lxml=3.6.0=py27_0 34 | - matplotlib=1.5.1=np111py27_0 35 | - mkl=11.3.1=0 36 | - netcdf4=1.2.2=np111py27_0 37 | - numexpr=2.5.2=np111py27_0 38 | - numpy=1.11.0=py27_0 39 | - openblas=0.2.14=4 40 | - openssl=1.0.2g=0 41 | - path.py=8.2.1=py27_0 42 | - pexpect=4.0.1=py27_0 43 | - pickleshare=0.5=py27_0 44 | - pip=8.1.1=py27_1 45 | - pixman=0.32.6=0 46 | #- proj.4=4.9.1=0 47 | #- proj4=4.9.1=0 48 | - ptyprocess=0.5=py27_0 49 | - pycairo=1.10.0=py27_0 50 | - pygrib=2.0.1=py27_1 51 | - pyhdf=0.9.0=np111py27_1 52 | - pykdtree=1.1.1=np111py27_0 53 | - pykml=0.1.0=py27_0 54 | - pyparsing=2.1.1=py27_0 55 | #- pyproj=1.9.4=py27_1 56 | - pyqt=4.11.4=py27_1 57 | - pyresample=1.1.6=py27_0 58 | - python=2.7.11=0 59 | - python-dateutil=2.5.2=py27_0 60 | - pytz=2016.3=py27_0 61 | - pywavelets=0.4.0=np111py27_0 62 | - pyyaml=3.11=py27_1 63 | - qt=4.8.7=1 64 | - readline=6.2=2 65 | - requests=2.9.1=py27_0 66 | - scipy=0.17.0=np111py27_2 67 | - setuptools=20.7.0=py27_0 68 | - simplegeneric=0.8.1=py27_0 69 | - sip=4.16.9=py27_0 70 | - six=1.10.0=py27_0 71 | - sqlite=3.9.2=0 72 | - tk=8.5.18=0 73 | - traitlets=4.2.1=py27_0 74 | - wheel=0.29.0=py27_0 75 | - x264=20131217=0 76 | - xerces-c=3.1.2=0 77 | - xz=5.2.2=0 78 | - yaml=0.1.6=0 79 | - zlib=1.2.8=0 80 | -------------------------------------------------------------------------------- /Ubuntu/giant_102016.yml: -------------------------------------------------------------------------------- 1 | name: giant 2 | channels: !!python/tuple 3 | - defaults 4 | - https://conda.anaconda.org/conda-forge 5 | dependencies: 6 | - anaconda-client=1.5.2=py27_0 7 | - backports=1.0=py27_0 8 | - cairo=1.12.18=6 9 | - clyent=1.2.2=py27_0 10 | - conda-forge::ecmwf_grib=1.16.0=0 11 | - conda-forge::jasper=1.900.1=1 12 | - conda-forge::pygrib=2.0.1=py27_2 13 | - conda-forge::pyhdf=0.9.0=np111py27_0 14 | - conda-forge::pykdtree=1.2.1=np111py27_0 15 | - conda-forge::pykml=0.1.0=py27_0 16 | - conda-forge::pyshp=1.2.10=py27_0 17 | - conda-forge::pywavelets=0.4.0=np111py27_0 18 | - conda-forge::x264=20131217=1 19 | - configobj=5.0.6=py27_0 20 | - curl=7.49.0=1 21 | - cycler=0.10.0=py27_0 22 | - cython=0.25.1=py27_0 23 | - dbus=1.10.10=0 24 | - decorator=4.0.10=py27_0 25 | - enum34=1.1.6=py27_0 26 | - expat=2.1.0=0 27 | - fontconfig=2.11.1=6 28 | - freetype=2.5.5=1 29 | - gdal=2.1.0=py27_0 30 | - geos=3.5.0=0 31 | - geotiff=1.4.1=0 32 | - get_terminal_size=1.0.0=py27_0 33 | - glib=2.43.0=1 34 | - gst-plugins-base=1.8.0=0 35 | - gstreamer=1.8.0=0 36 | - h5py=2.6.0=np111py27_2 37 | - harfbuzz=0.9.39=1 38 | - hdf4=4.2.12=0 39 | - hdf5=1.8.17=1 40 | - icu=54.1=0 41 | - ipython=5.1.0=py27_0 42 | - ipython_genutils=0.1.0=py27_0 43 | - jbig=2.1=0 44 | - jpeg=8d=2 45 | - kealib=1.4.6=0 46 | - libffi=3.2.1=0 47 | - libgcc=5.2.0=0 48 | - libgdal=2.1.0=0 49 | - libgfortran=3.0.0=1 50 | - libnetcdf=4.4.1=0 51 | - libpng=1.6.22=0 52 | - libtiff=4.0.6=2 53 | - libxcb=1.12=1 54 | - libxml2=2.9.2=0 55 | - libxslt=1.1.28=0 56 | - lxml=3.6.4=py27_0 57 | - matplotlib=1.5.3=np111py27_1 58 | - netcdf4=1.2.4=np111py27_0 59 | - nomkl=1.0=0 60 | - numexpr=2.6.1=np111py27_nomkl_0 61 | - numpy=1.11.2=py27_nomkl_0 62 | - openblas=0.2.14=4 63 | - openssl=1.0.2j=0 64 | - pango=1.39.0=1 65 | - path.py=8.2.1=py27_0 66 | - pathlib2=2.1.0=py27_0 67 | - pexpect=4.0.1=py27_0 68 | - pickleshare=0.7.4=py27_0 69 | - pillow=3.4.2=py27_0 70 | - pip=8.1.2=py27_0 71 | - pixman=0.32.6=0 72 | - proj.4=4.9.1=0 73 | - proj4=4.9.2=0 74 | - prompt_toolkit=1.0.8=py27_0 75 | - ptyprocess=0.5.1=py27_0 76 | - pycairo=1.10.0=py27_0 77 | - pygments=2.1.3=py27_0 78 | - pyparsing=2.1.4=py27_0 79 | - pyproj=1.9.5.1=py27_0 80 | - pyqt=5.6.0=py27_0 81 | - python=2.7.12=1 82 | - python-dateutil=2.5.3=py27_0 83 | - pytz=2016.7=py27_0 84 | - pyyaml=3.12=py27_0 85 | - qt=5.6.0=1 86 | - readline=6.2=2 87 | - requests=2.11.1=py27_0 88 | - scipy=0.18.1=np111py27_nomkl_0 89 | - setuptools=27.2.0=py27_0 90 | - simplegeneric=0.8.1=py27_1 91 | - sip=4.18=py27_0 92 | - six=1.10.0=py27_0 93 | - sqlite=3.13.0=0 94 | - tk=8.5.18=0 95 | - traitlets=4.3.1=py27_0 96 | - wcwidth=0.1.7=py27_0 97 | - wheel=0.29.0=py27_0 98 | - xerces-c=3.1.4=0 99 | - xz=5.2.2=0 100 | - yaml=0.1.6=0 101 | - zlib=1.2.8=3 102 | - pip: 103 | - backports.shutil-get-terminal-size==1.0.0 104 | - ipython-genutils==0.1.0 105 | - prompt-toolkit==1.0.8 106 | - pyresample==1.2.6 107 | prefix: /home/scott/miniconda3/envs/giant 108 | -------------------------------------------------------------------------------- /Ubuntu/isce.yml: -------------------------------------------------------------------------------- 1 | name: isce 2 | dependencies: 3 | - affine=1.1.0=py34_0 4 | - click=4.1=py34_0 5 | - cligj=0.2.0=py34_0 6 | - curl=7.43.0=1 7 | - cython=0.22.1=py34_0 8 | - fiona=1.6.0=np19py34_0 9 | - fontconfig=2.11.1=4 10 | - freetype=2.5.2=2 11 | - gdal=2.0.0=np19py34_0 12 | - h5py=2.5.0=np19py34_3 13 | - hdf5=1.8.15.1=1 14 | - ipython=3.2.1=py34_0 15 | - krb5=1.13.2=0 16 | - libgdal=2.0.0=0 17 | - libnetcdf=4.3.3.1=1 18 | - libpng=1.6.17=0 19 | - libxml2=2.9.2=0 20 | - libxslt=1.1.28=0 21 | - lxml=3.4.4=py34_0 22 | - matplotlib=1.4.3=np19py34_2 23 | - numpy=1.9.2=py34_0 24 | - openssl=1.0.1k=1 25 | - pip=7.1.0=py34_0 26 | - proj.4=4.9.1=0 27 | - pyparsing=2.0.3=py34_0 28 | - pyproj=1.9.4=np19py34_0 29 | - pyqt=4.11.3=py34_1 30 | - python=3.4.3=1 31 | - python-dateutil=2.4.2=py34_0 32 | - pytz=2015.4=py34_0 33 | - qt=4.8.6=3 34 | - rasterio=0.25.0=np19py34_0 35 | - readline=6.2=2 36 | - setuptools=18.0.1=py34_0 37 | - sip=4.16.5=py34_0 38 | - six=1.9.0=py34_0 39 | - snuggs=1.3.1=np19py34_0 40 | - sqlite=3.8.4.1=1 41 | - system=5.8=2 42 | - tk=8.5.18=0 43 | - xz=5.0.5=0 44 | - zlib=1.2.8=0 45 | - pip: 46 | - configobj==5.0.6 47 | - pykml==0.1.0 48 | - pyresample==1.1.3 49 | -------------------------------------------------------------------------------- /Ubuntu/isce_201609.yml: -------------------------------------------------------------------------------- 1 | name: isce_201609 2 | channels: 3 | - defaults 4 | dependencies: 5 | - affine=2.0.0=py35_0 6 | - cairo=1.12.18=6 7 | - click=6.6=py35_0 8 | - click-plugins=1.0.3=py35_0 9 | - cligj=0.4.0=py35_0 10 | - curl=7.49.0=1 11 | - cycler=0.10.0=py35_0 12 | - cython=0.24.1=py35_0 13 | - decorator=4.0.10=py35_0 14 | - fiona=1.7.0=py35_0 15 | - fontconfig=2.11.1=6 16 | - freetype=2.5.5=1 17 | - gdal=2.1.0=py35_0 18 | - geos=3.5.0=0 19 | - geotiff=1.4.1=0 20 | - glib=2.43.0=1 21 | - h5py=2.6.0=np111py35_2 22 | - harfbuzz=0.9.39=1 23 | - hdf4=4.2.12=0 24 | - hdf5=1.8.17=1 25 | - ipython=5.1.0=py35_0 26 | - ipython_genutils=0.1.0=py35_0 27 | - jbig=2.1=0 28 | - jpeg=8d=1 29 | - kealib=1.4.6=0 30 | - krb5=1.13.2=0 31 | - libffi=3.2.1=0 32 | - libgdal=2.1.0=0 33 | - libgfortran=3.0.0=1 34 | - libnetcdf=4.4.1=0 35 | - libpng=1.6.22=0 36 | - libtiff=4.0.6=2 37 | - libxml2=2.9.2=0 38 | - libxslt=1.1.28=0 39 | - lxml=3.6.4=py35_0 40 | - matplotlib=1.5.1=np111py35_0 41 | - munch=2.0.4=py35_0 42 | - nomkl=1.0=0 43 | - numpy=1.11.1=py35_nomkl_0 44 | - openblas=0.2.14=4 45 | - openssl=1.0.2h=1 46 | - pango=1.39.0=1 47 | - path.py=8.2.1=py35_0 48 | - pexpect=4.0.1=py35_0 49 | - pickleshare=0.7.3=py35_0 50 | - pip=8.1.2=py35_0 51 | - pixman=0.32.6=0 52 | - prompt_toolkit=1.0.3=py35_0 53 | - ptyprocess=0.5.1=py35_0 54 | - pygments=2.1.3=py35_0 55 | - pyparsing=2.1.4=py35_0 56 | - pyqt=4.11.4=py35_4 57 | - python=3.5.2=0 58 | - python-dateutil=2.5.3=py35_0 59 | - pytz=2016.6.1=py35_0 60 | - qt=4.8.7=4 61 | - rasterio=0.36.0=np111py35_0 62 | - readline=6.2=2 63 | - setuptools=26.1.1=py35_0 64 | - simplegeneric=0.8.1=py35_1 65 | - sip=4.18=py35_0 66 | - six=1.10.0=py35_0 67 | - snuggs=1.4.0=py35_0 68 | - sqlite=3.13.0=0 69 | - system=5.8=2 70 | - tk=8.5.18=0 71 | - traitlets=4.2.2=py35_0 72 | - wcwidth=0.1.7=py35_0 73 | - wheel=0.29.0=py35_0 74 | - xerces-c=3.1.4=0 75 | - xz=5.2.2=0 76 | - zlib=1.2.8=3 77 | - pip: 78 | - ipython-genutils==0.1.0 79 | - prompt-toolkit==1.0.3 80 | prefix: /home/scott/miniconda3/envs/isce_201609 81 | 82 | -------------------------------------------------------------------------------- /Ubuntu/scons.yml: -------------------------------------------------------------------------------- 1 | name: scons 2 | channels: 3 | - defaults 4 | dependencies: 5 | - openssl=1.0.2h=1 6 | - pip=8.1.2=py27_0 7 | - python=2.7.12=1 8 | - readline=6.2=2 9 | - scons=2.3.0=py27_0 10 | - setuptools=26.1.1=py27_0 11 | - sqlite=3.13.0=0 12 | - tk=8.5.18=0 13 | - wheel=0.29.0=py27_0 14 | - zlib=1.2.8=3 15 | prefix: /home/scott/miniconda3/envs/scons 16 | 17 | -------------------------------------------------------------------------------- /archives.md: -------------------------------------------------------------------------------- 1 | # Finding SAR data for processing 2 | 3 | ### Sentinel-1 (S1) 4 | https://scihub.copernicus.eu/dhus/#/home 5 | 6 | ### ERS1, ERS2, & Envisat 7 | https://earth.esa.int/web/guest/eoli 8 | 9 | on-demand processing and delivery of SLCs via EOLI software ("ESA's Link to Earth Observation") 10 | 11 | ### TerraSAR-X (TSX) 12 | https://centaurus.caf.dlr.de:8443 13 | 14 | ### CosmoSkyMed (CSK) 15 | http://catalog.e-geos.it 16 | 17 | ### ALOS 18 | https://auig2.jaxa.jp/ips/home?language=en_US 19 | 20 | ### Radarsat-1 & Radarsat-2 (RS1 & RS2) 21 | https://neodf.nrcan.gc.ca/neodf_cat3 22 | 23 | 24 | ## Mirror / Subset archives 25 | Unfortunately most SAR data is not freely available. Some subsets of data over particular regions are hosted on mirrored archives below. 26 | 27 | ### [ASF Vertex](https://vertex.daac.asf.alaska.edu) 28 | NASA DAAC hosting entire S1 archive, as well as some ALOS, ERS, Envisat, mostly over north america 29 | 30 | ### [GEO Supersites](http://eo-virtual-archive4.esa.int) 31 | Select regions around the world with open-access for select SAR systems 32 | 33 | 34 | 35 | --------------------------------------------------------------------------------