from __future__ import absolute_import import collections import numpy as np class FTS(object): """Class to describe the Fourier Transform Spectrometer. """ def __init__(self, parameters): self.parameters = parameters print parameters['substages']['FTSpectrograph'].keys() # read params from FTSpectrograph sheet ftsparm = parameters['substages']['FTSpectrograph'] self.result = collections.OrderedDict() # slightly awkward getting values as they are keyed by # the row number in the parent spreadsheet row = ftsparm['wn min [cm-1]'].keys()[0] self.result['wnmin'] = wnmin = ftsparm['wn min [cm-1]'][row] self.result['wnmax'] = wnmax = ftsparm['wn max [cm-1]'][row] self.result['specres'] = specres = ftsparm['Spectral Res'][row] # read params from FTSMechanical sheet ftsparm = parameters['substages']['FTSMechanical'] row = ftsparm['V drive [cm/s]'].keys()[0] self.result['vdrive'] = ftsparm['V drive [cm/s]'][row] # derived parameters self.result['delta_wn'] = delta_wn = wnmin / specres self.result['delta_opd'] = 1.0 / (2.0 * wnmax * 100.0) self.result['ftsnsample'] = nsample = np.ceil(wnmax / delta_wn) self.result['opd_max'] = 1.0 / (2.0 * delta_wn) # spectral points sampled by FTS (wn=wavenumber[cm-1] # lambda=wavelength[m]) i = np.arange(int(nsample)) fts_wn = wnmax * i / float(nsample-1) # crop the spectrum below wnmin. This does not seem to be done # in the matlab version. fts_wn = fts_wn[fts_wn > wnmin] fts_lambda = 1.0 / (fts_wn * 100.0) self.result['fts_wn'] = fts_wn self.result['fts_lambda'] = fts_lambda print 'more to add in FTSDrive' def run(self): print 'FTS.run' return self.result def __repr__(self): return ''' FTS: wnmin : {wnmin} wnmax : {wnmax} specres : {specres} delta wn : {delta_wn} delta opd: {delta_opd} nsample : {nsample} max opd : {opd_max} '''.format( wnmin=self.result['wnmin'], wnmax=self.result['wnmax'], specres=self.result['specres'], delta_wn=self.result['delta_wn'], delta_opd=self.result['delta_opd'], nsample=self.result['nsample'], opd_max=self.result['opd_max'])