pyadps 0.1.0__tar.gz → 0.1.0b0__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.
Files changed (44) hide show
  1. {pyadps-0.1.0 → pyadps-0.1.0b0}/PKG-INFO +22 -54
  2. {pyadps-0.1.0 → pyadps-0.1.0b0}/README.md +20 -51
  3. {pyadps-0.1.0 → pyadps-0.1.0b0}/pyproject.toml +10 -11
  4. pyadps-0.1.0b0/src/pyadps/Home_Page.py +42 -0
  5. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/pages/01_Read_File.py +16 -190
  6. pyadps-0.1.0b0/src/pyadps/pages/02_View_Raw_Data.py +128 -0
  7. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/pages/03_Download_Raw_File.py +60 -124
  8. pyadps-0.1.0b0/src/pyadps/pages/04_QC_Test.py +283 -0
  9. pyadps-0.1.0b0/src/pyadps/pages/05_Profile_Test.py +389 -0
  10. pyadps-0.1.0b0/src/pyadps/pages/06_Velocity_Test.py +293 -0
  11. pyadps-0.1.0b0/src/pyadps/pages/07_Write_File.py +367 -0
  12. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/utils/__init__.py +3 -3
  13. pyadps-0.1.0/src/pyadps/utils/plotgen.py → pyadps-0.1.0b0/src/pyadps/utils/cutbin.py +14 -332
  14. pyadps-0.1.0b0/src/pyadps/utils/plotgen.py +229 -0
  15. pyadps-0.1.0b0/src/pyadps/utils/profile_test.py +175 -0
  16. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/utils/pyreadrdi.py +6 -13
  17. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/utils/readrdi.py +20 -167
  18. pyadps-0.1.0b0/src/pyadps/utils/regrid.py +122 -0
  19. pyadps-0.1.0b0/src/pyadps/utils/script.py +155 -0
  20. pyadps-0.1.0b0/src/pyadps/utils/signal_quality.py +135 -0
  21. pyadps-0.1.0b0/src/pyadps/utils/velocity_test.py +117 -0
  22. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/utils/writenc.py +27 -104
  23. pyadps-0.1.0/src/pyadps/Home_Page.py +0 -48
  24. pyadps-0.1.0/src/pyadps/pages/02_View_Raw_Data.py +0 -164
  25. pyadps-0.1.0/src/pyadps/pages/04_Sensor_Health.py +0 -905
  26. pyadps-0.1.0/src/pyadps/pages/05_QC_Test.py +0 -476
  27. pyadps-0.1.0/src/pyadps/pages/06_Profile_Test.py +0 -971
  28. pyadps-0.1.0/src/pyadps/pages/07_Velocity_Test.py +0 -600
  29. pyadps-0.1.0/src/pyadps/pages/08_Write_File.py +0 -574
  30. pyadps-0.1.0/src/pyadps/pages/09_Auto_process.py +0 -62
  31. pyadps-0.1.0/src/pyadps/utils/autoprocess.py +0 -530
  32. pyadps-0.1.0/src/pyadps/utils/metadata/config.ini +0 -99
  33. pyadps-0.1.0/src/pyadps/utils/metadata/demo.000 +0 -0
  34. pyadps-0.1.0/src/pyadps/utils/profile_test.py +0 -556
  35. pyadps-0.1.0/src/pyadps/utils/script.py +0 -205
  36. pyadps-0.1.0/src/pyadps/utils/sensor_health.py +0 -120
  37. pyadps-0.1.0/src/pyadps/utils/signal_quality.py +0 -455
  38. pyadps-0.1.0/src/pyadps/utils/velocity_test.py +0 -200
  39. {pyadps-0.1.0 → pyadps-0.1.0b0}/LICENSE +0 -0
  40. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/__init__.py +0 -0
  41. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/__main__.py +0 -0
  42. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/pages/__init__.py +0 -0
  43. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/utils/metadata/flmeta.json +0 -0
  44. {pyadps-0.1.0 → pyadps-0.1.0b0}/src/pyadps/utils/metadata/vlmeta.json +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.1
2
2
  Name: pyadps
3
- Version: 0.1.0
3
+ Version: 0.1.0b0
4
4
  Summary: A Python package for ADCP data processing
5
5
  Home-page: https://example.com
6
6
  License: MIT
@@ -12,7 +12,6 @@ Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Programming Language :: Python :: 3.13
16
15
  Provides-Extra: tests
17
16
  Requires-Dist: cmake (>=3.30.2)
18
17
  Requires-Dist: matplotlib (>=3.8.4)
@@ -22,30 +21,18 @@ Requires-Dist: numpy (>=1.26.4)
22
21
  Requires-Dist: pandas (>=2.2.2)
23
22
  Requires-Dist: plotly (>=5.22.0)
24
23
  Requires-Dist: plotly-resampler (>=0.10.0)
25
- Requires-Dist: pygeomag (>=1.1.0,<2.0.0)
26
24
  Requires-Dist: scipy (>=1.14.0)
27
25
  Requires-Dist: streamlit (>=1.36.0)
26
+ Requires-Dist: wmm2020 (>=1.1.1)
28
27
  Project-URL: Documentation, https://example.com/docs
29
28
  Project-URL: Repository, https://github.com/p-amol/pyadps
30
29
  Description-Content-Type: text/markdown
31
30
 
32
31
  # pyadps
33
32
 
34
- `pyadps` is a Python package for processing moored Acoustic Doppler
35
- Current Profiler (ADCP) data. It provides various functionalities
36
- such as data reading, quality control tests, NetCDF file creation,
37
- and visualization.
33
+ `pyadps` is a Python package for processing moored Acoustic Doppler Current Profiler (ADCP) data. It provides various functionalities such as data reading, quality control tests, NetCDF file creation, and visualization.
38
34
 
39
- This software offers both a graphical interface (`Streamlit`) for
40
- those new to Python and direct Python package access for experienced
41
- users. Please note that `pyadps` is primarily designed for Teledyne
42
- RDI workhorse ADCPs. Other company's ADCP files are not compatible,
43
- and while some other RDI models may work, they might require additional
44
- considerations.
45
-
46
- - Documentation: <https://pyadps.readthedocs.io>
47
- - Source code: <https://github.com/p-amol/pyadps>
48
- - Bug reports: <https://github.com/p-amol/pyadps/issues>
35
+ This software offers both a graphical interface (`Streamlit`) for those new to Python and direct Python package access for experienced users. Please note that `pyadps` is primarily designed for Teledyne RDI workhorse ADCPs. Other company's ADCP files are not compatible, and while some other RDI models may work, they might require additional considerations.
49
36
 
50
37
  ## Table of Contents
51
38
 
@@ -55,49 +42,37 @@ considerations.
55
42
 
56
43
  ## Installation
57
44
 
58
- We recommend installing the package within a virtual environment.
59
- At present, the package is compatible exclusively with Python version 3.12.
60
- You can create a Python environment using tools like `venv` or `conda`.
61
- Below are instructions for both methods.
45
+ We recommend installing the package within a virtual environment. At present, the package is compatible exclusively with Python version 3.12.
46
+ You can create a Python environment using tools like `venv` or `conda`. Below are instructions for both methods.
62
47
 
63
48
  ### 1. Using `venv` (Built-in Python Tool)
64
49
 
65
50
  #### Step 1: Install Python version 3.12 (if not already installed)
66
-
67
51
  Ensure you have Python installed. You can download the latest version from [python.org](https://www.python.org/downloads/).
68
52
 
69
- #### Step 2: Create a Virtual Environment
70
-
53
+ #### Step 2: Create a Virtual Environment
71
54
  - Open your terminal or command prompt.
72
55
  - Navigate to your project folder:
73
-
74
56
  ```bash
75
57
  cd /path/to/your/project
76
58
  ```
77
-
78
- - Run the following command to create a virtual environment
79
- (replace adpsenv with your preferred environment name):
59
+ - Run the following command to create a virtual environment (replace adpsenv with your preferred environment name):
80
60
 
81
61
  ```bash
82
62
  python -m venv adpsenv
83
63
  ```
84
64
 
85
65
  #### Step 3: Activate the Environment
86
-
87
66
  - On Windows:
88
-
89
67
  ```bash
90
68
  adpsenv\Scripts\activate
91
69
  ```
92
70
 
93
71
  - On macOS/Linux:
94
-
95
72
  ```bash
96
73
  source adpsenv/bin/activate
97
74
  ```
98
-
99
- You’ll see the environment name in your terminal prompt
100
- indicating the environment is active.
75
+ You’ll see the environment name in your terminal prompt indicating the environment is active.
101
76
 
102
77
  #### Step 4: Install Dependencies
103
78
 
@@ -108,51 +83,44 @@ pip install pyadps
108
83
  ```
109
84
 
110
85
  #### Step 5: Deactivate the Environment
111
-
112
86
  When you’re done working in the environment, deactivate it by running:
113
87
 
114
88
  ```bash
115
89
  deactivate
116
90
  ```
117
91
 
118
- ### 2. Using `conda` (Anaconda/Miniconda)
119
92
 
120
- #### Step 1: Install Conda
121
93
 
94
+
95
+ ### 2. Using `conda` (Anaconda/Miniconda):
96
+
97
+ #### Step 1: Install Conda
122
98
  First, you need to have Conda installed on your system. You can either install:
123
99
 
124
100
  - [Anaconda (Full Distribution)](https://www.anaconda.com/products/individual)
125
101
  - [Miniconda (Lightweight Version)](https://docs.conda.io/en/latest/miniconda.html)
126
102
 
127
103
  #### Step 2: Create a Conda Environment with Python 3.12
128
-
129
- Once Conda is installed, open a terminal or command prompt and run
130
- the following to create a new environment (replace `adpsenv` with
131
- your preferred environment name):
104
+ Once Conda is installed, open a terminal or command prompt and run the following to create a new environment (replace `adpsenv` with your preferred environment name):
132
105
 
133
106
  ```bash
134
107
  conda create --name adpsenv python=3.12
135
108
  ```
136
109
 
137
- #### Step 3: Activate the Conda Environment
138
-
110
+ #### Step 3: Activate the Environment
139
111
  ```bash
140
112
  conda activate adpsenv
141
113
  ```
142
114
 
143
- #### Step 4: Install pyadps Dependencies
144
-
145
- You can install packages with pip inside Conda environments.
146
-
115
+ #### Step 4: Install Dependencies
116
+ You can install packages with pip inside Conda environments.
147
117
  ```bash
148
118
  pip install pyadps
149
119
  ```
150
120
 
151
- #### Step 5: Deactivate the Conda Environment
152
-
153
- When done working in the environment, deactivate the environment by running:
154
-
155
- ```bash
121
+ #### Step 5: Deactivate the Environment
122
+ When done, deactivate the environment by running:
123
+ ```
156
124
  conda deactivate
157
125
  ```
158
126
 
@@ -161,11 +129,11 @@ conda deactivate
161
129
  ### Streamlit web interface
162
130
 
163
131
  Open a terminal or command prompt, activate the environment, and run the command.
164
-
165
132
  ```bash
166
133
  run-pyadps
167
134
  ```
168
135
 
136
+
169
137
  ## License
170
138
 
171
139
  This project is licensed under the MIT License. See the LICENSE file for details.
@@ -1,20 +1,8 @@
1
1
  # pyadps
2
2
 
3
- `pyadps` is a Python package for processing moored Acoustic Doppler
4
- Current Profiler (ADCP) data. It provides various functionalities
5
- such as data reading, quality control tests, NetCDF file creation,
6
- and visualization.
7
-
8
- This software offers both a graphical interface (`Streamlit`) for
9
- those new to Python and direct Python package access for experienced
10
- users. Please note that `pyadps` is primarily designed for Teledyne
11
- RDI workhorse ADCPs. Other company's ADCP files are not compatible,
12
- and while some other RDI models may work, they might require additional
13
- considerations.
14
-
15
- - Documentation: <https://pyadps.readthedocs.io>
16
- - Source code: <https://github.com/p-amol/pyadps>
17
- - Bug reports: <https://github.com/p-amol/pyadps/issues>
3
+ `pyadps` is a Python package for processing moored Acoustic Doppler Current Profiler (ADCP) data. It provides various functionalities such as data reading, quality control tests, NetCDF file creation, and visualization.
4
+
5
+ This software offers both a graphical interface (`Streamlit`) for those new to Python and direct Python package access for experienced users. Please note that `pyadps` is primarily designed for Teledyne RDI workhorse ADCPs. Other company's ADCP files are not compatible, and while some other RDI models may work, they might require additional considerations.
18
6
 
19
7
  ## Table of Contents
20
8
 
@@ -24,49 +12,37 @@ considerations.
24
12
 
25
13
  ## Installation
26
14
 
27
- We recommend installing the package within a virtual environment.
28
- At present, the package is compatible exclusively with Python version 3.12.
29
- You can create a Python environment using tools like `venv` or `conda`.
30
- Below are instructions for both methods.
15
+ We recommend installing the package within a virtual environment. At present, the package is compatible exclusively with Python version 3.12.
16
+ You can create a Python environment using tools like `venv` or `conda`. Below are instructions for both methods.
31
17
 
32
18
  ### 1. Using `venv` (Built-in Python Tool)
33
19
 
34
20
  #### Step 1: Install Python version 3.12 (if not already installed)
35
-
36
21
  Ensure you have Python installed. You can download the latest version from [python.org](https://www.python.org/downloads/).
37
22
 
38
- #### Step 2: Create a Virtual Environment
39
-
23
+ #### Step 2: Create a Virtual Environment
40
24
  - Open your terminal or command prompt.
41
25
  - Navigate to your project folder:
42
-
43
26
  ```bash
44
27
  cd /path/to/your/project
45
28
  ```
46
-
47
- - Run the following command to create a virtual environment
48
- (replace adpsenv with your preferred environment name):
29
+ - Run the following command to create a virtual environment (replace adpsenv with your preferred environment name):
49
30
 
50
31
  ```bash
51
32
  python -m venv adpsenv
52
33
  ```
53
34
 
54
35
  #### Step 3: Activate the Environment
55
-
56
36
  - On Windows:
57
-
58
37
  ```bash
59
38
  adpsenv\Scripts\activate
60
39
  ```
61
40
 
62
41
  - On macOS/Linux:
63
-
64
42
  ```bash
65
43
  source adpsenv/bin/activate
66
44
  ```
67
-
68
- You’ll see the environment name in your terminal prompt
69
- indicating the environment is active.
45
+ You’ll see the environment name in your terminal prompt indicating the environment is active.
70
46
 
71
47
  #### Step 4: Install Dependencies
72
48
 
@@ -77,51 +53,44 @@ pip install pyadps
77
53
  ```
78
54
 
79
55
  #### Step 5: Deactivate the Environment
80
-
81
56
  When you’re done working in the environment, deactivate it by running:
82
57
 
83
58
  ```bash
84
59
  deactivate
85
60
  ```
86
61
 
87
- ### 2. Using `conda` (Anaconda/Miniconda)
88
62
 
89
- #### Step 1: Install Conda
90
63
 
64
+
65
+ ### 2. Using `conda` (Anaconda/Miniconda):
66
+
67
+ #### Step 1: Install Conda
91
68
  First, you need to have Conda installed on your system. You can either install:
92
69
 
93
70
  - [Anaconda (Full Distribution)](https://www.anaconda.com/products/individual)
94
71
  - [Miniconda (Lightweight Version)](https://docs.conda.io/en/latest/miniconda.html)
95
72
 
96
73
  #### Step 2: Create a Conda Environment with Python 3.12
97
-
98
- Once Conda is installed, open a terminal or command prompt and run
99
- the following to create a new environment (replace `adpsenv` with
100
- your preferred environment name):
74
+ Once Conda is installed, open a terminal or command prompt and run the following to create a new environment (replace `adpsenv` with your preferred environment name):
101
75
 
102
76
  ```bash
103
77
  conda create --name adpsenv python=3.12
104
78
  ```
105
79
 
106
- #### Step 3: Activate the Conda Environment
107
-
80
+ #### Step 3: Activate the Environment
108
81
  ```bash
109
82
  conda activate adpsenv
110
83
  ```
111
84
 
112
- #### Step 4: Install pyadps Dependencies
113
-
114
- You can install packages with pip inside Conda environments.
115
-
85
+ #### Step 4: Install Dependencies
86
+ You can install packages with pip inside Conda environments.
116
87
  ```bash
117
88
  pip install pyadps
118
89
  ```
119
90
 
120
- #### Step 5: Deactivate the Conda Environment
121
-
122
- When done working in the environment, deactivate the environment by running:
123
-
124
- ```bash
91
+ #### Step 5: Deactivate the Environment
92
+ When done, deactivate the environment by running:
93
+ ```
125
94
  conda deactivate
126
95
  ```
127
96
 
@@ -130,11 +99,11 @@ conda deactivate
130
99
  ### Streamlit web interface
131
100
 
132
101
  Open a terminal or command prompt, activate the environment, and run the command.
133
-
134
102
  ```bash
135
103
  run-pyadps
136
104
  ```
137
105
 
106
+
138
107
  ## License
139
108
 
140
109
  This project is licensed under the MIT License. See the LICENSE file for details.
@@ -1,19 +1,19 @@
1
1
  [tool.poetry]
2
2
  name = "pyadps"
3
- version = "0.1.0"
3
+ version = "0.1.0-beta"
4
4
  description = "A Python package for ADCP data processing"
5
5
  authors = ["P. Amol <prakashamol@gmail.com>"]
6
6
  readme = "README.md"
7
7
  license = "MIT"
8
- homepage = "https://example.com" # You can add your homepage URL or GitHub URL here
9
- repository = "https://github.com/p-amol/pyadps" # Replace with your repository link
10
- documentation = "https://example.com/docs" # Optional documentation link
8
+ homepage = "https://example.com" # You can add your homepage URL or GitHub URL here
9
+ repository = "https://github.com/p-amol/pyadps" # Replace with your repository link
10
+ documentation = "https://example.com/docs" # Optional documentation link
11
11
  keywords = ["adcp", "data-processing", "oceanography"]
12
12
  include = ["utils/metadata/*.json"]
13
13
  classifiers = [
14
- "Programming Language :: Python :: 3",
15
- "License :: OSI Approved :: MIT License",
16
- "Operating System :: OS Independent",
14
+ "Programming Language :: Python :: 3",
15
+ "License :: OSI Approved :: MIT License",
16
+ "Operating System :: OS Independent"
17
17
  ]
18
18
 
19
19
 
@@ -23,23 +23,22 @@ streamlit = ">=1.36.0"
23
23
  numpy = ">=1.26.4"
24
24
  matplotlib = ">=3.8.4"
25
25
  scipy = ">=1.14.0"
26
+ wmm2020 = ">=1.1.1"
26
27
  cmake = ">=3.30.2"
27
28
  pandas = ">=2.2.2"
28
29
  netCDF4 = ">=1.7.1"
29
30
  plotly = ">=5.22.0"
30
31
  plotly-resampler = ">=0.10.0"
31
32
  meson = ">=1.4.1"
32
- pygeomag = "^1.1.0"
33
-
34
33
 
35
34
  [tool.poetry.extras]
36
35
  tests = ["pytest"]
37
36
 
38
37
  [tool.poetry.scripts]
39
38
  run-pyadps = "pyadps.__main__:main"
40
- run-auto = "pyadps.utils.autoprocess:main"
41
- run-script = "pyadps.utils.script:main"
42
39
 
43
40
  [build-system]
44
41
  requires = ["poetry-core>=1.0.0"]
45
42
  build-backend = "poetry.core.masonry.api"
43
+
44
+
@@ -0,0 +1,42 @@
1
+ import streamlit as st
2
+
3
+
4
+ def main():
5
+ st.set_page_config(
6
+ page_title="ADCP Data Processing Software",
7
+ page_icon=":world_map:️",
8
+ layout="wide",
9
+ initial_sidebar_state="auto",
10
+ menu_items={
11
+ "Get Help": "http://github.com/p-amol/adps",
12
+ "Report a bug": "http://github.com/adps/issues",
13
+ "About": "# Python ADCP Data Processing Software (PyADPS)",
14
+ },
15
+ )
16
+
17
+ """
18
+ # **Python ADCP Data Processing Software (pyadps)**
19
+ `pyadps` is a software for processing Teledyne RDI Acoustic Doppler Current Profiler (ADCP) PD0 files. Currently the software can process the data from Workhorse ADCPs.
20
+
21
+ ## Features
22
+
23
+ * Access RDI ADCP binary files using Python 3
24
+ * Convert RDI binary files to netcdf
25
+ * Process ADCP data
26
+
27
+ ## Contribute
28
+ Issue Tracker: http://github.com/adps/issues
29
+ Source Code: http://github.com/p-amol/adps
30
+
31
+ ## Support
32
+ If you are having issues, please let us know.
33
+ We have a mailing list located at: adps-python@google-groups.com
34
+
35
+ ## License
36
+ The project is licensed under the MIT license.
37
+
38
+ """
39
+
40
+
41
+ if __name__ == "__main__":
42
+ main()
@@ -1,15 +1,12 @@
1
1
  import os
2
2
  import tempfile
3
3
 
4
- import numpy as np
5
4
  import pandas as pd
6
5
  import streamlit as st
7
6
  import utils.readrdi as rd
7
+ import utils.writenc as wr
8
+ from streamlit.runtime.state import session_state
8
9
  from utils.signal_quality import default_mask
9
- from utils.readrdi import ReadFile
10
-
11
- # To make the page wider if the user presses the reload button.
12
- st.set_page_config(layout="wide")
13
10
 
14
11
  """
15
12
  Streamlit page to load ADCP binary file and display File Header
@@ -113,7 +110,6 @@ if uploaded_file is not None:
113
110
  correlation = ds.correlation.data
114
111
  echo = ds.echo.data
115
112
  pgood = ds.percentgood.data
116
- beamdir = ds.fixedleader.system_configuration()["Beam Direction"]
117
113
 
118
114
  st.session_state.fname = uploaded_file.name
119
115
  st.session_state.head = ds.fileheader
@@ -123,15 +119,6 @@ if uploaded_file is not None:
123
119
  st.session_state.echo = ds.echo.data
124
120
  st.session_state.correlation = ds.correlation.data
125
121
  st.session_state.pgood = ds.percentgood.data
126
- st.session_state.beam_direction = beamdir
127
- st.session_state.sound_speed = ds.variableleader.speed_of_sound.data
128
- st.session_state.depth = ds.variableleader.depth_of_transducer.data
129
- st.session_state.temperature = (
130
- ds.variableleader.temperature.data * ds.variableleader.temperature.scale
131
- )
132
- st.session_state.salinity = (
133
- ds.variableleader.salinity.data * ds.variableleader.salinity.scale
134
- )
135
122
 
136
123
  # st.session_state.flead = flead
137
124
  # st.session_state.vlead = vlead
@@ -145,9 +132,6 @@ if uploaded_file is not None:
145
132
  elif "flead" in st.session_state:
146
133
  st.write("You selected `%s`" % st.session_state.fname)
147
134
  else:
148
- # reset the cache and resources if the user press reload button.
149
- st.cache_data.clear()
150
- st.cache_resource.clear()
151
135
  st.stop()
152
136
 
153
137
  ########## TIME AXIS ##############
@@ -180,158 +164,8 @@ date_df = pd.DataFrame(
180
164
  )
181
165
 
182
166
  st.session_state.date = pd.to_datetime(date_df)
183
- st.session_state.date1 = pd.to_datetime(date_df)
184
- st.session_state.date2 = pd.to_datetime(date_df)
185
- st.session_state.ensemble_axis = np.arange(0, st.session_state.head.ensembles, 1)
186
- st.session_state.axis_option = "time"
187
-
188
-
189
- # ---------- Initialize all options -------------
190
- # ------------------------
191
- # Page: Download Raw File
192
- # ------------------------
193
- # Widgets
194
- st.session_state.add_attributes_DRW = "No"
195
- st.session_state.axis_option_DRW = "time"
196
- st.session_state.rawnc_download_DRW = False
197
- st.session_state.vleadnc_download_DRW = False
198
- st.session_state.rawcsv_option_DRW = "Velocity"
199
- st.session_state.rawcsv_beam_DRW = 1
200
- st.session_state.rawcsv_download_DRW = False
201
-
202
- # ------------------
203
- # Page: Sensor Test
204
- # ------------------
205
- st.session_state.isSensorTest = False
206
- st.session_state.isFirstSensorVisit = True
207
-
208
- # -- Tab 1: Depth Correction
209
- st.session_state.isDepthModified_ST = False
210
- # Widgets
211
- # Options: "Fixed Value", "File Upload"
212
- st.session_state.depthoption_ST = "Fixed Value"
213
- st.session_state.isFixedDepth_ST = False
214
- st.session_state.fixeddepth_ST = 0
215
- st.session_state.isUploadDepth_ST = False
216
-
217
- # -- Tab 2: Salinity Correction
218
- st.session_state.isSalinityModified_ST = False
219
- # Widgets
220
- st.session_state.salinityoption_ST = "Fixed Value"
221
- st.session_state.isFixedSalinity_ST = False
222
- st.session_state.fixedsalinity_ST = 35
223
- st.session_state.isUploadSalinity_ST = False
224
-
225
- # -- Tab 3: Temperature Correction
226
- st.session_state.isTemperatureModified_ST = False
227
- # Widgets
228
- st.session_state.temperatureoption_ST = "Fixed Value"
229
- st.session_state.isFixedTemperature_ST = False
230
- st.session_state.fixedtemperature_ST = 0
231
- st.session_state.isUploadTemperature_ST = False
232
-
233
- # -- Tab 7: Pitch, Roll, Velocity Correction
234
- st.session_state.isRollCheck_ST = False
235
- st.session_state.isPitchCheck_ST = False
236
- st.session_state.isVelocityModifiedSound_ST = False
237
- # Widgets
238
- st.session_state.roll_cutoff_ST = 359
239
- st.session_state.pitch_cutoff_ST = 359
240
-
241
- # ------------------
242
- # Page: QC Test
243
- # ------------------
244
- # Global Test
245
- st.session_state.isQCTest = False
246
- st.session_state.isFirstQCVisit = True
247
-
248
- # Tab 2: Apply QC
249
- st.session_state.isQCCheck_QCT = False
250
- # Widgets
251
- st.session_state.ct_QCT = 64
252
- st.session_state.et_QCT = 0
253
- st.session_state.evt_QCT = 2000
254
- st.session_state.ft_QCT = 50
255
- st.session_state.is3beam_QCT = True
256
- st.session_state.pgt_QCT = 0
257
-
258
- # Data Modifications
259
- st.session_state.isBeamModified_QCT = False
260
- # Widgets
261
- st.session_state.beam_direction_QCT = st.session_state.beam_direction
262
-
263
- # ------------------
264
- # Page: Profile Test
265
- # ------------------
266
- st.session_state.isProfileTest = False
267
- st.session_state.isFirstProfileVisit = True
268
-
269
- # Tab1: Trim Ends
270
- st.session_state.isTrimEndsCheck_PT = False
271
- # Widgets
272
- st.session_state.start_ens_PT = 0
273
- st.session_state.end_ens_PT = st.session_state.head.ensembles
274
-
275
- # Tab2: Cutbins - Sidelobe
276
- st.session_state.isCutBinSideLobeCheck_PT = False
277
- st.session_state.extra_cells_PT = 0
278
- st.session_state.water_depth_PT = 0
279
-
280
- # Tab3: Cutbins - Manual
281
- st.session_state.isCutBinManualCheck_PT = False
282
-
283
- # Tab4: Regrid
284
- st.session_state.isRegridCheck_PT = False
285
- st.session_state.end_cell_option_PT = "Cell"
286
- st.session_state.interpolate_PT = "nearest"
287
- st.session_state.manualdepth_PT = 0
288
-
289
- # ------------------
290
- # Page: Velocity Test
291
- # ------------------
292
- # Global Test
293
- st.session_state.isVelocityTest = False
294
- # Check if visiting the page first time
295
- st.session_state.isFirstVelocityVisit = True
296
- # Local Tests:
297
- # Tab1: Magnetic Declination
298
- st.session_state.isMagnetCheck_VT = False
299
- # OPTIONS: pygeomag, API, Manual
300
- st.session_state.magnet_method_VT = "pygeomag"
301
- st.session_state.magnet_lat_VT = 0
302
- st.session_state.magnet_lon_VT = 0
303
- st.session_state.magnet_year_VT = 2025
304
- st.session_state.magnet_depth_VT = 0
305
- st.session_state.magnet_user_input_VT = 0
306
-
307
- # Tab2: Velocity Cutoff
308
- st.session_state.isCutoffCheck_VT = False
309
- st.session_state.maxuvel_VT = 250
310
- st.session_state.maxvvel_VT = 250
311
- st.session_state.maxwvel_VT = 15
312
-
313
- # Tab3: Despike
314
- st.session_state.isDespikeCheck_VT = False
315
- st.session_state.despike_kernal_VT = 5
316
- st.session_state.despike_cutoff_VT = 3
317
-
318
- # Tab4: Flatline
319
- st.session_state.isFlatlineCheck_VT = False
320
- st.session_state.flatline_kernal_VT = 5
321
- st.session_state.flatline_cutoff_VT = 3
322
-
323
- # ------------------
324
- # Page: Write File
325
- # ------------------
326
- st.session_state.isWriteFile = True
327
- st.session_state.isAttributes = False
328
- st.session_state.mask_data_WF = "Yes"
329
- # FileTypes: NetCDF, CSV
330
- st.session_state.file_type_WF = "NetCDF"
331
- st.session_state.isProcessedNetcdfDownload_WF = True
332
- st.session_state.isProcessedCSVDownload_WF = False
333
-
334
- # MASK DATA
167
+
168
+ ######### MASK DATA ##############
335
169
  # The velocity data has missing values due to the cutoff
336
170
  # criteria used before deployment. The `default_mask` uses
337
171
  # the velocity to create a mask. This mask file is stored
@@ -340,17 +174,16 @@ st.session_state.isProcessedCSVDownload_WF = False
340
174
  # WARNING: Never Change `st.session_state.orig_mask` in the code!
341
175
  #
342
176
  if "orig_mask" not in st.session_state:
343
- ds = st.session_state.ds
344
- st.session_state.orig_mask = default_mask(ds)
177
+ st.session_state.orig_mask = default_mask(
178
+ st.session_state.flead, st.session_state.velocity
179
+ )
345
180
 
346
- # ----------------------
347
- # Page returning options
348
- # ----------------------
349
- # This checks if we have returned back to the page after saving the data
350
- st.session_state.isSensorPageReturn = False
351
- st.session_state.isQCPageReturn = False
352
- st.session_state.isProfilePageReturn = False
353
- st.session_state.isVelocityPageReturn = False
181
+ # Checks if the following quality checks are carried out
182
+ st.session_state.isQCMask = False
183
+ st.session_state.isProfileMask = False
184
+ st.session_state.isGrid = False
185
+ st.session_state.isGridSave = False
186
+ st.session_state.isVelocityMask = False
354
187
 
355
188
  ########## FILE HEADER ###############
356
189
  st.header("File Header", divider="blue")
@@ -427,18 +260,10 @@ if flead_check_button:
427
260
 
428
261
  flead_button = st.button("Fixed Leader")
429
262
  if flead_button:
430
- # Pandas array should have all elements with same data type.
431
- # Except Sl. no., which is np.uint64, rest are np.int64.
432
- # Convert all datatype to uint64
433
- fl_dict = st.session_state.flead.field().items()
434
- new_dict = {}
435
- for key, value in fl_dict:
436
- new_dict[key] = value.astype(np.uint64)
437
-
438
263
  df = pd.DataFrame(
439
264
  {
440
- "Fields": new_dict.keys(),
441
- "Values": new_dict.values(),
265
+ "Fields": st.session_state.flead.field().keys(),
266
+ "Values": st.session_state.flead.field().values(),
442
267
  }
443
268
  )
444
269
  st.dataframe(df, use_container_width=True)
@@ -456,3 +281,4 @@ with right:
456
281
  df = df.astype("str")
457
282
  st.write((df.style.map(color_bool2)))
458
283
  # st.dataframe(df)
284
+