2
$\begingroup$

I'm trying to understand the results of the ExoMars Trace Gas Orbiter vs the Mars Express in terms of their abilities to find methane on the surface of Mars. The solution that I'm coming to is that it might be a result of the Sun's spectra masking what is actually there. Is there a place that has a complete infrared spectra of the Sun, focusing in on the region around 3-4 um? Specifically, I'm interested in wave numbers ($cm^{-1}$) 3000-3100 or so, something with a resolution of 1 wave number. Some things that would help would be anything along the following lines, so long as they apply to the true spectra, and not the one as seen from Earth.

  1. A generally accepted solar spectra (NASA, ESA, NIST, or some other body)
  2. A time varying solar spectra.

Thanks!

$\endgroup$
3

1 Answer 1

1
$\begingroup$

Thanks to @PearsonArtPhoto's comment data with 1 cm^-1 wavenumber resolution is available in the link labeled MODTRAN data here: https://www.nrel.gov/grid/solar-resource/spectra.html

Here's a quickie plot and script for the downloaded ASCII data.

There are six columns of spectral intensity data (Watts/m^2/nm) with labels 'MCebKur', 'MChKur', 'MNewKur', 'MthKur', 'MoldKur', 'MODWherli_WMO'. The plot shows them to be very similar in the thermal IR (not surprising) and differ substantially in the visible and UV where differences in the spectrometers will show up in the region rich with spectral emission and absorption lines. This is illustrated in the second plot, showing a randomly chosen zoom in on a few nanometers of visible light, and the Fraunhofer "A" line.

MODTRAN data

MODTRAN data

import numpy as np
import matplotlib.pyplot as plt

fname = 'AllMODEtr MODTRAN.txt' # MODTRAN data https://www.nrel.gov/grid/solar-resource/spectra.html

with open (fname, 'r') as infile:
    lines = infile.readlines()

lines = [line.split() for line in lines[19:-1]] # skip a few lines with missing data

print('line lengths: ', set([len(line) for line in lines]))

data = [[float(x) for x in line] for line in lines]

data = np.array(zip(*data))

print('data.shape: ', data.shape)

# data[0]: wavenumber (cm^-1)
# data[1]: wavelength (nm)
# data[2:8] MCebKur, MChKur, MNewKur, MthKur, MoldKur, MODWherli_WMO        

labels = 'MCebKur', 'MChKur', 'MNewKur', 'MthKur', 'MoldKur', 'MODWherli_WMO'
wavelength = data[1]

if True:
    plt.figure()

    plt.subplot(2, 1, 1)

    for (thing, label) in zip(data[2:], labels):
        plt.plot(wavelength, thing)
    plt.xlabel('wavelength (nm)', fontsize=16)
    plt.ylabel('Watts/m^2/nm', fontsize=16)
    plt.yscale('log')
    plt.xscale('log')
    plt.xlim(190, 2E+05)

    plt.subplot(2, 1, 2)

    n700 = np.argmax(wavelength > 700)
    for (thing, label) in zip(data[2:], labels):
        plt.plot(wavelength[:n700], thing[:n700])
    plt.xlabel('wavelength (nm)', fontsize=16)
    plt.ylabel('Watts/m^2/nm', fontsize=16)
    plt.yscale('log')
    # plt.xscale('log')
    plt.xlim(190, wavelength[n700])

    plt.show()


if True:
    plt.figure()

    plt.subplot(2, 1, 1)

    n1 = np.argmax(wavelength > 516.5)
    n2 = np.argmax(wavelength > 519.5)
    for (thing, label) in zip(data[2:], labels):
        plt.plot(wavelength[n1:n2], thing[n1:n2], label=label)
    plt.xlabel('wavelength (nm)', fontsize=16)
    plt.ylabel('Watts/m^2/nm', fontsize=16)
    # plt.yscale('log')
    # plt.xscale('log')
    plt.xlim(wavelength[n1], wavelength[n2])
    # plt.legend()

    plt.subplot(2, 1, 2)

    n1 = np.argmax(wavelength > 757)
    n2 = np.argmax(wavelength > 760)
    for (thing, label) in zip(data[2:], labels):
        plt.plot(wavelength[n1:n2], thing[n1:n2], label=label)
    plt.xlabel('wavelength (nm)', fontsize=16)
    plt.ylabel('Watts/m^2/nm', fontsize=16)
    # plt.yscale('log')
    # plt.xscale('log')
    plt.xlim(wavelength[n1], wavelength[n2])
    plt.title('Fraunhoffer "A" line')
    # plt.legend()

    plt.show()
$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .