Adding more analysis to the OFR Analysis
This commit is contained in:
1 parent
e18c0c4ea7
commit
fcb58b6dbe
5 files changed
+124
-125
No files matched your search
+57
-5
@@ -197,12 +197,13 @@ class OFRSample:
|
||||
|
||||
class OFRAnalyser:
|
||||
|
||||
def __init__(self, source_file, sample_number_list, data_separator = ',') -> None:
|
||||
def __init__(self, data_source_file, sample_number_list, data_separator = ',') -> None:
|
||||
|
||||
self.source_file = source_file
|
||||
self.data_source_file = data_source_file
|
||||
self.flow_source_file = None
|
||||
self.__data_separator = data_separator
|
||||
|
||||
with open(self.source_file, 'r', errors = 'ignore') as file:
|
||||
with open(self.data_source_file, 'r', errors = 'ignore') as file:
|
||||
for i, line in enumerate(file.readlines()):
|
||||
if i == 17:
|
||||
items = line.split(',')
|
||||
@@ -214,6 +215,7 @@ class OFRAnalyser:
|
||||
self.sample_number_list = sample_number_list
|
||||
|
||||
self.data = None
|
||||
self.flow_data = None
|
||||
|
||||
|
||||
def __sample_number_list_check(self, sample_number_list) -> None:
|
||||
@@ -236,7 +238,7 @@ class OFRAnalyser:
|
||||
times = []
|
||||
|
||||
for sample_number in self.sample_number_list:
|
||||
sample = OFRSample(source_file=self.source_file, sample_number = sample_number, data_separator = self.__data_separator)
|
||||
sample = OFRSample(source_file=self.data_source_file, sample_number = sample_number, data_separator = self.__data_separator)
|
||||
|
||||
numbers.append(sample.Count.integrate())
|
||||
lengths.append(sample.Length.integrate() / 1E6)
|
||||
@@ -254,8 +256,58 @@ class OFRAnalyser:
|
||||
'Density (pg/μm^3)': densities,
|
||||
'Mass (mg/cm^3)': masses,
|
||||
'Time (s)': times})
|
||||
|
||||
|
||||
|
||||
def GetFlowData(self, flow_source_file):
|
||||
|
||||
# For a step diagram
|
||||
|
||||
self.flow_source_file = flow_source_file
|
||||
|
||||
dry_air_flows = []
|
||||
species_flows = []
|
||||
ozone_flows = []
|
||||
cnc_flows = []
|
||||
starts = []
|
||||
stops = []
|
||||
|
||||
out_flag = False
|
||||
|
||||
with open(self.flow_source_file, 'r', errors='ignore') as file:
|
||||
i = 0
|
||||
for line_counter, line in enumerate(file.readlines()):
|
||||
if out_flag == True:
|
||||
continue
|
||||
if line_counter == 2:
|
||||
items = line.split()
|
||||
start_time = float(items[-1])
|
||||
if line_counter == 6:
|
||||
items = line.split()
|
||||
dry_air_flows.append(float(items[0]))
|
||||
species_flows.append(float(items[1]))
|
||||
ozone_flows.append(float(items[2]))
|
||||
cnc_flows.append(float(items[-1]))
|
||||
starts.append(start_time)
|
||||
stops.append(float(items[3]) * float(items[4]) + start_time)
|
||||
i += 1
|
||||
elif line_counter > 6 and not line.startswith('-'):
|
||||
items = line.split()
|
||||
dry_air_flows.append(float(items[0]))
|
||||
species_flows.append(float(items[1]))
|
||||
ozone_flows.append(float(items[2]))
|
||||
cnc_flows.append(float(items[-1]))
|
||||
starts.append(stops[i-1])
|
||||
stops.append(stops[i-1] + float(items[3]) * float(items[4]))
|
||||
i += 1
|
||||
if line_counter > 6 and line.startswith('-'):
|
||||
out_flag = True
|
||||
else:
|
||||
continue
|
||||
|
||||
self.flow_data = pd.DataFrame({'Dry Air (L/min)': dry_air_flows, 'Species (L/min)': species_flows, 'Ozone (L/min)': ozone_flows, 'Start (s)': starts, 'Stop (s)': stops, 'CNC Flow (L/min)': cnc_flows})
|
||||
|
||||
def GetCumulativeMass(self):
|
||||
pass
|
||||
|
||||
### ----------------------------------------------------------------------------------------------------------------------------------- ###
|
||||
###
|
||||
@@ -2,21 +2,17 @@
|
||||
#%%
|
||||
from defs.computing import OFRSample, OFRAnalyser
|
||||
import numpy as np
|
||||
from bokeh.plotting import figure, show
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
# Path to the source file
|
||||
source_file = Path(r"C:\Users\tschan_d\Documents\data_local\20260612_SET02_EXP01_full.txt")
|
||||
flow_source_file = Path(r"C:\Users\tschan_d\Documents\data_local\20260612_SET02_EXP01_full_flows.txt")
|
||||
#%%
|
||||
|
||||
# Plotting one of the spectra to show properties
|
||||
|
||||
# first load and get the data of sample 57 (arbitrary)
|
||||
sample = OFRSample(source_file = source_file, sample_number = 150)
|
||||
|
||||
# Now plot the spectrum
|
||||
p = figure(width = 600, height = 400, x_axis_type='log')
|
||||
p.line(x = sample.Count.var, y = sample.Count.fct)
|
||||
show(p)
|
||||
|
||||
analyser = OFRAnalyser(data_source_file=source_file, sample_number_list=range(1, 157))
|
||||
analyser.Analyse()
|
||||
analyser.GetFlowData(flow_source_file=flow_source_file)
|
||||
print(analyser.flow_data)
|
||||
|
||||
# %%
|
||||
@@ -10,7 +10,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 137,
|
||||
"execution_count": null,
|
||||
"id": "8769766b",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
@@ -26,7 +26,8 @@
|
||||
"import pandas as pd\n",
|
||||
"\n",
|
||||
"# Specify the source file for this analysis\n",
|
||||
"source_file = Path(r\"C:\\Users\\tschan_d\\Documents\\data_local\\20260612_SET02_EXP01_full.txt\")"
|
||||
"source_file = Path(r\"C:\\Users\\tschan_d\\Documents\\data_local\\20260612_SET02_EXP01_full.txt\")\n",
|
||||
"flow_source_file = Path(r\"C:\\Users\\tschan_d\\Documents\\data_local\\20260612_SET02_EXP01_full_flows.txt\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -39,21 +40,10 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 114,
|
||||
"execution_count": null,
|
||||
"id": "76a9b026",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/MAAAJjCAYAAABA7UFUAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAA469JREFUeJzs3Qd4k9UXBvCXvffegrL3HgoiIFsEBAVkiLJU/rgXDgQVxYEgioqCDAFlCIiyBEFAlshegjLL3kM29P+895pSSltKm+RL8r2/5wn9SNPk9iZtc7577jmJwsPDwyEiIiIiIiIiQSOx0wMQERERERERkVujYF5EREREREQkyCiYFxEREREREQkyCuZFREREREREgoyCeREREREREZEgo2BeREREREREJMgomBcREREREREJMgrmRURERERERIKMgnkRERERERGRIOPqYP7XX3/Fo48+imLFiiFNmjTIkycP7r//fvz555/R3n7VqlWoV68e0qZNi4wZM6Jly5bYvn37dbfZunUrnn/+eVSsWNHcJnPmzLjzzjsxadKkGMcxbdo03H333UifPr0ZR8mSJTFs2LA4fx9xGZfHrl27zPecO3dupEiRwnzPLVq0iNPjnD59Gi+++CLq16+PbNmyIVGiRHjzzTdvuN2VK1cwcOBANGzYEHnz5kXq1KlRvHhxvPzyyzhx4kScHuvff//FgAEDULZsWTMv6dKlw+23344HH3wQv/32W8TtFixYYMYR02XkyJHmEtttPJfbbrst4n4PHTqERx55BFmzZjXjr169OubNm3fdGE+dOoV33nkHtWvXRs6cOc38ly5d2oz7/PnzMX5vFSpUwFNPPWWO+Rixjclj9OjR5v/RvS6WLFmCJEmSmNedB8cU+X5SpUpl5nLQoEG4evXqdV/P1wpfM3zt8Hu49957zWsqKo6hTZs2KFq0KBInTnzdfCXE8uXLzWswf/785jWZI0cOM9/PPfccAh2fP2/NA3leqylTpjQ/q1HxeS1VqhS8qUuXLuY++fzzdVKkSBG88MILOHLkyHW3W7NmDZo0aWKeJ96Ov9v4PH377bdeHY+IiIiIxE1SuNjnn3+Oo0ePmsCqRIkSOHz4MD766CNUq1YNs2fPRp06dSJuu2XLFvNGuly5cpgwYYIJ1t544w3UrFnTvMllcEtz5szBzz//jA4dOqBy5cq4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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1000x600 with 2 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# First load and get the data of sample 33 (arbitrary) and create a sample object\n",
|
||||
"sample_number = 33\n",
|
||||
@@ -95,51 +85,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 115,
|
||||
"execution_count": null,
|
||||
"id": "8db19b57",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" Sample Number (#/cm^3) Length (mm/cm^3) Surface (mm^2/cm^3) \\\n",
|
||||
"0 1 3.090062e+00 0.001888 1.241420e-05 \n",
|
||||
"1 2 3.454977e+00 0.000126 3.560755e-08 \n",
|
||||
"2 3 9.325444e+00 0.001036 8.623624e-07 \n",
|
||||
"3 4 4.171921e+02 0.402549 2.812996e-03 \n",
|
||||
"4 5 1.052317e+05 6.641894 4.353249e-03 \n",
|
||||
".. ... ... ... ... \n",
|
||||
"151 152 9.529171e+05 177.681731 3.199811e-01 \n",
|
||||
"152 153 1.017064e+06 181.659088 3.188865e-01 \n",
|
||||
"153 154 1.041903e+06 186.626996 3.273445e-01 \n",
|
||||
"154 155 1.008587e+06 181.815120 3.214411e-01 \n",
|
||||
"155 156 9.957403e+05 182.039508 3.234802e-01 \n",
|
||||
"\n",
|
||||
" Volume (μm^3/cm^3) Density (pg/μm^3) Mass (mg/cm^3) Time (s) \n",
|
||||
"0 0.836666 1.2 1.003999e-03 180.0 \n",
|
||||
"1 0.000109 1.2 1.302891e-07 360.0 \n",
|
||||
"2 0.007271 1.2 8.725170e-06 540.0 \n",
|
||||
"3 196.905653 1.2 2.362868e-01 720.0 \n",
|
||||
"4 38.618096 1.2 4.634172e-02 900.0 \n",
|
||||
".. ... ... ... ... \n",
|
||||
"151 7645.085680 1.2 9.174103e+00 27360.0 \n",
|
||||
"152 7524.532677 1.2 9.029439e+00 27540.0 \n",
|
||||
"153 7732.212330 1.2 9.278655e+00 27720.0 \n",
|
||||
"154 7646.483862 1.2 9.175781e+00 27900.0 \n",
|
||||
"155 7694.993582 1.2 9.233992e+00 28080.0 \n",
|
||||
"\n",
|
||||
"[156 rows x 8 columns]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"sample_number_list = [int(i) for i in range(1, 157)]\n",
|
||||
"\n",
|
||||
"analyser = OFRAnalyser(source_file = source_file, sample_number_list=sample_number_list)\n",
|
||||
"analyser = OFRAnalyser(data_source_file = source_file, sample_number_list=sample_number_list)\n",
|
||||
"analyser.Analyse()\n",
|
||||
"\n",
|
||||
"print(analyser.data)"
|
||||
"analyser.GetFlowData(flow_source_file = flow_source_file)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -152,21 +107,10 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 134,
|
||||
"execution_count": null,
|
||||
"id": "a4477003",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/MAAAGbCAYAAACIxMC9AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAA2nJJREFUeJzsnQd4FNXXxg9JIEASeu8gRTqiIBYUsQCiiAUFRVQUK4qinwULgoqi/BUbFgSxYQFsKIgKKKgUFUSKIL1KbwkkIZD5nvfe3M1ks7vZ3Wzf9/c8k92dnezOzM7sznvPOe8pYVmWJYQQQgghhBBCCIkaEsK9AoQQQgghhBBCCPENinlCCCGEEEIIISTKoJgnhBBCCCGEEEKiDIp5QgghhBBCCCEkyqCYJ4QQQgghhBBCogyKeUIIIYQQQgghJMqgmCeEEEIIIYQQQqIMinlCCCGEEEIIISTKoJgnhBBCCCGEEEKijLgW83PmzJGBAwfKySefLCkpKVK7dm257LLL5M8//3S5/JIlS+SCCy6Q1NRUqVChglxxxRWyYcOGAsv8+++/8sADD8ipp56qlqlUqZKcddZZMnXqVLfr8dVXX8m5554r5cqVU+vRsmVLefvtt73eDm/Wy7B582a1zbVq1ZLk5GS1zZdffrlX75Oeni4PPvigXHTRRVK1alUpUaKEPPnkk4WWO3HihLz44ovSvXt3qVOnjpQtW1aaN28uDz/8sBw8eNCr9zpy5IiMHj1a2rZtq/ZLWlqanHTSSXL11VfLzz//7Fjup59+Uuvhbpo0aZKaPC1jpgYNGjhed/fu3XLjjTdKlSpV1PqfccYZMnv27ALrePjwYXnmmWekS5cuUqNGDbX/W7durdY7KyvL7ba1b99ehgwZou7jPTytk+H9999Xj10dF7/99pskJiaq486AdbK/TpkyZdS+HDt2rOTm5hb4fxwrOGZw7GAbLrzwQnVMOYN16Nu3rzRr1kwSEhIK7C9/KeqzwecbyZjjL9LXc8aMGS7PVU9YliWTJ0+Wrl27SsWKFdX3RaNGjeSuu+6SrVu3SjSA8wBTuHn00UfllFNOUb8HpUuXVvvx1ltvVd/HdrBf8X2M5/FbUL58efV/r732mhw/fjxs608IIYSQyCRJ4pg33nhD9u3bp4RVixYtZM+ePfK///1POnXqJLNmzVIXsYbVq1eri8J27drJZ599psTaE088IZ07d5a//vpLiVvw/fffy7fffivXX3+9dOjQQV2Affrpp9KnTx8ZMWKE+h87zz33nLrQu/322+WRRx6RkiVLqvc6duyYV9vg7XqBFStWqGVxoThmzBgltP/77z+1rd6AfQUxCVHYu3dveeedd1wul5mZqYRDv3795JZbblGCGOLw6aeflunTp8sff/yhxKU7MBiAAYPly5fL//3f/0nHjh3V/LVr16r/nz9/vhr8sDNq1Cg577zzCr0WBgDAggULCsyHOL/qqqvk/vvvd8yDWAHZ2dly/vnnq4GHl19+WapVqyavv/66Gpz48ccfHe+9ZcsWJY7xWQ8dOlQJYawbtv2HH35Qk12Qg40bN8rSpUvV/xmwLzCw5IkBAwbI559/rtYX+8YIaQx63HDDDdK0aVO1f+3gc/7oo48cgxNvvvmm3Hfffeozx4ADwDGPYwVibeLEiUpoPPvss+o4+f3335VwN3zwwQeyc+dO9XlgQCAnJ0cCxbvvvqsG1ZzBeRnJYGAGx1akryfEPI5hbwU9Pt9rr71WfXfhPMagC4Tl33//LS+88IIS+d98840aqIxkxo0bJ5EAvkuwHzGoiYHJVatWqfP166+/lpUrV0rlypUd5zMGLx9//HGpV6+e+h3AZ3f33Xer73N337mEEEIIiVOsOGbXrl2F5qWnp1vVq1e3zj///ALz+/TpY1WpUsU6dOiQY96mTZuskiVLWg8++KBj3p49e6zc3NxCr9uzZ0+rbNmyVlZWlmPeH3/8YSUkJFijR4/2exu8XS+sU7t27dRkXwdfwGuYbcN24vAZPnx4oeWOHz9u7d27t9D8KVOmqP/54IMPPL7PnDlz1HITJ050+fyJEycc9+fOnauWxWv7Av7nrrvucvnc66+/rp7/7bffHPNycnKsFi1aWB07dnTMy8jIUJMzL7zwgvr/+fPnF3ru+eeft6pVq+bYhhtuuMFKSUnxap137txpVa5c2erSpYvjc7jjjjusxMREa9GiRQWWPffcc62WLVsWmHfs2DGrUaNG6jjEffB///d/6ljBMWPAsYRj6uqrr3a733E8169f3you7777rtpXv//+uxVNYP/hmIgWcKz78nU/atQotfxzzz3n8jjEZ4/vyQMHDlih5MiRI1asMGPGDLWPJ0yYUOSyOBeTkpL8/u4mhBBCSGwS12n2iLg6g+gqomz2NFJE1xGFuvLKK1XUxFC/fn0VDf7iiy8c8xCFdo7GAkQzjx49Kvv373fMQ+okosGIuviDL+s1b948Fdm59957HRFoX3FO/XYHUr5NpMmOibAXlaKLDABQs2ZNl88jxTuYYL8hIo3ovSEpKUn69+8vixcvlu3bt6t5SIPF5Mt2Tps2TaXR+rMN1atXV5FGpHS/+uqrKvKP7BKUL5j39ASyPlD+geMQEXmzrchAwTFjwLGEtHtkQdhTe4O93z3xySefqGMP54yd4cOHq+MN+wJs2rRJLff888+rEghEN5FtcNpppxUqkzDZHohA47sA5wUip4hgu0qlR2YCMiNQmoJl161b5zLNHqUT+B5B1ky3bt3UMYJjGVk4YOHChXL22Wer+cioeO+99wqtFzIgbrvtNpU9U6pUKWnYsKHK7LF/HmZbkWWDshYsg/fFcYv3sK+P2SZ7CQP+3xWIBiP6jn2BshpXxyGyN3bt2iUTJkxQ8/C9gu1B6Ykz11xzjfofeyYHIv5YT/wP1hn7CRkrdsx+RIYOslEQ0UbGjC/v5SrNHtuHqDgyQfA5InvppptucpwTABlByERAlpAB39PYb9g39u8qnBc4H33FZE3hu8WbZfE+ONYJIYQQQgxxLeZdcejQIZUSjrp1w/r161XqeJs2bQotj3m4qPdUIw3mzp2rLsjsAwgQ2LhghsCDeMSFGi7eIc68SbP3Zb3wXgAXxBdffLESOLhQvuSSS5ToCAUmldy+b10B4QXhifIHpIkjLdybtGAIHefJH1CO4G6fAqTF+rOd27ZtU4MBGHxxxtW6O9e2A3gGYEJJBtLrsU7OpRtFHTMQD0irx7GDx+62Fc+7814oCogeX2qVIZqct98upFCrj1IUiGmUaZj9DFE2bNgwVedvB6L/u+++U+UMH374oRJCPXr0KFBugVRnlMLg80Z5DQbGevbsKffcc48Szs5gn6O0AuUKGOhwNRhogJjEgAheD54YeG/8P9YVnxt8K8ygEUSr3afDlDKg/AWf7cyZM+Xmm29WAnrQoEGF3gtCHYMZ2FacL0jVxjmO7zKAlG2UlABsv5ncDZZhXQ4cOCC9evVyO3h36aWXqn1qBlGwPRgkQqmPc3o5th8DYTinTUkMUs4xaIrlMUgCPw6Ue+AzsYPvQawHBpzwOvhcfHkvZ3BOwRcFAysYxEFJFO5jO3C84pgH8CDBYAHOVwNKbFASY7YZYIAIiT5Y3htwXOM9MHCBQQkM5uA4cQaviWXxOWDgA2UOOPa9Ef6EEEIIiSPCnRoQaVx33XUqnREp8IZff/1VpUN+/PHHbtNRd+zY4fY1x48fr5Z5+eWXC8xPTk620tLSrIoVK1qvvfaaSi9/9NFHVdr0tddeW+S6+rJet912m3pcrlw56+abb7Z+/PFHle6OdFmkVHtaf1d4SrN3xbZt21Ra7mmnnVYgXdsdSD1NTU1V74GpZs2a1oABA6x58+YVWM6k2bubtm7d6nOaPdLOsb+cQdo9/m/y5Mlu13vZsmVWmTJlrMsvv7zQc2PHjlWftT09G2n27tbdudTDvi9RnoFl7MepqzR7vBcmfL4PP/yw+h+UZoDt27erx88++2yh/8c2Opca2CkqzR7HcNeuXS1v0+xdTXgNO0gxPuWUU6yGDRtaq1atUscTthNlHYaNGzeq/61Vq5aVmZnpmH/48GGrUqVK1gUXXOCY161bN6tOnToFSlTA4MGDrdKlS1v79+8vcIydc845hdbfPIdb58902rRpjnn4DKpWrarmL1myxDF/3759ajuHDh3qmIdjD8f+5s2bC7zXmDFj1P+vXLmywLa2bt26wD5YvHhxoe8FX9LsP/nkE7Xsm2++6XE57P/mzZs7Hrdv394688wzCywzbtw49VrLly9Xj7ds2aK+X+++++5C5U01atQoUNph9qOrchtv3gvg+MBkwD5x/mwAyjwwH69h0vlLlSpljRw50nHO4fmHHnpInd8m3X3QoEHqWPOG//77r8Dxffrpp6tz0BU4J81yJUqUUL8LhBBCCCHOMDJvAxEsRLZeeukllY7sjKcUc3fPIaoG92dExpzT6RElQkQKqdNYBqnxiDRiORhMIbJulnMXsfR2vUyUF6mtMFFCuioiWF9++aXs3bvXkYZrIkLFjW7bQWkBIoV4bUSZvEnXRvQNkWzsB0RK69atqyKsMJ+zp7kaYOgGwzbnCSm3/uDPZ420ZWQ6YF1dGVUhAwNRQefoGqJ9rtbdnXnXK6+8ovYlsEcJnUEGASKUmNC9ANHn6667TsaPH1/sbS0KHDeu0trdAad85+1ftGhRgWWQEo1oLFKbYTyHffDxxx+7TD1GtBPZJwZkpCCajAwVnD/IWMH6oeQB3QrsxzuOVTxvT1UHrjIqPO03vI4Bn3njxo1VNBzu5Aa4myPCb3c1R4YAvgvwmdnXC9F9YO/mABD9t+8Dk2nh7JQeaLD/7ccHUtXRWWHNmjUFjA2R/dCqVSv1GNkG2BYYOtq3DZ8Vzm1XXQFc7Xdv3ssV2Lfo2oBjwf7+MBBFRwrz/qaDBaLx5jzD/yH9HtkCv/zyi5qLine truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1000x400 with 2 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"fig = plt.figure(figsize=(10,4), constrained_layout = True)\n",
|
||||
"ax = fig.add_subplot(111)\n",
|
||||
@@ -175,7 +119,7 @@
|
||||
"ax.plot(analyser.data['Time (s)'], analyser.data['Number (#/cm^3)'], color='red', label='Number')\n",
|
||||
"ax_2.plot(analyser.data['Time (s)'], analyser.data['Mass (mg/cm^3)'], color='blue', label='Mass')\n",
|
||||
"\n",
|
||||
"ax.set_title('2026-06-12 SET02/EXP01: Experiment Overview ' + str(sample_number))\n",
|
||||
"ax.set_title('2026-06-12 SET02/EXP01: Experiment Overview')\n",
|
||||
"ax.set_xlabel('Time $(s)$')\n",
|
||||
"ax.set_ylabel('Number Density $(cm^{-3})$')\n",
|
||||
"ax_2.set_ylabel('Mass Denisty $(mg cm^{-3})$')\n",
|
||||
@@ -191,7 +135,7 @@
|
||||
"\n",
|
||||
"ax.legend(lines_1 + lines_2, labels_1 + labels_2, loc='upper left')\n",
|
||||
"\n",
|
||||
"plt.savefig(\"20260723_OFR_Analysis_01_Experiment_Overview.pdf\", format='pdf', dpi=400)"
|
||||
"plt.savefig(\"20260723_OFR_Analysis_01_Experiment_Overview_top.pdf\", format='pdf', dpi=400)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -202,68 +146,75 @@
|
||||
"Clearly, something is happening at around 5000 s, 12000s, and after 17000s. This corresponds to shifts in the flow rates... These are read from disk and depicted below:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 159,
|
||||
"id": "dec710d2",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Reading from disk\n",
|
||||
"\n",
|
||||
"source_file_for_flows = Path(r\"C:\\Users\\tschan_d\\Documents\\data_local\\20260612_SET02_EXP01_full_flows.txt\")\n",
|
||||
"\n",
|
||||
"dry_air_flows = []\n",
|
||||
"species_flows = []\n",
|
||||
"ozone_flows = []\n",
|
||||
"numbers_of_samples = []\n",
|
||||
"\n",
|
||||
"with open(source_file_for_flows, 'r', errors='ignore') as file:\n",
|
||||
" for i,line in enumerate(file.readlines()):\n",
|
||||
" if i >= 2:\n",
|
||||
" items = line.split()\n",
|
||||
" dry_air_flows.append(float(items[0]))\n",
|
||||
" species_flows.append(float(items[1]))\n",
|
||||
" ozone_flows.append(float(items[2]))\n",
|
||||
" numbers_of_samples.append(float(items[-1]))\n",
|
||||
"\n",
|
||||
"flow_data = pd.DataFrame({'Dry Air (L/min)': dry_air_flows, 'Species (L/min)': species_flows, 'Ozone (L/min)': ozone_flows, 'Samples': numbers_of_samples})"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "75347e52",
|
||||
"id": "a5af245c",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"fig = plt.figure(figsize=(10,4), constrained_layout = True)\n",
|
||||
"# Obtaining the data to plot the flows correctly\n",
|
||||
"\n",
|
||||
"times = []\n",
|
||||
"dry_air = []\n",
|
||||
"species = []\n",
|
||||
"ozone = []\n",
|
||||
"\n",
|
||||
"for _, row in analyser.flow_data.iterrows():\n",
|
||||
" times.append(row['Start (s)'])\n",
|
||||
" times.append(row['Stop (s)'])\n",
|
||||
"\n",
|
||||
" # append it twice so that we can plot the data correctly\n",
|
||||
" i = 0\n",
|
||||
" while i < 2:\n",
|
||||
" dry_air.append(row['Dry Air (L/min)'])\n",
|
||||
" species.append(row['Species (L/min)'])\n",
|
||||
" ozone.append(row['Ozone (L/min)'])\n",
|
||||
" i += 1\n",
|
||||
"\n",
|
||||
"# Doing the actual plotting\n",
|
||||
"\n",
|
||||
"fig = plt.figure(figsize=(10,2.5), constrained_layout = True)\n",
|
||||
"ax = fig.add_subplot(111)\n",
|
||||
"ax_2 = plt.twinx(ax)\n",
|
||||
"\n",
|
||||
"ax.plot(times, ozone, color='red', linestyle='--', label='Ozone')\n",
|
||||
"ax_2.plot(times, species, color='blue', linestyle='--', label=r'$\\alpha$-Pinene')\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"ax.plot([], analyser.data['Number (#/cm^3)'], color='red', label='Number')\n",
|
||||
"ax_2.plot(analyser.data['Time (s)'], analyser.data['Mass (mg/cm^3)'], color='blue', label='Mass')\n",
|
||||
"\n",
|
||||
"ax.set_title('2026-06-12 SET02/EXP01: Experiment Overview ' + str(sample_number))\n",
|
||||
"ax.set_title('2026-06-12 SET02/EXP01: Flow Rates Overview ')\n",
|
||||
"ax.set_xlabel('Time $(s)$')\n",
|
||||
"ax.set_ylabel('Number Density $(cm^{-3})$')\n",
|
||||
"ax_2.set_ylabel('Mass Denisty $(mg cm^{-3})$')\n",
|
||||
"ax.set_ylabel('Ozone Flow Rate $(L min^{-1})$')\n",
|
||||
"ax_2.set_ylabel(r'$\\alpha$-Pinene Flow Rate $(L min^{-1})$')\n",
|
||||
"ax.xaxis.set_minor_locator(MultipleLocator(base=180, offset=0))\n",
|
||||
"ax.xaxis.set_major_locator(MultipleLocator(base=1800, offset=0))\n",
|
||||
"\n",
|
||||
"ax.set_xlim([0, 30000])\n",
|
||||
"ax.set_ylim([0, 1.2E6])\n",
|
||||
"ax_2.set_ylim([0, 15])\n",
|
||||
"ax.set_ylim([0.6, 2.4])\n",
|
||||
"ax_2.set_ylim([0.015, 0.045])\n",
|
||||
"\n",
|
||||
"lines_1, labels_1 = ax.get_legend_handles_labels()\n",
|
||||
"lines_2, labels_2 = ax_2.get_legend_handles_labels()\n",
|
||||
"\n",
|
||||
"ax.legend(lines_1 + lines_2, labels_1 + labels_2, loc='upper left')\n",
|
||||
"\n",
|
||||
"plt.savefig(\"20260723_OFR_Analysis_01_Experiment_Overview.pdf\", format='pdf', dpi=400)"
|
||||
"plt.savefig(\"20260723_OFR_Analysis_01_Experiment_Overview_bottom.pdf\", format='pdf', dpi=400)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "e6212394",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"To refine the analysis, we may also consider the production rates of SOA using the integral of the SOA production rate, obtained by multiplying the concentration with the flow rate with the sampling time for each sample:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "e2ae6dbb",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user