AeroViz 0.1.21__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.
Files changed (180) hide show
  1. AeroViz/__init__.py +13 -0
  2. AeroViz/__pycache__/__init__.cpython-312.pyc +0 -0
  3. AeroViz/data/DEFAULT_DATA.csv +1417 -0
  4. AeroViz/data/DEFAULT_PNSD_DATA.csv +1417 -0
  5. AeroViz/data/hysplit_example_data.txt +101 -0
  6. AeroViz/dataProcess/Chemistry/__init__.py +149 -0
  7. AeroViz/dataProcess/Chemistry/__pycache__/__init__.cpython-312.pyc +0 -0
  8. AeroViz/dataProcess/Chemistry/_calculate.py +557 -0
  9. AeroViz/dataProcess/Chemistry/_isoropia.py +150 -0
  10. AeroViz/dataProcess/Chemistry/_mass_volume.py +487 -0
  11. AeroViz/dataProcess/Chemistry/_ocec.py +172 -0
  12. AeroViz/dataProcess/Chemistry/isrpia.cnf +21 -0
  13. AeroViz/dataProcess/Chemistry/isrpia2.exe +0 -0
  14. AeroViz/dataProcess/Optical/PyMieScatt_update.py +577 -0
  15. AeroViz/dataProcess/Optical/_IMPROVE.py +452 -0
  16. AeroViz/dataProcess/Optical/__init__.py +281 -0
  17. AeroViz/dataProcess/Optical/__pycache__/PyMieScatt_update.cpython-312.pyc +0 -0
  18. AeroViz/dataProcess/Optical/__pycache__/__init__.cpython-312.pyc +0 -0
  19. AeroViz/dataProcess/Optical/__pycache__/mie_theory.cpython-312.pyc +0 -0
  20. AeroViz/dataProcess/Optical/_derived.py +518 -0
  21. AeroViz/dataProcess/Optical/_extinction.py +123 -0
  22. AeroViz/dataProcess/Optical/_mie_sd.py +912 -0
  23. AeroViz/dataProcess/Optical/_retrieve_RI.py +243 -0
  24. AeroViz/dataProcess/Optical/coefficient.py +72 -0
  25. AeroViz/dataProcess/Optical/fRH.pkl +0 -0
  26. AeroViz/dataProcess/Optical/mie_theory.py +260 -0
  27. AeroViz/dataProcess/README.md +271 -0
  28. AeroViz/dataProcess/SizeDistr/__init__.py +245 -0
  29. AeroViz/dataProcess/SizeDistr/__pycache__/__init__.cpython-312.pyc +0 -0
  30. AeroViz/dataProcess/SizeDistr/__pycache__/_size_dist.cpython-312.pyc +0 -0
  31. AeroViz/dataProcess/SizeDistr/_size_dist.py +810 -0
  32. AeroViz/dataProcess/SizeDistr/merge/README.md +93 -0
  33. AeroViz/dataProcess/SizeDistr/merge/__init__.py +20 -0
  34. AeroViz/dataProcess/SizeDistr/merge/_merge_v0.py +251 -0
  35. AeroViz/dataProcess/SizeDistr/merge/_merge_v0_1.py +246 -0
  36. AeroViz/dataProcess/SizeDistr/merge/_merge_v1.py +255 -0
  37. AeroViz/dataProcess/SizeDistr/merge/_merge_v2.py +244 -0
  38. AeroViz/dataProcess/SizeDistr/merge/_merge_v3.py +518 -0
  39. AeroViz/dataProcess/SizeDistr/merge/_merge_v4.py +422 -0
  40. AeroViz/dataProcess/SizeDistr/prop.py +62 -0
  41. AeroViz/dataProcess/VOC/__init__.py +14 -0
  42. AeroViz/dataProcess/VOC/__pycache__/__init__.cpython-312.pyc +0 -0
  43. AeroViz/dataProcess/VOC/_potential_par.py +108 -0
  44. AeroViz/dataProcess/VOC/support_voc.json +446 -0
  45. AeroViz/dataProcess/__init__.py +66 -0
  46. AeroViz/dataProcess/__pycache__/__init__.cpython-312.pyc +0 -0
  47. AeroViz/dataProcess/core/__init__.py +272 -0
  48. AeroViz/dataProcess/core/__pycache__/__init__.cpython-312.pyc +0 -0
  49. AeroViz/mcp_server.py +352 -0
  50. AeroViz/plot/__init__.py +13 -0
  51. AeroViz/plot/__pycache__/__init__.cpython-312.pyc +0 -0
  52. AeroViz/plot/__pycache__/bar.cpython-312.pyc +0 -0
  53. AeroViz/plot/__pycache__/box.cpython-312.pyc +0 -0
  54. AeroViz/plot/__pycache__/pie.cpython-312.pyc +0 -0
  55. AeroViz/plot/__pycache__/radar.cpython-312.pyc +0 -0
  56. AeroViz/plot/__pycache__/regression.cpython-312.pyc +0 -0
  57. AeroViz/plot/__pycache__/scatter.cpython-312.pyc +0 -0
  58. AeroViz/plot/__pycache__/violin.cpython-312.pyc +0 -0
  59. AeroViz/plot/bar.py +126 -0
  60. AeroViz/plot/box.py +69 -0
  61. AeroViz/plot/distribution/__init__.py +1 -0
  62. AeroViz/plot/distribution/__pycache__/__init__.cpython-312.pyc +0 -0
  63. AeroViz/plot/distribution/__pycache__/distribution.cpython-312.pyc +0 -0
  64. AeroViz/plot/distribution/distribution.py +576 -0
  65. AeroViz/plot/meteorology/CBPF.py +295 -0
  66. AeroViz/plot/meteorology/__init__.py +3 -0
  67. AeroViz/plot/meteorology/__pycache__/CBPF.cpython-312.pyc +0 -0
  68. AeroViz/plot/meteorology/__pycache__/__init__.cpython-312.pyc +0 -0
  69. AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc +0 -0
  70. AeroViz/plot/meteorology/__pycache__/wind_rose.cpython-312.pyc +0 -0
  71. AeroViz/plot/meteorology/hysplit.py +93 -0
  72. AeroViz/plot/meteorology/wind_rose.py +77 -0
  73. AeroViz/plot/optical/__init__.py +1 -0
  74. AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc +0 -0
  75. AeroViz/plot/optical/__pycache__/optical.cpython-312.pyc +0 -0
  76. AeroViz/plot/optical/optical.py +388 -0
  77. AeroViz/plot/pie.py +210 -0
  78. AeroViz/plot/radar.py +184 -0
  79. AeroViz/plot/regression.py +200 -0
  80. AeroViz/plot/scatter.py +174 -0
  81. AeroViz/plot/templates/__init__.py +6 -0
  82. AeroViz/plot/templates/__pycache__/__init__.cpython-312.pyc +0 -0
  83. AeroViz/plot/templates/__pycache__/ammonium_rich.cpython-312.pyc +0 -0
  84. AeroViz/plot/templates/__pycache__/contour.cpython-312.pyc +0 -0
  85. AeroViz/plot/templates/__pycache__/corr_matrix.cpython-312.pyc +0 -0
  86. AeroViz/plot/templates/__pycache__/diurnal_pattern.cpython-312.pyc +0 -0
  87. AeroViz/plot/templates/__pycache__/koschmieder.cpython-312.pyc +0 -0
  88. AeroViz/plot/templates/__pycache__/metal_heatmap.cpython-312.pyc +0 -0
  89. AeroViz/plot/templates/ammonium_rich.py +34 -0
  90. AeroViz/plot/templates/contour.py +47 -0
  91. AeroViz/plot/templates/corr_matrix.py +267 -0
  92. AeroViz/plot/templates/diurnal_pattern.py +61 -0
  93. AeroViz/plot/templates/koschmieder.py +95 -0
  94. AeroViz/plot/templates/metal_heatmap.py +164 -0
  95. AeroViz/plot/timeseries/__init__.py +2 -0
  96. AeroViz/plot/timeseries/__pycache__/__init__.cpython-312.pyc +0 -0
  97. AeroViz/plot/timeseries/__pycache__/template.cpython-312.pyc +0 -0
  98. AeroViz/plot/timeseries/__pycache__/timeseries.cpython-312.pyc +0 -0
  99. AeroViz/plot/timeseries/template.py +47 -0
  100. AeroViz/plot/timeseries/timeseries.py +446 -0
  101. AeroViz/plot/utils/__init__.py +4 -0
  102. AeroViz/plot/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  103. AeroViz/plot/utils/__pycache__/_color.cpython-312.pyc +0 -0
  104. AeroViz/plot/utils/__pycache__/_unit.cpython-312.pyc +0 -0
  105. AeroViz/plot/utils/__pycache__/plt_utils.cpython-312.pyc +0 -0
  106. AeroViz/plot/utils/__pycache__/sklearn_utils.cpython-312.pyc +0 -0
  107. AeroViz/plot/utils/_color.py +71 -0
  108. AeroViz/plot/utils/_unit.py +55 -0
  109. AeroViz/plot/utils/fRH.json +390 -0
  110. AeroViz/plot/utils/plt_utils.py +92 -0
  111. AeroViz/plot/utils/sklearn_utils.py +49 -0
  112. AeroViz/plot/utils/units.json +89 -0
  113. AeroViz/plot/violin.py +80 -0
  114. AeroViz/rawDataReader/FLOW.md +138 -0
  115. AeroViz/rawDataReader/__init__.py +220 -0
  116. AeroViz/rawDataReader/__pycache__/__init__.cpython-312.pyc +0 -0
  117. AeroViz/rawDataReader/config/__init__.py +0 -0
  118. AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc +0 -0
  119. AeroViz/rawDataReader/config/__pycache__/supported_instruments.cpython-312.pyc +0 -0
  120. AeroViz/rawDataReader/config/supported_instruments.py +135 -0
  121. AeroViz/rawDataReader/core/__init__.py +658 -0
  122. AeroViz/rawDataReader/core/__pycache__/__init__.cpython-312.pyc +0 -0
  123. AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc +0 -0
  124. AeroViz/rawDataReader/core/__pycache__/pre_process.cpython-312.pyc +0 -0
  125. AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc +0 -0
  126. AeroViz/rawDataReader/core/__pycache__/report.cpython-312.pyc +0 -0
  127. AeroViz/rawDataReader/core/logger.py +171 -0
  128. AeroViz/rawDataReader/core/pre_process.py +308 -0
  129. AeroViz/rawDataReader/core/qc.py +961 -0
  130. AeroViz/rawDataReader/core/report.py +579 -0
  131. AeroViz/rawDataReader/script/AE33.py +173 -0
  132. AeroViz/rawDataReader/script/AE43.py +151 -0
  133. AeroViz/rawDataReader/script/APS.py +339 -0
  134. AeroViz/rawDataReader/script/Aurora.py +191 -0
  135. AeroViz/rawDataReader/script/BAM1020.py +90 -0
  136. AeroViz/rawDataReader/script/BC1054.py +161 -0
  137. AeroViz/rawDataReader/script/EPA.py +79 -0
  138. AeroViz/rawDataReader/script/GRIMM.py +68 -0
  139. AeroViz/rawDataReader/script/IGAC.py +140 -0
  140. AeroViz/rawDataReader/script/MA350.py +179 -0
  141. AeroViz/rawDataReader/script/Minion.py +218 -0
  142. AeroViz/rawDataReader/script/NEPH.py +199 -0
  143. AeroViz/rawDataReader/script/OCEC.py +173 -0
  144. AeroViz/rawDataReader/script/Q-ACSM.py +12 -0
  145. AeroViz/rawDataReader/script/SMPS.py +389 -0
  146. AeroViz/rawDataReader/script/TEOM.py +181 -0
  147. AeroViz/rawDataReader/script/VOC.py +106 -0
  148. AeroViz/rawDataReader/script/Xact.py +244 -0
  149. AeroViz/rawDataReader/script/__init__.py +28 -0
  150. AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc +0 -0
  151. AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc +0 -0
  152. AeroViz/rawDataReader/script/__pycache__/APS.cpython-312.pyc +0 -0
  153. AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc +0 -0
  154. AeroViz/rawDataReader/script/__pycache__/BAM1020.cpython-312.pyc +0 -0
  155. AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc +0 -0
  156. AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc +0 -0
  157. AeroViz/rawDataReader/script/__pycache__/GRIMM.cpython-312.pyc +0 -0
  158. AeroViz/rawDataReader/script/__pycache__/IGAC.cpython-312.pyc +0 -0
  159. AeroViz/rawDataReader/script/__pycache__/MA350.cpython-312.pyc +0 -0
  160. AeroViz/rawDataReader/script/__pycache__/Minion.cpython-312.pyc +0 -0
  161. AeroViz/rawDataReader/script/__pycache__/NEPH.cpython-312.pyc +0 -0
  162. AeroViz/rawDataReader/script/__pycache__/OCEC.cpython-312.pyc +0 -0
  163. AeroViz/rawDataReader/script/__pycache__/Q-ACSM.cpython-312.pyc +0 -0
  164. AeroViz/rawDataReader/script/__pycache__/SMPS.cpython-312.pyc +0 -0
  165. AeroViz/rawDataReader/script/__pycache__/TEOM.cpython-312.pyc +0 -0
  166. AeroViz/rawDataReader/script/__pycache__/VOC.cpython-312.pyc +0 -0
  167. AeroViz/rawDataReader/script/__pycache__/Xact.cpython-312.pyc +0 -0
  168. AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc +0 -0
  169. AeroViz/tools/__init__.py +2 -0
  170. AeroViz/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  171. AeroViz/tools/__pycache__/database.cpython-312.pyc +0 -0
  172. AeroViz/tools/__pycache__/dataclassifier.cpython-312.pyc +0 -0
  173. AeroViz/tools/database.py +95 -0
  174. AeroViz/tools/dataclassifier.py +117 -0
  175. AeroViz/tools/dataprinter.py +58 -0
  176. aeroviz-0.1.21.dist-info/METADATA +294 -0
  177. aeroviz-0.1.21.dist-info/RECORD +180 -0
  178. aeroviz-0.1.21.dist-info/WHEEL +5 -0
  179. aeroviz-0.1.21.dist-info/licenses/LICENSE +21 -0
  180. aeroviz-0.1.21.dist-info/top_level.txt +1 -0
@@ -0,0 +1,294 @@
1
+ Metadata-Version: 2.4
2
+ Name: AeroViz
3
+ Version: 0.1.21
4
+ Summary: Aerosol data processing and visualization toolkit. Read, QC, and analyze data from SMPS, APS, AE33, TEOM, Nephelometer, XRF, and 15+ atmospheric instruments.
5
+ Author-email: Alex Chan <alex870521@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Alex870521/AeroViz
8
+ Project-URL: Documentation, https://alex870521.github.io/AeroViz/
9
+ Project-URL: Repository, https://github.com/Alex870521/AeroViz
10
+ Project-URL: Issues, https://github.com/Alex870521/AeroViz/issues
11
+ Project-URL: Changelog, https://github.com/Alex870521/AeroViz/blob/main/docs/CHANGELOG.md
12
+ Keywords: aerosol,atmospheric-science,air-quality,data-processing,visualization,PM2.5,PM10,black-carbon,particle-size-distribution,optical-properties,SMPS,APS,aethalometer,nephelometer,TEOM,XRF,OC-EC,environmental-monitoring,research,quality-control
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
17
+ Classifier: Topic :: Scientific/Engineering :: Visualization
18
+ Classifier: Topic :: Scientific/Engineering :: Chemistry
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: License :: OSI Approved :: MIT License
25
+ Classifier: Operating System :: OS Independent
26
+ Requires-Python: >=3.10
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Requires-Dist: pandas>=2.2.0
30
+ Requires-Dist: numpy>=1.26.4
31
+ Requires-Dist: matplotlib>=3.8.4
32
+ Requires-Dist: scipy>=1.14.0
33
+ Requires-Dist: seaborn>=0.13.2
34
+ Requires-Dist: scikit-learn>=1.5.1
35
+ Requires-Dist: windrose>=1.9.2
36
+ Requires-Dist: cartopy>=0.24.1
37
+ Requires-Dist: tabulate>=0.9.0
38
+ Requires-Dist: rich~=13.9.4
39
+ Requires-Dist: numba~=0.61.0
40
+ Provides-Extra: test
41
+ Requires-Dist: pytest>=7.0.0; extra == "test"
42
+ Requires-Dist: pytest-cov>=4.1.0; extra == "test"
43
+ Requires-Dist: pytest-mock>=3.10.0; extra == "test"
44
+ Provides-Extra: dev
45
+ Requires-Dist: black>=23.0; extra == "dev"
46
+ Requires-Dist: isort>=5.12.0; extra == "dev"
47
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
48
+ Requires-Dist: mypy>=1.5.0; extra == "dev"
49
+ Requires-Dist: build; extra == "dev"
50
+ Requires-Dist: twine; extra == "dev"
51
+ Provides-Extra: docs
52
+ Requires-Dist: mkdocs>=1.4.0; extra == "docs"
53
+ Requires-Dist: mkdocs-material>=8.0; extra == "docs"
54
+ Requires-Dist: mkdocstrings[python]>=0.18.0; extra == "docs"
55
+ Dynamic: license-file
56
+
57
+ <div align="center">
58
+
59
+ # AeroViz
60
+
61
+ **Aerosol Data Processing and Visualization Toolkit for Atmospheric Research**
62
+
63
+ [![Python](https://img.shields.io/pypi/pyversions/aeroviz?logo=python)](https://pypi.org/project/aeroviz/)
64
+ [![PyPI](https://img.shields.io/pypi/v/aeroviz?logo=pypi)](https://pypi.org/project/aeroviz/)
65
+ [![Pytest](https://img.shields.io/github/actions/workflow/status/Alex870521/aeroviz/pytest.yml?logo=pytest&label=pytest)](https://github.com/Alex870521/AeroViz/actions)
66
+ [![Documentation](https://img.shields.io/badge/docs-MkDocs-blue?logo=materialformkdocs)](https://alex870521.github.io/AeroViz/)
67
+ [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
68
+
69
+ </div>
70
+
71
+ AeroViz is a Python toolkit for reading, processing, and visualizing aerosol measurement data. It supports 18+ atmospheric instruments with built-in quality control, data processing, and publication-ready visualizations.
72
+
73
+ ## Installation
74
+
75
+ ```bash
76
+ pip install AeroViz
77
+ ```
78
+
79
+ ## Quick Start
80
+
81
+ ```python
82
+ from AeroViz import RawDataReader
83
+
84
+ # Read AE33 Aethalometer data (black carbon)
85
+ df = RawDataReader(
86
+ instrument='AE33',
87
+ path='/path/to/data',
88
+ start='2024-01-01',
89
+ end='2024-12-31',
90
+ mean_freq='1h', # Hourly averages
91
+ qc=True # Apply quality control
92
+ )
93
+
94
+ # Output: DataFrame with columns like BC1-BC7, abs_370-abs_950, AAE, eBC
95
+ print(df[['eBC', 'AAE']].describe())
96
+ ```
97
+
98
+ ## Supported Instruments
99
+
100
+ ### Black Carbon Monitors
101
+
102
+ | Instrument | Description | Output Columns |
103
+ |------------|-------------|----------------|
104
+ | **AE33** | Magee Aethalometer (7-wavelength) | `BC1`-`BC7`, `abs_370`-`abs_950`, `AAE`, `eBC` |
105
+ | **AE43** | Magee Aethalometer (7-wavelength) | `BC1`-`BC7`, `abs_370`-`abs_950`, `AAE`, `eBC` |
106
+ | **BC1054** | Met One Black Carbon Monitor | `BC`, `abs_880` |
107
+ | **MA350** | AethLabs microAeth (5-wavelength) | `BC1`-`BC5`, `abs_375`-`abs_880` |
108
+
109
+ ```python
110
+ # Example: Read black carbon data
111
+ bc = RawDataReader('AE33', '/data/AE33', '2024-01-01', '2024-06-30')
112
+ print(f"Mean eBC: {bc['eBC'].mean():.2f} ng/m³")
113
+ print(f"Mean AAE: {-bc['AAE'].mean():.2f}") # AAE stored as negative
114
+ ```
115
+
116
+ ### Particle Sizers
117
+
118
+ | Instrument | Description | Size Range | Output Columns |
119
+ |------------|-------------|------------|----------------|
120
+ | **SMPS** | Scanning Mobility Particle Sizer | 10-1000 nm | Size bins, `total_num`, `GMD_num`, `GSD_num` |
121
+ | **APS** | Aerodynamic Particle Sizer | 0.5-20 μm | Size bins, `total_num`, `GMD_num`, `GSD_num` |
122
+ | **GRIMM** | Optical Particle Counter | 0.25-32 μm | Size bins, number concentrations |
123
+
124
+ ```python
125
+ # Example: Read SMPS size distribution
126
+ smps = RawDataReader(
127
+ 'SMPS', '/data/SMPS', '2024-01-01', '2024-06-30',
128
+ size_range=(10, 500) # Filter to 10-500 nm
129
+ )
130
+ print(f"Total number: {smps['total_num'].mean():.0f} #/cm³")
131
+ print(f"GMD: {smps['GMD_num'].mean():.1f} nm")
132
+ ```
133
+
134
+ ### Mass Concentration
135
+
136
+ | Instrument | Description | Output Columns |
137
+ |------------|-------------|----------------|
138
+ | **TEOM** | Tapered Element Oscillating Microbalance | `PM_NV`, `PM_Total`, `Volatile_Fraction` |
139
+ | **BAM1020** | Beta Attenuation Monitor | `PM2.5`, `PM10` |
140
+
141
+ ```python
142
+ # Example: Read TEOM PM mass data
143
+ teom = RawDataReader('TEOM', '/data/TEOM', '2024-01-01', '2024-06-30')
144
+ print(f"PM2.5 (non-volatile): {teom['PM_NV'].mean():.1f} μg/m³")
145
+ print(f"PM2.5 (total): {teom['PM_Total'].mean():.1f} μg/m³")
146
+ ```
147
+
148
+ ### Optical Instruments
149
+
150
+ | Instrument | Description | Output Columns |
151
+ |------------|-------------|----------------|
152
+ | **NEPH** | TSI Nephelometer | `scattering_B`, `scattering_G`, `scattering_R`, `SAE` |
153
+ | **Aurora** | Ecotech Aurora 3000 | `scattering_B`, `scattering_G`, `scattering_R`, `SAE` |
154
+
155
+ ```python
156
+ # Example: Read nephelometer scattering data
157
+ neph = RawDataReader('Aurora', '/data/Aurora', '2024-01-01', '2024-06-30')
158
+ print(f"Scattering (550nm): {neph['scattering_G'].mean():.1f} Mm⁻¹")
159
+ ```
160
+
161
+ ### Chemical Composition
162
+
163
+ | Instrument | Description | Output Columns |
164
+ |------------|-------------|----------------|
165
+ | **Xact** | Cooper XRF Heavy Metals | `Fe`, `Zn`, `Pb`, `Cu`, `Mn`, `Cr`, `Ni`, `As`, `Cd`, ... |
166
+ | **OCEC** | Sunset OC/EC Analyzer | `OC`, `EC`, `TC`, `OC1`-`OC4`, `EC1`-`EC3` |
167
+ | **IGAC** | Ion Chromatograph | `SO4²⁻`, `NO3⁻`, `Cl⁻`, `NH4⁺`, `Na⁺`, `K⁺`, ... |
168
+ | **Q-ACSM** | Aerosol Chemical Speciation Monitor | `Org`, `SO4`, `NO3`, `NH4`, `Chl` |
169
+
170
+ ```python
171
+ # Example: Read XRF heavy metals data
172
+ xrf = RawDataReader('Xact', '/data/Xact', '2024-01-01', '2024-06-30')
173
+ print(f"Fe: {xrf['Fe'].mean():.1f} ng/m³")
174
+ print(f"Pb: {xrf['Pb'].mean():.2f} ng/m³")
175
+ ```
176
+
177
+ ### Other Instruments
178
+
179
+ | Instrument | Description |
180
+ |------------|-------------|
181
+ | **VOC** | Volatile Organic Compounds Analyzer |
182
+ | **EPA** | Taiwan EPA Air Quality Data |
183
+ | **Minion** | Low-cost Sensor Network |
184
+
185
+ ## Key Parameters
186
+
187
+ | Parameter | Type | Description | Default |
188
+ |-----------|------|-------------|---------|
189
+ | `instrument` | str | Instrument name (see tables above) | Required |
190
+ | `path` | str/Path | Directory containing raw data files | Required |
191
+ | `start` | str/datetime | Start date (`'2024-01-01'` or `datetime`) | Required |
192
+ | `end` | str/datetime | End date | Required |
193
+ | `mean_freq` | str | Output frequency: `'1h'`, `'30min'`, `'1D'` | `'1h'` |
194
+ | `qc` | bool/str | Quality control: `True`, `False`, or `'MS'` for monthly stats | `True` |
195
+ | `reset` | bool/str | `True` to reprocess, `'append'` to add new data | `False` |
196
+ | `size_range` | tuple | Size range in nm for SMPS/APS: `(min, max)` | `None` |
197
+
198
+ ## Quality Control
199
+
200
+ AeroViz applies automatic QC based on instrument-specific rules. The `QC_Flag` column indicates data quality:
201
+
202
+ | Flag | Description |
203
+ |------|-------------|
204
+ | `Valid` | Data passed all QC checks |
205
+ | `Insufficient` | Not enough raw data points in period |
206
+ | `Status Error` | Instrument reported error status |
207
+ | `Invalid BC` | Black carbon outside valid range |
208
+ | `Invalid Number Conc` | Particle count outside valid range |
209
+ | `Spike` | Detected sudden unrealistic change |
210
+
211
+ ```python
212
+ # Check data quality
213
+ df = RawDataReader('AE33', '/data/AE33', '2024-01-01', '2024-06-30')
214
+ print(df['QC_Flag'].value_counts())
215
+ # Valid 8000
216
+ # Insufficient 300
217
+ # Status Error 60
218
+ ```
219
+
220
+ ## Data Processing
221
+
222
+ Advanced analysis with specialized modules:
223
+
224
+ ```python
225
+ from AeroViz import DataProcess
226
+ from pathlib import Path
227
+
228
+ # Optical property calculations
229
+ optical = DataProcess(method='Optical', path_out=Path('./results'))
230
+
231
+ # Available methods:
232
+ # - 'Chemistry': Mass reconstruction, volume calculation, kappa
233
+ # - 'Optical': Mie theory, IMPROVE extinction, RI retrieval
234
+ # - 'SizeDistr': SMPS-APS merge, mode fitting, lung deposition
235
+ # - 'VOC': OFP, SOAP, MIR calculations
236
+ ```
237
+
238
+ ## Visualization
239
+
240
+ Publication-ready plots:
241
+
242
+ ```python
243
+ from AeroViz import plot
244
+
245
+ # Time series, diurnal patterns, wind rose, polar plots, etc.
246
+ ```
247
+
248
+ ## File Structure
249
+
250
+ AeroViz expects data organized by station and instrument:
251
+
252
+ ```
253
+ /data/
254
+ ├── Station_Instrument/
255
+ │ ├── raw_file_001.dat
256
+ │ ├── raw_file_002.dat
257
+ │ └── instrument_outputs/ # Auto-generated
258
+ │ ├── output_instrument.csv
259
+ │ ├── _read_instrument_qc.csv
260
+ │ └── report.json
261
+ ```
262
+
263
+ ## Documentation
264
+
265
+ - [Full Documentation](https://alex870521.github.io/AeroViz/)
266
+ - [API Reference](https://alex870521.github.io/AeroViz/api/RawDataReader/)
267
+ - [Changelog](docs/CHANGELOG.md)
268
+
269
+ ## Contributing
270
+
271
+ Contributions are welcome! Please see our [GitHub Issues](https://github.com/Alex870521/AeroViz/issues) for bug reports and feature requests.
272
+
273
+ ## License
274
+
275
+ MIT License - see [LICENSE](LICENSE) for details.
276
+
277
+ ## Citation
278
+
279
+ If you use AeroViz in your research, please cite:
280
+
281
+ ```
282
+ AeroViz: Aerosol Data Processing and Visualization Toolkit
283
+ https://github.com/Alex870521/AeroViz
284
+ ```
285
+
286
+ <div align="center">
287
+
288
+ ## Contributors
289
+
290
+ <a href="https://github.com/Alex870521"><img src="https://github.com/Alex870521.png" width="40" height="40" alt="Alex870521" style="border-radius: 50%;"></a>
291
+ <a href="https://github.com/yrr-Su"><img src="https://github.com/yrr-Su.png" width="40" height="40" alt="yrr-Su" style="border-radius: 50%;"></a>
292
+ <a href="https://github.com/Masbear"><img src="https://github.com/Masbear.png" width="40" height="40" alt="Masbear" style="border-radius: 50%;"></a>
293
+
294
+ </div>
@@ -0,0 +1,180 @@
1
+ AeroViz/__init__.py,sha256=4ICXg4UATkGXIUziaXcPX2Yaqj6OK5SL0ilU1JKeGFw,341
2
+ AeroViz/mcp_server.py,sha256=M2Hn9f1ynQJHWYwRfwhvMUm5Q0uiQ3Q-QQzFIZ2vHUQ,12367
3
+ AeroViz/__pycache__/__init__.cpython-312.pyc,sha256=piAP9-HtV7UPcsu9ExLHXfDFNkcqJd49JdTYrpwT7w8,428
4
+ AeroViz/data/DEFAULT_DATA.csv,sha256=eeeyeh8vSLKkE5tAF0TYnUNOyQIH98VA41bJaAP204Y,2248526
5
+ AeroViz/data/DEFAULT_PNSD_DATA.csv,sha256=imLvLA80oYwo_jzXZtlQn5hZ76d47HUIlK2jp0tZPrg,2636511
6
+ AeroViz/data/hysplit_example_data.txt,sha256=DWfY83EW3fOcv9dW-Y4pudq8-M7BJlXD-tlMSYrAk2w,8946
7
+ AeroViz/dataProcess/README.md,sha256=8qJvNdSAyyl16l09GpIAgwjKVg8Aa8nyv7kFPqjaT5o,6378
8
+ AeroViz/dataProcess/__init__.py,sha256=TMfNXQhZjNA4EKiTf30khM9BmD_4ga-SrmAajuUdx_Y,1922
9
+ AeroViz/dataProcess/Chemistry/__init__.py,sha256=Ejfwl-pEiP4RqY7l8aVvpDUEqeMraRsg5tUqkrLawPY,4462
10
+ AeroViz/dataProcess/Chemistry/_calculate.py,sha256=5KjtsX1ksRgvcQv329Bse-0zxKbQHLJ6sp4nn92eE-Q,19122
11
+ AeroViz/dataProcess/Chemistry/_isoropia.py,sha256=eV4jlLOOZupMURa2Ti_eC3OINKzMuEqlgzNyX01UUVY,5392
12
+ AeroViz/dataProcess/Chemistry/_mass_volume.py,sha256=-WGPYdkeWWzlnZpMjsNz9S2KFKvFZ58YHZt0Aiw0xm4,15655
13
+ AeroViz/dataProcess/Chemistry/_ocec.py,sha256=1UpSwdxYVy_LpUjtoaEUoXA-r1nKEFJoyYglf_6CoXA,5899
14
+ AeroViz/dataProcess/Chemistry/isrpia.cnf,sha256=iWXTqsOZFmNrJxAI9nYuilZ9h6ru1icdPFVim7YKc_k,566
15
+ AeroViz/dataProcess/Chemistry/isrpia2.exe,sha256=xFYPTXHSjl_-atmVcTmqqOkTZgUn1p8h-kFMcoGMIQw,1560032
16
+ AeroViz/dataProcess/Chemistry/__pycache__/__init__.cpython-312.pyc,sha256=GWpfFGmEtipFpNnBdBKKWT55oxFCpotc5fpEXR9b7gY,5237
17
+ AeroViz/dataProcess/Optical/PyMieScatt_update.py,sha256=9x3OJfryYmiIC8G9RlHlUW-gYcaGKUBc3n_XZemGxqg,21045
18
+ AeroViz/dataProcess/Optical/_IMPROVE.py,sha256=SylrC6PMu_E--Xj_IxbhhpfKttK056v4LFl7l1S1q1w,14537
19
+ AeroViz/dataProcess/Optical/__init__.py,sha256=GyTQOCuWV-ZUR97DnQ8zJ_NZ2smNCOy3ov9sOT5Hph0,10132
20
+ AeroViz/dataProcess/Optical/_derived.py,sha256=JdbQ8YEnSYifKHBSJITEsKOELqw2_hm7r4Y1rYS62r8,18512
21
+ AeroViz/dataProcess/Optical/_extinction.py,sha256=g1edR_otKRFMUVOV2Oy4fV1oC1Lbt58H2JIsqhTyctg,3678
22
+ AeroViz/dataProcess/Optical/_mie_sd.py,sha256=1ff0qI2QBhem4602iEz0CFnhiGejJUIKm7MB7opt9zo,30754
23
+ AeroViz/dataProcess/Optical/_retrieve_RI.py,sha256=fdeccSidvzZytNOEYOMkBRL1oUNpXw0iKkIeb8_QDYU,7909
24
+ AeroViz/dataProcess/Optical/coefficient.py,sha256=IEq8Bl0TtE8-6EArrwiiVvitOII4Cg1OUtM2DjtMvv8,2752
25
+ AeroViz/dataProcess/Optical/fRH.pkl,sha256=PhJ-BYTaUDjl2Lp5Wz0zeiLQCzrsNdq8nP7Jd1BXyXE,4528
26
+ AeroViz/dataProcess/Optical/mie_theory.py,sha256=EC3SsUaq5G3SdQyPMQxcosbEokqAgJw-4Gz6moJiOsk,8666
27
+ AeroViz/dataProcess/Optical/__pycache__/PyMieScatt_update.cpython-312.pyc,sha256=VK3EtfSyiPMeNo93aE8y8yVM79yhypPVZi8YvLnvt38,33049
28
+ AeroViz/dataProcess/Optical/__pycache__/__init__.cpython-312.pyc,sha256=6dme2QNxZuYfuyd6ErxyP2wAVW6h3JN6rXY_3ON9j0k,11030
29
+ AeroViz/dataProcess/Optical/__pycache__/mie_theory.cpython-312.pyc,sha256=UvT5kjNyGI22SAzrGiAmv65y8PC35V0XIUBFMVa4J2A,10662
30
+ AeroViz/dataProcess/SizeDistr/__init__.py,sha256=Kwbwg-2HtL2m1WMWg8jJTQUJVYhsFQZziJfX6-wv6Fc,8297
31
+ AeroViz/dataProcess/SizeDistr/_size_dist.py,sha256=jg1OZgQ39Q9JB1cs-cJuiLCBeiNU7MtNdMAXehaBQY0,26360
32
+ AeroViz/dataProcess/SizeDistr/prop.py,sha256=7f18SOkkLgDiY_g1c1We8g-3WDJJIFcxkfR4F99jUgc,1845
33
+ AeroViz/dataProcess/SizeDistr/__pycache__/__init__.cpython-312.pyc,sha256=NYs6bwi7qo4mnkI7UW5zqJ3Is6Yr5Vjqv7Z884hd51o,9551
34
+ AeroViz/dataProcess/SizeDistr/__pycache__/_size_dist.cpython-312.pyc,sha256=cinCKEx86uR7PJOJKBWYzAmTPEXUSeI8jtyDVAz9hnI,32192
35
+ AeroViz/dataProcess/SizeDistr/merge/README.md,sha256=JAXNUxpg-EU6rSq5FguP3YmA4OU3gpIFRm4tfRuwyZM,3039
36
+ AeroViz/dataProcess/SizeDistr/merge/__init__.py,sha256=P9UKoeO5hV3Lw_zYHecBIINnmg1PWYHCe0ZVT8VMUPk,677
37
+ AeroViz/dataProcess/SizeDistr/merge/_merge_v0.py,sha256=A-ZmduUA9a0nVM8szhG1AWhsfUPu2UhGIaqFLcmg7Lk,9422
38
+ AeroViz/dataProcess/SizeDistr/merge/_merge_v0_1.py,sha256=CyZwUc2M4lL-OE74e8mXq41nC6X0LJTAV8TwpO3fS2o,9176
39
+ AeroViz/dataProcess/SizeDistr/merge/_merge_v1.py,sha256=6Anb8DszoatK66tc9ccA6ZApbqtL7pZRPR5TKHj-Tbs,9526
40
+ AeroViz/dataProcess/SizeDistr/merge/_merge_v2.py,sha256=8OzUKw7hTg-yuQBipuFKgBS_7c7zbApN_BNr00G8q9c,9046
41
+ AeroViz/dataProcess/SizeDistr/merge/_merge_v3.py,sha256=HN2ARFmeWOawOWRPPv_pHEGBBZNgXVbH4dDTxcN7rdY,18749
42
+ AeroViz/dataProcess/SizeDistr/merge/_merge_v4.py,sha256=b8RVAievGIOLrmJHJXRsKXQ1tkMkm6rx43S7XAfeXE4,16228
43
+ AeroViz/dataProcess/VOC/__init__.py,sha256=8GNP0RMymTkJXK18pSgfLHqrKPWboN-3x1_Ke4UrI44,259
44
+ AeroViz/dataProcess/VOC/_potential_par.py,sha256=M1TBKON_tv7IcheFCT8yG3Z9pO-DOrpO-NocvmvLp8k,3880
45
+ AeroViz/dataProcess/VOC/support_voc.json,sha256=tMYp_NERqhSriVRE2NavXh33CQ5CnsbJHtmMFlE5q_E,6804
46
+ AeroViz/dataProcess/VOC/__pycache__/__init__.cpython-312.pyc,sha256=KLYS6TF_-7Tnpn7ChWMzkqCguIy7SQSsuYqzdbMieXo,716
47
+ AeroViz/dataProcess/__pycache__/__init__.cpython-312.pyc,sha256=atYpMYjbPdr3pHYNwmO9jftoBuxPOtl-nnCnIc6Zirc,2155
48
+ AeroViz/dataProcess/core/__init__.py,sha256=xjJqRmjebaiWj0pMpFXrvIt6YhUng8Yut3U0GwwnxaE,8146
49
+ AeroViz/dataProcess/core/__pycache__/__init__.cpython-312.pyc,sha256=whySOIQSVftbQud0cR53aDe9QuPsq7C3gMv7rGvoqxI,10298
50
+ AeroViz/plot/__init__.py,sha256=Cy42d1t58zeutxLYDkm8bFbRNGE0G1T8VpqGj1li1Cw,419
51
+ AeroViz/plot/bar.py,sha256=cSPKJLWGifCzICCZVPcbZtrDrea_AStlwSli9-b-lsA,4246
52
+ AeroViz/plot/box.py,sha256=8zDd8jYndSv5f0P1lFeX0m7VWYh9okYgJTClh2Lj7Dg,2115
53
+ AeroViz/plot/pie.py,sha256=POOiWcg1KbzUzn1dm4yVEL-1d2bTqUjSTkltHk5YYqU,7860
54
+ AeroViz/plot/radar.py,sha256=QHXkLQlAZZQDWHcqVGJBeRsGiu45GYmy3lN6gwlh6xY,6965
55
+ AeroViz/plot/regression.py,sha256=V4aCPUjg0kO9QSnPYfGil4_A_A1MbO6bM1ffZRbhReI,7417
56
+ AeroViz/plot/scatter.py,sha256=sxk5QxgC1Jk9PuY18q9aRgR_Ipvg5dM1RkwYQxRkn1c,6787
57
+ AeroViz/plot/violin.py,sha256=pU2Z2yTWocEtImmCAmbtn0WvXtUOrnCGOdDOrLxjooU,2689
58
+ AeroViz/plot/__pycache__/__init__.cpython-312.pyc,sha256=ZLwzaD8QnLX-IHSGqCuKS1o0GgZw8P4VviecFr4aniw,684
59
+ AeroViz/plot/__pycache__/bar.cpython-312.pyc,sha256=n1Ij84ZbG3tSxZ6N1M8fDPZs7U4ekPygVbw_u8Sug44,5954
60
+ AeroViz/plot/__pycache__/box.cpython-312.pyc,sha256=UKwRrgWvqCFLz0tTvtgSLE9KE17Gx6qJAUJMAOIzAK4,4043
61
+ AeroViz/plot/__pycache__/pie.cpython-312.pyc,sha256=F3JmKQiJsFCHhhWxEgi7p6dgSiHsc9E-S_nlqePuf_I,10689
62
+ AeroViz/plot/__pycache__/radar.cpython-312.pyc,sha256=4Q1oXNWVVTJkddAgHNpHfi0DkzoNNNXaOmW72oqe0p8,9335
63
+ AeroViz/plot/__pycache__/regression.cpython-312.pyc,sha256=iWz8ruVA4ro5yidi0uqcRRXZaW0CR1DrapH5ANUJ8qg,8542
64
+ AeroViz/plot/__pycache__/scatter.cpython-312.pyc,sha256=NLMx6UHbvQPT0i2vSahVxKAF5yyPqmle96xPo12JE6M,9540
65
+ AeroViz/plot/__pycache__/violin.cpython-312.pyc,sha256=f9Oj68g8hho9sjmHDm5SLKPYTeP0bsxHbrwQOpExx5Q,4291
66
+ AeroViz/plot/distribution/__init__.py,sha256=nhbIegWczkuEfWsE7-2jfF0dnpmPDzJJzjq8Fuh6q5k,28
67
+ AeroViz/plot/distribution/distribution.py,sha256=sAjqtqKavFwQqI8PGPFnpvZFSU-w2UKjcTTC5L91f4E,20595
68
+ AeroViz/plot/distribution/__pycache__/__init__.cpython-312.pyc,sha256=Fk39Ce9JbQW-wQPK4-wGAM60jFmyNPjeiaweSUuxpn0,202
69
+ AeroViz/plot/distribution/__pycache__/distribution.cpython-312.pyc,sha256=K5EaidAu5vIxZwaRUefHx3DRcgFU8WjxEbluHeSG0kI,30983
70
+ AeroViz/plot/meteorology/CBPF.py,sha256=4BjPNW2H2Q9HSyDvqxGAibQSIieKkt7CrFQo1rmdKWQ,11136
71
+ AeroViz/plot/meteorology/__init__.py,sha256=6HRc9TwUDOohULJ4hURbQSMKlHfoZzG1zLS1AUg0fH4,85
72
+ AeroViz/plot/meteorology/hysplit.py,sha256=gUlg1Gr-PbqDQI8bWqnHR5UpzRGstvGM0QrrT_EpWtg,2910
73
+ AeroViz/plot/meteorology/wind_rose.py,sha256=Bp2LjyJhm5FRINH6UUb70g9rA9kZ1oK-9rLvSGHBjwU,2876
74
+ AeroViz/plot/meteorology/__pycache__/CBPF.cpython-312.pyc,sha256=nj37anKs-l4xQFXHVceymOdErGC-_eqg8jpUEfl1jLA,15329
75
+ AeroViz/plot/meteorology/__pycache__/__init__.cpython-312.pyc,sha256=Ie-yielYH3oRNvhUBhEEZsSmAf4IE2svpt3st-8vdQw,261
76
+ AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc,sha256=FDkgC-TG5kBh6FzFBNdQcvP_n6A28NSCemgHChHFmJ8,4013
77
+ AeroViz/plot/meteorology/__pycache__/wind_rose.cpython-312.pyc,sha256=h1vvMDCGCdZ6D4Qo3I1kjbuSCyGxq-ezG66SADmohXY,3413
78
+ AeroViz/plot/optical/__init__.py,sha256=5S2WPq8NouPYgc46c1XBveSL8Cxs3w8wNYN7vWIpB-s,23
79
+ AeroViz/plot/optical/optical.py,sha256=j8LUSga9BvVjZnGKNG8bt62E9xoBoO2OQxvDBqY6U90,13664
80
+ AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc,sha256=8jyVQjbLLMovTd6HNRkA9uHzdlo-CblcyqYcxU1Vf5k,192
81
+ AeroViz/plot/optical/__pycache__/optical.cpython-312.pyc,sha256=HHpC7xs3Jx8dk_Z5JCzU0A_mEA80ZufAPdMbusv_gWY,18435
82
+ AeroViz/plot/templates/__init__.py,sha256=z6kNVmpYbfT24BlLeUwt-I8BCGBLcKuS17aWSAmatV8,246
83
+ AeroViz/plot/templates/ammonium_rich.py,sha256=a46rfwhSZ3LIj71LxdOnklAFyy6Xe_VQ-kh1komnZ5g,1225
84
+ AeroViz/plot/templates/contour.py,sha256=fAM6Wn_EmENQM1IW6KJpwmLva6D9P2dEAaK6cNQBtdQ,1678
85
+ AeroViz/plot/templates/corr_matrix.py,sha256=5o4BmcOk4wDX0e9cu_TPZJ2OeA9K8c9xVtz0QgwCsL8,9229
86
+ AeroViz/plot/templates/diurnal_pattern.py,sha256=TOE4PvHluZhjZvDEeZIv8hcb-PthBNDrgEWtyPmwMcg,2051
87
+ AeroViz/plot/templates/koschmieder.py,sha256=zAfv3tlC8tHyWm1PD93hDAx3hCzgIu19z-Pyfwb0y4I,3386
88
+ AeroViz/plot/templates/metal_heatmap.py,sha256=V0lvVsEtPzp_yJfOVX60rnkJOLotn8B5KNT36akOOSY,5218
89
+ AeroViz/plot/templates/__pycache__/__init__.cpython-312.pyc,sha256=l2P5HbDqU_lVVa0B4A7JFJqFkdO99lQbPt3nKjT5bWw,441
90
+ AeroViz/plot/templates/__pycache__/ammonium_rich.cpython-312.pyc,sha256=zyAhKF9dC1ik3tJgYGT1UBkBILcF1bXZx9yuEb7e_fc,2201
91
+ AeroViz/plot/templates/__pycache__/contour.cpython-312.pyc,sha256=vwrJewc-S0C1-Ltz4nVo_wV8QGe7CmTHUouqAjGqnkE,3550
92
+ AeroViz/plot/templates/__pycache__/corr_matrix.cpython-312.pyc,sha256=V3hHn0rOLlKPQaf03y_yf4D37-wYrSe_U0UIIK64BB8,13563
93
+ AeroViz/plot/templates/__pycache__/diurnal_pattern.cpython-312.pyc,sha256=bTVtuqBk12uGH9qtEPD6p6ZX2fV_8ntmzVEAPpOpEbs,3422
94
+ AeroViz/plot/templates/__pycache__/koschmieder.cpython-312.pyc,sha256=iHV_iK4I99yBko0uAON9btVoWtYKE9b3-nZA46t5M04,5753
95
+ AeroViz/plot/templates/__pycache__/metal_heatmap.cpython-312.pyc,sha256=25Rjl37Sz2HqRDOlakQBc-ji-_OBb6qQnL7DM6xv1XQ,7525
96
+ AeroViz/plot/timeseries/__init__.py,sha256=LQ_aE32pvp5ouC--BRa0NwSJ48DYO3rFaOt4AKGmn_s,50
97
+ AeroViz/plot/timeseries/template.py,sha256=ey16q66UAOLhXGKHAPGbRp-QD3J6GkF_cXhkrRIybS8,1472
98
+ AeroViz/plot/timeseries/timeseries.py,sha256=mldc6BVY0AsM52qzMwhKFDbqfp109sFVKxCd3PXz-jM,17846
99
+ AeroViz/plot/timeseries/__pycache__/__init__.cpython-312.pyc,sha256=9S8ORuvh64fbjpvdSofzbEw9h2xhJ0x7VwbdV_X-iUw,221
100
+ AeroViz/plot/timeseries/__pycache__/template.cpython-312.pyc,sha256=v8QXr2SUQ0Med16cBzWPnuyUIdE7iXjwScKPrjK3Jo0,1919
101
+ AeroViz/plot/timeseries/__pycache__/timeseries.cpython-312.pyc,sha256=SaGDzK4G2HlUzSYA30BQIjd3u2bznkC12FgZUF8m3kc,21800
102
+ AeroViz/plot/utils/__init__.py,sha256=sxp3nfUnyVIIXYd-F874gEHkhQiDnMPDE1nJ_Z98270,104
103
+ AeroViz/plot/utils/_color.py,sha256=Vhjo-v4UWFME1JbbBR_Ro8FRj6dHB2O5Sud_9lpdu_U,2797
104
+ AeroViz/plot/utils/_unit.py,sha256=Abum0WDnq08DzkSoxkKvBc0mYKo8izIDmgduPo9Q27A,1671
105
+ AeroViz/plot/utils/fRH.json,sha256=t-2ux4TLOYAB-4jJ72LSM4jv1jk9XkaxKYNMDepMHIg,6038
106
+ AeroViz/plot/utils/plt_utils.py,sha256=JYYtmEKoKqvZ8mr3QEHdYcWabaBMhNWkgEmeBTdZZ-g,3438
107
+ AeroViz/plot/utils/sklearn_utils.py,sha256=hKFfkVkYLRxkIDKvO9COHXwhjD_UWqQigdT3mDToni4,2098
108
+ AeroViz/plot/utils/units.json,sha256=JKcqvLA6dkc8REV_NhX85Jl9LA4iAZxzw9RJp6JTla0,2965
109
+ AeroViz/plot/utils/__pycache__/__init__.cpython-312.pyc,sha256=cSedTiYCOMUddBS6vTo01D49rYzoq-jxbSRKwKJJPDs,292
110
+ AeroViz/plot/utils/__pycache__/_color.cpython-312.pyc,sha256=jF7thbeZa30DzFoqh5Aq4Yn0oYZmuES_2ycm81FFi4w,3959
111
+ AeroViz/plot/utils/__pycache__/_unit.cpython-312.pyc,sha256=V3ygaPmqprul9Z_0DlnPgXo92lAAWB1UIrY2IkUveiU,3427
112
+ AeroViz/plot/utils/__pycache__/plt_utils.cpython-312.pyc,sha256=tpThzReUM3NA0gBGIXX06YuL9UaQjDBx6YFFVMyX7CY,4670
113
+ AeroViz/plot/utils/__pycache__/sklearn_utils.cpython-312.pyc,sha256=Vx4B6Lll0jF-blExITGxk3x9P-_gxp-gffCGhLALAUw,3018
114
+ AeroViz/rawDataReader/FLOW.md,sha256=kiAMKzX64H38AD7-FN1vicOkPpzlcv9dv9BYngeulew,10363
115
+ AeroViz/rawDataReader/__init__.py,sha256=4Vx4-jhvy339K4u83rBKbvIt9_yLZcArpbbo5zUO-ew,7704
116
+ AeroViz/rawDataReader/__pycache__/__init__.cpython-312.pyc,sha256=jdbVvHoHzARVygJ_bO5YDCwZ-4cAfdWWmqSGQV9lbfg,8204
117
+ AeroViz/rawDataReader/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
+ AeroViz/rawDataReader/config/supported_instruments.py,sha256=2akCov4X68NDRsWKeumIftj5k3MAhY6nI-40fdy_gzo,4314
119
+ AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc,sha256=evvWRGJgXCgqxGpLZHnrIqMK-IXu1Joyez5bc_DFfMc,171
120
+ AeroViz/rawDataReader/config/__pycache__/supported_instruments.cpython-312.pyc,sha256=BwQh84-82xoCSU3jI-Lf527uSKxrpAWrd7wN32V9VIw,4146
121
+ AeroViz/rawDataReader/core/__init__.py,sha256=vSnVSMaUrzCWQwOVTVNUnOWuP3oMAPDZra3fVcwgSC0,23436
122
+ AeroViz/rawDataReader/core/logger.py,sha256=cZUFbYq2tECuMaOI6CBca7npTkhrtSZbOsUrGg0uKfY,5988
123
+ AeroViz/rawDataReader/core/pre_process.py,sha256=zfqkYOd9Cb3yFLk2LfJg74TojWiisQuSNFCKPwUiiok,10569
124
+ AeroViz/rawDataReader/core/qc.py,sha256=P6WEouHj4Gy_y6ry2wyuYQQX6XhpRpSL9I7n7Evpg80,38593
125
+ AeroViz/rawDataReader/core/report.py,sha256=ySV_WGduu_8RgNrcxMT6cc3nA3RWQMAibSXku3GG2TI,20802
126
+ AeroViz/rawDataReader/core/__pycache__/__init__.cpython-312.pyc,sha256=IR_TdPKK121gu8tJ3swoxLLQ2uuKLEZH7q7lbRUzcHY,28641
127
+ AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc,sha256=_mla3EjMoGfPHZwLPHsmaIoVgs16YbezK1WZTOCTaDg,9287
128
+ AeroViz/rawDataReader/core/__pycache__/pre_process.cpython-312.pyc,sha256=uFJdxo2RXe0JMXr3XI9vEYfYxFge1GUhxFXlybTRLNo,11313
129
+ AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc,sha256=KtYZu0InWUWl2L5UIU-Bve1ymnErCfBqWPBKqrC_ExE,38309
130
+ AeroViz/rawDataReader/core/__pycache__/report.cpython-312.pyc,sha256=rK6ts2nCRtTTlv2SN5S6bhN5eR57KOoUe4yB5MpDH78,20702
131
+ AeroViz/rawDataReader/script/AE33.py,sha256=2i89L44cHJlQD7SFHsq3o5X3K5qqonHXJ9LScsAooOo,7271
132
+ AeroViz/rawDataReader/script/AE43.py,sha256=WoDritsVhqYRR6-7MlO25jPfSRXULgK6becH_yYbNuE,6397
133
+ AeroViz/rawDataReader/script/APS.py,sha256=knRMQ00TplKYCSjRS6_8BwvFBTdgoYptD8tY0yb-BHo,13805
134
+ AeroViz/rawDataReader/script/Aurora.py,sha256=J-gtMSqX2Y2SrREzKbARuq-vw7HCQVELUkk2QVk_h1w,6971
135
+ AeroViz/rawDataReader/script/BAM1020.py,sha256=dAD7qmey78vPz7wbX6s9IuyNWO7ceBn1d7Cr-iwEL_U,3028
136
+ AeroViz/rawDataReader/script/BC1054.py,sha256=GaNEb--P66lKWGtkhTwombH3SOilQCvZSK__JTmDSCY,6814
137
+ AeroViz/rawDataReader/script/EPA.py,sha256=5UqVE1F7s0VGpfc0F-pdsTm-j5OItNNAkiQGx0DbAMo,2941
138
+ AeroViz/rawDataReader/script/GRIMM.py,sha256=bUy_MkTXaE8G9bXXU9C6zszGqt7wYLpPr32X7k449jw,2097
139
+ AeroViz/rawDataReader/script/IGAC.py,sha256=19UDNDfOBX17nBWx9O-3woQqIE__SOwdpQwqm8KpS8g,5321
140
+ AeroViz/rawDataReader/script/MA350.py,sha256=uB_Rnk_RBCFxd3br4atol6IrD6Vvt_qMebUIOnK6h00,6992
141
+ AeroViz/rawDataReader/script/Minion.py,sha256=GP4sZokoPI2cxy8PMAty36YdVKbx5_nNlT4Oo8XCyzk,7861
142
+ AeroViz/rawDataReader/script/NEPH.py,sha256=lOP6_VZXCyK2cOzhq2cYW7xhwI-j6t83ZcXCZEL-VSE,7481
143
+ AeroViz/rawDataReader/script/OCEC.py,sha256=oixnDMR85008VBqxUQpVdy344dDtBJybFmSAeO1q6Xs,6798
144
+ AeroViz/rawDataReader/script/Q-ACSM.py,sha256=rszq-ARU0HK1pfE1X4kLej0AcKzAN7MBr-S_3JfmDdE,322
145
+ AeroViz/rawDataReader/script/SMPS.py,sha256=2C9WfsCiUVIjVNW-KWB5DS2KjVgAQbnnpf-pbH77MNc,16067
146
+ AeroViz/rawDataReader/script/TEOM.py,sha256=zjCE3u5y4Nxe7Votf229TAmuNm_HzGvtJw1Ltn2ZRxA,7195
147
+ AeroViz/rawDataReader/script/VOC.py,sha256=uwthJcL3f2a6by09ca-g_5oQhaCkTGBdpfxQMBc6LG8,3764
148
+ AeroViz/rawDataReader/script/Xact.py,sha256=eSR_b9LlFe7HookSqDHKgW1G1eDAp-o2KUZPX5t6Q3s,10142
149
+ AeroViz/rawDataReader/script/__init__.py,sha256=UwOM_vI7dYbc0sFviiq8BgTNvbHEXpsDhZ8Qc5IKFH4,916
150
+ AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc,sha256=DP6kVRdlx52-7Bup4KoHBXYh585PyA12LOWMdW6BBxU,8145
151
+ AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc,sha256=QqCNDWDoOdS7HpMT4EZxL7rKUKjUGZGdGhZ-LQkeYZc,7133
152
+ AeroViz/rawDataReader/script/__pycache__/APS.cpython-312.pyc,sha256=LTetcS1iqAYouXMuDAUREGsZWhNK2Ylit5KrnAMjxMw,15969
153
+ AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc,sha256=EycBTX1O_q89jpt33CifpC50QSL0z4F2p8XAUfMSfoQ,8455
154
+ AeroViz/rawDataReader/script/__pycache__/BAM1020.cpython-312.pyc,sha256=-r9SbEYCkXvp8NSyltTOnN3kq8PdIXIeCkRzXZrxRqw,4220
155
+ AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc,sha256=Pv1nQwRHsMleI7xe6m7_MLYeMetBn-5aR6LCKEEaVOo,7870
156
+ AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc,sha256=8RHYUWX0CdCu3Fzpcq15nAbZKNtoGOBgBWzWnV97vPo,4123
157
+ AeroViz/rawDataReader/script/__pycache__/GRIMM.cpython-312.pyc,sha256=V-c2i563O6SbpqaONNwHLnM8SctKkXm2wqO4IggaxU4,3060
158
+ AeroViz/rawDataReader/script/__pycache__/IGAC.cpython-312.pyc,sha256=lyoIz_QSIQfZQDfdsn-3Y2o2OhFxTO6_NwpUn7VdCEc,7838
159
+ AeroViz/rawDataReader/script/__pycache__/MA350.cpython-312.pyc,sha256=iqNPf5hdjDyfNsAE284OxRB4YWMiRuTyn9IDGmW0BW4,7618
160
+ AeroViz/rawDataReader/script/__pycache__/Minion.cpython-312.pyc,sha256=lQ_tWrzGggDRvWBUUoEPoDzD0DV9kNnSxLQi5dgkQJE,10308
161
+ AeroViz/rawDataReader/script/__pycache__/NEPH.cpython-312.pyc,sha256=XMWGLPH4YGZi2y92JVfzQGEHzlM6L8ra0ZKzUPAANaM,10039
162
+ AeroViz/rawDataReader/script/__pycache__/OCEC.cpython-312.pyc,sha256=cZSPYJ1ZiDzlQ8jjABYhIW_38sH-IYAROXscJzGbAZ0,7736
163
+ AeroViz/rawDataReader/script/__pycache__/Q-ACSM.cpython-312.pyc,sha256=MmaDMNvH1NOw-RgLC0e2KG2tENK1N_fHYMK2H50LjCI,659
164
+ AeroViz/rawDataReader/script/__pycache__/SMPS.cpython-312.pyc,sha256=NXpxs3c3f5tcKm3iWCuCGoY-A88PX8rDnenjk20U6RE,20452
165
+ AeroViz/rawDataReader/script/__pycache__/TEOM.cpython-312.pyc,sha256=HfqyOwPZDr7NjVIoHeE9GEWgxO0K7WmKO5gkKlQ_uWE,8433
166
+ AeroViz/rawDataReader/script/__pycache__/VOC.cpython-312.pyc,sha256=jIbiLylI4QN1oqB7C0BA9kfx6LUF0NhoZ3iWwy45g6E,5009
167
+ AeroViz/rawDataReader/script/__pycache__/Xact.cpython-312.pyc,sha256=AUVsPP-7zxVanuLOKvC91zMnarxIOUmIhUXEfleqyc8,10798
168
+ AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc,sha256=YGk6QWALotOCfZUi21zlnEpQYJxs7LkW_gI18kjIbIM,1038
169
+ AeroViz/tools/__init__.py,sha256=3yC7clSoIAs7tvRy6M0BEM_N-0Fn2najLP7njT0ogME,74
170
+ AeroViz/tools/database.py,sha256=05VzjJyhlRrhsZdhfFQ__7CxGm4MdFekLjz3_Is5h9U,3430
171
+ AeroViz/tools/dataclassifier.py,sha256=_wpv0PlZ5EGkcNqHxfFtdEsYvHP5FVE8sMZXikhm_YE,4492
172
+ AeroViz/tools/dataprinter.py,sha256=Jq2Yztpa9YCOeLDVTrRs7PhSdNIPhEAexVj1YSuJ7hY,2249
173
+ AeroViz/tools/__pycache__/__init__.cpython-312.pyc,sha256=xXS6SMZRcIZZgcOlQEgJG9HV7_PBUjpazSImP_47mv8,254
174
+ AeroViz/tools/__pycache__/database.cpython-312.pyc,sha256=DoHQHD8RaVsrIgOEKRIYajydiN9-xkSoIdbLxzJqenM,3605
175
+ AeroViz/tools/__pycache__/dataclassifier.cpython-312.pyc,sha256=TTDraHKco2GbEh3gZDF23BS9JxniJ9I1jGprk1fWW2c,6801
176
+ aeroviz-0.1.21.dist-info/licenses/LICENSE,sha256=E-679GpGGkp3irmtuJXiT7R4cNUA4cmsH6Q7QUgPf5U,1069
177
+ aeroviz-0.1.21.dist-info/METADATA,sha256=djlu3KxiiBeprsJ-O4lg59bpjb3-x3Gm5hnXctC20uE,10893
178
+ aeroviz-0.1.21.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
179
+ aeroviz-0.1.21.dist-info/top_level.txt,sha256=BYsmTst_o4FZOKRP1XIvIMlN6mMTTXNfnSToL2_nVbQ,8
180
+ aeroviz-0.1.21.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Chih-Yu Chan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ AeroViz