AeroViz 0.1.11__tar.gz → 0.1.12__tar.gz

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.

Files changed (185) hide show
  1. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/__pycache__/__init__.cpython-312.pyc +0 -0
  2. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/__pycache__/__init__.cpython-312.pyc +0 -0
  3. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/__pycache__/PyMieScatt_update.cpython-312.pyc +0 -0
  4. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/__pycache__/__init__.cpython-312.pyc +0 -0
  5. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/__pycache__/mie_theory.cpython-312.pyc +0 -0
  6. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/__pycache__/__init__.cpython-312.pyc +0 -0
  7. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/VOC/__pycache__/__init__.cpython-312.pyc +0 -0
  8. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/__pycache__/__init__.cpython-312.pyc +0 -0
  9. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/core/__pycache__/__init__.cpython-312.pyc +0 -0
  10. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/__pycache__/__init__.cpython-312.pyc +0 -0
  11. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/__pycache__/bar.cpython-312.pyc +0 -0
  12. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/__pycache__/box.cpython-312.pyc +0 -0
  13. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/__pycache__/pie.cpython-312.pyc +0 -0
  14. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/__pycache__/radar.cpython-312.pyc +0 -0
  15. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/__pycache__/regression.cpython-312.pyc +0 -0
  16. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/__pycache__/scatter.cpython-312.pyc +0 -0
  17. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/__pycache__/violin.cpython-312.pyc +0 -0
  18. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/distribution/__pycache__/__init__.cpython-312.pyc +0 -0
  19. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/distribution/__pycache__/distribution.cpython-312.pyc +0 -0
  20. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/meteorology/__pycache__/CBPF.cpython-312.pyc +0 -0
  21. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/meteorology/__pycache__/__init__.cpython-312.pyc +0 -0
  22. aeroviz-0.1.12/AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc +0 -0
  23. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/meteorology/__pycache__/wind_rose.cpython-312.pyc +0 -0
  24. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/meteorology/hysplit.py +7 -4
  25. aeroviz-0.1.12/AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc +0 -0
  26. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/optical/__pycache__/optical.cpython-312.pyc +0 -0
  27. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/__pycache__/__init__.cpython-312.pyc +0 -0
  28. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/__pycache__/ammonium_rich.cpython-312.pyc +0 -0
  29. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/__pycache__/contour.cpython-312.pyc +0 -0
  30. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/__pycache__/corr_matrix.cpython-312.pyc +0 -0
  31. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/__pycache__/diurnal_pattern.cpython-312.pyc +0 -0
  32. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/__pycache__/koschmieder.cpython-312.pyc +0 -0
  33. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/__pycache__/metal_heatmap.cpython-312.pyc +0 -0
  34. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/timeseries/__pycache__/__init__.cpython-312.pyc +0 -0
  35. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/timeseries/__pycache__/template.cpython-312.pyc +0 -0
  36. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/timeseries/__pycache__/timeseries.cpython-312.pyc +0 -0
  37. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  38. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/__pycache__/_color.cpython-312.pyc +0 -0
  39. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/__pycache__/_unit.cpython-312.pyc +0 -0
  40. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/__pycache__/plt_utils.cpython-312.pyc +0 -0
  41. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/__pycache__/sklearn_utils.cpython-312.pyc +0 -0
  42. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/__init__.py +4 -4
  43. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/__pycache__/__init__.cpython-312.pyc +0 -0
  44. aeroviz-0.1.12/AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc +0 -0
  45. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/config/__pycache__/supported_instruments.cpython-312.pyc +0 -0
  46. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/config/supported_instruments.py +1 -1
  47. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/core/__init__.py +7 -2
  48. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/core/__pycache__/__init__.cpython-312.pyc +0 -0
  49. aeroviz-0.1.12/AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc +0 -0
  50. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc +0 -0
  51. aeroviz-0.1.12/AeroViz/rawDataReader/core/logger.py +167 -0
  52. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/AE33.py +1 -1
  53. aeroviz-0.1.11/AeroViz/rawDataReader/script/APS_3321.py → aeroviz-0.1.12/AeroViz/rawDataReader/script/APS.py +9 -16
  54. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/Minion.py +2 -0
  55. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/OCEC.py +2 -2
  56. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/SMPS.py +12 -10
  57. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__init__.py +1 -1
  58. aeroviz-0.1.12/AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc +0 -0
  59. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc +0 -0
  60. aeroviz-0.1.12/AeroViz/rawDataReader/script/__pycache__/APS.cpython-312.pyc +0 -0
  61. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc +0 -0
  62. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc +0 -0
  63. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc +0 -0
  64. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/GRIMM.cpython-312.pyc +0 -0
  65. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/IGAC.cpython-312.pyc +0 -0
  66. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/MA350.cpython-312.pyc +0 -0
  67. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/Minion.cpython-312.pyc +0 -0
  68. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/NEPH.cpython-312.pyc +0 -0
  69. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/OCEC.cpython-312.pyc +0 -0
  70. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/SMPS.cpython-312.pyc +0 -0
  71. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/TEOM.cpython-312.pyc +0 -0
  72. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/VOC.cpython-312.pyc +0 -0
  73. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/__pycache__/XRF.cpython-312.pyc +0 -0
  74. aeroviz-0.1.12/AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc +0 -0
  75. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  76. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/tools/__pycache__/database.cpython-312.pyc +0 -0
  77. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/tools/__pycache__/dataclassifier.cpython-312.pyc +0 -0
  78. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz.egg-info/PKG-INFO +18 -13
  79. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz.egg-info/SOURCES.txt +2 -2
  80. {aeroviz-0.1.11 → aeroviz-0.1.12}/PKG-INFO +18 -13
  81. {aeroviz-0.1.11 → aeroviz-0.1.12}/README.md +17 -12
  82. {aeroviz-0.1.11 → aeroviz-0.1.12}/pyproject.toml +1 -1
  83. aeroviz-0.1.11/AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc +0 -0
  84. aeroviz-0.1.11/AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc +0 -0
  85. aeroviz-0.1.11/AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc +0 -0
  86. aeroviz-0.1.11/AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc +0 -0
  87. aeroviz-0.1.11/AeroViz/rawDataReader/core/logger.py +0 -100
  88. aeroviz-0.1.11/AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc +0 -0
  89. aeroviz-0.1.11/AeroViz/rawDataReader/script/__pycache__/APS_3321.cpython-312.pyc +0 -0
  90. aeroviz-0.1.11/AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc +0 -0
  91. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/__init__.py +0 -0
  92. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/data/DEFAULT_DATA.csv +0 -0
  93. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/data/DEFAULT_PNSD_DATA.csv +0 -0
  94. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/data/hysplit_example_data.txt +0 -0
  95. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/__init__.py +0 -0
  96. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/_calculate.py +0 -0
  97. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/_isoropia.py +0 -0
  98. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/_mass_volume.py +0 -0
  99. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/_ocec.py +0 -0
  100. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/_partition.py +0 -0
  101. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/_teom.py +0 -0
  102. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/isrpia.cnf +0 -0
  103. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Chemistry/isrpia2.exe +0 -0
  104. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/Angstrom_exponent.py +0 -0
  105. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/PyMieScatt_update.py +0 -0
  106. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/_IMPROVE.py +0 -0
  107. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/__init__.py +0 -0
  108. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/_absorption.py +0 -0
  109. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/_extinction.py +0 -0
  110. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/_mie.py +0 -0
  111. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/_mie_sd.py +0 -0
  112. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/_scattering.py +0 -0
  113. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/fRH.pkl +0 -0
  114. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/Optical/mie_theory.py +0 -0
  115. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/__init__.py +0 -0
  116. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/__merge.py +0 -0
  117. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/_merge.py +0 -0
  118. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/_merge_v1.py +0 -0
  119. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/_merge_v2.py +0 -0
  120. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/_merge_v3.py +0 -0
  121. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/_merge_v4.py +0 -0
  122. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/_size_distr.py +0 -0
  123. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/SizeDistr/prop.py +0 -0
  124. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/VOC/__init__.py +0 -0
  125. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/VOC/_potential_par.py +0 -0
  126. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/VOC/support_voc.json +0 -0
  127. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/__init__.py +0 -0
  128. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/dataProcess/core/__init__.py +0 -0
  129. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/__init__.py +0 -0
  130. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/bar.py +0 -0
  131. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/box.py +0 -0
  132. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/distribution/__init__.py +0 -0
  133. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/distribution/distribution.py +0 -0
  134. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/meteorology/CBPF.py +0 -0
  135. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/meteorology/__init__.py +0 -0
  136. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/meteorology/wind_rose.py +0 -0
  137. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/optical/__init__.py +0 -0
  138. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/optical/optical.py +0 -0
  139. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/pie.py +0 -0
  140. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/radar.py +0 -0
  141. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/regression.py +0 -0
  142. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/scatter.py +0 -0
  143. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/__init__.py +0 -0
  144. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/ammonium_rich.py +0 -0
  145. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/contour.py +0 -0
  146. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/corr_matrix.py +0 -0
  147. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/diurnal_pattern.py +0 -0
  148. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/koschmieder.py +0 -0
  149. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/templates/metal_heatmap.py +0 -0
  150. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/timeseries/__init__.py +0 -0
  151. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/timeseries/template.py +0 -0
  152. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/timeseries/timeseries.py +0 -0
  153. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/__init__.py +0 -0
  154. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/_color.py +0 -0
  155. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/_unit.py +0 -0
  156. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/fRH.json +0 -0
  157. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/plt_utils.py +0 -0
  158. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/sklearn_utils.py +0 -0
  159. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/utils/units.json +0 -0
  160. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/plot/violin.py +0 -0
  161. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/config/__init__.py +0 -0
  162. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/core/qc.py +0 -0
  163. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/AE43.py +0 -0
  164. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/Aurora.py +0 -0
  165. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/BC1054.py +0 -0
  166. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/EPA.py +0 -0
  167. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/GRIMM.py +0 -0
  168. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/IGAC.py +0 -0
  169. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/MA350.py +0 -0
  170. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/NEPH.py +0 -0
  171. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/TEOM.py +0 -0
  172. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/VOC.py +0 -0
  173. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/rawDataReader/script/XRF.py +0 -0
  174. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/tools/__init__.py +0 -0
  175. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/tools/database.py +0 -0
  176. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/tools/dataclassifier.py +0 -0
  177. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz/tools/dataprinter.py +0 -0
  178. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz.egg-info/dependency_links.txt +0 -0
  179. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz.egg-info/requires.txt +0 -0
  180. {aeroviz-0.1.11 → aeroviz-0.1.12}/AeroViz.egg-info/top_level.txt +0 -0
  181. {aeroviz-0.1.11 → aeroviz-0.1.12}/LICENSE +0 -0
  182. {aeroviz-0.1.11 → aeroviz-0.1.12}/setup.cfg +0 -0
  183. {aeroviz-0.1.11 → aeroviz-0.1.12}/setup.py +0 -0
  184. {aeroviz-0.1.11 → aeroviz-0.1.12}/tests/test_RawDataReader.py +0 -0
  185. {aeroviz-0.1.11 → aeroviz-0.1.12}/tests/test_import.py +0 -0
@@ -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)
@@ -10,7 +10,7 @@ from AeroViz.rawDataReader.script import *
10
10
  __all__ = ['RawDataReader']
11
11
 
12
12
  SUPPORTED_INSTRUMENTS = [
13
- NEPH, Aurora, SMPS, GRIMM, APS_3321, AE33, AE43, BC1054,
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, 23))
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
- # 檢查 path 是否存在且是一個目錄
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
- # 驗證 mean_freq 的格式是否正確
97
+ # Verify that mean_freq format
98
98
  try:
99
99
  Timedelta(mean_freq)
100
100
  except ValueError:
@@ -25,7 +25,7 @@ meta = {
25
25
  "deter_key": {"Bins": ["all"]},
26
26
  },
27
27
 
28
- "APS_3321": {
28
+ "APS": {
29
29
  "pattern": ["*.txt"],
30
30
  "freq": "6min",
31
31
  "deter_key": {"Bins": ["all"]},
@@ -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.round('1min')).first()
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
- return _df.reindex(new_index)
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'
@@ -0,0 +1,167 @@
1
+ import codecs
2
+ import logging
3
+ import os
4
+ import platform
5
+ import re
6
+ import sys
7
+ from pathlib import Path
8
+
9
+
10
+ class ReaderLogger:
11
+ def __init__(self, name: str, log_path: Path):
12
+ self.name = name
13
+ self.log_path = log_path
14
+
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
62
+
63
+ # 檢查是否強制啟用或禁用顏色
64
+ if 'FORCE_COLOR' in os.environ:
65
+ return os.environ['FORCE_COLOR'].lower() in ('1', 'true', 'yes')
66
+
67
+ # Windows 檢查
68
+ if platform.system().lower() == 'windows':
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')
73
+
74
+ # 其他系統檢查
75
+ return hasattr(sys.stdout, 'isatty') and sys.stdout.isatty()
76
+
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
91
+
92
+ def _setup_logger(self) -> logging.Logger:
93
+ """設置logger"""
94
+ logger = logging.getLogger(self.name)
95
+ logger.setLevel(logging.INFO)
96
+
97
+ # 移除現有的 handlers
98
+ for handler in logger.handlers[:]:
99
+ handler.close()
100
+ logger.removeHandler(handler)
101
+
102
+ # 清理 ANSI 格式化器
103
+ class CleanFormatter(logging.Formatter):
104
+ def format(self, record):
105
+ formatted_msg = super().format(record)
106
+ return re.sub(r'\033\[[0-9;]*m', '', formatted_msg)
107
+
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
+ # 設置控制台處理器
126
+ console_handler = logging.StreamHandler(sys.stdout)
127
+ console_handler.setFormatter(logging.Formatter('%(message)s'))
128
+ logger.addHandler(console_handler)
129
+
130
+ return logger
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
+
138
+ def info(self, msg: str):
139
+ self.logger.info(self._safe_print(msg))
140
+
141
+ def warning(self, msg: str):
142
+ self.logger.warning(self._safe_print(msg))
143
+
144
+ def error(self, msg: str):
145
+ self.logger.error(self._safe_print(msg))
146
+
147
+ def info_box(self, text: str, color_part: str = None, width: int = 80):
148
+ """創建帶框的消息,可選擇性地為部分文本著色"""
149
+ # 處理文本
150
+ display_text = text.replace(color_part, " " * len(color_part)) if color_part else text
151
+
152
+ # 計算padding
153
+ left_padding = " " * ((width - len(display_text)) // 2)
154
+ right_padding = " " * (width - len(display_text) - len(left_padding))
155
+
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
161
+
162
+ __content__ = f"{left_padding}{content}{right_padding}"
163
+
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))
@@ -5,29 +5,24 @@ from AeroViz.rawDataReader.core import AbstractReader
5
5
 
6
6
 
7
7
  class Reader(AbstractReader):
8
- nam = 'APS_3321'
8
+ nam = 'APS'
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_table(f, skiprows=6, parse_dates={'Time': ['Date', 'Start Time']}).set_index('Time')
13
- _key = list(_df.keys()[3:54]) ## 542 ~ 1981
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
14
 
15
- # create new keys
16
- _newkey = {}
17
- for _k in _key:
18
- _newkey[_k] = float(_k).__round__(4)
19
- # _newkey['Mode(m)'] = 'mode'
15
+ # 542 nm ~ 1981 nm
16
+ _df = _df.iloc[:, 3:54].rename(columns=lambda x: round(float(x), 4))
20
17
 
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')
18
+ _df_idx = to_datetime(_df.index, format='%m/%d/%y %H:%M:%S', errors='coerce')
26
19
 
27
20
  return _df.set_index(_df_idx).loc[_df_idx.dropna()]
28
21
 
29
22
  # QC data
30
23
  def _QC(self, _df):
24
+ _df = _df.copy()
25
+
31
26
  # mask out the data size lower than 7
32
27
  _df['total'] = _df.sum(axis=1, min_count=1) * (np.diff(np.log(_df.keys().to_numpy(float)))).mean()
33
28
  _df_size = _df['total'].dropna().resample('1h').size().resample(_df.index.freq).ffill()
@@ -37,11 +32,9 @@ class Reader(AbstractReader):
37
32
  _df = _df.mask(_df['total'] > 700)
38
33
 
39
34
  # not confirmed
40
- """
41
- ## remove the bin over 4000 nm which num. conc. larger than 1
35
+ # remove the bin over 4000 nm which num. conc. larger than 1
42
36
  # _df_remv_ky = _df.keys()[:-2][_df.keys()[:-2]>=4.]
43
37
 
44
38
  # _df_1hr[_df_remv_ky] = _df_1hr[_df_remv_ky].copy().mask(_df_1hr[_df_remv_ky]>1.)
45
- # """
46
39
 
47
40
  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
 
@@ -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
  }
@@ -64,20 +64,22 @@ class Reader(AbstractReader):
64
64
 
65
65
  # QC data
66
66
  def _QC(self, _df):
67
- size_range_mask = (_df.columns.astype(float) >= self.size_range[0]) & (
68
- _df.columns.astype(float) <= self.size_range[1])
69
- _df = _df.loc[:, size_range_mask]
67
+ df = _df.copy()
68
+
69
+ size_range_mask = (df.columns.astype(float) >= self.size_range[0]) & (
70
+ df.columns.astype(float) <= self.size_range[1])
71
+ df = df.loc[:, size_range_mask]
70
72
 
71
73
  # mask out the data size lower than 7
72
- _df['total'] = _df.sum(axis=1, min_count=1) * (np.diff(np.log(_df.keys().to_numpy(float)))).mean()
73
- _df_size = _df['total'].dropna().resample('1h').size().resample(_df.index.freq).ffill()
74
- _df = _df.mask(_df_size < 7)
74
+ df.loc[:, 'total'] = df.sum(axis=1, min_count=1) * (np.diff(np.log(df.columns[:-1].to_numpy(float)))).mean()
75
+ _df_size = df['total'].dropna().resample('1h').size().resample(df.index.freq).ffill()
76
+ df = df.mask(_df_size < 7)
75
77
 
76
78
  # remove total conc. lower than 2000
77
- _df = _df.mask(_df['total'] < 2000)
79
+ df = df.mask(df['total'] < 2000)
78
80
 
79
81
  # remove the bin over 400 nm which num. conc. larger than 4000
80
- _df_remv_ky = _df.keys()[:-1][_df.keys()[:-1] >= 400.]
81
- _df[_df_remv_ky] = _df[_df_remv_ky].copy().mask(_df[_df_remv_ky] > 4000.)
82
+ _df_remv_ky = df.keys()[:-1][df.keys()[:-1] >= 400.]
83
+ df[_df_remv_ky] = df[_df_remv_ky].copy().mask(df[_df_remv_ky] > 4000.)
82
84
 
83
- return _df[_df.keys()[:-1]]
85
+ return df[df.keys()[:-1]]
@@ -2,7 +2,7 @@ __all__ = [
2
2
  'NEPH',
3
3
  'Aurora',
4
4
  'SMPS',
5
- 'APS_3321',
5
+ 'APS',
6
6
  'GRIMM',
7
7
  'AE33',
8
8
  'AE43',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: AeroViz
3
- Version: 0.1.11
3
+ Version: 0.1.12
4
4
  Summary: Aerosol science
5
5
  Author-email: alex <alex870521@gmail.com>
6
6
  License: MIT
@@ -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('NEPH', Path('/path/to/data'), start=datetime(2024, 2, 1), end=datetime(2024, 4, 30))
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
- # Create a visualization
109
- plot.timeseries(data, y='scattering_coefficient')
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>
@@ -132,7 +132,7 @@ AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc
132
132
  AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc
133
133
  AeroViz/rawDataReader/script/AE33.py
134
134
  AeroViz/rawDataReader/script/AE43.py
135
- AeroViz/rawDataReader/script/APS_3321.py
135
+ AeroViz/rawDataReader/script/APS.py
136
136
  AeroViz/rawDataReader/script/Aurora.py
137
137
  AeroViz/rawDataReader/script/BC1054.py
138
138
  AeroViz/rawDataReader/script/EPA.py
@@ -149,7 +149,7 @@ AeroViz/rawDataReader/script/XRF.py
149
149
  AeroViz/rawDataReader/script/__init__.py
150
150
  AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc
151
151
  AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc
152
- AeroViz/rawDataReader/script/__pycache__/APS_3321.cpython-312.pyc
152
+ AeroViz/rawDataReader/script/__pycache__/APS.cpython-312.pyc
153
153
  AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc
154
154
  AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc
155
155
  AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc