diff --git a/.vscode/settings.json b/.vscode/settings.json index 451c27f..cd19d6f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -45,7 +45,7 @@ "python.envFile": "${workspaceFolder}/.env", "python.terminal.useEnvFile": true, "editor.quickSuggestions": { - "other": "off", + "other": "on", "comments": "off", "strings": "off" }, diff --git a/README.md b/README.md index 2135972..f345f5e 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,30 @@ Hello! This is the read-me file with information for the code project. Please ta This code project is structured as follows: ``` Master_Thesis -+-- .git -+-- .vscode -+-- defs - +-- __init__.py - +-- defs.py -+-- vis - +-- __init__.py - +-- defs.py -+-- .env -+-- .gitignore -+-- .enviornment.yml -+-- main.py -+-- README.md +├───.git +| └───... +├───.vscode +| ├───settings.json +| └───launch.json +├───defs +| ├───__init__.py +| ├───computing.py +| └───visualising.py +├───docs +| └───defs +| ├───computing.html +| ├───index.html +| └───visualising.html +├───run +| ├───__init__.py +| ├───runfile_01.py +| └───... +├───.env +├───.gitignore +├───environment.yml +├───main.py +└───README.md + ``` You are currently reading `README.md`, where the structure of this oroject is explained. You're in the right spot to start, then! diff --git a/defs/computing.py b/defs/computing.py index 3b71fad..6016f69 100644 --- a/defs/computing.py +++ b/defs/computing.py @@ -3,7 +3,6 @@ import numpy as np import pandas as pd -import csv import math import matplotlib.pyplot as plt @@ -14,10 +13,13 @@ class OFRSample: """Object to represent a single sample from the OFR - Description: Bla + Description + ----------- + Bla bla bla Attributes ---------- + number: int The sample number sourcefile: str @@ -36,110 +38,151 @@ class OFRSample: The time interval (s) between two measured data points of the raw count density SOA_density: float The density (kg/m3) of the SOA produced in the OFR - - Methods - ------- - __init__(number, sourcefile, headlines, density, lower_bound, upper_bound, scan_up, scan_down, delta_time) -> OFRSample: - The constructor of the Object """ - def __init__(self, number, sourcefile, headlines, density, lower_bound, upper_bound, scan_up, scan_down, delta_time = 0.1): - - """Constructor of a OFRSample object - - Description: - - Parameters - ---------- - number: int - The sample number - - Returns - ------- - None: None - Does not have a return value - """ + def __init__(self, source_file, sample_number, data_separator): # Sample information - self.number = number # sample number, i.e. 33 - self.sourcefile = sourcefile # where the data is stored, "C:/Users/tschan_d/..." - self.headlines = headlines # Number of lines before raw data is reached, usually 238 - self.lower_bound = lower_bound # Lower Diameter (nm) where CPC works - self.upper_bound = upper_bound # Upper Diameter (nm) where CPC works - self.scan_up = scan_up # Time to scan up the voltage range in DMA - self.scan_down = scan_down # Time to ramp the voltage back down in DMA - self.delta_time = delta_time # Measuring interval to get raw count density; (s) - self.SOA_density = density # Expected density of SOA (kg/m3) + self.source_file = source_file # where the data is stored, i.e. "C:/Users/tschan_d/..." + self.sample_number = sample_number # sample number, i.e. 33 + self.__data_separator = data_separator - # Sample distributions - self.diameters = None # Diameters (nm) - self.count_density = None # Count Density (#/(m3*m*s)) - self.surface_density = None # Surface Density (m2/(m3*m*s)) - self.volume_density = None # Volume Density (m3/(m3*m*s)) - self.mass_density = None # Mass Density (kg/(m3*m*s)) + self.scan_up_time = None # Time to scan up the voltage range in DMA, in (s) + self.scan_down_time = None # Time to scan down the voltage range in DMA, in(s) - self.total_count = None # Total Count (#/(m3*s)) - self.total_surface = None # Total Surface (m2/(m3*s)) - self.total_volume = None # Total Volume (m3/(m3*s)) - self.total_mass = None # Total Mass (kg/(m3*s)) + self.sample_time = None - self.get_data() + self.lower_diameter_bound = None # Lower Diameter bound of CPC, in (nm) + self.upper_diameter_bound = None # Upper Diameter bound of CPC, in (nm) + self.aerosol_flow = None # Aerosol flow, in (m3/s) + self.SOA_density = None # Expected density of SOA, in (kg/m3) - def get_data(self): + # Sample Distributions + self.diameters = None # Bin Midpoint Diameter, in (m) + self.count_density = None # Count Density dN/dlnD, in (#/m3) + self.surface_density = None # Surface Density dS/dlnD, in (m2/(m3*m)) + self.volume_density = None # Volume Density dV/dlnD, in (m3/(m3*m)) + self.mass_density = None # Mass Density dm/dlnD, in (kg/(m3*m)) - columns = ['Diameter #' + str(self.number), 'Counts #' + str(self.number)] - sample_data = pd.read_csv(filepath_or_buffer=self.sourcefile, header=self.headlines, usecols=columns, index_col=False, - skipfooter=1, engine='python').to_numpy() + # Distributed integrated along dlnD + self.sample_count_density = None # Total Count Density (#/(m3)) + self.sample_surface_density = None # Total Surface Density (m2/(m3)) + self.sample_volume_density = None # Total Volume Density (m3/(m3)) + self.sample_mass_density = None # Total Mass Density (kg/(m3)) + + # Distributions integrated over sample + self.sample_count = None # Total Count (#/(m3)) + self.sample_surface = None # Total Surface (m2/(m3)) + self.sample_volume = None # Total Volume (m3/(m3)) + self.sample_mass = None # Total Mass (kg/(m3)) + + self.__get_data() + self.__get_distributions() + self.__integrate_over_distributions() + self.__integrate_over_sample() + + def __get_data(self): + + footer_flag = False + footer_start_index = 0 + data_flag = False + data_lines = [] + + midpoints = [] + counts = [] + + with open(self.source_file, 'r') as file: + for i, line in enumerate(file.readlines()): + if i == 20: + data_flag = True + continue + if data_flag == True: + data_lines.append(line) + if line.split(self.__data_separator)[0] == 'Scan Up Time(s)': + data_flag = False + footer_flag = True + footer_start_index = i + self.scan_up_time = float(line.split(self.__data_separator)[1]) + continue + if footer_flag == False: + continue + else: + if i == footer_start_index + 1: + self.scan_down_time = float(line.split(self.__data_separator)[1]) + continue + elif i == footer_start_index + 6: + self.aerosol_flow = float(line.split(self.__data_separator)[1]) / 60000 + continue + elif i == footer_start_index + 11: + self.lower_diameter_bound = float(line.split(self.__data_separator)[1]) + continue + elif i == footer_start_index + 12: + self.upper_diameter_bound = float(line.split(self.__data_separator)[1]) + continue + elif i == footer_start_index + 13: + self.SOA_density = float(line.split(self.__data_separator)[1]) * 1E3 + continue - filter_array = np.where((sample_data[:, 0] >= self.lower_bound) & (sample_data[:, 0] <= self.upper_bound), True, False) + self.sample_time = self.scan_up_time + self.scan_down_time + data_lines.pop(-1) - # Particle Diameter: Raw data in (nm) -> Output data in (m): 1 nm = 1E-9 m - self.diameters = sample_data[filter_array, 0] * 1E-9 + for line in data_lines: + items = line.split(self.__data_separator) + local_diameter_midpoint = float(items[0]) + if self.lower_diameter_bound <= local_diameter_midpoint and local_diameter_midpoint <= self.upper_diameter_bound: + midpoints.append(local_diameter_midpoint) + items.pop(0) + counts.append(float(items[(self.sample_number - 1) * 2])) + else: + continue + + # Input data from file is in (nm). Therefore, multiply with 1E-9 to get (m) + self.diameters = np.array(midpoints).reshape([-1, 1]) * 1E-9 - # Particle Count Density: Raw data in (#/(cm3*nm*0.1s)) -> Output data in (#/(m3*m*s)): 1/(cm3*nm*s) = 1E16/(m3*m*s) - self.count_density = sample_data[filter_array, 1] * 1E16 + # Input data from file is in (#/cm3). Therefore, multiply with 1E6 to get (#/m3) + self.count_density = np.array(counts).reshape([-1, 1]) * 1E6 - self.surface_density = np.multiply(math.pi * self.diameters ** 2, self.count_density) - self.volume_density = np.multiply((math.pi / 6) * self.diameters ** 3, self.count_density) - self.mass_density = np.multiply(self.SOA_density, self.volume_density) + def __get_distributions(self): + + self.surface_density = (math.pi * self.diameters ** 2) * self.count_density + self.volume_density = (math.pi * self.diameters ** 3) * self.count_density + self.mass_density = self.SOA_density * self.volume_density - self.total_count = self.__integrator(integrand = self.count_density) - self.total_surface = self.__integrator(integrand = self.surface_density) - self.total_volume = self.__integrator(integrand = self.volume_density) - self.total_mass = self.total_volume * self.SOA_density + def __integrate_over_distributions(self): + + self.sample_count_density = self.__integrator(integrand=np.divide(self.count_density, self.diameters)) + self.sample_surface_density = self.__integrator(integrand=np.divide(self.surface_density, self.diameters)) + self.sample_volume_density = self.__integrator(integrand=np.divide(self.volume_density, self.diameters)) + self.sample_mass_density = self.__integrator(integrand=np.divide(self.mass_density, self.diameters)) def __integrator(self, integrand: np.float64) -> np.float64: - return np.trapezoid(y = integrand, x = self.diameters) + return np.trapezoid(y = integrand.flatten(), x = self.diameters.flatten()) + + def __integrate_over_sample(self): + + self.sample_count = self.sample_count_density * self.sample_time * self.aerosol_flow + self.sample_surface = self.sample_surface_density * self.sample_time * self.aerosol_flow + self.sample_volume = self.sample_volume_density * self.sample_time * self.aerosol_flow + self.sample_mass = self.sample_mass_density * self.sample_time * self.aerosol_flow + class OFRAnalyser: - def __init__(self, sourcefile, headlines = 238, density=1.2, lower_bound = 0, upper_bound = 1896, scan_up=160, scan_down=20, - flow_rate=5) -> None: + def __init__(self, source_file, data_separator = ',') -> None: - # where to take data from: - self.sourcefile = sourcefile - # how many lines to skip until the raw counts data section is reached: - self.headlines = headlines - # assumed SOA density - self.density = density - self.lower_bound = lower_bound - self.upper_bound = upper_bound - self.scan_up = scan_up - self.scan_down = scan_down - self.flow_rate = flow_rate + self.source_file = source_file + self.__data_separator = data_separator - with open(self.sourcefile) as file: - file_reader = csv.reader(file) - for index, row in enumerate(file_reader): - if index != self.headlines: - continue + with open(self.source_file, 'r') as file: + for i, line in enumerate(file.readlines()): + if i == 17: + items = line.split(',') + max_sample_number = int(len(items) / 2) else: - head_row = row + continue - self.max_samples = int((len(head_row) - 1) / 2) - - # total mass in mg + self.max_samples = max_sample_number self.total_counts = None self.total_surface = None self.total_volume = None @@ -162,16 +205,14 @@ class OFRAnalyser: masses = [] for samplenumber in samples: - sample = OFRSample(number=samplenumber, sourcefile=self.sourcefile, headlines=self.headlines, density=self.density, - lower_bound = self.lower_bound, upper_bound = self.upper_bound, scan_up = self.scan_up, - scan_down = self.scan_down) + sample = OFRSample(source_file=self.source_file, sample_number = samplenumber, data_separator = self.__data_separator) + + counts.append(sample.sample_count) + surfaces.append(sample.sample_surface) + volumes.append(sample.sample_volume) + masses.append(sample.sample_mass) - counts.append(sample.total_count) - surfaces.append(sample.total_surface) - volumes.append(sample.total_volume) - masses.append(sample.total_mass) - - self.total_count = sum(counts) + self.total_counts = sum(counts) self.total_surface = sum(surfaces) self.total_volume = sum(volumes) self.total_mass = sum(masses) diff --git a/doc/defs/computing.html b/doc/defs/computing.html new file mode 100644 index 0000000..3fdcc49 --- /dev/null +++ b/doc/defs/computing.html @@ -0,0 +1,338 @@ + + + + + + +defs.computing API documentation + + + + + + + + + + + + + +
+
+
+

Module defs.computing

+
+
+
+
+
+
+
+
+
+
+

Classes

+
+
+class OFRAnalyser +(sourcefile, headlines=238, density=1.2, lower_bound=0, upper_bound=1896, scan_up=160, scan_down=20, flow_rate=5) +
+
+
+
+ +Expand source code + +
class OFRAnalyser:
+
+    def __init__(self, sourcefile, headlines = 238, density=1.2, lower_bound = 0, upper_bound = 1896, scan_up=160, scan_down=20,
+                 flow_rate=5) -> None:
+        
+        # where to take data from:
+        self.sourcefile = sourcefile
+        # how many lines to skip until the raw counts data section is reached:
+        self.headlines = headlines
+        # assumed SOA density
+        self.density = density
+        self.lower_bound = lower_bound
+        self.upper_bound = upper_bound
+        self.scan_up = scan_up
+        self.scan_down = scan_down
+        self.filter_flow_rate = flow_rate   # Flow rate of the OFR flow through the filer in (m3/s)
+
+        with open(self.sourcefile) as file:
+            file_reader = csv.reader(file)
+            for index, row in enumerate(file_reader):
+                if index != self.headlines:
+                    continue
+                else:
+                    head_row = row
+
+        self.max_samples = int((len(head_row) - 1) / 2)
+
+        # total mass in mg
+        self.total_counts = None
+        self.total_surface = None
+        self.total_volume = None
+        self.total_mass = None
+
+    def __sample_number_list_check(self, sample_number_list) -> None:
+
+        last_sample = sample_number_list[-1]
+
+        if last_sample > self.max_samples:
+            raise IndexError("The last sample(s) are out of range of the number of recorded samples")
+
+    def AggregateSamples(self, samples = [1]) -> None:
+
+        self.__sample_number_list_check(samples)
+
+        counts = []
+        surfaces = []
+        volumes = []
+        masses = []
+
+        for samplenumber in samples:
+            sample = OFRSample(number=samplenumber, sourcefile=self.sourcefile, headlines=self.headlines, density=self.density,
+                                     lower_bound = self.lower_bound, upper_bound = self.upper_bound, scan_up = self.scan_up,
+                                     scan_down = self.scan_down)
+
+            counts.append(sample.total_count)
+            surfaces.append(sample.total_surface)
+            volumes.append(sample.total_volume)
+            masses.append(sample.total_mass)
+
+        self.total_count = sum(counts)
+        self.total_surface = sum(surfaces)
+        self.total_volume = sum(volumes)
+        self.total_mass = sum(masses)
+
+

Methods

+
+
+def AggregateSamples(self, samples=[1]) ‑> None +
+
+
+
+
+
+
+class OFRSample +(number, sourcefile, headlines, density, lower_bound, upper_bound, scan_up, scan_down, delta_time=0.1) +
+
+

Object to represent a single sample from the OFR

+

Description

+

Bla bla bla

+

Attributes

+
+
number : int
+
The sample number
+
sourcefile : str
+
The path to the data file
+
headlines : int
+
The number of lines in the data file until raw data is reached
+
lower_bound : float
+
The lower bound diameter (nm) of the SMPS
+
upper_bound : float
+
The upper bound diameter (nm) of the SMPS
+
scan_up : float
+
The time (s) to ramp up voltage in SMPS
+
scan_down : float
+
The time (s) to ramp voltage back down in SMPS
+
delta_time : float
+
The time interval (s) between two measured data points of the raw count density
+
SOA_density : float
+
The density (kg/m3) of the SOA produced in the OFR
+
+
+ +Expand source code + +
class OFRSample:
+
+    """Object to represent a single sample from the OFR
+
+    Description
+    -----------
+    Bla bla bla
+
+    Attributes
+    ----------
+
+    number: int
+        The sample number
+    sourcefile: str
+        The path to the data file
+    headlines: int
+        The number of lines in the data file until raw data is reached
+    lower_bound: float
+        The lower bound diameter (nm) of the SMPS
+    upper_bound: float
+        The upper bound diameter (nm) of the SMPS
+    scan_up: float
+        The time (s) to ramp up voltage in SMPS
+    scan_down: float
+        The time (s) to ramp voltage back down in SMPS
+    delta_time: float
+        The time interval (s) between two measured data points of the raw count density
+    SOA_density: float
+        The density (kg/m3) of the SOA produced in the OFR
+    """
+
+    def __init__(self, number, sourcefile, headlines, density, lower_bound, upper_bound, scan_up, scan_down, delta_time = 0.1):
+
+        # Sample information
+        self.number = number                # sample number, i.e. 33
+        self.sourcefile = sourcefile        # where the data is stored, i.e. "C:/Users/tschan_d/..."
+        self.headlines = headlines          # Number of lines before raw data is reached, usually 238
+        self.lower_bound = lower_bound      # Lower Diameter (nm) where CPC works
+        self.upper_bound = upper_bound      # Upper Diameter (nm) where CPC works
+        self.scan_up = scan_up              # Time to scan up the voltage range in DMA, in (s)
+        self.scan_down = scan_down          # Time to scan down the voltage range in DMA, in(s)
+        self.delta_time = delta_time        # Measuring interval to get raw count density, in (s)
+        self.SOA_density = density          # Expected density of SOA (kg/m3)
+
+        # Sample distributions
+        self.diameters = None               # Diameters (nm)
+        self.count_density = None           # Count Density (#*s/(m3*m))
+        self.surface_density = None         # Surface Density (m2*s/(m3*m))
+        self.volume_density = None          # Volume Density (m3*s/(m3*m))
+        self.mass_density = None            # Mass Density (kg*s/(m3*m))
+
+        self.total_count = None             # Total Count (#*s/(m3))
+        self.total_surface = None           # Total Surface (m2*s/(m3))
+        self.total_volume = None            # Total Volume (m3*s/(m3))
+        self.total_mass = None              # Total Mass (kg*s/(m3))
+
+        self.get_data()
+
+    def get_data(self):
+
+        r"""Method to load and process data from a file.
+        
+        Detailed Description
+        --------------------
+        Load the raw data from a `.csv` file into the object instance. Raw data includes raw counts $c_{r}$ 
+        ($\text{particles}/(cm^{3}nm$) and diameters $D_{r}$ ($nm$). Each data point in the raw counts, $c_{r,i}$, represents the 
+        number of particles observed between $D_{r,i-1}$ and $D_{r,i}$ within the data point aqcuisition time of $\Delta t_{A}$, such that 
+        $c_{r,i}$ represents the time-integrated quantity of the particle flux within $D_{r,i-1}\leq D\leq D_{r,i}$. The raw data is 
+        filtered to include only data within $D_{L}\leq D_{r}\leq D_{u}$. Then, $c_{r}$ and $D_{r}$ are transformed to SI-Units, represented 
+        by $c=1E15c_{0}$ ($\text{particles}s/(m^{3}m$) and $D=1E-9D_{r}$ ($m$), respectively. The final count data is then obtained by 
+        integrating $c$ over the sampling time $\Delta t_{s}=t_{su}+t_{sd}$, where $t_{su}$ and $t_{sd}$ represent DMA voltage scan-up and
+        scan-down times, respectively.
+
+        Parameters
+        ----------
+        a: None
+            This function has no paramters
+
+        Returns
+        -------
+        n: None
+            This function has no return value
+        """
+
+        # The columns to use when reading the data file
+        columns = ['Diameter #' + str(self.number), 'Counts #' + str(self.number)]
+        # Reading the data file
+        sample_data = pd.read_csv(filepath_or_buffer=self.sourcefile, header=self.headlines, usecols=columns, index_col=False,
+                                  skipfooter=1, engine='python').to_numpy()
+        
+        # Filtering the data to include only lower_bound <= diameter <= upper_bound
+        filter_array = np.where((sample_data[:, 0] >= self.lower_bound) & (sample_data[:, 0] <= self.upper_bound), True, False)
+
+        # Particle Diameter: Raw data in (nm) -> Output data in (m): 1 nm = 1E-9 m
+        self.diameters = sample_data[filter_array, 0] * 1E-9
+
+        # Particle Count Density: Raw data in (#/(cm3*nm)) -> Output data in (#/(m3*m)): 1/(cm3*nm) = 1E15/(m3*m*s). This is the inte-
+        # grated value of the density flux over Δt = time_delta. Furthermore, the count density is integrated over the sample scanning time 
+        # of Δt = self.scan_up + self.scan_down. Then the time-integrated particle count density has units (#*s/(m3*m))
+        self.count_density = sample_data[filter_array, 1] * 1E15 * (self.scan_up + self.scan_down)      # (#*s/(m3*m))
+
+        # Obtaining the corresponding surface-, volume- and mass densities
+        self.surface_density = np.multiply(math.pi * self.diameters ** 2, self.count_density)           # (m2*s/(m3*m))
+        self.volume_density = np.multiply((math.pi / 6) * self.diameters ** 3, self.count_density)      # (m3*s/(m3*m))
+        self.mass_density = np.multiply(self.SOA_density, self.volume_density)                          # (kg*s/(m3*m))
+
+        # Obtaining the corresponding quantities integrated over all diameters
+        self.total_count = self.__integrator(integrand = self.count_density)                            # (#*s/m3)
+        self.total_surface = self.__integrator(integrand = self.surface_density)                        # (m2*s/m3)
+        self.total_volume = self.__integrator(integrand = self.volume_density)                          # (m3*s/m3)
+        self.total_mass = self.total_volume * self.SOA_density                                          # (kg*s/m3)
+
+    def __integrator(self, integrand: np.float64) -> np.float64:
+
+        return np.trapezoid(y = integrand, x = self.diameters)
+
+

Methods

+
+
+def get_data(self) +
+
+

Method to load and process data from a file.

+

Detailed Description

+

Load the raw data from a .csv file into the object instance. Raw data includes raw counts $c_{r}$ +($\text{particles}/(cm^{3}nm$) and diameters $D_{r}$ ($nm$). Each data point in the raw counts, $c_{r,i}$, represents the +number of particles observed between $D_{r,i-1}$ and $D_{r,i}$ within the data point aqcuisition time of $\Delta t_{A}$, such that +$c_{r,i}$ represents the time-integrated quantity of the particle flux within $D_{r,i-1}\leq D\leq D_{r,i}$. The raw data is +filtered to include only data within $D_{L}\leq D_{r}\leq D_{u}$. Then, $c_{r}$ and $D_{r}$ are transformed to SI-Units, represented +by $c=1E15c_{0}$ ($\text{particles}s/(m^{3}m$) and $D=1E-9D_{r}$ ($m$), respectively. The final count data is then obtained by +integrating $c$ over the sampling time $\Delta t_{s}=t_{su}+t_{sd}$, where $t_{su}$ and $t_{sd}$ represent DMA voltage scan-up and +scan-down times, respectively.

+

Parameters

+
+
a : None
+
This function has no paramters
+
+

Returns

+
+
n : None
+
This function has no return value
+
+
+
+
+
+
+
+ +
+ + + diff --git a/doc/defs/index.html b/doc/defs/index.html new file mode 100644 index 0000000..8c2f112 --- /dev/null +++ b/doc/defs/index.html @@ -0,0 +1,71 @@ + + + + + + +defs API documentation + + + + + + + + + + + + + +
+
+
+

Package defs

+
+
+

The docstring for this module

+

See details below

+
+
+

Sub-modules

+
+
defs.computing
+
+
+
+
defs.visualising
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + diff --git a/doc/defs/visualising.html b/doc/defs/visualising.html new file mode 100644 index 0000000..3e93905 --- /dev/null +++ b/doc/defs/visualising.html @@ -0,0 +1,108 @@ + + + + + + +defs.visualising API documentation + + + + + + + + + + + + + +
+
+
+

Module defs.visualising

+
+
+
+
+
+
+
+
+
+
+

Classes

+
+
+class HelloWorld +(word='Hellow') +
+
+

The docstring for this class

+

Description: Bla bla bla

+

Attributes

+
+
word : str
+
A word
+
+

Methods

+

init: HelloWorld +The class constructor

+
+ +Expand source code + +
class HelloWorld():
+
+    """The docstring for this class
+    
+    Description: Bla bla bla
+
+    Attributes
+    ----------
+    word: str
+        A word
+
+    Methods
+    -------
+    __init__: HelloWorld
+        The class constructor
+    """
+
+    def __init__(self, word = "Hellow"):
+
+        self.word = word
+
+
+
+
+
+ +
+ + + diff --git a/main.py b/main.py index 4cd50f0..e83e7ab 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,10 @@ #%% +from pathlib import Path from defs.computing import OFRAnalyser import numpy as np #%% -analyser = OFRAnalyser(sourcefile="Z:/People/David_Tschan/data/OFR_SMPS/2026/processed/06_June/20260612/20260612_SET02_EXP01_full.csv", - lower_bound=22.87, upper_bound=1000, density=1200, scan_up=160, scan_down=20) +analyser = OFRAnalyser(source_file=Path(r"Z:\People\David_Tschan\data\OFR_SMPS\2026\processed\06_June\20260612\20260612_SET02_EXP01_full.txt")) #samplelist = np.linspace(start=1, stop=analyser.max_samples, num=analyser.max_samples, dtype=int).tolist() @@ -12,5 +12,5 @@ analyser = OFRAnalyser(sourcefile="Z:/People/David_Tschan/data/OFR_SMPS/2026/pro analyser.AggregateSamples(samples=[33]) #%% -print(analyser.total_count) +print(analyser.total_mass) # %%