Initial commit
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python
|
||||
"""Grab one spectrum from the first available Ocean Optics spectrometer.
|
||||
|
||||
Prints the peak and, with --response, applies a relative-response calibration.
|
||||
|
||||
Usage: python grab_spectrum.py [integration_us] [out.csv] [--response R.csv --dark D.csv]
|
||||
"""
|
||||
import argparse
|
||||
|
||||
import numpy as np
|
||||
from seabreeze.spectrometers import Spectrometer
|
||||
|
||||
from response import add_calibration_args, apply_response, dark_at, load_csv
|
||||
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("integration_us", nargs="?", type=int, default=50000,
|
||||
help="integration time in microseconds (default: 50000)")
|
||||
parser.add_argument("outfile", nargs="?", default=None,
|
||||
help="optional CSV to write (wavelength, value)")
|
||||
add_calibration_args(parser)
|
||||
args = parser.parse_args()
|
||||
|
||||
cal = load_csv(args.response) if args.response else None
|
||||
dark = dark_at(args.dark, args.integration_us)
|
||||
|
||||
spec = Spectrometer.from_first_available()
|
||||
spec.integration_time_micros(args.integration_us)
|
||||
wl = spec.wavelengths()
|
||||
y = spec.intensities(correct_nonlinearity=True)
|
||||
print(f"{spec.model} serial={spec.serial_number} pixels={spec.pixels}")
|
||||
|
||||
if cal is not None:
|
||||
y = apply_response(wl, y, cal, dark)
|
||||
unit = "relative_irradiance"
|
||||
print(f"applied response {args.response}" + (f" + dark {args.dark}" if dark else ""))
|
||||
else:
|
||||
unit = "counts"
|
||||
|
||||
pk = int(np.nanargmax(y))
|
||||
print(f"integration: {args.integration_us} us")
|
||||
print(f"range: {wl[0]:.2f} - {wl[-1]:.2f} nm")
|
||||
print(f"peak: {wl[pk]:.2f} nm {unit}={y[pk]:.4g}")
|
||||
|
||||
if args.outfile:
|
||||
np.savetxt(args.outfile, np.column_stack([wl, y]),
|
||||
delimiter=",", header=f"wavelength_nm,{unit}", comments="")
|
||||
print(f"wrote {args.outfile}")
|
||||
|
||||
spec.close()
|
||||
Reference in New Issue
Block a user