├── .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 | " Id | \n",
110 | " Avail. | \n",
111 | " Transfer | \n",
112 | " Abstract | \n",
113 | " Identifier | \n",
114 | " Item Type | \n",
115 | " Mission/Satellite | \n",
116 | " Sensor | \n",
117 | " Orbit | \n",
118 | " Start Date | \n",
119 | " ... | \n",
120 | " Max Effective Fire Area | \n",
121 | " Datatake ID | \n",
122 | " Quality | \n",
123 | " Product Type | \n",
124 | " Operations Type | \n",
125 | " Item Descriptor Identifier | \n",
126 | " THUMBNAIL DATA | \n",
127 | " FOOTPRINT | \n",
128 | " ACQUISITIONDESCRIPTOR | \n",
129 | " Display | \n",
130 | "
\n",
131 | " \n",
132 | " \n",
133 | " \n",
134 | " 0 | \n",
135 | " 1 | \n",
136 | " False | \n",
137 | " NaN | \n",
138 | " TSX-1.SAR.L1b-Stripmap | \n",
139 | " NaN | \n",
140 | " CatalogueScene | \n",
141 | " TSX-1 | \n",
142 | " SAR | \n",
143 | " NaN | \n",
144 | " 2008-05-18T23:07:41,308 | \n",
145 | " ... | \n",
146 | " NaN | \n",
147 | " NaN | \n",
148 | " AUTO_APPROVED | \n",
149 | " NaN | \n",
150 | " OPERATIONAL | \n",
151 | " PID_TSX-1.SAR.L1b-Stripmap:/dims_nz_pl_dfd_XXX... | \n",
152 | " NaN | \n",
153 | " 4.4838515518588 -73.957855 5.0227940285278 -74... | \n",
154 | " PID_TSX-1.SAR.L1b-Stripmap:/dims_nz_pl_dfd_XXX... | \n",
155 | " True | \n",
156 | "
\n",
157 | " \n",
158 | "
\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 |
--------------------------------------------------------------------------------