-
Notifications
You must be signed in to change notification settings - Fork 39
/
plot_some_band.py
75 lines (55 loc) · 2.54 KB
/
plot_some_band.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2017, 2018 Adam.Dybbroe
# Author(s):
# Adam.Dybbroe <[email protected]>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""Plot relative spectral responses for a list of sensors."""
import argparse
import matplotlib.pyplot as plt
import numpy as np
from pyspectral.rsr_reader import RelativeSpectralResponse
from pyspectral.utils import get_bandname_from_wavelength
platforms = ['Himawari-8', 'GOES-16', 'Meteosat-10',
'EOS-Aqua', 'Sentinel-3A', 'Sentinel-3A',
'Suomi-NPP', 'NOAA-20']
sensors = ['ahi', 'abi', 'seviri', 'modis', 'olci', 'slstr', 'viirs', 'viirs']
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description='Plot relative spectral responses for a list of sensors')
parser.add_argument("wavelength", metavar='w',
help="The wavelength in micrometers",
type=float)
parser.add_argument("-t", "--minimum_response",
help=("Minimum response: Any response lower than " +
"this will be ignored when plotting"),
default=0.01, type=float)
args = parser.parse_args()
wavelength = args.wavelength
minimum_response = args.minimum_response
for platform, sensor in zip(platforms, sensors):
rsr = RelativeSpectralResponse(platform, sensor)
band = get_bandname_from_wavelength(sensor, wavelength, rsr.rsr)
if not band:
continue
detectors = rsr.rsr[band].keys()
# for det in detectors:
det = detectors[0]
resp = rsr.rsr[band][det]['response']
wvl = rsr.rsr[band][det]['wavelength']
resp = np.ma.masked_less_equal(resp, minimum_response)
wvl = np.ma.masked_array(wvl, resp.mask)
resp.compressed()
wvl.compressed()
plt.plot(wvl, resp, label=sensor)
plt.legend()
plt.savefig('rsr_%s.png' % str(wavelength))