AeroViz 0.1.2__py3-none-any.whl → 0.1.3b0__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.

Files changed (112) hide show
  1. AeroViz/__init__.py +4 -4
  2. AeroViz/config/DEFAULT_DATA.csv +1417 -0
  3. AeroViz/config/DEFAULT_PNSD_DATA.csv +1417 -0
  4. AeroViz/dataProcess/Chemistry/__init__.py +38 -38
  5. AeroViz/dataProcess/Chemistry/_calculate.py +15 -15
  6. AeroViz/dataProcess/Chemistry/_isoropia.py +69 -68
  7. AeroViz/dataProcess/Chemistry/_mass_volume.py +158 -158
  8. AeroViz/dataProcess/Chemistry/_ocec.py +109 -109
  9. AeroViz/dataProcess/Chemistry/_partition.py +19 -18
  10. AeroViz/dataProcess/Chemistry/_teom.py +8 -11
  11. AeroViz/dataProcess/Optical/_IMPROVE.py +40 -39
  12. AeroViz/dataProcess/Optical/__init__.py +35 -35
  13. AeroViz/dataProcess/Optical/_absorption.py +35 -35
  14. AeroViz/dataProcess/Optical/_extinction.py +25 -24
  15. AeroViz/dataProcess/Optical/_mie.py +5 -6
  16. AeroViz/dataProcess/Optical/_mie_sd.py +89 -90
  17. AeroViz/dataProcess/Optical/_scattering.py +16 -16
  18. AeroViz/dataProcess/SizeDistr/__init__.py +37 -37
  19. AeroViz/dataProcess/SizeDistr/__merge.py +159 -158
  20. AeroViz/dataProcess/SizeDistr/_merge.py +155 -154
  21. AeroViz/dataProcess/SizeDistr/_merge_v1.py +162 -161
  22. AeroViz/dataProcess/SizeDistr/_merge_v2.py +153 -152
  23. AeroViz/dataProcess/SizeDistr/_merge_v3.py +326 -326
  24. AeroViz/dataProcess/SizeDistr/_merge_v4.py +272 -274
  25. AeroViz/dataProcess/SizeDistr/_size_distr.py +51 -51
  26. AeroViz/dataProcess/VOC/__init__.py +7 -7
  27. AeroViz/dataProcess/VOC/_potential_par.py +53 -55
  28. AeroViz/dataProcess/VOC/voc_par.json +464 -0
  29. AeroViz/dataProcess/__init__.py +4 -4
  30. AeroViz/dataProcess/core/__init__.py +59 -58
  31. AeroViz/plot/__init__.py +6 -1
  32. AeroViz/plot/bar.py +126 -0
  33. AeroViz/plot/box.py +68 -0
  34. AeroViz/plot/distribution/distribution.py +421 -427
  35. AeroViz/plot/meteorology/meteorology.py +240 -292
  36. AeroViz/plot/optical/__init__.py +0 -1
  37. AeroViz/plot/optical/optical.py +230 -230
  38. AeroViz/plot/pie.py +198 -0
  39. AeroViz/plot/regression.py +210 -0
  40. AeroViz/plot/scatter.py +99 -0
  41. AeroViz/plot/templates/__init__.py +0 -3
  42. AeroViz/plot/templates/contour.py +25 -25
  43. AeroViz/plot/templates/corr_matrix.py +86 -93
  44. AeroViz/plot/templates/diurnal_pattern.py +24 -24
  45. AeroViz/plot/templates/koschmieder.py +106 -106
  46. AeroViz/plot/templates/metal_heatmap.py +34 -34
  47. AeroViz/plot/timeseries/timeseries.py +53 -60
  48. AeroViz/plot/utils/__init__.py +2 -1
  49. AeroViz/plot/utils/_color.py +57 -57
  50. AeroViz/plot/utils/_unit.py +48 -48
  51. AeroViz/plot/utils/fRH.json +390 -0
  52. AeroViz/plot/utils/plt_utils.py +92 -0
  53. AeroViz/plot/utils/sklearn_utils.py +49 -0
  54. AeroViz/plot/utils/units.json +84 -0
  55. AeroViz/plot/violin.py +79 -0
  56. AeroViz/process/__init__.py +15 -15
  57. AeroViz/process/core/DataProc.py +9 -9
  58. AeroViz/process/core/SizeDist.py +81 -81
  59. AeroViz/process/method/PyMieScatt_update.py +488 -488
  60. AeroViz/process/method/mie_theory.py +231 -229
  61. AeroViz/process/method/prop.py +40 -40
  62. AeroViz/process/script/AbstractDistCalc.py +103 -103
  63. AeroViz/process/script/Chemical.py +166 -166
  64. AeroViz/process/script/IMPACT.py +40 -40
  65. AeroViz/process/script/IMPROVE.py +152 -152
  66. AeroViz/process/script/Others.py +45 -45
  67. AeroViz/process/script/PSD.py +26 -26
  68. AeroViz/process/script/PSD_dry.py +69 -70
  69. AeroViz/process/script/retrieve_RI.py +50 -51
  70. AeroViz/rawDataReader/__init__.py +57 -57
  71. AeroViz/rawDataReader/core/__init__.py +328 -326
  72. AeroViz/rawDataReader/script/AE33.py +18 -18
  73. AeroViz/rawDataReader/script/AE43.py +20 -20
  74. AeroViz/rawDataReader/script/APS_3321.py +30 -30
  75. AeroViz/rawDataReader/script/Aurora.py +23 -23
  76. AeroViz/rawDataReader/script/BC1054.py +40 -40
  77. AeroViz/rawDataReader/script/EPA_vertical.py +9 -9
  78. AeroViz/rawDataReader/script/GRIMM.py +21 -21
  79. AeroViz/rawDataReader/script/IGAC_TH.py +67 -67
  80. AeroViz/rawDataReader/script/IGAC_ZM.py +59 -59
  81. AeroViz/rawDataReader/script/MA350.py +39 -39
  82. AeroViz/rawDataReader/script/NEPH.py +74 -74
  83. AeroViz/rawDataReader/script/OCEC_LCRES.py +21 -21
  84. AeroViz/rawDataReader/script/OCEC_RES.py +16 -16
  85. AeroViz/rawDataReader/script/SMPS_TH.py +25 -25
  86. AeroViz/rawDataReader/script/SMPS_aim11.py +32 -32
  87. AeroViz/rawDataReader/script/SMPS_genr.py +31 -31
  88. AeroViz/rawDataReader/script/TEOM.py +28 -28
  89. AeroViz/rawDataReader/script/Table.py +12 -12
  90. AeroViz/rawDataReader/script/VOC_TH.py +16 -16
  91. AeroViz/rawDataReader/script/VOC_ZM.py +28 -28
  92. AeroViz/rawDataReader/script/__init__.py +20 -20
  93. AeroViz/rawDataReader/utils/config.py +161 -161
  94. AeroViz/tools/database.py +65 -65
  95. AeroViz/tools/dataclassifier.py +106 -106
  96. AeroViz/tools/dataprinter.py +51 -51
  97. AeroViz/tools/datareader.py +38 -38
  98. {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/METADATA +5 -4
  99. AeroViz-0.1.3b0.dist-info/RECORD +110 -0
  100. AeroViz/config/__init__.py +0 -0
  101. AeroViz/plot/improve/__init__.py +0 -1
  102. AeroViz/plot/improve/improve.py +0 -240
  103. AeroViz/plot/optical/aethalometer.py +0 -77
  104. AeroViz/plot/templates/event_evolution.py +0 -65
  105. AeroViz/plot/templates/regression.py +0 -256
  106. AeroViz/plot/templates/scatter.py +0 -130
  107. AeroViz/plot/templates/templates.py +0 -398
  108. AeroViz/plot/utils/_decorator.py +0 -74
  109. AeroViz-0.1.2.dist-info/RECORD +0 -106
  110. {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/LICENSE +0 -0
  111. {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/WHEEL +0 -0
  112. {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/top_level.txt +0 -0
@@ -5,90 +5,89 @@ from pandas import DataFrame, read_csv, concat
5
5
 
6
6
  from AeroViz.process.core import DataProc
7
7
  from AeroViz.process.core.SizeDist import SizeDist
8
- from AeroViz.tools import DataReader
9
8
 
10
9
 
11
10
  class DryPSDProc(DataProc):
12
- """
13
- A class for process impact data.
14
-
15
- Parameters
16
- ----------
17
- reset : bool, optional
18
- If True, resets the process. Default is False.
19
- filename : str, optional
20
- The name of the file to process. Default is None.
21
-
22
- Methods
23
- -------
24
- process_data():
25
- Process data and save the result.
26
-
27
- Attributes
28
- ----------
29
- DEFAULT_PATH : Path
30
- The default path for data files.
31
-
32
-
33
- Examples
34
- --------
35
- >>> df = DryPSDProc(reset=True, filename='PNSD_dNdlogdp_dry.csv').process_data()
36
- """
37
-
38
- def __init__(self, file_path: Path | str = 'PNSD_dNdlogdp.csv', file_path_chem: Path | str = 'chemical.csv'):
39
- super().__init__()
40
- self.file_path = Path(file_path)
41
- self.file_path_chem = Path(file_path_chem)
42
-
43
- self.psd = SizeDist(read_csv(file_path, parse_dates=['Time'], index_col='Time'))
44
- self.RI = read_csv(file_path_chem, parse_dates=['Time'], index_col='Time')[['n_dry', 'n_amb', 'k_dry', 'k_amb',
45
- 'AS_volume_ratio',
46
- 'AN_volume_ratio',
47
- 'OM_volume_ratio',
48
- 'Soil_volume_ratio',
49
- 'SS_volume_ratio',
50
- 'EC_volume_ratio',
51
- 'ALWC_volume_ratio']]
52
-
53
- def process_data(self, reset: bool = False, save_filename: Path | str = None) -> DataFrame:
54
- save_filename = Path(save_filename)
55
- if save_filename.exists() and not reset:
56
- return read_csv(save_filename, parse_dates=['Time']).set_index('Time')
57
- _df = concat([self.psd, self.RI], axis=1)
58
- _df.to_csv(save_filename)
59
- return _df
11
+ """
12
+ A class for process impact data.
13
+
14
+ Parameters
15
+ ----------
16
+ reset : bool, optional
17
+ If True, resets the process. Default is False.
18
+ filename : str, optional
19
+ The name of the file to process. Default is None.
20
+
21
+ Methods
22
+ -------
23
+ process_data():
24
+ Process data and save the result.
25
+
26
+ Attributes
27
+ ----------
28
+ DEFAULT_PATH : Path
29
+ The default path for data files.
30
+
31
+
32
+ Examples
33
+ --------
34
+ >>> df = DryPSDProc(reset=True, filename='PNSD_dNdlogdp_dry.csv').process_data()
35
+ """
36
+
37
+ def __init__(self, file_path: Path | str = 'PNSD_dNdlogdp.csv', file_path_chem: Path | str = 'chemical.csv'):
38
+ super().__init__()
39
+ self.file_path = Path(file_path)
40
+ self.file_path_chem = Path(file_path_chem)
41
+
42
+ self.psd = SizeDist(read_csv(file_path, parse_dates=['Time'], index_col='Time'))
43
+ self.RI = read_csv(file_path_chem, parse_dates=['Time'], index_col='Time')[['n_dry', 'n_amb', 'k_dry', 'k_amb',
44
+ 'AS_volume_ratio',
45
+ 'AN_volume_ratio',
46
+ 'OM_volume_ratio',
47
+ 'Soil_volume_ratio',
48
+ 'SS_volume_ratio',
49
+ 'EC_volume_ratio',
50
+ 'ALWC_volume_ratio']]
51
+
52
+ def process_data(self, reset: bool = False, save_filename: Path | str = None) -> DataFrame:
53
+ save_filename = Path(save_filename)
54
+ if save_filename.exists() and not reset:
55
+ return read_csv(save_filename, parse_dates=['Time']).set_index('Time')
56
+ _df = concat([self.psd, self.RI], axis=1)
57
+ _df.to_csv(save_filename)
58
+ return _df
60
59
 
61
60
 
62
61
  def dry_PNSD_process(dist, dp, **kwargs):
63
- ndp = np.array(dist[:np.size(dp)])
64
- gRH = resolved_gRH(dp, dist['gRH'], uniform=True)
62
+ ndp = np.array(dist[:np.size(dp)])
63
+ gRH = resolved_gRH(dp, dist['gRH'], uniform=True)
65
64
 
66
- dry_dp = dp / gRH
67
- belong_which_ibin = np.digitize(dry_dp, dp) - 1
65
+ dry_dp = dp / gRH
66
+ belong_which_ibin = np.digitize(dry_dp, dp) - 1
68
67
 
69
- result = {}
70
- for i, (ibin, dn) in enumerate(zip(belong_which_ibin, ndp)):
71
- if dp[ibin] not in result:
72
- result[dp[ibin]] = []
73
- result[dp[ibin]].append(ndp[i])
68
+ result = {}
69
+ for i, (ibin, dn) in enumerate(zip(belong_which_ibin, ndp)):
70
+ if dp[ibin] not in result:
71
+ result[dp[ibin]] = []
72
+ result[dp[ibin]].append(ndp[i])
74
73
 
75
- dry_ndp = []
76
- for key, val in result.items():
77
- dry_ndp.append(sum(val) / len(val))
74
+ dry_ndp = []
75
+ for key, val in result.items():
76
+ dry_ndp.append(sum(val) / len(val))
78
77
 
79
- return np.array(dry_ndp)
78
+ return np.array(dry_ndp)
80
79
 
81
80
 
82
81
  def resolved_gRH(dp, gRH=1.31, uniform=True):
83
- if uniform:
84
- return np.array([gRH] * dp.size)
82
+ if uniform:
83
+ return np.array([gRH] * dp.size)
85
84
 
86
- else:
87
- lognorm_dist = lambda x, geoMean, geoStd: (gRH / (np.log10(geoStd) * np.sqrt(2 * np.pi))) * np.exp(
88
- -(x - np.log10(geoMean)) ** 2 / (2 * np.log10(geoStd) ** 2))
89
- abc = lognorm_dist(np.log10(dp), 200, 2.0)
90
- return np.where(abc < 1, 1, abc)
85
+ else:
86
+ lognorm_dist = lambda x, geoMean, geoStd: (gRH / (np.log10(geoStd) * np.sqrt(2 * np.pi))) * np.exp(
87
+ -(x - np.log10(geoMean)) ** 2 / (2 * np.log10(geoStd) ** 2))
88
+ abc = lognorm_dist(np.log10(dp), 200, 2.0)
89
+ return np.where(abc < 1, 1, abc)
91
90
 
92
91
 
93
92
  if __name__ == '__main__':
94
- pass
93
+ pass
@@ -1,5 +1,4 @@
1
1
  import numpy as np
2
- import pandas as pd
3
2
  from pandas import DataFrame
4
3
 
5
4
  from AeroViz.process.core.SizeDist import SizeDist
@@ -7,64 +6,64 @@ from AeroViz.process.method import Mie_PESD
7
6
 
8
7
 
9
8
  def retrieve_RI(_df: DataFrame,
10
- _PNSD: DataFrame,
11
- nMin: float = 1.33,
12
- nMax: float = 1.60,
13
- kMin: float = 0.00,
14
- kMax: float = 0.60,
15
- spaceSize: int = 31,
16
- dlogdp: float = 0.014
17
- ) -> DataFrame:
18
- nRange = np.linspace(nMin, nMax, num=spaceSize)
19
- kRange = np.linspace(kMin, kMax, spaceSize)
20
- Delta_array = np.zeros((spaceSize, spaceSize))
21
- # 同一時間除了折射率其餘數據皆相同 因此在折射率的迴圈外
22
- bext_mea, bsca_mea, babs_mea = _df['Extinction'], _df['Scattering'], _df['Absorption']
9
+ _PNSD: DataFrame,
10
+ nMin: float = 1.33,
11
+ nMax: float = 1.60,
12
+ kMin: float = 0.00,
13
+ kMax: float = 0.60,
14
+ spaceSize: int = 31,
15
+ dlogdp: float = 0.014
16
+ ) -> DataFrame:
17
+ nRange = np.linspace(nMin, nMax, num=spaceSize)
18
+ kRange = np.linspace(kMin, kMax, spaceSize)
19
+ Delta_array = np.zeros((spaceSize, spaceSize))
20
+ # 同一時間除了折射率其餘數據皆相同 因此在折射率的迴圈外
21
+ bext_mea, bsca_mea, babs_mea = _df['Extinction'], _df['Scattering'], _df['Absorption']
23
22
 
24
- dp = SizeDist(data=_PNSD).dp
25
- for ki, k in enumerate(kRange):
26
- for ni, n in enumerate(nRange):
27
- m = n + (1j * k)
28
- ndp = np.array(_df[3:])
23
+ dp = SizeDist(data=_PNSD).dp
24
+ for ki, k in enumerate(kRange):
25
+ for ni, n in enumerate(nRange):
26
+ m = n + (1j * k)
27
+ ndp = np.array(_df[3:])
29
28
 
30
- ext_dist, sca_dist, abs_dist = Mie_PESD(m, 550, dp, ndp)
29
+ ext_dist, sca_dist, abs_dist = Mie_PESD(m, 550, dp, ndp)
31
30
 
32
- bext_cal = sum(ext_dist) * dlogdp
33
- bsca_cal = sum(sca_dist) * dlogdp
34
- babs_cal = sum(abs_dist) * dlogdp
31
+ bext_cal = sum(ext_dist) * dlogdp
32
+ bsca_cal = sum(sca_dist) * dlogdp
33
+ babs_cal = sum(abs_dist) * dlogdp
35
34
 
36
- Delta_array[ni][ki] = ((babs_mea - babs_cal) / 18.23) ** 2 + ((bsca_mea - bsca_cal) / 83.67) ** 2
35
+ Delta_array[ni][ki] = ((babs_mea - babs_cal) / 18.23) ** 2 + ((bsca_mea - bsca_cal) / 83.67) ** 2
37
36
 
38
- min_delta = Delta_array.argmin()
39
- next_n = nRange[(min_delta // spaceSize)]
40
- next_k = kRange[(min_delta % spaceSize)]
37
+ min_delta = Delta_array.argmin()
38
+ next_n = nRange[(min_delta // spaceSize)]
39
+ next_k = kRange[(min_delta % spaceSize)]
41
40
 
42
- # 將網格變小
43
- nMin_small = next_n - 0.02 if next_n > 1.33 else 1.33
44
- nMax_small = next_n + 0.02
45
- kMin_small = next_k - 0.04 if next_k > 0.04 else 0
46
- kMax_small = next_k + 0.04
47
- spaceSize_small = 41
41
+ # 將網格變小
42
+ nMin_small = next_n - 0.02 if next_n > 1.33 else 1.33
43
+ nMax_small = next_n + 0.02
44
+ kMin_small = next_k - 0.04 if next_k > 0.04 else 0
45
+ kMax_small = next_k + 0.04
46
+ spaceSize_small = 41
48
47
 
49
- nRange_small = np.linspace(nMin_small, nMax_small, spaceSize_small)
50
- kRange_small = np.linspace(kMin_small, kMax_small, spaceSize_small)
51
- Delta_array_small = np.zeros((spaceSize_small, spaceSize_small))
52
- # 所有數據與大網格一致所以使用上方便數即可
53
- for ki, k in enumerate(kRange_small):
54
- for ni, n in enumerate(nRange_small):
55
- m = n + (1j * k)
56
- ndp = np.array(_df[3:])
57
- ext_dist, sca_dist, abs_dist = Mie_PESD(m, 550, dp, ndp)
48
+ nRange_small = np.linspace(nMin_small, nMax_small, spaceSize_small)
49
+ kRange_small = np.linspace(kMin_small, kMax_small, spaceSize_small)
50
+ Delta_array_small = np.zeros((spaceSize_small, spaceSize_small))
51
+ # 所有數據與大網格一致所以使用上方便數即可
52
+ for ki, k in enumerate(kRange_small):
53
+ for ni, n in enumerate(nRange_small):
54
+ m = n + (1j * k)
55
+ ndp = np.array(_df[3:])
56
+ ext_dist, sca_dist, abs_dist = Mie_PESD(m, 550, dp, ndp)
58
57
 
59
- bext_cal = sum(ext_dist) * dlogdp
60
- bsca_cal = sum(sca_dist) * dlogdp
61
- babs_cal = sum(abs_dist) * dlogdp
58
+ bext_cal = sum(ext_dist) * dlogdp
59
+ bsca_cal = sum(sca_dist) * dlogdp
60
+ babs_cal = sum(abs_dist) * dlogdp
62
61
 
63
- Delta_array_small[ni][ki] = ((bext_mea - bext_cal) / 18.23) ** 2 + ((bsca_mea - bsca_cal) / 83.67) ** 2
62
+ Delta_array_small[ni][ki] = ((bext_mea - bext_cal) / 18.23) ** 2 + ((bsca_mea - bsca_cal) / 83.67) ** 2
64
63
 
65
- min_delta_small = Delta_array_small.argmin()
66
- _df['re_real'] = (nRange_small[(min_delta_small // spaceSize_small)])
67
- _df['re_imaginary'] = (kRange_small[(min_delta_small % spaceSize_small)])
64
+ min_delta_small = Delta_array_small.argmin()
65
+ _df['re_real'] = (nRange_small[(min_delta_small // spaceSize_small)])
66
+ _df['re_imaginary'] = (kRange_small[(min_delta_small % spaceSize_small)])
68
67
 
69
- print(f'\t\tReal part:{_df['re_real']}\tIm part:{_df['re_imaginary']}', end='')
70
- return _df['re_real':]
68
+ print(f'\t\tReal part:{_df['re_real']}\tIm part:{_df['re_imaginary']}', end='')
69
+ return _df['re_real':]
@@ -7,62 +7,62 @@ __all__ = ['RawDataReader']
7
7
 
8
8
 
9
9
  def RawDataReader(instrument_name: str,
10
- _path,
11
- QC: bool = True,
12
- csv_raw: bool = True,
13
- reset: bool = False,
14
- rate: bool = False,
15
- append_data: bool = False,
16
- update_meta=None,
17
- start: datetime | None = None,
18
- end: datetime | None = None,
19
- mean_freq='1h',
20
- csv_out=True,
21
- **kwargs
22
- ):
23
- # Mapping of instrument names to their respective classes
24
- instrument_class_map = {
25
- 'NEPH': NEPH,
26
- 'Aurora': Aurora,
27
- 'Table': Table,
28
- 'EPA_vertical': EPA_vertical,
29
- 'APS_3321': APS_3321,
30
- 'SMPS_TH': SMPS_TH,
31
- 'AE33': AE33,
32
- 'AE43': AE43,
33
- 'BC1054': BC1054,
34
- 'MA350': MA350,
35
- 'TEOM': TEOM,
36
- 'OCEC_RES': OCEC_RES,
37
- 'OCEC_LCRES': OCEC_LCRES,
38
- 'IGAC_TH': IGAC_TH,
39
- 'IGAC_ZM': IGAC_ZM,
40
- 'VOC_TH': VOC_TH,
41
- 'VOC_ZM': VOC_ZM,
42
- 'SMPS_genr': SMPS_genr,
43
- 'SMPS_aim11': SMPS_aim11,
44
- 'GRIMM': GRIMM
45
- # Add other instruments and their corresponding classes here
46
- }
10
+ _path,
11
+ QC: bool = True,
12
+ csv_raw: bool = True,
13
+ reset: bool = False,
14
+ rate: bool = False,
15
+ append_data: bool = False,
16
+ update_meta=None,
17
+ start: datetime | None = None,
18
+ end: datetime | None = None,
19
+ mean_freq='1h',
20
+ csv_out=True,
21
+ **kwargs
22
+ ):
23
+ # Mapping of instrument names to their respective classes
24
+ instrument_class_map = {
25
+ 'NEPH': NEPH,
26
+ 'Aurora': Aurora,
27
+ 'Table': Table,
28
+ 'EPA_vertical': EPA_vertical,
29
+ 'APS_3321': APS_3321,
30
+ 'SMPS_TH': SMPS_TH,
31
+ 'AE33': AE33,
32
+ 'AE43': AE43,
33
+ 'BC1054': BC1054,
34
+ 'MA350': MA350,
35
+ 'TEOM': TEOM,
36
+ 'OCEC_RES': OCEC_RES,
37
+ 'OCEC_LCRES': OCEC_LCRES,
38
+ 'IGAC_TH': IGAC_TH,
39
+ 'IGAC_ZM': IGAC_ZM,
40
+ 'VOC_TH': VOC_TH,
41
+ 'VOC_ZM': VOC_ZM,
42
+ 'SMPS_genr': SMPS_genr,
43
+ 'SMPS_aim11': SMPS_aim11,
44
+ 'GRIMM': GRIMM
45
+ # Add other instruments and their corresponding classes here
46
+ }
47
47
 
48
- # Check if the instrument name is in the map
49
- if instrument_name not in meta.keys():
50
- raise ValueError(f"Instrument name '{instrument_name}' is not valid. \nMust be one of: {list(meta.keys())}")
48
+ # Check if the instrument name is in the map
49
+ if instrument_name not in meta.keys():
50
+ raise ValueError(f"Instrument name '{instrument_name}' is not valid. \nMust be one of: {list(meta.keys())}")
51
51
 
52
- # Instantiate the class and return the instance
53
- reader_module = instrument_class_map[instrument_name].Reader(
54
- _path=_path,
55
- QC=QC,
56
- csv_raw=csv_raw,
57
- reset=reset,
58
- rate=rate,
59
- append_data=append_data,
60
- update_meta=update_meta
61
- )
62
- return reader_module(
63
- start=start,
64
- end=end,
65
- mean_freq=mean_freq,
66
- csv_out=csv_out,
67
- **kwargs
68
- )
52
+ # Instantiate the class and return the instance
53
+ reader_module = instrument_class_map[instrument_name].Reader(
54
+ _path=_path,
55
+ QC=QC,
56
+ csv_raw=csv_raw,
57
+ reset=reset,
58
+ rate=rate,
59
+ append_data=append_data,
60
+ update_meta=update_meta
61
+ )
62
+ return reader_module(
63
+ start=start,
64
+ end=end,
65
+ mean_freq=mean_freq,
66
+ csv_out=csv_out,
67
+ **kwargs
68
+ )