Source code for ppodd.pod.p_rio_psap

# -*- coding: utf-8 -*-

from ppodd.core import *

[docs]class rio_psap(cal_base): """ PSAP processing module :INPUTS: | AERACK_psap_flow | AERACK_psap_lin | AERACK_psap_log | AERACK_psap_transmission :OUTPUTS: | PSAP_LIN - Uncorrected absorption coefficient at 565nm, linear, from PSAP | PSAP_LOG - Uncorrected absorption coefficient at 565nm, log, from PSAP | PSAP_FLO - PSAP Flow | PSAP_TRA - SAP Transmittance :FLAGGING: | using flow and transmission thresholds | flag[(psap_transmission<0.5) | (psap_transmission>1.05)]=1 | ix=np.where(psap_flow < 1.0)[0] | #add two second buffer to the index | ix=np.unique(np.array([list(ix+i) for i in range(-2,3)])) | ix=ix[(ix >= 0) & (ix < n-1)] | flag[ix]=2 | flag[((psap_transmission<0.5) | (psap_transmission>1.05)) & (psap_flow<1.0)]=3 """ def __init__(self,dataset): self.input_names=['AERACK_psap_flow', 'AERACK_psap_lin', 'AERACK_psap_log', 'AERACK_psap_transmission'] self.outputs=[parameter('PSAP_LIN', units='m-1', frequency=1, number=648, long_name='Uncorrected absorption coefficient at 565nm, linear, from PSAP'), parameter('PSAP_LOG', units='1', frequency=1, number=649, long_name='Uncorrected absorption coefficient at 565nm, log, from PSAP'), parameter('PSAP_FLO', units='standard l min-1', frequency=1, long_name='PSAP Flow'), parameter('PSAP_TRA', units='percent', frequency=1, long_name='PSAP Transmittance')] self.version=1.00 cal_base.__init__(self,dataset) def process(self): match=self.dataset.matchtimes(self.input_names) psap_flow=self.dataset['AERACK_psap_flow'].ismatch(match) psap_flow*=0.5 psap_lin=self.dataset['AERACK_psap_lin'].ismatch(match) psap_lin=psap_lin*0.5E-5 psap_log=self.dataset['AERACK_psap_log'].ismatch(match) psap_log=10.0**((psap_log/2.0)-7.0) psap_transmission=self.dataset['AERACK_psap_transmission'].ismatch(match) psap_transmission*=0.125 n=psap_flow.size # create default flag array set to 0 flag=np.array([0]*n, dtype=np.int8) # Flagging using flow and transmission thresholds flag[(psap_transmission<0.5) | (psap_transmission>1.05)]=1 ix=np.where(psap_flow < 1.0)[0] # add two second buffer to the index ix=np.unique(np.array([list(ix+i) for i in range(-2,3)])) ix=ix[(ix >= 0) & (ix < n-1)] flag[ix]=2 flag[((psap_transmission<0.5) | (psap_transmission>1.05)) & (psap_flow<1.0)]=3 self.outputs[0].data=flagged_data(psap_lin, psap_lin.times, flag) self.outputs[1].data=flagged_data(psap_log, psap_log.times, flag) self.outputs[2].data=flagged_data(psap_flow, psap_flow.times, flag) self.outputs[3].data=flagged_data(psap_transmission, psap_transmission.times, flag) return