# Author: David Tschan # Institute: Paul-Scherrer Institute, Laboratory for Atmospheric Chemistry, Multiphase Chemistry Group, # Forschungsstrasse 111, 5232 Villigen PSI, Switzerland # Role: Master Student # License: n/a # Date: 2026 ### ----------------------------------------------------------------------------------------------------------------------------------- ### ### SUBMODULE DOCSTRING """The docstring for this submodule """ ### ----------------------------------------------------------------------------------------------------------------------------------- ### ### IMPORTS AND CONFIGURATIONS import numpy as np import pandas as pd from defs.Helper import DATFile from defs.SMPS import OFRAnalyser ### ----------------------------------------------------------------------------------------------------------------------------------- ### ### OzoneAnalyser.py class OzoneAnalyser(): """The docstring for this class Description: Bla bla bla Attributes ---------- word: str A word Methods ------- __init__: HelloWorld The class constructor """ def __init__(self, file: DATFile, on_time_interval): self.file = file self.on_time_interval = on_time_interval self.averaged_data = None def GetData(self): self.file.read() def AverageWithSMPS(self, smps_analyser: OFRAnalyser, cut_edges: int, subtract_baseline = ['yes', 5], normalise_flow = True): avg_ozone = [] mprr_data = [] vflo_data = [] local_smps_data = smps_analyser.data[(smps_analyser.data['Starting Time (-)'] >= smps_analyser.on_time_interval[0]) & (smps_analyser.data['Starting Time (-)'] <= smps_analyser.on_time_interval[1])].reset_index() baseline = None for index, data in local_smps_data.iterrows(): start = data['Starting Time (-)'] if index == 0: if subtract_baseline[0] == 'yes': baseline_start = start - pd.Timedelta(minutes = int(subtract_baseline[1])) baseline_ozone_data = self.file.data[(self.file.data['timestamp'] >= baseline_start) & (self.file.data['timestamp'] <= start)] baseline = np.average(baseline_ozone_data['ozone']) if index in list(range(cut_edges)): continue stop = start + pd.Timedelta(seconds = data['Sampling Time (s)']) mprr_data.append(data['Mass Production Rate (kg/s)']) vflo_data.append(data['Filter Flow (m^3/s)'] * 1E-3 / 60) local_ozone_data = self.file.data[(self.file.data['timestamp'] >= start) & (self.file.data['timestamp'] <= stop)] avg_ozone.append(np.average(local_ozone_data['ozone'])) for sub_index in list(range(cut_edges)): del avg_ozone[-(sub_index + 1)] del mprr_data[-(sub_index + 1)] del vflo_data[-(sub_index + 1)] out_mprr_data = np.array(mprr_data) if subtract_baseline[0] == 'yes': out_avg_ozone = np.array([baseline - value for value in avg_ozone]) elif subtract_baseline[0] != 'yes': out_avg_ozone = np.array([value for value in avg_ozone]) if normalise_flow == True: out_mprr_data = np.divide(out_mprr_data, np.array(vflo_data)) key = 'Density (kg m^-3)' else: key = 'Mass Production Rate (kg s^-1)' self.averaged_data = pd.DataFrame({'Ozone (ppb)': out_avg_ozone, key: out_mprr_data})