AeroViz 0.1.11__py3-none-any.whl → 0.1.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of AeroViz might be problematic. Click here for more details.
- AeroViz/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/dataProcess/Chemistry/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/dataProcess/Optical/_IMPROVE.py +1 -1
- AeroViz/dataProcess/Optical/__pycache__/PyMieScatt_update.cpython-312.pyc +0 -0
- AeroViz/dataProcess/Optical/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/dataProcess/Optical/__pycache__/mie_theory.cpython-312.pyc +0 -0
- AeroViz/dataProcess/SizeDistr/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/dataProcess/VOC/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/dataProcess/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/dataProcess/core/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/plot/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/plot/__pycache__/bar.cpython-312.pyc +0 -0
- AeroViz/plot/__pycache__/box.cpython-312.pyc +0 -0
- AeroViz/plot/__pycache__/pie.cpython-312.pyc +0 -0
- AeroViz/plot/__pycache__/radar.cpython-312.pyc +0 -0
- AeroViz/plot/__pycache__/regression.cpython-312.pyc +0 -0
- AeroViz/plot/__pycache__/scatter.cpython-312.pyc +0 -0
- AeroViz/plot/__pycache__/violin.cpython-312.pyc +0 -0
- AeroViz/plot/distribution/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/plot/distribution/__pycache__/distribution.cpython-312.pyc +0 -0
- AeroViz/plot/meteorology/__pycache__/CBPF.cpython-312.pyc +0 -0
- AeroViz/plot/meteorology/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc +0 -0
- AeroViz/plot/meteorology/__pycache__/wind_rose.cpython-312.pyc +0 -0
- AeroViz/plot/meteorology/hysplit.py +7 -4
- AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/plot/optical/__pycache__/optical.cpython-312.pyc +0 -0
- AeroViz/plot/templates/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/plot/templates/__pycache__/ammonium_rich.cpython-312.pyc +0 -0
- AeroViz/plot/templates/__pycache__/contour.cpython-312.pyc +0 -0
- AeroViz/plot/templates/__pycache__/corr_matrix.cpython-312.pyc +0 -0
- AeroViz/plot/templates/__pycache__/diurnal_pattern.cpython-312.pyc +0 -0
- AeroViz/plot/templates/__pycache__/koschmieder.cpython-312.pyc +0 -0
- AeroViz/plot/templates/__pycache__/metal_heatmap.cpython-312.pyc +0 -0
- AeroViz/plot/timeseries/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/plot/timeseries/__pycache__/template.cpython-312.pyc +0 -0
- AeroViz/plot/timeseries/__pycache__/timeseries.cpython-312.pyc +0 -0
- AeroViz/plot/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/plot/utils/__pycache__/_color.cpython-312.pyc +0 -0
- AeroViz/plot/utils/__pycache__/_unit.cpython-312.pyc +0 -0
- AeroViz/plot/utils/__pycache__/plt_utils.cpython-312.pyc +0 -0
- AeroViz/plot/utils/__pycache__/sklearn_utils.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/__init__.py +4 -4
- AeroViz/rawDataReader/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/config/__pycache__/supported_instruments.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/config/supported_instruments.py +1 -1
- AeroViz/rawDataReader/core/__init__.py +7 -2
- AeroViz/rawDataReader/core/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/core/logger.py +116 -49
- AeroViz/rawDataReader/script/AE33.py +1 -1
- AeroViz/rawDataReader/script/APS.py +44 -0
- AeroViz/rawDataReader/script/Minion.py +2 -0
- AeroViz/rawDataReader/script/OCEC.py +4 -4
- AeroViz/rawDataReader/script/SMPS.py +25 -8
- AeroViz/rawDataReader/script/__init__.py +1 -1
- AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/APS.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/GRIMM.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/IGAC.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/MA350.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/Minion.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/NEPH.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/OCEC.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/SMPS.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/TEOM.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/VOC.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/XRF.cpython-312.pyc +0 -0
- AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/tools/__pycache__/__init__.cpython-312.pyc +0 -0
- AeroViz/tools/__pycache__/database.cpython-312.pyc +0 -0
- AeroViz/tools/__pycache__/dataclassifier.cpython-312.pyc +0 -0
- {AeroViz-0.1.11.dist-info → AeroViz-0.1.13.dist-info}/METADATA +22 -17
- {AeroViz-0.1.11.dist-info → AeroViz-0.1.13.dist-info}/RECORD +83 -83
- {AeroViz-0.1.11.dist-info → AeroViz-0.1.13.dist-info}/WHEEL +1 -1
- AeroViz/rawDataReader/script/APS_3321.py +0 -47
- AeroViz/rawDataReader/script/__pycache__/APS_3321.cpython-312.pyc +0 -0
- {AeroViz-0.1.11.dist-info → AeroViz-0.1.13.dist-info}/LICENSE +0 -0
- {AeroViz-0.1.11.dist-info → AeroViz-0.1.13.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -41,7 +41,7 @@ def _revised(_df_mass, _df_RH):
|
|
|
41
41
|
|
|
42
42
|
_df['AS'] = 2.2 * _frhs * _df_mass['S_AS'] + 4.8 * _frhl * _df_mass['L_AS']
|
|
43
43
|
_df['AN'] = 2.4 * _frhs * _df_mass['S_AN'] + 5.1 * _frhl * _df_mass['L_AN']
|
|
44
|
-
_df['OM'] = 2.8 * _df_mass['S_OM'] + 6.1 *
|
|
44
|
+
_df['OM'] = 2.8 * _df_mass['S_OM'] + 6.1 * _df_mass['L_OM']
|
|
45
45
|
_df['Soil'] = _df_mass['Soil']
|
|
46
46
|
_df['SS'] = 1.7 * _frhss * _df_mass['SS']
|
|
47
47
|
_df['EC'] = 10 * _df_mass['EC']
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -40,14 +40,17 @@ def hysplit(file: Path = DEFAULT_FILE):
|
|
|
40
40
|
# 創建地圖
|
|
41
41
|
fig, ax = plt.subplots(figsize=(4, 5), subplot_kw={'projection': ccrs.PlateCarree()})
|
|
42
42
|
|
|
43
|
+
ax.set_global()
|
|
44
|
+
# ax.stock_img()
|
|
45
|
+
|
|
43
46
|
# 設置地圖範圍
|
|
44
47
|
ax.set_extent([116, 126, 17, 30], crs=ccrs.PlateCarree())
|
|
45
48
|
|
|
46
49
|
# 添加自然地理特徵
|
|
47
|
-
ax.add_feature(cfeature.LAND)
|
|
48
|
-
ax.add_feature(cfeature.OCEAN)
|
|
49
|
-
ax.add_feature(cfeature.COASTLINE)
|
|
50
|
-
ax.add_feature(cfeature.BORDERS, linestyle=':')
|
|
50
|
+
ax.add_feature(cfeature.LAND.with_scale('10m'))
|
|
51
|
+
ax.add_feature(cfeature.OCEAN.with_scale('10m'))
|
|
52
|
+
ax.add_feature(cfeature.COASTLINE.with_scale('10m'))
|
|
53
|
+
ax.add_feature(cfeature.BORDERS.with_scale('10m'), linestyle=':')
|
|
51
54
|
|
|
52
55
|
# 添加經緯度網格
|
|
53
56
|
ax.gridlines(draw_labels=True, dms=True, x_inline=False, y_inline=False)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -10,7 +10,7 @@ from AeroViz.rawDataReader.script import *
|
|
|
10
10
|
__all__ = ['RawDataReader']
|
|
11
11
|
|
|
12
12
|
SUPPORTED_INSTRUMENTS = [
|
|
13
|
-
NEPH, Aurora, SMPS, GRIMM,
|
|
13
|
+
NEPH, Aurora, SMPS, GRIMM, APS, AE33, AE43, BC1054,
|
|
14
14
|
MA350, TEOM, OCEC, IGAC, VOC, EPA, Minion
|
|
15
15
|
]
|
|
16
16
|
|
|
@@ -62,7 +62,7 @@ def RawDataReader(instrument_name: str,
|
|
|
62
62
|
... instrument_name='BC1054',
|
|
63
63
|
... path=Path('/path/to/data'),
|
|
64
64
|
... start=datetime(2024, 2, 1),
|
|
65
|
-
... end=datetime(2024, 7, 31
|
|
65
|
+
... end=datetime(2024, 7, 31))
|
|
66
66
|
"""
|
|
67
67
|
# Mapping of instrument names to their respective classes
|
|
68
68
|
instrument_class_map = {cls.__name__.split('.')[-1]: cls for cls in SUPPORTED_INSTRUMENTS}
|
|
@@ -71,7 +71,7 @@ def RawDataReader(instrument_name: str,
|
|
|
71
71
|
if instrument_name not in meta.keys():
|
|
72
72
|
raise ValueError(f"Instrument name '{instrument_name}' is not valid. \nMust be one of: {list(meta.keys())}")
|
|
73
73
|
|
|
74
|
-
#
|
|
74
|
+
# Check if path exists and is a directory
|
|
75
75
|
if not isinstance(path, Path):
|
|
76
76
|
path = Path(path)
|
|
77
77
|
if not path.exists() or not path.is_dir():
|
|
@@ -94,7 +94,7 @@ def RawDataReader(instrument_name: str,
|
|
|
94
94
|
if end <= start:
|
|
95
95
|
raise ValueError(f"Invalid time range: start {start} is after end {end}")
|
|
96
96
|
|
|
97
|
-
#
|
|
97
|
+
# Verify that mean_freq format
|
|
98
98
|
try:
|
|
99
99
|
Timedelta(mean_freq)
|
|
100
100
|
except ValueError:
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -143,7 +143,7 @@ class AbstractReader(ABC):
|
|
|
143
143
|
:return: Processed DataFrame
|
|
144
144
|
"""
|
|
145
145
|
# Round timestamps and remove duplicates
|
|
146
|
-
_df = _df.groupby(_df.index.
|
|
146
|
+
_df = _df.groupby(_df.index.floor('1min')).first()
|
|
147
147
|
|
|
148
148
|
# Determine frequency
|
|
149
149
|
freq = _df.index.inferred_freq or self.meta['freq']
|
|
@@ -161,7 +161,12 @@ class AbstractReader(ABC):
|
|
|
161
161
|
new_index = pd.date_range(user_start or df_start, user_end or df_end, freq=freq, name='time')
|
|
162
162
|
|
|
163
163
|
# Process data: convert to numeric, resample, and reindex
|
|
164
|
-
|
|
164
|
+
if freq in ['1min', 'min', 'T']:
|
|
165
|
+
return _df.reindex(new_index, method='nearest', tolerance='1min')
|
|
166
|
+
elif freq in ['1h', 'h', 'H']:
|
|
167
|
+
return _df.reindex(new_index, method='nearest', tolerance='1h')
|
|
168
|
+
else:
|
|
169
|
+
return _df.reindex(new_index, method='nearest', tolerance=freq)
|
|
165
170
|
|
|
166
171
|
def _outlier_process(self, _df):
|
|
167
172
|
outlier_file = self.path / 'outlier.json'
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import codecs
|
|
1
2
|
import logging
|
|
3
|
+
import os
|
|
2
4
|
import platform
|
|
3
5
|
import re
|
|
4
6
|
import sys
|
|
@@ -10,91 +12,156 @@ class ReaderLogger:
|
|
|
10
12
|
self.name = name
|
|
11
13
|
self.log_path = log_path
|
|
12
14
|
|
|
13
|
-
#
|
|
14
|
-
self.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
self.
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
# 檢查是否支持顏色輸出
|
|
16
|
+
self.color_support = self._check_color_support()
|
|
17
|
+
|
|
18
|
+
# 設置顏色代碼
|
|
19
|
+
if self.color_support:
|
|
20
|
+
self.CYAN = '\033[96m'
|
|
21
|
+
self.BLUE = '\033[94m'
|
|
22
|
+
self.GREEN = '\033[92m'
|
|
23
|
+
self.YELLOW = '\033[93m'
|
|
24
|
+
self.RED = '\033[91m'
|
|
25
|
+
self.RESET = '\033[0m'
|
|
26
|
+
else:
|
|
27
|
+
self.CYAN = ''
|
|
28
|
+
self.BLUE = ''
|
|
29
|
+
self.GREEN = ''
|
|
30
|
+
self.YELLOW = ''
|
|
31
|
+
self.RED = ''
|
|
32
|
+
self.RESET = ''
|
|
33
|
+
|
|
34
|
+
# 檢查 Unicode 支持
|
|
35
|
+
self.unicode_support = self._setup_unicode()
|
|
36
|
+
|
|
37
|
+
# 設置框架字符
|
|
38
|
+
if self.unicode_support:
|
|
39
|
+
self.BOX_TOP_LEFT = "╔"
|
|
40
|
+
self.BOX_TOP_RIGHT = "╗"
|
|
41
|
+
self.BOX_BOTTOM_LEFT = "╚"
|
|
42
|
+
self.BOX_BOTTOM_RIGHT = "╝"
|
|
43
|
+
self.BOX_HORIZONTAL = "═"
|
|
44
|
+
self.BOX_VERTICAL = "║"
|
|
45
|
+
self.ARROW = "▶"
|
|
46
|
+
else:
|
|
47
|
+
self.BOX_TOP_LEFT = "+"
|
|
48
|
+
self.BOX_TOP_RIGHT = "+"
|
|
49
|
+
self.BOX_BOTTOM_LEFT = "+"
|
|
50
|
+
self.BOX_BOTTOM_RIGHT = "+"
|
|
51
|
+
self.BOX_HORIZONTAL = "-"
|
|
52
|
+
self.BOX_VERTICAL = "|"
|
|
53
|
+
self.ARROW = ">"
|
|
54
|
+
|
|
55
|
+
self.logger = self._setup_logger()
|
|
56
|
+
|
|
57
|
+
def _check_color_support(self) -> bool:
|
|
58
|
+
"""檢查環境是否支持顏色輸出"""
|
|
59
|
+
# 檢查是否在 Spyder 或其他 IDE 中運行
|
|
60
|
+
if any(IDE in os.environ.get('PYTHONPATH', '') for IDE in ['spyder', 'jupyter']):
|
|
61
|
+
return False
|
|
20
62
|
|
|
21
|
-
#
|
|
63
|
+
# 檢查是否強制啟用或禁用顏色
|
|
64
|
+
if 'FORCE_COLOR' in os.environ:
|
|
65
|
+
return os.environ['FORCE_COLOR'].lower() in ('1', 'true', 'yes')
|
|
66
|
+
|
|
67
|
+
# Windows 檢查
|
|
22
68
|
if platform.system().lower() == 'windows':
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
import codecs
|
|
28
|
-
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
|
|
29
|
-
self.unicode_support = True
|
|
30
|
-
else:
|
|
31
|
-
self.unicode_support = True
|
|
69
|
+
return ('ANSICON' in os.environ or
|
|
70
|
+
'WT_SESSION' in os.environ or # Windows Terminal
|
|
71
|
+
'ConEmuANSI' in os.environ or
|
|
72
|
+
os.environ.get('TERM_PROGRAM', '').lower() == 'vscode')
|
|
32
73
|
|
|
33
|
-
#
|
|
34
|
-
|
|
35
|
-
self.BOX_TOP_RIGHT = "╗"
|
|
36
|
-
self.BOX_BOTTOM_LEFT = "╚"
|
|
37
|
-
self.BOX_BOTTOM_RIGHT = "╝"
|
|
38
|
-
self.BOX_HORIZONTAL = "═"
|
|
39
|
-
self.BOX_VERTICAL = "║"
|
|
40
|
-
self.ARROW = "▶"
|
|
74
|
+
# 其他系統檢查
|
|
75
|
+
return hasattr(sys.stdout, 'isatty') and sys.stdout.isatty()
|
|
41
76
|
|
|
42
|
-
|
|
77
|
+
def _setup_unicode(self) -> bool:
|
|
78
|
+
"""設置 Unicode 支持"""
|
|
79
|
+
if platform.system().lower() == 'windows':
|
|
80
|
+
try:
|
|
81
|
+
if hasattr(sys.stdout, 'reconfigure'):
|
|
82
|
+
sys.stdout.reconfigure(encoding='utf-8')
|
|
83
|
+
elif hasattr(sys.stdout, 'buffer'):
|
|
84
|
+
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
|
|
85
|
+
else:
|
|
86
|
+
return False
|
|
87
|
+
return True
|
|
88
|
+
except Exception:
|
|
89
|
+
return False
|
|
90
|
+
return True
|
|
43
91
|
|
|
44
92
|
def _setup_logger(self) -> logging.Logger:
|
|
93
|
+
"""設置logger"""
|
|
45
94
|
logger = logging.getLogger(self.name)
|
|
46
95
|
logger.setLevel(logging.INFO)
|
|
47
96
|
|
|
48
|
-
#
|
|
97
|
+
# 移除現有的 handlers
|
|
49
98
|
for handler in logger.handlers[:]:
|
|
50
99
|
handler.close()
|
|
51
100
|
logger.removeHandler(handler)
|
|
52
101
|
|
|
53
|
-
#
|
|
102
|
+
# 清理 ANSI 格式化器
|
|
54
103
|
class CleanFormatter(logging.Formatter):
|
|
55
104
|
def format(self, record):
|
|
56
105
|
formatted_msg = super().format(record)
|
|
57
106
|
return re.sub(r'\033\[[0-9;]*m', '', formatted_msg)
|
|
58
107
|
|
|
59
|
-
#
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
108
|
+
# 設置檔案處理器
|
|
109
|
+
try:
|
|
110
|
+
log_dir = Path(self.log_path)
|
|
111
|
+
log_dir.mkdir(parents=True, exist_ok=True)
|
|
112
|
+
file_handler = logging.FileHandler(
|
|
113
|
+
log_dir / f'{self.name}.log',
|
|
114
|
+
encoding='utf-8',
|
|
115
|
+
errors='replace'
|
|
116
|
+
)
|
|
117
|
+
file_handler.setFormatter(
|
|
118
|
+
CleanFormatter('%(asctime)s - %(message)s',
|
|
119
|
+
datefmt='%Y-%m-%d %H:%M:%S')
|
|
120
|
+
)
|
|
121
|
+
logger.addHandler(file_handler)
|
|
122
|
+
except Exception as e:
|
|
123
|
+
print(f"Warning: Could not set up file logging: {e}")
|
|
124
|
+
|
|
125
|
+
# 設置控制台處理器
|
|
63
126
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
64
127
|
console_handler.setFormatter(logging.Formatter('%(message)s'))
|
|
65
|
-
|
|
66
|
-
logger.addHandler(file_handler)
|
|
67
128
|
logger.addHandler(console_handler)
|
|
68
129
|
|
|
69
130
|
return logger
|
|
70
131
|
|
|
132
|
+
def _safe_print(self, text: str) -> str:
|
|
133
|
+
"""安全打印,處理編碼問題"""
|
|
134
|
+
if not self.unicode_support:
|
|
135
|
+
text = text.encode('ascii', 'replace').decode('ascii')
|
|
136
|
+
return text
|
|
137
|
+
|
|
71
138
|
def info(self, msg: str):
|
|
72
|
-
self.logger.info(msg)
|
|
139
|
+
self.logger.info(self._safe_print(msg))
|
|
73
140
|
|
|
74
141
|
def warning(self, msg: str):
|
|
75
|
-
self.logger.warning(msg)
|
|
142
|
+
self.logger.warning(self._safe_print(msg))
|
|
76
143
|
|
|
77
144
|
def error(self, msg: str):
|
|
78
|
-
self.logger.error(msg)
|
|
145
|
+
self.logger.error(self._safe_print(msg))
|
|
79
146
|
|
|
80
147
|
def info_box(self, text: str, color_part: str = None, width: int = 80):
|
|
81
|
-
"""
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
Args:
|
|
85
|
-
text: Base text format (e.g., "Reading {} RAW DATA from {} to {}")
|
|
86
|
-
color_part: Part of text to be colored (e.g., "RAW DATA")
|
|
87
|
-
width: Box width
|
|
88
|
-
"""
|
|
148
|
+
"""創建帶框的消息,可選擇性地為部分文本著色"""
|
|
149
|
+
# 處理文本
|
|
89
150
|
display_text = text.replace(color_part, " " * len(color_part)) if color_part else text
|
|
90
151
|
|
|
152
|
+
# 計算padding
|
|
91
153
|
left_padding = " " * ((width - len(display_text)) // 2)
|
|
92
154
|
right_padding = " " * (width - len(display_text) - len(left_padding))
|
|
93
155
|
|
|
94
|
-
|
|
156
|
+
# 處理顏色
|
|
157
|
+
if color_part and self.color_support:
|
|
158
|
+
content = text.replace(color_part, f"{self.CYAN}{color_part}{self.RESET}")
|
|
159
|
+
else:
|
|
160
|
+
content = text
|
|
95
161
|
|
|
96
162
|
__content__ = f"{left_padding}{content}{right_padding}"
|
|
97
163
|
|
|
98
|
-
|
|
99
|
-
self.info(f"
|
|
100
|
-
self.info(f"
|
|
164
|
+
# 使用當前設置的框架字符
|
|
165
|
+
self.info(f"{self.BOX_TOP_LEFT}{self.BOX_HORIZONTAL * width}{self.BOX_TOP_RIGHT}")
|
|
166
|
+
self.info(f"{self.BOX_VERTICAL}{__content__}{self.BOX_VERTICAL}")
|
|
167
|
+
self.info(f"{self.BOX_BOTTOM_LEFT}{self.BOX_HORIZONTAL * width}{self.BOX_BOTTOM_RIGHT}")
|
|
@@ -8,7 +8,7 @@ class Reader(AbstractReader):
|
|
|
8
8
|
|
|
9
9
|
def _raw_reader(self, file):
|
|
10
10
|
if file.stat().st_size / 1024 < 550:
|
|
11
|
-
self.logger.info(f'\t {file} may not be a whole daily data. Make sure the file is correct.')
|
|
11
|
+
self.logger.info(f'\t {file.name} may not be a whole daily data. Make sure the file is correct.')
|
|
12
12
|
|
|
13
13
|
_df = read_table(file, parse_dates={'time': [0, 1]}, index_col='time',
|
|
14
14
|
delimiter=r'\s+', skiprows=5, usecols=range(67))
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from pandas import to_datetime, read_table
|
|
3
|
+
|
|
4
|
+
from AeroViz.rawDataReader.core import AbstractReader
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Reader(AbstractReader):
|
|
8
|
+
nam = 'APS'
|
|
9
|
+
|
|
10
|
+
def _raw_reader(self, file):
|
|
11
|
+
with open(file, 'r', encoding='utf-8', errors='ignore') as f:
|
|
12
|
+
_df = read_table(f, skiprows=6, parse_dates={'Time': ['Date', 'Start Time']},
|
|
13
|
+
date_format='%m/%d/%y %H:%M:%S').set_index('Time')
|
|
14
|
+
|
|
15
|
+
# 542 nm ~ 1981 nm
|
|
16
|
+
_df = _df.iloc[:, 3:54].rename(columns=lambda x: round(float(x), 4))
|
|
17
|
+
|
|
18
|
+
_df_idx = to_datetime(_df.index, format='%m/%d/%y %H:%M:%S', errors='coerce')
|
|
19
|
+
|
|
20
|
+
return _df.set_index(_df_idx).loc[_df_idx.dropna()]
|
|
21
|
+
|
|
22
|
+
# QC data
|
|
23
|
+
def _QC(self, _df):
|
|
24
|
+
_df = _df.copy()
|
|
25
|
+
_index = _df.index.copy()
|
|
26
|
+
|
|
27
|
+
# mask out the data size lower than 7
|
|
28
|
+
_df.loc[:, 'total'] = _df.sum(axis=1, min_count=1) * (np.diff(np.log(_df.keys().to_numpy(float)))).mean()
|
|
29
|
+
|
|
30
|
+
hourly_counts = (_df['total']
|
|
31
|
+
.dropna()
|
|
32
|
+
.resample('h')
|
|
33
|
+
.size()
|
|
34
|
+
.resample('6min')
|
|
35
|
+
.ffill()
|
|
36
|
+
.reindex(_df.index, method='ffill', tolerance='6min'))
|
|
37
|
+
|
|
38
|
+
# Remove data with less than 6 data per hour
|
|
39
|
+
_df = _df.mask(hourly_counts < 6)
|
|
40
|
+
|
|
41
|
+
# remove total conc. lower than 700 or lower than 1
|
|
42
|
+
_df = _df.mask((_df['total'] > 700) | (_df['total'] < 1))
|
|
43
|
+
|
|
44
|
+
return _df[_df.keys()[:-1]]
|
|
@@ -187,6 +187,8 @@ class Reader(AbstractReader):
|
|
|
187
187
|
['Cl-', 'NO2-', 'NO3-', 'SO42-'],
|
|
188
188
|
['SO42-', 'NO3-', 'NH4+'])
|
|
189
189
|
|
|
190
|
+
CA_range = () # CA, AC Q3=1.5 * IQR
|
|
191
|
+
|
|
190
192
|
_df['+_mole'] = _df[_cation].div([23, 18, 39, (24 / 2), (40 / 2)]).sum(axis=1, skipna=True)
|
|
191
193
|
_df['-_mole'] = _df[_anion].div([35.5, 46, 62, (96 / 2)]).sum(axis=1, skipna=True)
|
|
192
194
|
|
|
@@ -9,12 +9,12 @@ class Reader(AbstractReader):
|
|
|
9
9
|
|
|
10
10
|
def _raw_reader(self, file):
|
|
11
11
|
with open(file, 'r', encoding='utf-8', errors='ignore') as f:
|
|
12
|
-
_df = read_csv(f, skiprows=3)
|
|
12
|
+
_df = read_csv(f, skiprows=3, on_bad_lines='skip')
|
|
13
13
|
|
|
14
14
|
_df['Start Date/Time'] = _df['Start Date/Time'].str.strip()
|
|
15
15
|
_df['time'] = to_datetime(_df['Start Date/Time'], format='%m/%d/%Y %I:%M:%S %p', errors='coerce')
|
|
16
16
|
|
|
17
|
-
if _df['time'].isna().
|
|
17
|
+
if _df['time'].isna().all():
|
|
18
18
|
_df['time'] = to_datetime(_df['Start Date/Time'], format='%m/%d/%Y %H:%M:%S', errors='coerce')
|
|
19
19
|
|
|
20
20
|
_df = _df.set_index('time')
|
|
@@ -73,8 +73,8 @@ class Reader(AbstractReader):
|
|
|
73
73
|
|
|
74
74
|
# QC data
|
|
75
75
|
def _QC(self, _df):
|
|
76
|
-
MDL = {'Thermal_OC': 0.3,
|
|
77
|
-
'Optical_OC': 0.3,
|
|
76
|
+
MDL = {'Thermal_OC': 0.3, # 0.89
|
|
77
|
+
'Optical_OC': 0.3, # 0.08
|
|
78
78
|
'Thermal_EC': 0.015,
|
|
79
79
|
'Optical_EC': 0.015
|
|
80
80
|
}
|
|
@@ -59,25 +59,42 @@ class Reader(AbstractReader):
|
|
|
59
59
|
if _df_smps.columns[0] != self.size_range[0] or _df_smps.columns[-1] != self.size_range[1]:
|
|
60
60
|
self.logger.info(f'\tSMPS file: {file.name} is not match the default size range {self.size_range}, '
|
|
61
61
|
f'it is ({_df_smps.columns[0]}, {_df_smps.columns[-1]})')
|
|
62
|
+
return None
|
|
62
63
|
|
|
63
64
|
return _df_smps.apply(to_numeric, errors='coerce')
|
|
64
65
|
|
|
65
66
|
# QC data
|
|
66
67
|
def _QC(self, _df):
|
|
68
|
+
_df = _df.copy()
|
|
69
|
+
_index = _df.index.copy()
|
|
70
|
+
|
|
67
71
|
size_range_mask = (_df.columns.astype(float) >= self.size_range[0]) & (
|
|
68
|
-
|
|
72
|
+
_df.columns.astype(float) <= self.size_range[1])
|
|
69
73
|
_df = _df.loc[:, size_range_mask]
|
|
70
74
|
|
|
71
75
|
# mask out the data size lower than 7
|
|
72
|
-
_df['total'] = _df.sum(axis=1, min_count=1) * (np.diff(np.log(_df.
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
_df.loc[:, 'total'] = _df.sum(axis=1, min_count=1) * (np.diff(np.log(_df.columns[:-1].to_numpy(float)))).mean()
|
|
77
|
+
|
|
78
|
+
hourly_counts = (_df['total']
|
|
79
|
+
.dropna()
|
|
80
|
+
.resample('h')
|
|
81
|
+
.size()
|
|
82
|
+
.resample('6min')
|
|
83
|
+
.ffill()
|
|
84
|
+
.reindex(_df.index, method='ffill', tolerance='6min'))
|
|
75
85
|
|
|
76
|
-
#
|
|
86
|
+
# Remove data with less than 6 data per hour
|
|
87
|
+
_df = _df.mask(hourly_counts < 6)
|
|
88
|
+
|
|
89
|
+
# remove total conc. (dN) lower than 2000
|
|
77
90
|
_df = _df.mask(_df['total'] < 2000)
|
|
91
|
+
_df = _df.drop('total', axis=1)
|
|
92
|
+
|
|
93
|
+
# remove single bin conc. (dN/dlogdp) larger than 1e6
|
|
94
|
+
_df = _df.mask((_df > 1e6).any(axis=1))
|
|
78
95
|
|
|
79
96
|
# remove the bin over 400 nm which num. conc. larger than 4000
|
|
80
|
-
|
|
81
|
-
_df
|
|
97
|
+
large_bins = _df.columns[_df.columns.astype(float) >= 400]
|
|
98
|
+
_df = _df.mask((_df[large_bins] > 4000).any(axis=1))
|
|
82
99
|
|
|
83
|
-
return _df
|
|
100
|
+
return _df
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: AeroViz
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.13
|
|
4
4
|
Summary: Aerosol science
|
|
5
5
|
Author-email: alex <alex870521@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -25,6 +25,10 @@ Requires-Dist: windrose==1.9.2
|
|
|
25
25
|
Requires-Dist: cartopy==0.24.1
|
|
26
26
|
Requires-Dist: tabulate==0.9.0
|
|
27
27
|
Requires-Dist: rich~=13.7.1
|
|
28
|
+
Provides-Extra: test
|
|
29
|
+
Requires-Dist: pytest>=7.0.0; extra == "test"
|
|
30
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
31
|
+
Requires-Dist: pytest-mock>=3.10.0; extra == "test"
|
|
28
32
|
Provides-Extra: dev
|
|
29
33
|
Requires-Dist: black>=23.0; extra == "dev"
|
|
30
34
|
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
@@ -36,10 +40,6 @@ Provides-Extra: docs
|
|
|
36
40
|
Requires-Dist: mkdocs>=1.4.0; extra == "docs"
|
|
37
41
|
Requires-Dist: mkdocs-material>=8.0; extra == "docs"
|
|
38
42
|
Requires-Dist: mkdocstrings[python]>=0.18.0; extra == "docs"
|
|
39
|
-
Provides-Extra: test
|
|
40
|
-
Requires-Dist: pytest>=7.0.0; extra == "test"
|
|
41
|
-
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
42
|
-
Requires-Dist: pytest-mock>=3.10.0; extra == "test"
|
|
43
43
|
|
|
44
44
|
## <div align="center">AeroViz for Aerosol Science Visualization</div>
|
|
45
45
|
|
|
@@ -103,10 +103,24 @@ from pathlib import Path
|
|
|
103
103
|
from AeroViz import RawDataReader, DataProcess, plot
|
|
104
104
|
|
|
105
105
|
# Read data from a supported instrument
|
|
106
|
-
data = RawDataReader(
|
|
106
|
+
data = RawDataReader(
|
|
107
|
+
'NEPH',
|
|
108
|
+
Path('/path/to/data'),
|
|
109
|
+
start=datetime(2024, 2, 1),
|
|
110
|
+
end=datetime(2024, 4, 30)
|
|
111
|
+
)
|
|
112
|
+
```
|
|
107
113
|
|
|
108
|
-
|
|
109
|
-
|
|
114
|
+
```pycon
|
|
115
|
+
> Concole output
|
|
116
|
+
╔════════════════════════════════════════════════════════════════════════════════╗
|
|
117
|
+
║ Reading NEPH RAW DATA from 2024-02-01 00:00:00 to 2024-04-30 23:59:59 ║
|
|
118
|
+
╚════════════════════════════════════════════════════════════════════════════════╝
|
|
119
|
+
▶ Reading NEPH files ━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 file_name.dat
|
|
120
|
+
▶ Scatter Coe. (550 nm)
|
|
121
|
+
├─ Sample Rate : 100.0%
|
|
122
|
+
├─ Valid Rate : 100.0%
|
|
123
|
+
└─ Total Rate : 100.0%
|
|
110
124
|
```
|
|
111
125
|
|
|
112
126
|
For more detailed usage instructions, please refer to our [User Guide](docs/guide).
|
|
@@ -125,12 +139,3 @@ For detailed documentation, please refer to the `docs` folder, which includes:
|
|
|
125
139
|
|
|
126
140
|
## <div align="center">Contact</div>
|
|
127
141
|
For bug reports and feature requests please visit [GitHub Issues](https://github.com/Alex870521/DataPlot/issues).
|
|
128
|
-
|
|
129
|
-
<div align="center">
|
|
130
|
-
|
|
131
|
-
<a href="https://github.com/Alex870521"><img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-social-github.png?raw=true" width="3%" alt="Alex870521 GitHub"></a>
|
|
132
|
-
<img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-transparent.png?raw=true" width="3%">
|
|
133
|
-
<a href="https://www.linkedin.com/in/Alex870521/"><img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-social-linkedin.png?raw=true" width="3%" alt="Alex870521 LinkedIn"></a>
|
|
134
|
-
<img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-transparent.png?raw=true" width="3%">
|
|
135
|
-
<a href="https://medium.com/@alex870521"><img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-social-medium.png?raw=true" width="3%" alt="Alex870521 Medium"></a>
|
|
136
|
-
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
AeroViz/__init__.py,sha256=4ICXg4UATkGXIUziaXcPX2Yaqj6OK5SL0ilU1JKeGFw,341
|
|
2
|
-
AeroViz/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
2
|
+
AeroViz/__pycache__/__init__.cpython-312.pyc,sha256=FLHxMkgqsZTVz_j18m8CR_cZw6OVn-HO-yrkHTWaYU8,428
|
|
3
3
|
AeroViz/data/DEFAULT_DATA.csv,sha256=eeeyeh8vSLKkE5tAF0TYnUNOyQIH98VA41bJaAP204Y,2248526
|
|
4
4
|
AeroViz/data/DEFAULT_PNSD_DATA.csv,sha256=imLvLA80oYwo_jzXZtlQn5hZ76d47HUIlK2jp0tZPrg,2636511
|
|
5
5
|
AeroViz/data/hysplit_example_data.txt,sha256=DWfY83EW3fOcv9dW-Y4pudq8-M7BJlXD-tlMSYrAk2w,8946
|
|
@@ -13,10 +13,10 @@ AeroViz/dataProcess/Chemistry/_partition.py,sha256=tKhb6BJns46UiUlEq6Zq7ahYnvUJ_
|
|
|
13
13
|
AeroViz/dataProcess/Chemistry/_teom.py,sha256=IiM-TrifWpQLTbKllG-4k4c3mvQulfcmjswWu6muCXA,486
|
|
14
14
|
AeroViz/dataProcess/Chemistry/isrpia.cnf,sha256=iWXTqsOZFmNrJxAI9nYuilZ9h6ru1icdPFVim7YKc_k,566
|
|
15
15
|
AeroViz/dataProcess/Chemistry/isrpia2.exe,sha256=xFYPTXHSjl_-atmVcTmqqOkTZgUn1p8h-kFMcoGMIQw,1560032
|
|
16
|
-
AeroViz/dataProcess/Chemistry/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
16
|
+
AeroViz/dataProcess/Chemistry/__pycache__/__init__.cpython-312.pyc,sha256=rIleRsSDQvRrm_ohTbx2RhhWpkfnqc9xD71LNlJRWF4,2712
|
|
17
17
|
AeroViz/dataProcess/Optical/Angstrom_exponent.py,sha256=KSGM_hf2oUPsLoLuhYSRDK5zdekwce9KgqhzRnf2Y4g,706
|
|
18
18
|
AeroViz/dataProcess/Optical/PyMieScatt_update.py,sha256=3W2nqo9sQLqj9dqWh5Eqx2XUdu44bGWDLTa3QnjiUvM,20943
|
|
19
|
-
AeroViz/dataProcess/Optical/_IMPROVE.py,sha256=
|
|
19
|
+
AeroViz/dataProcess/Optical/_IMPROVE.py,sha256=deS94SmoW9H3YyFyzCZ6mWLYoY2f2M-UWLr4qN6RwbI,1662
|
|
20
20
|
AeroViz/dataProcess/Optical/__init__.py,sha256=h_IYhaum0DhK7Qw6lWFvjAEv7uAqLVVPEwU0V4hJnX4,1371
|
|
21
21
|
AeroViz/dataProcess/Optical/_absorption.py,sha256=pYHIoj_R23wKvxR4acUqqU9JXKY40wgsFvZH78rETrY,1234
|
|
22
22
|
AeroViz/dataProcess/Optical/_extinction.py,sha256=anUemSXmLvJi2CSxqTYgQCgUW4pSUqgZ0q0xZ4zs0zY,1189
|
|
@@ -25,9 +25,9 @@ AeroViz/dataProcess/Optical/_mie_sd.py,sha256=cbWSorfG-l92csaXsZJ7005f8ij2H_VZop
|
|
|
25
25
|
AeroViz/dataProcess/Optical/_scattering.py,sha256=w5xXXOfafV9a_dXY60YqTyzFDZppjBJeLcKl5PeCQe4,961
|
|
26
26
|
AeroViz/dataProcess/Optical/fRH.pkl,sha256=PhJ-BYTaUDjl2Lp5Wz0zeiLQCzrsNdq8nP7Jd1BXyXE,4528
|
|
27
27
|
AeroViz/dataProcess/Optical/mie_theory.py,sha256=EC3SsUaq5G3SdQyPMQxcosbEokqAgJw-4Gz6moJiOsk,8666
|
|
28
|
-
AeroViz/dataProcess/Optical/__pycache__/PyMieScatt_update.cpython-312.pyc,sha256=
|
|
29
|
-
AeroViz/dataProcess/Optical/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
30
|
-
AeroViz/dataProcess/Optical/__pycache__/mie_theory.cpython-312.pyc,sha256=
|
|
28
|
+
AeroViz/dataProcess/Optical/__pycache__/PyMieScatt_update.cpython-312.pyc,sha256=LYzJJp0k6jgTCKJTfY1fdnNlOfozHo2KXwABW13EMD8,32602
|
|
29
|
+
AeroViz/dataProcess/Optical/__pycache__/__init__.cpython-312.pyc,sha256=X-QD03BZkeRSfIr_RaVTj1-_PXIX89YB768KRCdGk0g,2114
|
|
30
|
+
AeroViz/dataProcess/Optical/__pycache__/mie_theory.cpython-312.pyc,sha256=BWN95UyyU_u8F4pJ-58Jn6n4s0eenESDYe5BgAbn9PE,10662
|
|
31
31
|
AeroViz/dataProcess/SizeDistr/__init__.py,sha256=fka1IJW4wZzYWE9HjWi8i03ab0JLFXOUdaHWYs4VHEQ,2172
|
|
32
32
|
AeroViz/dataProcess/SizeDistr/__merge.py,sha256=A-ZmduUA9a0nVM8szhG1AWhsfUPu2UhGIaqFLcmg7Lk,9422
|
|
33
33
|
AeroViz/dataProcess/SizeDistr/_merge.py,sha256=CyZwUc2M4lL-OE74e8mXq41nC6X0LJTAV8TwpO3fS2o,9176
|
|
@@ -37,14 +37,14 @@ AeroViz/dataProcess/SizeDistr/_merge_v3.py,sha256=HN2ARFmeWOawOWRPPv_pHEGBBZNgXV
|
|
|
37
37
|
AeroViz/dataProcess/SizeDistr/_merge_v4.py,sha256=b8RVAievGIOLrmJHJXRsKXQ1tkMkm6rx43S7XAfeXE4,16228
|
|
38
38
|
AeroViz/dataProcess/SizeDistr/_size_distr.py,sha256=ULhGKlxE9QmbDO_PS3HOSKzepeMfJZWabJvGXqsDEvE,3259
|
|
39
39
|
AeroViz/dataProcess/SizeDistr/prop.py,sha256=7f18SOkkLgDiY_g1c1We8g-3WDJJIFcxkfR4F99jUgc,1845
|
|
40
|
-
AeroViz/dataProcess/SizeDistr/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
40
|
+
AeroViz/dataProcess/SizeDistr/__pycache__/__init__.cpython-312.pyc,sha256=Qwohs7S-XWfIKtrLVNwnO-fJ9JOJRPp-DsbhvinJ2tE,2552
|
|
41
41
|
AeroViz/dataProcess/VOC/__init__.py,sha256=8GNP0RMymTkJXK18pSgfLHqrKPWboN-3x1_Ke4UrI44,259
|
|
42
42
|
AeroViz/dataProcess/VOC/_potential_par.py,sha256=h3rVdvtBvC6xHa_ZG4Oq5eXezeSZtHNy6T6I40maIcM,3863
|
|
43
43
|
AeroViz/dataProcess/VOC/support_voc.json,sha256=tMYp_NERqhSriVRE2NavXh33CQ5CnsbJHtmMFlE5q_E,6804
|
|
44
|
-
AeroViz/dataProcess/VOC/__pycache__/__init__.cpython-312.pyc,sha256
|
|
45
|
-
AeroViz/dataProcess/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
44
|
+
AeroViz/dataProcess/VOC/__pycache__/__init__.cpython-312.pyc,sha256=29EEEGkLJVhyUOBRVAgg0PuCUsNVms1Kv4UL8OnTNko,716
|
|
45
|
+
AeroViz/dataProcess/__pycache__/__init__.cpython-312.pyc,sha256=LX4kwEtUJ5FbMeQ16SayFTAVhHUDH29tzFPMNKtTODk,1067
|
|
46
46
|
AeroViz/dataProcess/core/__init__.py,sha256=FhGwqlP8ZwXZQS0LjH0YOz2g1Q2yJniUUhRZ_jDOQ6k,2707
|
|
47
|
-
AeroViz/dataProcess/core/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
47
|
+
AeroViz/dataProcess/core/__pycache__/__init__.cpython-312.pyc,sha256=wCflcyS_o3UdgDK9QZP5qJnLU4QLty-sat8AwJXrJ40,4430
|
|
48
48
|
AeroViz/plot/__init__.py,sha256=Cy42d1t58zeutxLYDkm8bFbRNGE0G1T8VpqGj1li1Cw,419
|
|
49
49
|
AeroViz/plot/bar.py,sha256=cSPKJLWGifCzICCZVPcbZtrDrea_AStlwSli9-b-lsA,4246
|
|
50
50
|
AeroViz/plot/box.py,sha256=8zDd8jYndSv5f0P1lFeX0m7VWYh9okYgJTClh2Lj7Dg,2115
|
|
@@ -53,30 +53,30 @@ AeroViz/plot/radar.py,sha256=QHXkLQlAZZQDWHcqVGJBeRsGiu45GYmy3lN6gwlh6xY,6965
|
|
|
53
53
|
AeroViz/plot/regression.py,sha256=mTCNrCAYvH7QjIb_5WlltCR1Kqwer1anpGEsxmO2S3o,7292
|
|
54
54
|
AeroViz/plot/scatter.py,sha256=sxk5QxgC1Jk9PuY18q9aRgR_Ipvg5dM1RkwYQxRkn1c,6787
|
|
55
55
|
AeroViz/plot/violin.py,sha256=pU2Z2yTWocEtImmCAmbtn0WvXtUOrnCGOdDOrLxjooU,2689
|
|
56
|
-
AeroViz/plot/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
57
|
-
AeroViz/plot/__pycache__/bar.cpython-312.pyc,sha256=
|
|
58
|
-
AeroViz/plot/__pycache__/box.cpython-312.pyc,sha256=
|
|
59
|
-
AeroViz/plot/__pycache__/pie.cpython-312.pyc,sha256
|
|
60
|
-
AeroViz/plot/__pycache__/radar.cpython-312.pyc,sha256=
|
|
61
|
-
AeroViz/plot/__pycache__/regression.cpython-312.pyc,sha256=
|
|
62
|
-
AeroViz/plot/__pycache__/scatter.cpython-312.pyc,sha256=
|
|
63
|
-
AeroViz/plot/__pycache__/violin.cpython-312.pyc,sha256=
|
|
56
|
+
AeroViz/plot/__pycache__/__init__.cpython-312.pyc,sha256=H2fAxz8aWhaTx2C2lLi4rZoKXs_OxTpwfxIIJbKS9z8,684
|
|
57
|
+
AeroViz/plot/__pycache__/bar.cpython-312.pyc,sha256=GIS_u7yT7l9Sz0_xFNV0q9Z_yiZS0bPybTxfZz6pL-w,5954
|
|
58
|
+
AeroViz/plot/__pycache__/box.cpython-312.pyc,sha256=U--3TliX5Z9zBHbAwCLkKw8PsApo8cuhWNVDkPxxDk4,4043
|
|
59
|
+
AeroViz/plot/__pycache__/pie.cpython-312.pyc,sha256=-2svuDKLULbs-jesS1A3s2U-0M1t2k9kjTBykJDnFXY,10689
|
|
60
|
+
AeroViz/plot/__pycache__/radar.cpython-312.pyc,sha256=hj0NonJkBRFQMa3tJvykKvUcszkrTAG06F1fW7l-MFk,9335
|
|
61
|
+
AeroViz/plot/__pycache__/regression.cpython-312.pyc,sha256=L3MtICT3jCzCZMHdxXCGTfuYrrcnE_Nu7yc0U9s0Acw,8417
|
|
62
|
+
AeroViz/plot/__pycache__/scatter.cpython-312.pyc,sha256=FkUQwzz9ksz0g15SUe48En4g5e8B5COOX8hbLrlF-Pk,9540
|
|
63
|
+
AeroViz/plot/__pycache__/violin.cpython-312.pyc,sha256=AhMFDdicI2kQtNErRvuEXsS_3WklMB23GpMselCTDf4,4291
|
|
64
64
|
AeroViz/plot/distribution/__init__.py,sha256=nhbIegWczkuEfWsE7-2jfF0dnpmPDzJJzjq8Fuh6q5k,28
|
|
65
65
|
AeroViz/plot/distribution/distribution.py,sha256=sAjqtqKavFwQqI8PGPFnpvZFSU-w2UKjcTTC5L91f4E,20595
|
|
66
|
-
AeroViz/plot/distribution/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
67
|
-
AeroViz/plot/distribution/__pycache__/distribution.cpython-312.pyc,sha256=
|
|
66
|
+
AeroViz/plot/distribution/__pycache__/__init__.cpython-312.pyc,sha256=OJCa9q6knPypl1gBXEesf6i9i2kj-TceI2hultZ9khs,202
|
|
67
|
+
AeroViz/plot/distribution/__pycache__/distribution.cpython-312.pyc,sha256=NBtpOVMygoQS3rST64THhzFACZfp4SAm-jL73XUrG8U,30983
|
|
68
68
|
AeroViz/plot/meteorology/CBPF.py,sha256=4BjPNW2H2Q9HSyDvqxGAibQSIieKkt7CrFQo1rmdKWQ,11136
|
|
69
69
|
AeroViz/plot/meteorology/__init__.py,sha256=6HRc9TwUDOohULJ4hURbQSMKlHfoZzG1zLS1AUg0fH4,85
|
|
70
|
-
AeroViz/plot/meteorology/hysplit.py,sha256=
|
|
70
|
+
AeroViz/plot/meteorology/hysplit.py,sha256=gUlg1Gr-PbqDQI8bWqnHR5UpzRGstvGM0QrrT_EpWtg,2910
|
|
71
71
|
AeroViz/plot/meteorology/wind_rose.py,sha256=Bp2LjyJhm5FRINH6UUb70g9rA9kZ1oK-9rLvSGHBjwU,2876
|
|
72
|
-
AeroViz/plot/meteorology/__pycache__/CBPF.cpython-312.pyc,sha256=
|
|
73
|
-
AeroViz/plot/meteorology/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
74
|
-
AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc,sha256=
|
|
75
|
-
AeroViz/plot/meteorology/__pycache__/wind_rose.cpython-312.pyc,sha256
|
|
72
|
+
AeroViz/plot/meteorology/__pycache__/CBPF.cpython-312.pyc,sha256=O4f4ZOp4SZsnt-PUD21jwtJCMB3HtK5oBqSE7xhUEpk,15329
|
|
73
|
+
AeroViz/plot/meteorology/__pycache__/__init__.cpython-312.pyc,sha256=gTwvq0eD9pWEyVdUspn8oYfKD__uDg38-Wtw4m0UzoI,261
|
|
74
|
+
AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc,sha256=40LvnGQi6L6ZgKLFIKzi7whRroyCbFpChQ6QUsrhjDg,4013
|
|
75
|
+
AeroViz/plot/meteorology/__pycache__/wind_rose.cpython-312.pyc,sha256=w2soN0PsU2CO_o26Og5LE3DdZw5w9bsVLRAwrNEvmr0,3413
|
|
76
76
|
AeroViz/plot/optical/__init__.py,sha256=5S2WPq8NouPYgc46c1XBveSL8Cxs3w8wNYN7vWIpB-s,23
|
|
77
77
|
AeroViz/plot/optical/optical.py,sha256=j8LUSga9BvVjZnGKNG8bt62E9xoBoO2OQxvDBqY6U90,13664
|
|
78
|
-
AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
79
|
-
AeroViz/plot/optical/__pycache__/optical.cpython-312.pyc,sha256=
|
|
78
|
+
AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc,sha256=rRnMB8EloeJRE-JcOyOdvscbi2QsxANGecHJW8JgtSA,192
|
|
79
|
+
AeroViz/plot/optical/__pycache__/optical.cpython-312.pyc,sha256=dcLmDnAy1DUsifbJgIcll2NN0dQF6qQcwVhccXQopPU,18435
|
|
80
80
|
AeroViz/plot/templates/__init__.py,sha256=VXp73SqrSF1WR9WYhHpHtbhvFcb1CR4JeV1tPQvCEEI,227
|
|
81
81
|
AeroViz/plot/templates/ammonium_rich.py,sha256=a46rfwhSZ3LIj71LxdOnklAFyy6Xe_VQ-kh1komnZ5g,1225
|
|
82
82
|
AeroViz/plot/templates/contour.py,sha256=fAM6Wn_EmENQM1IW6KJpwmLva6D9P2dEAaK6cNQBtdQ,1678
|
|
@@ -84,19 +84,19 @@ AeroViz/plot/templates/corr_matrix.py,sha256=VeiwBwmg_v6LYslJvhSqweiLBheR3vGfPYx
|
|
|
84
84
|
AeroViz/plot/templates/diurnal_pattern.py,sha256=TOE4PvHluZhjZvDEeZIv8hcb-PthBNDrgEWtyPmwMcg,2051
|
|
85
85
|
AeroViz/plot/templates/koschmieder.py,sha256=YMtok3T5VHlzLphnsrkchNRnw5UE3XSLYDne42Efofo,3343
|
|
86
86
|
AeroViz/plot/templates/metal_heatmap.py,sha256=ngqJFiOPCoExPKv-lHvgB1XCSr9fF_jSKmx4VwjUUXQ,4961
|
|
87
|
-
AeroViz/plot/templates/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
88
|
-
AeroViz/plot/templates/__pycache__/ammonium_rich.cpython-312.pyc,sha256=
|
|
89
|
-
AeroViz/plot/templates/__pycache__/contour.cpython-312.pyc,sha256=
|
|
90
|
-
AeroViz/plot/templates/__pycache__/corr_matrix.cpython-312.pyc,sha256=
|
|
91
|
-
AeroViz/plot/templates/__pycache__/diurnal_pattern.cpython-312.pyc,sha256=
|
|
92
|
-
AeroViz/plot/templates/__pycache__/koschmieder.cpython-312.pyc,sha256=
|
|
93
|
-
AeroViz/plot/templates/__pycache__/metal_heatmap.cpython-312.pyc,sha256=
|
|
87
|
+
AeroViz/plot/templates/__pycache__/__init__.cpython-312.pyc,sha256=NNSnuVWQna0jMn6VnSkqxjX2EO780h76cIfrbavyrVg,413
|
|
88
|
+
AeroViz/plot/templates/__pycache__/ammonium_rich.cpython-312.pyc,sha256=DJ9byPFONzaGSkfkO9AQYYc1yK9ZCySROzFVPNdQzIc,2201
|
|
89
|
+
AeroViz/plot/templates/__pycache__/contour.cpython-312.pyc,sha256=g55fWXKDV89dj6-3bJppKtxaxBSXZafzSKsu_eWsE50,3550
|
|
90
|
+
AeroViz/plot/templates/__pycache__/corr_matrix.cpython-312.pyc,sha256=b8OyGsLEfAav_gsHwD2BrGvi4RsxgiqN4fq47ly2J9E,6130
|
|
91
|
+
AeroViz/plot/templates/__pycache__/diurnal_pattern.cpython-312.pyc,sha256=nIT94tt6lFIIAl48yg_CB0yOwi1mvQ-qzYPe-Gjk_ao,3422
|
|
92
|
+
AeroViz/plot/templates/__pycache__/koschmieder.cpython-312.pyc,sha256=eEg5EZduoYX_baUN--uDxklhvJiGsrHT42_QewDYxNY,5660
|
|
93
|
+
AeroViz/plot/templates/__pycache__/metal_heatmap.cpython-312.pyc,sha256=W-UlFDhLqkOG2gS-C3fhG2lGyb2SsnaTeCflp-XyKqc,7003
|
|
94
94
|
AeroViz/plot/timeseries/__init__.py,sha256=LQ_aE32pvp5ouC--BRa0NwSJ48DYO3rFaOt4AKGmn_s,50
|
|
95
95
|
AeroViz/plot/timeseries/template.py,sha256=ey16q66UAOLhXGKHAPGbRp-QD3J6GkF_cXhkrRIybS8,1472
|
|
96
96
|
AeroViz/plot/timeseries/timeseries.py,sha256=SnGxPceWXSI43iajfsOW2sUpQdh9wjZsUuAUEhJ-f-Y,16170
|
|
97
|
-
AeroViz/plot/timeseries/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
98
|
-
AeroViz/plot/timeseries/__pycache__/template.cpython-312.pyc,sha256=
|
|
99
|
-
AeroViz/plot/timeseries/__pycache__/timeseries.cpython-312.pyc,sha256=
|
|
97
|
+
AeroViz/plot/timeseries/__pycache__/__init__.cpython-312.pyc,sha256=8_zZW8J3ffSViAB7rJTC9IUYZW5TrT5WOhMHlO9cy5Q,221
|
|
98
|
+
AeroViz/plot/timeseries/__pycache__/template.cpython-312.pyc,sha256=WT1j4W_s4E08rSyVqoCH9W_0aguXaYAi7c69CVgIFcc,1919
|
|
99
|
+
AeroViz/plot/timeseries/__pycache__/timeseries.cpython-312.pyc,sha256=6JVRnI5iNrhMdLSTkavp6BMDUfbcWqz9wtLHaBVAdIw,20489
|
|
100
100
|
AeroViz/plot/utils/__init__.py,sha256=sxp3nfUnyVIIXYd-F874gEHkhQiDnMPDE1nJ_Z98270,104
|
|
101
101
|
AeroViz/plot/utils/_color.py,sha256=Vhjo-v4UWFME1JbbBR_Ro8FRj6dHB2O5Sud_9lpdu_U,2797
|
|
102
102
|
AeroViz/plot/utils/_unit.py,sha256=Abum0WDnq08DzkSoxkKvBc0mYKo8izIDmgduPo9Q27A,1671
|
|
@@ -104,66 +104,66 @@ AeroViz/plot/utils/fRH.json,sha256=t-2ux4TLOYAB-4jJ72LSM4jv1jk9XkaxKYNMDepMHIg,6
|
|
|
104
104
|
AeroViz/plot/utils/plt_utils.py,sha256=JYYtmEKoKqvZ8mr3QEHdYcWabaBMhNWkgEmeBTdZZ-g,3438
|
|
105
105
|
AeroViz/plot/utils/sklearn_utils.py,sha256=hKFfkVkYLRxkIDKvO9COHXwhjD_UWqQigdT3mDToni4,2098
|
|
106
106
|
AeroViz/plot/utils/units.json,sha256=JKcqvLA6dkc8REV_NhX85Jl9LA4iAZxzw9RJp6JTla0,2965
|
|
107
|
-
AeroViz/plot/utils/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
108
|
-
AeroViz/plot/utils/__pycache__/_color.cpython-312.pyc,sha256=
|
|
109
|
-
AeroViz/plot/utils/__pycache__/_unit.cpython-312.pyc,sha256
|
|
110
|
-
AeroViz/plot/utils/__pycache__/plt_utils.cpython-312.pyc,sha256=
|
|
111
|
-
AeroViz/plot/utils/__pycache__/sklearn_utils.cpython-312.pyc,sha256=
|
|
112
|
-
AeroViz/rawDataReader/__init__.py,sha256=
|
|
113
|
-
AeroViz/rawDataReader/__pycache__/__init__.cpython-312.pyc,sha256
|
|
107
|
+
AeroViz/plot/utils/__pycache__/__init__.cpython-312.pyc,sha256=61xgPGKe6GRfFd-ON1Z4yKGff-hpLiD5KtF0KBwN7as,292
|
|
108
|
+
AeroViz/plot/utils/__pycache__/_color.cpython-312.pyc,sha256=8Ij09NrEwH8CkfZeBFa-RGZ9MIxJFv3Y1onlgijVP4w,3959
|
|
109
|
+
AeroViz/plot/utils/__pycache__/_unit.cpython-312.pyc,sha256=j8_LVnoIVi6qWIBD4sjoeA8WIWan00kWj9g9_X51pOU,3427
|
|
110
|
+
AeroViz/plot/utils/__pycache__/plt_utils.cpython-312.pyc,sha256=PC_1dQbOeTIcuUhYWjdI3v5GDVZPgHh_fAEXZHH-IVY,4670
|
|
111
|
+
AeroViz/plot/utils/__pycache__/sklearn_utils.cpython-312.pyc,sha256=_LzaRNr-bm716gmq8X5QrY8Os_Df-ZLOSgKKgI4hmz4,3018
|
|
112
|
+
AeroViz/rawDataReader/__init__.py,sha256=2EFnj-aVQj7epo6PlJnKlYI09BB-2-YRKCt2Y7nzIT0,4891
|
|
113
|
+
AeroViz/rawDataReader/__pycache__/__init__.cpython-312.pyc,sha256=-3JgJy2UP21jrbR5beRyFnPM1KysFAGYHhyL_PaY4jQ,5519
|
|
114
114
|
AeroViz/rawDataReader/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
115
|
-
AeroViz/rawDataReader/config/supported_instruments.py,sha256=
|
|
116
|
-
AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
117
|
-
AeroViz/rawDataReader/config/__pycache__/supported_instruments.cpython-312.pyc,sha256=
|
|
118
|
-
AeroViz/rawDataReader/core/__init__.py,sha256=
|
|
119
|
-
AeroViz/rawDataReader/core/logger.py,sha256=
|
|
115
|
+
AeroViz/rawDataReader/config/supported_instruments.py,sha256=aMdYwl5zTqukuJT1BQT-kj_PtplL0xeJBIRoO-FYcFo,5983
|
|
116
|
+
AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc,sha256=32azKcyFplQRmsRW_u4jJP3tDwapWUfYZCHvp_BXQfo,171
|
|
117
|
+
AeroViz/rawDataReader/config/__pycache__/supported_instruments.cpython-312.pyc,sha256=kvzYggXTzIQ2kApW2qhvPas_R55McwWebRAEv4oKBtA,5192
|
|
118
|
+
AeroViz/rawDataReader/core/__init__.py,sha256=7atDzK_SKfMWpTKPbfRO4r7l1vvsPOQ1ZcAmP-LEuuE,13259
|
|
119
|
+
AeroViz/rawDataReader/core/logger.py,sha256=Mb7souR4ncbvWxi7mBjF3OflG1ZOI1l3atGkbgy1YLo,5809
|
|
120
120
|
AeroViz/rawDataReader/core/qc.py,sha256=tFIVsfph8yZIK6NRKQxaZYHcruJclriKSvR0oC12T0Q,5698
|
|
121
|
-
AeroViz/rawDataReader/core/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
122
|
-
AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc,sha256=
|
|
123
|
-
AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc,sha256=
|
|
124
|
-
AeroViz/rawDataReader/script/AE33.py,sha256=
|
|
121
|
+
AeroViz/rawDataReader/core/__pycache__/__init__.cpython-312.pyc,sha256=Ulmi0yqqMqPbwJZOuSoIdgQ5RZJfkFt59OYF3zfEwDI,19929
|
|
122
|
+
AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc,sha256=87aS2NLqJ9z7_MFJqJce8j2wXzas-RX3L8jtfbeFo9g,8937
|
|
123
|
+
AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc,sha256=QUSsgmm0igaBhIWRxzFRKmItpp8kIPAX1SOVh3yGnes,8271
|
|
124
|
+
AeroViz/rawDataReader/script/AE33.py,sha256=EAC1neDgOaWxJyf-YgrAYUWU85NtAScbblFoSlmFtIU,1283
|
|
125
125
|
AeroViz/rawDataReader/script/AE43.py,sha256=GjcICBJ3nIANyMd4kovteBUtkyCGLTos07BczgSCuVE,1231
|
|
126
|
-
AeroViz/rawDataReader/script/
|
|
126
|
+
AeroViz/rawDataReader/script/APS.py,sha256=HrPRkE3DUFQ_dgGhZ4NHosW8vOvl0lqUlpaICn2EGbk,1527
|
|
127
127
|
AeroViz/rawDataReader/script/Aurora.py,sha256=xcLKE5dlsqc-apK3n-j_8OZ0kF_f4B08ptutaAPiGLQ,1509
|
|
128
128
|
AeroViz/rawDataReader/script/BC1054.py,sha256=tuDyq8M5BPbmu1yJr9zXYS2piMGz08yTQXGT6tK9jxA,1675
|
|
129
129
|
AeroViz/rawDataReader/script/EPA.py,sha256=MESkZHHr60kyHFSLqSeSjzSrx_ya-GqFhFGlPIHMLeI,1649
|
|
130
130
|
AeroViz/rawDataReader/script/GRIMM.py,sha256=-D4U83ihjAqcvOAnk7NET59IZfV1JzPYKRQjrIQyBDM,846
|
|
131
131
|
AeroViz/rawDataReader/script/IGAC.py,sha256=i6WT3rX0n0e4hq7NfWN6tVwCuKAeV9ARxPkXZSbQj74,2387
|
|
132
132
|
AeroViz/rawDataReader/script/MA350.py,sha256=EfPTFhgDAjI7r0G6kW7pjog-4MBOnvW0cyFqIkCxEP8,1597
|
|
133
|
-
AeroViz/rawDataReader/script/Minion.py,sha256=
|
|
133
|
+
AeroViz/rawDataReader/script/Minion.py,sha256=lTn7VMmApmkGtbDMkTVXIGFp51Dw99Cd5c0bMQPIFl0,7872
|
|
134
134
|
AeroViz/rawDataReader/script/NEPH.py,sha256=HkGcjFPpcXM9OnrcV6sMp0G5wYnhJP1NbTMQUb1zVLc,3233
|
|
135
|
-
AeroViz/rawDataReader/script/OCEC.py,sha256=
|
|
136
|
-
AeroViz/rawDataReader/script/SMPS.py,sha256=
|
|
135
|
+
AeroViz/rawDataReader/script/OCEC.py,sha256=z13CB8uoGuWFc_3yd6IEYpvhsTOqtsbChQy5nCo57hw,3432
|
|
136
|
+
AeroViz/rawDataReader/script/SMPS.py,sha256=jpT0cF37_tUPSb9KfoUdplKrY2D4U6aATxBxjbd7MF0,3758
|
|
137
137
|
AeroViz/rawDataReader/script/TEOM.py,sha256=ID20CMi8z6pOjiGQLdCuCRWlcDu46SAP3MviiSUZE5w,2103
|
|
138
138
|
AeroViz/rawDataReader/script/VOC.py,sha256=GUme72ZyjSzREsFNUgOV_OCESIVJBXY9KrKP1c9Av7I,1248
|
|
139
139
|
AeroViz/rawDataReader/script/XRF.py,sha256=SU1-D94GkwdkjlNXcyXbwQG1tOYCpeL6GTVkaLBHc-s,187
|
|
140
|
-
AeroViz/rawDataReader/script/__init__.py,sha256=
|
|
141
|
-
AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc,sha256=
|
|
142
|
-
AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc,sha256=
|
|
143
|
-
AeroViz/rawDataReader/script/__pycache__/
|
|
144
|
-
AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc,sha256=
|
|
145
|
-
AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc,sha256=
|
|
146
|
-
AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc,sha256=
|
|
147
|
-
AeroViz/rawDataReader/script/__pycache__/GRIMM.cpython-312.pyc,sha256=
|
|
148
|
-
AeroViz/rawDataReader/script/__pycache__/IGAC.cpython-312.pyc,sha256=
|
|
149
|
-
AeroViz/rawDataReader/script/__pycache__/MA350.cpython-312.pyc,sha256=
|
|
150
|
-
AeroViz/rawDataReader/script/__pycache__/Minion.cpython-312.pyc,sha256=
|
|
151
|
-
AeroViz/rawDataReader/script/__pycache__/NEPH.cpython-312.pyc,sha256=
|
|
152
|
-
AeroViz/rawDataReader/script/__pycache__/OCEC.cpython-312.pyc,sha256=
|
|
153
|
-
AeroViz/rawDataReader/script/__pycache__/SMPS.cpython-312.pyc,sha256=
|
|
154
|
-
AeroViz/rawDataReader/script/__pycache__/TEOM.cpython-312.pyc,sha256=
|
|
155
|
-
AeroViz/rawDataReader/script/__pycache__/VOC.cpython-312.pyc,sha256=
|
|
156
|
-
AeroViz/rawDataReader/script/__pycache__/XRF.cpython-312.pyc,sha256=
|
|
157
|
-
AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
140
|
+
AeroViz/rawDataReader/script/__init__.py,sha256=uV0SLBTJ2_KYJUaqKttTcZrLN1KCYqVZLobOLYZ0V5U,209
|
|
141
|
+
AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc,sha256=ymtNb-2eThscC8Rra5rhe7uqr5XWW-9hIsTq2J69Jcw,2448
|
|
142
|
+
AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc,sha256=VQdGLDmlEKMsWEcfgYWkij7PDNs0gR3AsCze9FGt8CY,2198
|
|
143
|
+
AeroViz/rawDataReader/script/__pycache__/APS.cpython-312.pyc,sha256=ChMiYMdivvWri5Vk7DkCx-BpznVKljFcLtY3EzkJhTQ,2877
|
|
144
|
+
AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc,sha256=rJ36FxBcaA6ernjaUdSeI63V_FaeScYuKx9_zPSztT4,2662
|
|
145
|
+
AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc,sha256=ZjTTJCQVws64dcn5eAtaQZsCTkCYqYmCEslfDTyjSY0,2455
|
|
146
|
+
AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc,sha256=gjhCCVNCDXyodvajXwPDZ5rvmnRTf-E2jyci6gTsyVU,2343
|
|
147
|
+
AeroViz/rawDataReader/script/__pycache__/GRIMM.cpython-312.pyc,sha256=US_c06sDp-WQ5VE21JIOiWMH10nEfHX6zDjmFiF3EKU,1812
|
|
148
|
+
AeroViz/rawDataReader/script/__pycache__/IGAC.cpython-312.pyc,sha256=cGr8ednDXhs4_vO5Qp9JSXncjZJyA8mU-Cnv1fa3DgA,3645
|
|
149
|
+
AeroViz/rawDataReader/script/__pycache__/MA350.cpython-312.pyc,sha256=jdRp3CY9615_GQXGbLve8kFiqBsJVD9GWmL3QvaVZEc,2074
|
|
150
|
+
AeroViz/rawDataReader/script/__pycache__/Minion.cpython-312.pyc,sha256=cjMKSPmojUekh8EFvpPm4LCWJ2FaC-zNtmEeQEIP0so,10204
|
|
151
|
+
AeroViz/rawDataReader/script/__pycache__/NEPH.cpython-312.pyc,sha256=jybHTwa2PyqZaaaC-Dg5YQYBRpiCZG_CPHs43OZD5Z0,4556
|
|
152
|
+
AeroViz/rawDataReader/script/__pycache__/OCEC.cpython-312.pyc,sha256=kHG4_eklRFZsM4J95B5xOPNnONIaR89_8FDN-OY35qU,4179
|
|
153
|
+
AeroViz/rawDataReader/script/__pycache__/SMPS.cpython-312.pyc,sha256=QumvA89aaEs4itGx4HG1woKueu6CkEDD6KBUQvPYxaw,6103
|
|
154
|
+
AeroViz/rawDataReader/script/__pycache__/TEOM.cpython-312.pyc,sha256=295di0rtd86YKFPOJTb8VCDhzNk8yqvMGe03qQCFXXw,3329
|
|
155
|
+
AeroViz/rawDataReader/script/__pycache__/VOC.cpython-312.pyc,sha256=YT4oh_GxjNYlbJ-PTVyLHQkHVwAQP293nEFeOCM9Dqg,2493
|
|
156
|
+
AeroViz/rawDataReader/script/__pycache__/XRF.cpython-312.pyc,sha256=5eYddUd1BfPqmACl-4g2SUrAv-6V6Ic1dFqKTtfJiFQ,668
|
|
157
|
+
AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc,sha256=6aVpmng9b6CCS1B_2hYnuYBoYwrbbXcnt6qQ_h9pWQg,294
|
|
158
158
|
AeroViz/tools/__init__.py,sha256=3yC7clSoIAs7tvRy6M0BEM_N-0Fn2najLP7njT0ogME,74
|
|
159
159
|
AeroViz/tools/database.py,sha256=05VzjJyhlRrhsZdhfFQ__7CxGm4MdFekLjz3_Is5h9U,3430
|
|
160
160
|
AeroViz/tools/dataclassifier.py,sha256=_wpv0PlZ5EGkcNqHxfFtdEsYvHP5FVE8sMZXikhm_YE,4492
|
|
161
161
|
AeroViz/tools/dataprinter.py,sha256=Jq2Yztpa9YCOeLDVTrRs7PhSdNIPhEAexVj1YSuJ7hY,2249
|
|
162
|
-
AeroViz/tools/__pycache__/__init__.cpython-312.pyc,sha256=
|
|
163
|
-
AeroViz/tools/__pycache__/database.cpython-312.pyc,sha256=
|
|
164
|
-
AeroViz/tools/__pycache__/dataclassifier.cpython-312.pyc,sha256=
|
|
165
|
-
AeroViz-0.1.
|
|
166
|
-
AeroViz-0.1.
|
|
167
|
-
AeroViz-0.1.
|
|
168
|
-
AeroViz-0.1.
|
|
169
|
-
AeroViz-0.1.
|
|
162
|
+
AeroViz/tools/__pycache__/__init__.cpython-312.pyc,sha256=hOCG6ctzMrOYDdnLKbkC7U_BPJkLq3Hsdx9ePIqw5pw,254
|
|
163
|
+
AeroViz/tools/__pycache__/database.cpython-312.pyc,sha256=yLKUNRThHbl2OZNGy0Z2iNO7_ruFDSoA_uXrqJlgnp8,3605
|
|
164
|
+
AeroViz/tools/__pycache__/dataclassifier.cpython-312.pyc,sha256=8h55QR214SzU3WEVKP9FQGvuCE9d_NxzunvIoyovYiA,6801
|
|
165
|
+
AeroViz-0.1.13.dist-info/LICENSE,sha256=E-679GpGGkp3irmtuJXiT7R4cNUA4cmsH6Q7QUgPf5U,1069
|
|
166
|
+
AeroViz-0.1.13.dist-info/METADATA,sha256=B2HpeK799jNvFEednuRzeF5P4VX6EzUaLMf3WP6IRFg,5914
|
|
167
|
+
AeroViz-0.1.13.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
168
|
+
AeroViz-0.1.13.dist-info/top_level.txt,sha256=BYsmTst_o4FZOKRP1XIvIMlN6mMTTXNfnSToL2_nVbQ,8
|
|
169
|
+
AeroViz-0.1.13.dist-info/RECORD,,
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
from pandas import to_datetime, read_table
|
|
3
|
-
|
|
4
|
-
from AeroViz.rawDataReader.core import AbstractReader
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class Reader(AbstractReader):
|
|
8
|
-
nam = 'APS_3321'
|
|
9
|
-
|
|
10
|
-
def _raw_reader(self, file):
|
|
11
|
-
with open(file, 'r', encoding='utf-8', errors='ignore') as f:
|
|
12
|
-
_df = read_table(f, skiprows=6, parse_dates={'Time': ['Date', 'Start Time']}).set_index('Time')
|
|
13
|
-
_key = list(_df.keys()[3:54]) ## 542 ~ 1981
|
|
14
|
-
|
|
15
|
-
# create new keys
|
|
16
|
-
_newkey = {}
|
|
17
|
-
for _k in _key:
|
|
18
|
-
_newkey[_k] = float(_k).__round__(4)
|
|
19
|
-
# _newkey['Mode(m)'] = 'mode'
|
|
20
|
-
|
|
21
|
-
# get new dataframe
|
|
22
|
-
_df = _df[_newkey.keys()].rename(_newkey, axis=1)
|
|
23
|
-
# df['total'] = _df[list(_newkey.values())[:-1]].sum(axis=1)*(n.diff(n.log(_df.keys()[:-1].to_numpy(float))).mean()).copy()
|
|
24
|
-
|
|
25
|
-
_df_idx = to_datetime(_df.index, errors='coerce')
|
|
26
|
-
|
|
27
|
-
return _df.set_index(_df_idx).loc[_df_idx.dropna()]
|
|
28
|
-
|
|
29
|
-
# QC data
|
|
30
|
-
def _QC(self, _df):
|
|
31
|
-
# mask out the data size lower than 7
|
|
32
|
-
_df['total'] = _df.sum(axis=1, min_count=1) * (np.diff(np.log(_df.keys().to_numpy(float)))).mean()
|
|
33
|
-
_df_size = _df['total'].dropna().resample('1h').size().resample(_df.index.freq).ffill()
|
|
34
|
-
_df = _df.mask(_df_size < 7)
|
|
35
|
-
|
|
36
|
-
# remove total conc. lower than 700
|
|
37
|
-
_df = _df.mask(_df['total'] > 700)
|
|
38
|
-
|
|
39
|
-
# not confirmed
|
|
40
|
-
"""
|
|
41
|
-
## remove the bin over 4000 nm which num. conc. larger than 1
|
|
42
|
-
# _df_remv_ky = _df.keys()[:-2][_df.keys()[:-2]>=4.]
|
|
43
|
-
|
|
44
|
-
# _df_1hr[_df_remv_ky] = _df_1hr[_df_remv_ky].copy().mask(_df_1hr[_df_remv_ky]>1.)
|
|
45
|
-
# """
|
|
46
|
-
|
|
47
|
-
return _df[_df.keys()[:-1]]
|
|
Binary file
|
|
File without changes
|
|
File without changes
|