diff --git a/src/scgenerator/data/README.md b/src/scgenerator/data/README.md index 0e2630e..5993dc4 100644 --- a/src/scgenerator/data/README.md +++ b/src/scgenerator/data/README.md @@ -6,5 +6,5 @@ Van der Waals constants : https://en.wikipedia.org/wiki/Van_der_Waals_constants_ Chi3 : Wahlstrand 2012 # `raman_response.csv` -Raman impulse response recovered from measured gain spectrum. This is used then `raman_type` is set to `"measured"`. +Raman impulse response recovered from measured gain spectrum. This is used then `raman_type` is set to `"measured"` (Stolen1989). diff --git a/src/scgenerator/plotting.py b/src/scgenerator/plotting.py index 0207c49..6f13b7b 100644 --- a/src/scgenerator/plotting.py +++ b/src/scgenerator/plotting.py @@ -230,7 +230,7 @@ def create_zoom_axis( return inset -def corner_annotation(text, ax, position="tl", pts_x=8, pts_y=8, **text_kwargs): +def corner_annotation(text, ax, position="tl", pts_x=4, pts_y=4, **text_kwargs): """puts an annotatin in a corner of an ax Parameters ---------- diff --git a/src/scgenerator/spectra.py b/src/scgenerator/spectra.py index faefc12..85c56f5 100644 --- a/src/scgenerator/spectra.py +++ b/src/scgenerator/spectra.py @@ -202,12 +202,23 @@ class Spectrum(np.ndarray): def energy(self) -> np.ndarray: return np.trapz(self.time_int, x=self.t, axis=-1) - def mask_wl(self, pos: float, width: float) -> Spectrum: + def mask_wl(self, pos: float, width: float, preserve_sn: bool = False) -> Spectrum: """ Filters the spectrum with a bandpass centered at `pos` of FWHM `width`. The FWHM is taken on the intensity profile, not on the complex amplitude """ - return self * np.exp(-(((self.l - pos) / (pulse.fwhm_to_T0_fac["gaussian"] * width)) ** 2)) + band = np.exp(-(((self.l - pos) / (pulse.fwhm_to_T0_fac["gaussian"] * width)) ** 2)) + if preserve_sn: + dt = self.t[1] - self.t[0] + sn = np.fft.fft( + np.reshape( + [pulse.shot_noise(self.w, dt) for _ in range(np.prod(self.shape[:-1]))], + self.shape, + ) + ) + return self * band + np.sqrt(1 - band**2) * sn + else: + return self * band def measure(self) -> tuple[float, float, float]: """returns fwhm, peak power and energy"""