File: plot_some_band.py

package info (click to toggle)
pyspectral 0.14.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 5,216 kB
  • sloc: python: 6,456; makefile: 123
file content (54 lines) | stat: -rw-r--r-- 1,821 bytes parent folder | download | duplicates (2)
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
"""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))