"""Instrument implementation for SNR noise model."""importmathimporttypingastimportnumpyasnpfromtaurex.binningimportBinDownType,Binnerfromtaurex.modelimportForwardModelfromtaurex.typesimportModelOutputTypefrom.instrumentimportInstrument
[docs]classSNRInstrument(Instrument):"""SNR noise model. Simple instrument model that, for a given wavelength-independant, signal-to-noise ratio, compute resulting noise from it. """def__init__(self,SNR:t.Optional[int]=10,binner:t.Optional[Binner]=None# noqa: N803):"""Initialize SNR instrument. Parameters ---------- SNR: float Signal-to-noise ratio binner: :class:`~taurex.binning.binner.Binner`, optional Optional resampler to generate a new spectral grid. """super().__init__()self._binner=binnerself._SNR=SNR
[docs]defmodel_noise(self,model:ForwardModel,model_res:t.Optional[ModelOutputType]=None,num_observations:t.Optional[int]=1,)->BinDownType:"""Attach noise to forward model. Parameters ---------- model: Forward model to pass. model_res: Result from :func:`~taurex.model.model.ForwardModel.model` num_observations: Number of observations to simulate """ifmodel_resisNone:model_res=model.model()binner=self._binnerifbinnerisNone:binner=model.defaultBinner()wngrid,spectrum,error,grid_width=self._binner.bin_model(model_res)signal=spectrum.max()-spectrum.min()noise=np.ones(spectrum.shape)*signal/self._SNRreturnwngrid,spectrum,noise/math.sqrt(num_observations),grid_width