From 2ec154802970af8b67cf5b7d22b9ca7695314202 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 3 Jul 2024 14:22:18 -0600 Subject: [PATCH 001/105] Add initial templates --- .github/ISSUE_TEMPLATE/code-bug-report.yml | 74 +++++++++++++++++ .../ISSUE_TEMPLATE/code-feature-request.yml | 63 ++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 6 ++ .github/ISSUE_TEMPLATE/data-bug-report.yml | 82 +++++++++++++++++++ .../ISSUE_TEMPLATE/data-feature-request.yml | 63 ++++++++++++++ 5 files changed, 288 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/code-bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/code-feature-request.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/data-bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/data-feature-request.yml diff --git a/.github/ISSUE_TEMPLATE/code-bug-report.yml b/.github/ISSUE_TEMPLATE/code-bug-report.yml new file mode 100644 index 000000000..e0a27002a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/code-bug-report.yml @@ -0,0 +1,74 @@ +name: Code Bug Report +description: File a code bug report. +title: "[Code Bug]: " +labels: ["code bug", "triage"] +assignees: + - e10harvey, bbean23, braden6521 +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: input + id: contact + attributes: + label: Contact Details + description: How can we get in touch with you if we need more info? + placeholder: ex. email@example.com + validations: + required: false + - type: textarea + id: what-happened + attributes: + label: What happened? + description: Also tell us, what did you expect to happen? + placeholder: Tell us what you see! + value: "A bug happened!" + validations: + required: true + - type: dropdown + id: version + attributes: + label: Version + description: What version of our software are you running? + options: + - develop@5fd52b5 + - main@8c65300 + default: 0 + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: What OS are you seeing this on? + multiple: true + options: + - Windows + - Linux + - MacOS + - type: textarea + id: dependencies + attributes: + label: Relevant dependency versions + description: Please copy and paste any relevant dependency versions (hint python3 --version, ffmpeg -version, pip list). This will be automatically formatted into code, so no need for backticks. + render: shell + - type: textarea + id: reproducer + attributes: + label: python script that produces the error + description: Please copy and paste the code that produces the error. This will be automatically formatted into code, so no need for backticks. + render: python + - type: textarea + id: logs + attributes: + label: Relevant console output + description: Please copy and paste any relevant console output. This will be automatically formatted into code, so no need for backticks. + render: shell + - type: checkboxes + id: contribution-guidelines + attributes: + label: Contribution Guidelines + description: By submitting this issue, you agree to follow our [contribution guidelines](https://github.com/sandialabs/OpenCSP/blob/main/CONTRIBUTING.md). + options: + - label: I agree to follow this project's contribution guidelines + required: true diff --git a/.github/ISSUE_TEMPLATE/code-feature-request.yml b/.github/ISSUE_TEMPLATE/code-feature-request.yml new file mode 100644 index 000000000..b1b3924e1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/code-feature-request.yml @@ -0,0 +1,63 @@ +name: Code Feature Request +description: Request a new code feature. +title: "[Code Feature]: " +labels: ["code feature", "under review"] +assignees: + - e10harvey, bbean23, braden6521 +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this feature request! + - type: input + id: contact + attributes: + label: Contact Details + description: How can we get in touch with you if we need more info? + placeholder: ex. email@example.com + validations: + required: false + - type: textarea + id: feature-description + attributes: + label: Feature + description: Also, describe the feature you would like. + placeholder: Describe what you want! + value: "42!" + validations: + required: true + - type: textarea + id: requirements + attributes: + label: Feature + description: Also tell us, what are your requirements? + placeholder: As a X, I need to Y, so that I can Z. + value: "42!" + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: What OS do you intend to use this on? + multiple: true + options: + - Windows + - Linux + - MacOS + - type: textarea + id: dependencies + attributes: + label: Dependencies + description: Also tell us, what third party dependencies does this feature require? + placeholder: foobar v1000 + value: "42!" + validations: + required: false + - type: checkboxes + id: contribution-guidelines + attributes: + label: Contribution Guidelines + description: By submitting this issue, you agree to follow our [contribution guidelines](https://github.com/sandialabs/OpenCSP/blob/main/CONTRIBUTING.md). + options: + - label: I agree to follow this project's contribution guidelines + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..e32b705cc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,6 @@ +blank_issues_enabled: false + +contact_links: + - name: OpenCSP Community Support + url: https://github.com/sandialabs/OpenCSP/discussions + about: Please ask and answer questions here. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/data-bug-report.yml b/.github/ISSUE_TEMPLATE/data-bug-report.yml new file mode 100644 index 000000000..355d1e1f3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/data-bug-report.yml @@ -0,0 +1,82 @@ +name: Data Bug Report +description: File a data bug report. +title: "[Data Bug]: " +labels: ["data bug", "triage"] +assignees: + - e10harvey, bbean23, braden6521 +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: input + id: contact + attributes: + label: Contact Details + description: How can we get in touch with you if we need more info? + placeholder: ex. email@example.com + validations: + required: false + - type: textarea + id: what-happened + attributes: + label: What happened? + description: Also tell us, what did you expect to happen? + placeholder: Tell us what you see! + value: "A bug happened!" + validations: + required: true + - type: dropdown + id: version + attributes: + label: Version + description: What version of our software are you running? + options: + - develop@5fd52b5 + - main@8c65300 + default: 0 + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: What OS are you seeing this on? + multiple: true + options: + - Windows + - Linux + - MacOS + - type: input + id: data-link + attributes: + label: Data link + description: How can we access the data you're having trouble with? + placeholder: ex. https://github.com/sandialabs/OpenCSP/tree/develop/opencsp/app/sofast/test/data/input/SofastConfiguration + validations: + required: true + - type: textarea + id: dependencies + attributes: + label: Relevant dependency versions + description: Please copy and paste any relevant dependency versions (hint python3 --version, ffmpeg -version, pip list). This will be automatically formatted into code, so no need for backticks. + render: shell + - type: textarea + id: reproducer + attributes: + label: python script that produces the error + description: Please copy and paste the code that produces the error. This will be automatically formatted into code, so no need for backticks. + render: python + - type: textarea + id: logs + attributes: + label: Relevant console output + description: Please copy and paste any relevant console output. This will be automatically formatted into code, so no need for backticks. + render: shell + - type: checkboxes + id: contribution-guidelines + attributes: + label: Contribution Guidelines + description: By submitting this issue, you agree to follow our [contribution guidelines](https://github.com/sandialabs/OpenCSP/blob/main/CONTRIBUTING.md). + options: + - label: I agree to follow this project's contribution guidelines + required: true diff --git a/.github/ISSUE_TEMPLATE/data-feature-request.yml b/.github/ISSUE_TEMPLATE/data-feature-request.yml new file mode 100644 index 000000000..e8a1f819e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/data-feature-request.yml @@ -0,0 +1,63 @@ +name: Data Feature Request +description: Request a new data feature. +title: "[Data Feature]: " +labels: ["data feature", "under review"] +assignees: + - e10harvey, bbean23, braden6521 +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this feature request! + - type: input + id: contact + attributes: + label: Contact Details + description: How can we get in touch with you if we need more info? + placeholder: ex. email@example.com + validations: + required: false + - type: textarea + id: feature-description + attributes: + label: Feature + description: Also, describe the feature you would like. + placeholder: Describe what you want! + value: "42!" + validations: + required: true + - type: textarea + id: requirements + attributes: + label: Feature + description: Also tell us, what are your requirements? + placeholder: As a X, I need to Y, so that I can Z. + value: "42!" + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: What OS do you intend to use this on? + multiple: true + options: + - Windows + - Linux + - MacOS + - type: textarea + id: dependencies + attributes: + label: Dependencies + description: Also tell us, what third party dependencies does this feature require? + placeholder: foobar v1000 + value: "42!" + validations: + required: false + - type: checkboxes + id: contribution-guidelines + attributes: + label: Contribution Guidelines + description: By submitting this issue, you agree to follow our [contribution guidelines](https://github.com/sandialabs/OpenCSP/blob/main/CONTRIBUTING.md). + options: + - label: I agree to follow this project's contribution guidelines + required: true From 13e958696127f091c0c8f5bf05307e45b1e88917 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 3 Jul 2024 16:36:46 -0600 Subject: [PATCH 002/105] Fix placeholders --- .github/ISSUE_TEMPLATE/data-feature-request.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/data-feature-request.yml b/.github/ISSUE_TEMPLATE/data-feature-request.yml index e8a1f819e..7cec76e6c 100644 --- a/.github/ISSUE_TEMPLATE/data-feature-request.yml +++ b/.github/ISSUE_TEMPLATE/data-feature-request.yml @@ -23,16 +23,15 @@ body: label: Feature description: Also, describe the feature you would like. placeholder: Describe what you want! - value: "42!" validations: required: true - type: textarea id: requirements attributes: - label: Feature + label: Requirements description: Also tell us, what are your requirements? placeholder: As a X, I need to Y, so that I can Z. - value: "42!" + value: "As a X, I need to Y, so that I can Z." validations: required: true - type: dropdown From 47af3d7847b343cf30cf16a481d7f6e188d50f34 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 3 Jul 2024 16:38:23 -0600 Subject: [PATCH 003/105] Fix placeholders --- .github/ISSUE_TEMPLATE/code-bug-report.yml | 1 - .github/ISSUE_TEMPLATE/code-feature-request.yml | 3 --- .github/ISSUE_TEMPLATE/data-bug-report.yml | 1 - .github/ISSUE_TEMPLATE/data-feature-request.yml | 2 -- 4 files changed, 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/code-bug-report.yml b/.github/ISSUE_TEMPLATE/code-bug-report.yml index e0a27002a..a21aa1ca9 100644 --- a/.github/ISSUE_TEMPLATE/code-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/code-bug-report.yml @@ -23,7 +23,6 @@ body: label: What happened? description: Also tell us, what did you expect to happen? placeholder: Tell us what you see! - value: "A bug happened!" validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/code-feature-request.yml b/.github/ISSUE_TEMPLATE/code-feature-request.yml index b1b3924e1..c2bb25f2c 100644 --- a/.github/ISSUE_TEMPLATE/code-feature-request.yml +++ b/.github/ISSUE_TEMPLATE/code-feature-request.yml @@ -23,7 +23,6 @@ body: label: Feature description: Also, describe the feature you would like. placeholder: Describe what you want! - value: "42!" validations: required: true - type: textarea @@ -32,7 +31,6 @@ body: label: Feature description: Also tell us, what are your requirements? placeholder: As a X, I need to Y, so that I can Z. - value: "42!" validations: required: true - type: dropdown @@ -50,7 +48,6 @@ body: label: Dependencies description: Also tell us, what third party dependencies does this feature require? placeholder: foobar v1000 - value: "42!" validations: required: false - type: checkboxes diff --git a/.github/ISSUE_TEMPLATE/data-bug-report.yml b/.github/ISSUE_TEMPLATE/data-bug-report.yml index 355d1e1f3..5204fac36 100644 --- a/.github/ISSUE_TEMPLATE/data-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/data-bug-report.yml @@ -23,7 +23,6 @@ body: label: What happened? description: Also tell us, what did you expect to happen? placeholder: Tell us what you see! - value: "A bug happened!" validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/data-feature-request.yml b/.github/ISSUE_TEMPLATE/data-feature-request.yml index 7cec76e6c..ad346da57 100644 --- a/.github/ISSUE_TEMPLATE/data-feature-request.yml +++ b/.github/ISSUE_TEMPLATE/data-feature-request.yml @@ -31,7 +31,6 @@ body: label: Requirements description: Also tell us, what are your requirements? placeholder: As a X, I need to Y, so that I can Z. - value: "As a X, I need to Y, so that I can Z." validations: required: true - type: dropdown @@ -49,7 +48,6 @@ body: label: Dependencies description: Also tell us, what third party dependencies does this feature require? placeholder: foobar v1000 - value: "42!" validations: required: false - type: checkboxes From a7b9df916e5d57c109408a87ff15aad8479439e9 Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 17 Jun 2024 11:29:09 -0600 Subject: [PATCH 004/105] Added load_saved_hdf_data unit test --- .../sofast/test/test_load_sofast_hdf_data.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 opencsp/app/sofast/test/test_load_sofast_hdf_data.py diff --git a/opencsp/app/sofast/test/test_load_sofast_hdf_data.py b/opencsp/app/sofast/test/test_load_sofast_hdf_data.py new file mode 100644 index 000000000..2a7ecf556 --- /dev/null +++ b/opencsp/app/sofast/test/test_load_sofast_hdf_data.py @@ -0,0 +1,29 @@ +from os.path import join +import unittest + +import opencsp.app.sofast.lib.load_sofast_hdf_data as lsd +from opencsp.common.lib.opencsp_path.opencsp_root_path import opencsp_code_dir + + +class TestImageProcessing(unittest.TestCase): + @classmethod + def setUpClass(cls): + # Get test data location + cls.file_fringe = join(opencsp_code_dir(), 'test/data/sofast_fringe/data_expected_facet/data.h5') + cls.file_fixed = join(opencsp_code_dir(), 'test/data/sofast_fixed/data_expected/calculation_facet.h5') + + def test_load_fringe(self): + lsd.load_single_mirror(self.file_fringe) + + def test_load_fringe_ideal(self): + lsd.load_single_mirror_ideal_parabolic(self.file_fringe, 100.0) + + def test_load_fixed(self): + lsd.load_single_mirror(self.file_fixed) + + def test_load_fixed_ideal(self): + lsd.load_single_mirror_ideal_parabolic(self.file_fixed, 100.0) + + +if __name__ == '__main__': + unittest.main() From 9162648a7b2d62d6fb43b9125271c774e59e0f7b Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 13:27:13 -0600 Subject: [PATCH 005/105] Renamed to load_sofast_hdf_data.py --- .../sofast/lib/{load_saved_data.py => load_sofast_hdf_data.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename opencsp/app/sofast/lib/{load_saved_data.py => load_sofast_hdf_data.py} (100%) diff --git a/opencsp/app/sofast/lib/load_saved_data.py b/opencsp/app/sofast/lib/load_sofast_hdf_data.py similarity index 100% rename from opencsp/app/sofast/lib/load_saved_data.py rename to opencsp/app/sofast/lib/load_sofast_hdf_data.py From c3ec0eab3b950e004db16c7483f4ff55a6c12a17 Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 13:28:11 -0600 Subject: [PATCH 006/105] Updated references to load_sofast_hdf_data --- example/sofast_fringe/example_standard_mirror_plot_output.py | 2 +- opencsp/common/lib/csp/test/test_StandardPlotOutput.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/example/sofast_fringe/example_standard_mirror_plot_output.py b/example/sofast_fringe/example_standard_mirror_plot_output.py index 5396ce766..2c54d1f9c 100644 --- a/example/sofast_fringe/example_standard_mirror_plot_output.py +++ b/example/sofast_fringe/example_standard_mirror_plot_output.py @@ -1,7 +1,7 @@ import os from os.path import join -import opencsp.app.sofast.lib.load_saved_data as lsd +import opencsp.app.sofast.lib.load_sofast_hdf_data as lsd from opencsp.common.lib.csp.LightSourceSun import LightSourceSun from opencsp.common.lib.csp.StandardPlotOutput import StandardPlotOutput from opencsp.common.lib.geometry.Uxyz import Uxyz diff --git a/opencsp/common/lib/csp/test/test_StandardPlotOutput.py b/opencsp/common/lib/csp/test/test_StandardPlotOutput.py index e5363e185..7b86594ea 100644 --- a/opencsp/common/lib/csp/test/test_StandardPlotOutput.py +++ b/opencsp/common/lib/csp/test/test_StandardPlotOutput.py @@ -4,7 +4,7 @@ import matplotlib.pyplot as plt import matplotlib.testing.compare as mplt -import opencsp.app.sofast.lib.load_saved_data as lsd +import opencsp.app.sofast.lib.load_sofast_hdf_data as lsd from opencsp.common.lib.csp.LightSourceSun import LightSourceSun from opencsp.common.lib.csp.StandardPlotOutput import StandardPlotOutput from opencsp.common.lib.geometry.Uxyz import Uxyz From 7885ea7c91ed9d23ac04dfed7455784076d1e02b Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 13:32:50 -0600 Subject: [PATCH 007/105] Updated lshd method names. --- opencsp/app/sofast/lib/load_sofast_hdf_data.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opencsp/app/sofast/lib/load_sofast_hdf_data.py b/opencsp/app/sofast/lib/load_sofast_hdf_data.py index 0b29121ec..5f5457306 100644 --- a/opencsp/app/sofast/lib/load_sofast_hdf_data.py +++ b/opencsp/app/sofast/lib/load_sofast_hdf_data.py @@ -13,7 +13,7 @@ from opencsp.common.lib.tool.hdf5_tools import load_hdf5_datasets -def load_ideal_mirror_from_hdf(file: str, focal_length: float) -> MirrorParametric: +def load_mirror_ideal(file: str, focal_length: float) -> MirrorParametric: """Uses the "OpticDefinition" in the given SOFAST HDF file and given focal length to create a reference Facet @@ -38,7 +38,7 @@ def load_ideal_mirror_from_hdf(file: str, focal_length: float) -> MirrorParametr return MirrorParametric.generate_symmetric_paraboloid(focal_length, region_facet) -def load_mirror_from_hdf(file: str) -> MirrorPoint: +def load_mirror(file: str) -> MirrorPoint: """Loads Sofast data of a single facet data collection into a Facet object. From cf4b25be1a5e53749c4bd682d297ebd3ccb26e6e Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 13:33:01 -0600 Subject: [PATCH 008/105] Updated calls to lshd methods. --- .../sofast_fringe/example_standard_mirror_plot_output.py | 4 ++-- opencsp/app/sofast/test/test_load_sofast_hdf_data.py | 8 ++++---- opencsp/common/lib/csp/test/test_StandardPlotOutput.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/example/sofast_fringe/example_standard_mirror_plot_output.py b/example/sofast_fringe/example_standard_mirror_plot_output.py index 2c54d1f9c..02575e089 100644 --- a/example/sofast_fringe/example_standard_mirror_plot_output.py +++ b/example/sofast_fringe/example_standard_mirror_plot_output.py @@ -37,8 +37,8 @@ def example_single_facet() -> None: # 1. Load Sofast measurement data # =============================== - optic_meas = lsd.load_mirror_from_hdf(file_data) - optic_ref = lsd.load_ideal_mirror_from_hdf(file_data, 100.0) + optic_meas = lsd.load_mirror(file_data) + optic_ref = lsd.load_mirror_ideal(file_data, 100.0) # 2. Define viewing/illumination geometry # ======================================= diff --git a/opencsp/app/sofast/test/test_load_sofast_hdf_data.py b/opencsp/app/sofast/test/test_load_sofast_hdf_data.py index 2a7ecf556..6e6d022b2 100644 --- a/opencsp/app/sofast/test/test_load_sofast_hdf_data.py +++ b/opencsp/app/sofast/test/test_load_sofast_hdf_data.py @@ -13,16 +13,16 @@ def setUpClass(cls): cls.file_fixed = join(opencsp_code_dir(), 'test/data/sofast_fixed/data_expected/calculation_facet.h5') def test_load_fringe(self): - lsd.load_single_mirror(self.file_fringe) + lsd.load_mirror(self.file_fringe) def test_load_fringe_ideal(self): - lsd.load_single_mirror_ideal_parabolic(self.file_fringe, 100.0) + lsd.load_mirror_ideal(self.file_fringe, 100.0) def test_load_fixed(self): - lsd.load_single_mirror(self.file_fixed) + lsd.load_mirror(self.file_fixed) def test_load_fixed_ideal(self): - lsd.load_single_mirror_ideal_parabolic(self.file_fixed, 100.0) + lsd.load_mirror_ideal(self.file_fixed, 100.0) if __name__ == '__main__': diff --git a/opencsp/common/lib/csp/test/test_StandardPlotOutput.py b/opencsp/common/lib/csp/test/test_StandardPlotOutput.py index 7b86594ea..166971f29 100644 --- a/opencsp/common/lib/csp/test/test_StandardPlotOutput.py +++ b/opencsp/common/lib/csp/test/test_StandardPlotOutput.py @@ -51,8 +51,8 @@ def test_facet(self): file_data = join(opencsp_code_dir(), 'test/data/sofast_fringe/data_expected_facet/data.h5') # Load Sofast measurement data - optic_meas = lsd.load_mirror_from_hdf(file_data) - optic_ref = lsd.load_ideal_mirror_from_hdf(file_data, 100.0) + optic_meas = lsd.load_mirror(file_data) + optic_ref = lsd.load_mirror_ideal(file_data, 100.0) # Define viewing/illumination geometry v_target_center = Vxyz((0, 0, 100)) From d48637dc9165ca4afcec1ae84efe3430fac2c0ab Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 7 Aug 2024 16:38:55 -0600 Subject: [PATCH 009/105] example: Setup input and output args for pytest .github/workflows: Added ubi8-weekly.yml --- .github/workflows/ubi8-nightly.yml | 4 +- .github/workflows/ubi8-weekly.yml | 43 +++++++++++++++++++ .github/workflows/ubi8.yml | 2 +- example/conftest.py | 19 ++++++++ .../example_scene_reconstruction.py | 25 ++++++----- 5 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/ubi8-weekly.yml create mode 100644 example/conftest.py diff --git a/.github/workflows/ubi8-nightly.yml b/.github/workflows/ubi8-nightly.yml index a416a536c..29fdc92e0 100644 --- a/.github/workflows/ubi8-nightly.yml +++ b/.github/workflows/ubi8-nightly.yml @@ -33,14 +33,14 @@ jobs: with: path: OpenCSP - - name: pytest-cov + - name: pytest-cov (OpenCSP/example) working-directory: OpenCSP/example run: | python3 -m pip install -r ../requirements.txt export PYTHONPATH=$PWD/../ pytest --color=yes -rs -vv --cov=. --cov-report term --cov-config=.coveragerc - - name: Pip Upgrade pytest-cov + - name: Pip Upgrade pytest-cov (OpenCSP/example) working-directory: OpenCSP/example run: | python3 -m pip install -U -r ../requirements.txt diff --git a/.github/workflows/ubi8-weekly.yml b/.github/workflows/ubi8-weekly.yml new file mode 100644 index 000000000..c82b5f814 --- /dev/null +++ b/.github/workflows/ubi8-weekly.yml @@ -0,0 +1,43 @@ +name: github-UBI8-WEEKLY + +# Runs every Sunday at midnight +on: + workflow_dispatch: + schedule: + - cron: '00 00 * * 0' + +permissions: + contents: none + +# Cancels any in progress 'workflow' associated with this PR +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + ubi8-weekly: + runs-on: [opencsp-latest-ubi8] + permissions: + packages: read + contents: read + + steps: + - name: checkout + uses: actions/checkout@v4 + with: + path: OpenCSP + + - name: pytest-cov (OpenCSP/example - scene_reconstruction) + working-directory: OpenCSP/example + run: | + python3 -m pip install -r ../requirements.txt + export PYTHONPATH=$PWD/../ + pytest \ + --color=yes \ + -rs \ + -vv \ + --cov=. --cov-report term \ + --cov-config=.coveragerc \ + --dir-input=/box_data/scene_reconstruction/data_measurement/ \ + --dir-output=/box_data/scene_reconstruction/data_calculation/ \ + scene_reconstruction/example_scene_reconstruction.py \ No newline at end of file diff --git a/.github/workflows/ubi8.yml b/.github/workflows/ubi8.yml index fce7d68b4..e59ea7b84 100644 --- a/.github/workflows/ubi8.yml +++ b/.github/workflows/ubi8.yml @@ -35,7 +35,7 @@ jobs: with: path: OpenCSP - - name: pytest-cov + - name: pytest-cov (OpenCSP/opencsp) working-directory: OpenCSP/opencsp run: | python3 -m pip install -r ../requirements.txt diff --git a/example/conftest.py b/example/conftest.py new file mode 100644 index 000000000..0dfb0fd92 --- /dev/null +++ b/example/conftest.py @@ -0,0 +1,19 @@ +import pytest + + +# +# Ensure pytest adds root directory to the system path. +# +def pytest_addoption(parser): + parser.addoption('--dir-input', action='store', default='', help='Base directory with data input') + parser.addoption('--dir-output', action='store', default='', help='Base directory where output will be written') + + +@pytest.fixture +def dir_input_fixture(request): + return request.config.getoption('--dir-input') + + +@pytest.fixture +def dir_output_fixture(request): + return request.config.getoption('--dir-output') diff --git a/example/scene_reconstruction/example_scene_reconstruction.py b/example/scene_reconstruction/example_scene_reconstruction.py index cd6fa8c26..33e926aca 100644 --- a/example/scene_reconstruction/example_scene_reconstruction.py +++ b/example/scene_reconstruction/example_scene_reconstruction.py @@ -10,10 +10,8 @@ import opencsp.common.lib.tool.log_tools as lt -def scene_reconstruction(save_dir): +def scene_reconstruction(dir_output, dir_input): """Example script that reconstructs the XYZ locations of Aruco markers in a scene.""" - # Define input directory - dir_input = join(opencsp_code_dir(), 'app/scene_reconstruction/test/data/data_measurement') # Load components camera = Camera.load_from_hdf(join(dir_input, 'camera.h5')) @@ -38,22 +36,29 @@ def scene_reconstruction(save_dir): cal_scene_recon.align_points(marker_ids, alignment_values) # Save points as CSV - cal_scene_recon.save_data_as_csv(join(save_dir, 'point_locations.csv')) + cal_scene_recon.save_data_as_csv(join(dir_output, 'point_locations.csv')) # Save calibrtion figures for fig in cal_scene_recon.figures: - fig.savefig(join(save_dir, fig.get_label() + '.png')) + fig.savefig(join(dir_output, fig.get_label() + '.png')) + +def example_driver(dir_output_fixture, dir_input_fixture): + + dir_input = join(opencsp_code_dir(), 'app/scene_reconstruction/test/data/data_measurement') + dir_output = join(dirname(__file__), 'data/output/scene_reconstruction') + if dir_input_fixture: + dir_input = dir_input_fixture + if dir_output_fixture: + dir_output = dir_input_fixture -def example_driver(): # Define output directory - save_path = join(dirname(__file__), 'data/output/scene_reconstruction') - ft.create_directories_if_necessary(save_path) + ft.create_directories_if_necessary(dir_input) # Set up logger - lt.logger(join(save_path, 'log.txt'), lt.log.INFO) + lt.logger(join(dir_output, 'log.txt'), lt.log.INFO) - scene_reconstruction(save_path) + scene_reconstruction(dir_output, dir_input) if __name__ == '__main__': From d1bd77775a7a50bc270d18df78dc1855a0e18844 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Thu, 22 Aug 2024 15:48:45 -0600 Subject: [PATCH 010/105] Add docstring --- .../example_scene_reconstruction.py | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/example/scene_reconstruction/example_scene_reconstruction.py b/example/scene_reconstruction/example_scene_reconstruction.py index 33e926aca..78cac0f5f 100644 --- a/example/scene_reconstruction/example_scene_reconstruction.py +++ b/example/scene_reconstruction/example_scene_reconstruction.py @@ -11,7 +11,39 @@ def scene_reconstruction(dir_output, dir_input): - """Example script that reconstructs the XYZ locations of Aruco markers in a scene.""" + """ + Reconstructs the XYZ locations of Aruco markers in a scene. + + Parameters + ---------- + dir_output : str + The directory where the output files, including point locations and calibration figures, will be saved. + dir_input : str + The directory containing the input files needed for scene reconstruction. This includes: + - 'camera.h5': HDF5 file containing camera parameters. + - 'known_point_locations.csv': CSV file with known point locations. + - 'aruco_marker_images/*.JPG': Directory containing images of Aruco markers. + - 'point_pair_distances.csv': CSV file with distances between point pairs. + - 'alignment_points.csv': CSV file with alignment points. + + Notes + ----- + This function performs the following steps: + 1. Loads the camera parameters from an HDF5 file. + 2. Loads known point locations, point pair distances, and alignment points from CSV files. + 3. Initializes the SceneReconstruction object with the camera parameters and known point locations. + 4. Runs the calibration process to determine the marker positions. + 5. Scales the points based on the provided point pair distances. + 6. Aligns the points using the provided alignment points. + 7. Saves the reconstructed point locations to a CSV file. + 8. Saves calibration figures as PNG files in the output directory. + + Examples + -------- + >>> scene_reconstruction('/path/to/output', '/path/to/input') + + """ + # "ChatGPT 4o" assisted with generating this docstring. # Load components camera = Camera.load_from_hdf(join(dir_input, 'camera.h5')) From f97ad56450f3dd5307b52c0064443a6bf2e439af Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Thu, 22 Aug 2024 15:49:22 -0600 Subject: [PATCH 011/105] Include bens feedback --- opencsp/__init__.py | 53 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/opencsp/__init__.py b/opencsp/__init__.py index 2c8c5ba0a..1a0539c3c 100644 --- a/opencsp/__init__.py +++ b/opencsp/__init__.py @@ -15,6 +15,9 @@ import configparser import os +import copy +import sys +import argparse def _opencsp_settings_dirs() -> list[str]: @@ -49,6 +52,55 @@ def _opencsp_settings_dirs() -> list[str]: return ret +def apply_command_line_arguments(settings_from_ini: configparser.ConfigParser) -> configparser.ConfigParser: + settings_mixed = copy.copy(settings_from_ini) + + # parse the command line + parser = argparse.ArgumentParser(prog="OpenCSP/__init__.py", + description='OpenCSP settings parser', add_help=False, exit_on_error=False) + parser.add_argument( + '--dir-input', + dest="dir_input", + default="", + type=str, + help="Use the given directory value as the input directory instead of [opencsp_root_path]/[large_data_example_dir].", + ) + parser.add_argument( + '--dir-output', + dest="dir_output", + default="", + type=str, + help="Use the given directory value as the output directory instead of [opencsp_root_path]/[scratch_dir]/[scratch_name].", + ) + args, remaining = parser.parse_known_args(sys.argv[1:]) + dir_input: str = args.dir_input + dir_output: str = args.dir_output + sys.argv = [sys.argv[0]] + remaining + overridden_values: list[tuple[str, str]] = [] + + # apply the command line arguments to the settings + if dir_input != "": + settings_mixed["opencsp_root_path"]["large_data_example_dir"] = dir_input + overridden_values.append(("opencsp_root_path/large_data_example_dir", dir_input)) + if dir_output != "": + dir_output_path, dir_output_name = os.path.dirname(dir_output), os.path.basename(dir_output) + try: + os.makedirs(dir_output) + except FileExistsError: + pass + settings_mixed["opencsp_root_path"]["scratch_dir"] = dir_output_path + settings_mixed["opencsp_root_path"]["scratch_name"] = dir_output_name + overridden_values.append(("opencsp_root_path/scratch_dir", dir_output_path)) + overridden_values.append(("opencsp_root_path/scratch_name", dir_output_name)) + + # let the user know if values have been overridden + if len(overridden_values) > 0: + print("Some settings have been overridden from the command line:") + for setting_name, command_line_value in overridden_values: + print(f"\t{setting_name}: {command_line_value}") + + return settings_mixed + _settings_files: list[str] = [] @@ -70,4 +122,5 @@ def _opencsp_settings_dirs() -> list[str]: for key in opencsp_settings[section]: print(f"opencsp_settings[{section}][{key}]={opencsp_settings[section][key]}") +opencsp_settings = apply_command_line_arguments(opencsp_settings) __all__ = ['opencsp_settings'] From 06e50ac11edc56867d5fbd7cdd162cd9a2bccd7c Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Mon, 26 Aug 2024 16:47:27 -0600 Subject: [PATCH 012/105] CI fixes --- .../scene_reconstruction/example_scene_reconstruction.py | 2 +- opencsp/__init__.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/example/scene_reconstruction/example_scene_reconstruction.py b/example/scene_reconstruction/example_scene_reconstruction.py index 78cac0f5f..11bc44d37 100644 --- a/example/scene_reconstruction/example_scene_reconstruction.py +++ b/example/scene_reconstruction/example_scene_reconstruction.py @@ -22,7 +22,7 @@ def scene_reconstruction(dir_output, dir_input): The directory containing the input files needed for scene reconstruction. This includes: - 'camera.h5': HDF5 file containing camera parameters. - 'known_point_locations.csv': CSV file with known point locations. - - 'aruco_marker_images/*.JPG': Directory containing images of Aruco markers. + - 'aruco_marker_images/NAME.JPG': Directory containing images of Aruco markers. - 'point_pair_distances.csv': CSV file with distances between point pairs. - 'alignment_points.csv': CSV file with alignment points. diff --git a/opencsp/__init__.py b/opencsp/__init__.py index 1a0539c3c..15b8bd1bb 100644 --- a/opencsp/__init__.py +++ b/opencsp/__init__.py @@ -52,12 +52,14 @@ def _opencsp_settings_dirs() -> list[str]: return ret + def apply_command_line_arguments(settings_from_ini: configparser.ConfigParser) -> configparser.ConfigParser: settings_mixed = copy.copy(settings_from_ini) # parse the command line - parser = argparse.ArgumentParser(prog="OpenCSP/__init__.py", - description='OpenCSP settings parser', add_help=False, exit_on_error=False) + parser = argparse.ArgumentParser( + prog="OpenCSP/__init__.py", description='OpenCSP settings parser', add_help=False, exit_on_error=False + ) parser.add_argument( '--dir-input', dest="dir_input", From cdac26035328346b738a694507cb3ae91ee101d8 Mon Sep 17 00:00:00 2001 From: bbean Date: Tue, 6 Aug 2024 12:20:53 -0600 Subject: [PATCH 013/105] fix View3d.draw_image() method and add extra options for where and how to draw the image --- opencsp/common/lib/render/View3d.py | 72 +++++++++++++++--- .../input/View3d/test_draw_image_color.png | Bin 0 -> 298 bytes .../input/View3d/test_draw_image_expected.png | Bin 0 -> 7816 bytes .../View3d/test_draw_image_grayscale.png | Bin 0 -> 137 bytes opencsp/common/lib/render/test/test_View3d.py | 37 +++++++++ 5 files changed, 98 insertions(+), 11 deletions(-) create mode 100644 opencsp/common/lib/render/test/data/input/View3d/test_draw_image_color.png create mode 100644 opencsp/common/lib/render/test/data/input/View3d/test_draw_image_expected.png create mode 100644 opencsp/common/lib/render/test/data/input/View3d/test_draw_image_grayscale.png diff --git a/opencsp/common/lib/render/View3d.py b/opencsp/common/lib/render/View3d.py index 77300da01..3be14d5f6 100644 --- a/opencsp/common/lib/render/View3d.py +++ b/opencsp/common/lib/render/View3d.py @@ -5,6 +5,7 @@ from typing import Callable, Iterable import matplotlib.backend_bases as backb +import matplotlib.colors import matplotlib.image as mpimg import matplotlib.pyplot as plt from matplotlib.axes import Axes @@ -413,27 +414,76 @@ def imshow(self, *args, colorbar=False, **kwargs) -> None: plt.title('') plt.colorbar(im, shrink=0.9) - def draw_image(self, path_or_array: str | np.ndarray): - """Draw an image on top of an existing plot. + def draw_image( + self, + path_or_array: str | np.ndarray, + xy_location: tuple[float, float] = None, + width_height: tuple[float, float] = None, + cmap: str | matplotlib.colors.Colormap = None, + draw_on_top: int | bool | None = True, + ): + """ + Draw an image on top of an existing plot. This method is best for drawing images on top of other plots (example on top of 3D data). For drawing an image by itself - use imshow instead.""" + use imshow instead. + + Parameters + ---------- + path_or_array : str | np.ndarray + The image to be drawn. + xy_location : tuple[float, float], optional + The location at which to draw the image, in graph coordinate units. + None to draw at the lowest extent of the graph. By default None. + width_height : tuple[float, float], optional + The size to scale the image to, in graph coordinate units. None to + fit the x-dimension. By default None. + cmap : str | matplotlib.colors.Colormap, optional + The color map to color in the image, or None to not color in the + image. Only applicable to grayscale images. By default None. + draw_on_top : int | bool | None, optional + If True, then draw this image on top of other plots. If False, then + draw below. A specific zorder can be used by setting this to be an + integer. None to use the matplotlib default. Default is True. + """ if isinstance(path_or_array, str): img = mpimg.imread(path_or_array) else: img: np.ndarray = path_or_array imgw, imgh = img.shape[1], img.shape[0] xbnd, ybnd = self.axis.get_xbound(), self.axis.get_ybound() - xdraw = xbnd - - # stretch the image to fit it's original proportions in the y dimension - width = xbnd[1] - xbnd[0] - height = imgh * (width / imgw) - ymid = (ybnd[1] - ybnd[0]) / 2 + ybnd[0] - ydraw = [ymid - height / 2, ymid + height / 2] + xdraw, ydraw = xbnd, ybnd + + # assign the x and y location + if xy_location is not None: + xdraw = xy_location[0], xdraw[1] + ydraw = xy_location[1], ydraw[1] + + # assign the width and height + if width_height is not None: + # stretch the image to fit the desired width and height + xdraw = xdraw[0], xdraw[0] + width_height[0] + ydraw = ydraw[0], ydraw[0] + width_height[1] + else: + # stretch the image to fit it's original proportions in the y dimension + width = xbnd[1] - xbnd[0] + height = imgh * (width / imgw) + ymid = (ydraw[1] - ydraw[0]) / 2 + ydraw[0] + ydraw = (ymid - height / 2, ymid + height / 2) + + # get the zorder + if isinstance(draw_on_top, bool): + if draw_on_top: + zorder = 2 + else: + zorder = -1 + elif isinstance(draw_on_top, int): + zorder = draw_on_top + else: + zorder = None - self.axis.imshow(img, extent=[xdraw[0], xdraw[1], ydraw[0], ydraw[1]], zorder=-1) + self.axis.imshow(img, extent=[xdraw[0], xdraw[1], ydraw[0], ydraw[1]], zorder=zorder, cmap=cmap) def pcolormesh(self, *args, colorbar=False, **kwargs) -> None: """Allows plotting like imshow, with the additional option of sizing the boxes at will. diff --git a/opencsp/common/lib/render/test/data/input/View3d/test_draw_image_color.png b/opencsp/common/lib/render/test/data/input/View3d/test_draw_image_color.png new file mode 100644 index 0000000000000000000000000000000000000000..a9970a0d65d640e446879dc682222a67feb47ad8 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^DIm~R_fBaZe}(5p2b#hIXQp4AxpPAo@mm74ei PJgTe~DWM4fsoH5v literal 0 HcmV?d00001 diff --git a/opencsp/common/lib/render/test/data/input/View3d/test_draw_image_expected.png b/opencsp/common/lib/render/test/data/input/View3d/test_draw_image_expected.png new file mode 100644 index 0000000000000000000000000000000000000000..b96c01b656c924dd5f0766e47d4745d1699bf320 GIT binary patch literal 7816 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 RB$zNmo+xW5l`2?;{ueIw*DnA7 literal 0 HcmV?d00001 diff --git a/opencsp/common/lib/render/test/data/input/View3d/test_draw_image_grayscale.png b/opencsp/common/lib/render/test/data/input/View3d/test_draw_image_grayscale.png new file mode 100644 index 0000000000000000000000000000000000000000..c686bc44c1fd6db995a1a3f5caf917461bfb972f GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^DIm-NBp5Jqu zI&+fboh2RT{=QbZ-u3-a(sK_x4i=_H2L%Bbl_FG>H|NRGIlB=;U Date: Fri, 9 Aug 2024 11:24:04 -0600 Subject: [PATCH 014/105] reorder test_View3d tests to match the order of methods in View3d --- opencsp/common/lib/render/test/test_View3d.py | 92 +++++++++---------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/opencsp/common/lib/render/test/test_View3d.py b/opencsp/common/lib/render/test/test_View3d.py index 6588ac4de..08a4bb50b 100644 --- a/opencsp/common/lib/render/test/test_View3d.py +++ b/opencsp/common/lib/render/test/test_View3d.py @@ -46,24 +46,42 @@ def setup_figure(self) -> rcfr.RenderControlFigureRecord: return fig_record - def test_plot_arrows(self): - fig_record = self.setup_figure() + def test_draw_image(self): + fm.reset_figure_management() + color_image = ft.join(self.in_dir, f"{self.test_name}_color.png") + grayscale_image = ft.join(self.in_dir, f"{self.test_name}_grayscale.png") - # draw - square_corners = [(0, 0), (1, 0), (1, 1), (0, 1)] - arrow_style = rcps.RenderControlPointSeq(marker='arrow', markersize=0.1) - fig_record.view.draw_pq_list(square_corners, close=True, style=arrow_style) - fig_record.view.show(equal=True, block=False) - actual = fig_record.to_array() - fig_record.close() + # setup + axis_control = rca.meters(grid=False) + figure_control = rcfg.RenderControlFigure(tile=False, figsize=(2, 2)) + view_spec_2d = vs.view_spec_xy() + fig_record = fm.setup_figure( + figure_control, + axis_control, + view_spec_2d, + title=self.test_name, + code_tag=f"{__file__}.{self.test_name}()", + equal=True, + ) - # load and compare - expected = np.array(Image.open(ft.join(self.in_dir, f"{self.test_name}.png"))) - np.testing.assert_array_equal(expected, actual) + # draw + x = np.arange(0, np.pi * 2, 0.1) + y = np.sin(x) + fig_record.view.draw_pq((x * 100 / (np.pi * 2), (y + 1.0) * 80)) + fig_record.view.draw_image(color_image, (20, 40), (60, 80)) + fig_record.view.draw_image(grayscale_image, (70, 10), (20, 40), cmap="viridis", draw_on_top=False) # save - img = Image.fromarray(actual) - img.save(ft.join(self.out_dir, f"{self.test_name}.png")) + fig_record.view.show() + actual_img = Image.fromarray(fig_record.to_array()) + actual_img.save(ft.join(self.out_dir, f"{self.test_name}_actual.png")) + fig_record.close() + + # compare + expected_img = Image.open(ft.join(self.in_dir, f"{self.test_name}_expected.png")) + actual_image = np.array(actual_img) + expected_image = np.array(expected_img) + np.testing.assert_array_equal(actual_image, expected_image) def test_draw_xyz(self): """Verify that the various accepted input arguments produce the same output.""" @@ -107,42 +125,24 @@ def test_draw_xyz(self): np.testing.assert_array_equal(expected, image_xy_lists) np.testing.assert_array_equal(expected, image_arr) - def test_draw_image(self): - fm.reset_figure_management() - color_image = ft.join(self.in_dir, f"{self.test_name}_color.png") - grayscale_image = ft.join(self.in_dir, f"{self.test_name}_grayscale.png") - - # setup - axis_control = rca.meters(grid=False) - figure_control = rcfg.RenderControlFigure(tile=False, figsize=(2, 2)) - view_spec_2d = vs.view_spec_xy() - fig_record = fm.setup_figure( - figure_control, - axis_control, - view_spec_2d, - title=self.test_name, - code_tag=f"{__file__}.{self.test_name}()", - equal=True, - ) + def test_draw_pq_list_arrows(self): + fig_record = self.setup_figure() # draw - x = np.arange(0, np.pi * 2, 0.1) - y = np.sin(x) - fig_record.view.draw_pq((x * 100 / (np.pi * 2), (y + 1.0) * 80)) - fig_record.view.draw_image(color_image, (20, 40), (60, 80)) - fig_record.view.draw_image(grayscale_image, (70, 10), (20, 40), cmap="viridis", draw_on_top=False) - - # save - fig_record.view.show() - actual_img = Image.fromarray(fig_record.to_array()) - actual_img.save(ft.join(self.out_dir, f"{self.test_name}_actual.png")) + square_corners = [(0, 0), (1, 0), (1, 1), (0, 1)] + arrow_style = rcps.RenderControlPointSeq(marker='arrow', markersize=0.1) + fig_record.view.draw_pq_list(square_corners, close=True, style=arrow_style) + fig_record.view.show(equal=True, block=False) + actual = fig_record.to_array() fig_record.close() - # compare - expected_img = Image.open(ft.join(self.in_dir, f"{self.test_name}_expected.png")) - actual_image = np.array(actual_img) - expected_image = np.array(expected_img) - np.testing.assert_array_equal(actual_image, expected_image) + # load and compare + expected = np.array(Image.open(ft.join(self.in_dir, f"{self.test_name}.png"))) + np.testing.assert_array_equal(expected, actual) + + # save + img = Image.fromarray(actual) + img.save(ft.join(self.out_dir, f"{self.test_name}.png")) if __name__ == '__main__': From 550f4044677d32baefbd6d611a0d6135c62ded96 Mon Sep 17 00:00:00 2001 From: bbean Date: Fri, 9 Aug 2024 12:20:46 -0600 Subject: [PATCH 015/105] add documentation for RenderControlText, fix text rotation to be in radians, add test for draw_pq_text() --- opencsp/common/lib/render/View3d.py | 18 +++++- .../data/input/View3d/test_draw_pq_text.png | Bin 0 -> 29580 bytes opencsp/common/lib/render/test/test_View3d.py | 54 ++++++++++++++++++ .../lib/render_control/RenderControlText.py | 48 +++++++++++++--- 4 files changed, 112 insertions(+), 8 deletions(-) create mode 100644 opencsp/common/lib/render/test/data/input/View3d/test_draw_pq_text.png diff --git a/opencsp/common/lib/render/View3d.py b/opencsp/common/lib/render/View3d.py index 3be14d5f6..11887219d 100644 --- a/opencsp/common/lib/render/View3d.py +++ b/opencsp/common/lib/render/View3d.py @@ -1004,9 +1004,24 @@ def quiver( # PQ PLOTTING - def draw_pq_text(self, pq, text, style=rctxt.default()): # A pq is [p,q] + def draw_pq_text(self, pq: tuple[float, float], text: str, style: rctxt.RenderControlText = None): # A pq is [p,q] + """ + Draw the given text at the given location. + + Parameters + ---------- + pq : tuple[float, float] + The location at which to draw the text, in graph units. + text : str + The text to be drawn. + style : RenderControlText | None, optional + The style with which to render the text, or None for rctxt.default(). Default is rctxt.default(). + """ if (len(pq) != 2) and (len(pq) != 3): lt.error_and_raise(RuntimeError, 'ERROR: In draw_pq_text(), len(pq)=', len(pq), ' is not equal to 2 or 3.') + if style is None: + style = rctxt.default() + if self.view_spec['type'] == '3d': lt.error_and_raise( RuntimeError, @@ -1031,6 +1046,7 @@ def draw_pq_text(self, pq, text, style=rctxt.default()): # A pq is [p,q] fontstyle=style.fontstyle, fontweight=style.fontweight, color=style.color, + rotation=np.rad2deg(style.rotation), clip_box=self.axis.clipbox, clip_on=True, ) diff --git a/opencsp/common/lib/render/test/data/input/View3d/test_draw_pq_text.png b/opencsp/common/lib/render/test/data/input/View3d/test_draw_pq_text.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b49fac8efa5dbad987e384901a3fe489bb7975 GIT binary patch literal 29580 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 literal 0 HcmV?d00001 diff --git a/opencsp/common/lib/render/test/test_View3d.py b/opencsp/common/lib/render/test/test_View3d.py index 08a4bb50b..9223622f3 100644 --- a/opencsp/common/lib/render/test/test_View3d.py +++ b/opencsp/common/lib/render/test/test_View3d.py @@ -11,6 +11,7 @@ import opencsp.common.lib.render_control.RenderControlFigure as rcfg import opencsp.common.lib.render_control.RenderControlFigureRecord as rcfr import opencsp.common.lib.render_control.RenderControlPointSeq as rcps +import opencsp.common.lib.render_control.RenderControlText as rctxt import opencsp.common.lib.tool.file_tools as ft @@ -125,6 +126,59 @@ def test_draw_xyz(self): np.testing.assert_array_equal(expected, image_xy_lists) np.testing.assert_array_equal(expected, image_arr) + def test_draw_pq_text(self): + """Verify that text gets drawn to the graph. Also test all the other options for drawing.""" + # draw a box, for reference + fig_record = self.setup_figure() + fig_record.view.draw_pq_list([(-1, -1), (1, -1), (1, 1), (-1, 1)], close=True) + + # basic text drawing + fig_record.view.draw_pq_text((0, 0), "center", style=rctxt.default(color='black')) + fig_record.view.draw_pq_text((-1, -1), "south-west", style=rctxt.default(color='black')) + fig_record.view.draw_pq_text((1, -1), "south-east", style=rctxt.default(color='black')) + fig_record.view.draw_pq_text((1, 1), "north-east", style=rctxt.default(color='black')) + fig_record.view.draw_pq_text((-1, 1), "north-west", style=rctxt.default(color='black')) + + # text options + fig_record.view.draw_pq_text( + (-1, 0), "vertical", style=rctxt.RenderControlText(color='orange', rotation=np.pi / 2) + ) + fig_record.view.draw_pq_text( + (1, 0), "upside-down", style=rctxt.RenderControlText(color='orange', rotation=np.pi) + ) + fig_record.view.draw_pq_text( + (0, 0.1), + "left aligned", + style=rctxt.RenderControlText(color='orange', horizontalalignment='left', fontsize='small'), + ) + fig_record.view.draw_pq_text( + (0, -0.1), + "right aligned", + style=rctxt.RenderControlText(color='orange', horizontalalignment='right', fontsize='large'), + ) + fig_record.view.draw_pq_text( + (-0.5, 0), + "top aligned", + style=rctxt.RenderControlText(color='orange', verticalalignment='top', fontstyle='italic'), + ) + fig_record.view.draw_pq_text( + (0.5, 0), + "bottom aligned", + style=rctxt.RenderControlText(color='orange', verticalalignment='bottom', fontweight='bold'), + ) + + # render + fig_record.view.show(equal=True) + image_text = fig_record.to_array() + fig_record.close() + + # save the output + Image.fromarray(image_text).save(ft.join(self.out_dir, f"{self.test_name}.png")) + + # load and compare + expected = np.array(Image.open(ft.join(self.in_dir, f"{self.test_name}.png"))) + np.testing.assert_array_equal(expected, image_text) + def test_draw_pq_list_arrows(self): fig_record = self.setup_figure() diff --git a/opencsp/common/lib/render_control/RenderControlText.py b/opencsp/common/lib/render_control/RenderControlText.py index ea2f872d6..9ac604cf1 100644 --- a/opencsp/common/lib/render_control/RenderControlText.py +++ b/opencsp/common/lib/render_control/RenderControlText.py @@ -3,6 +3,8 @@ """ +import opencsp.common.lib.render.color as cl + class RenderControlText: """ @@ -53,16 +55,47 @@ class RenderControlText: def __init__( self, # See above for details: - horizontalalignment='center', # center, right, left - verticalalignment='center', # center, top, bottom, baseline, center_baseline - fontsize='medium', # float or xx-small, x-small, small, medium, large, x-large, xx-large - fontstyle='normal', # normal, italic, oblique - fontweight='normal', # 0-1000, or light, normal, bold (see above for full list) - zdir=None, # None, 'x', 'y', 'z', (1,1,0), (1,1,1), ... - color='b', # bgrcmykw (see above) + horizontalalignment: str = 'center', # center, right, left + verticalalignment: str = 'center', # center, top, bottom, baseline, center_baseline + fontsize: str | float = 'medium', # float or xx-small, x-small, small, medium, large, x-large, xx-large + fontstyle: str = 'normal', # normal, italic, oblique + fontweight: int | str = 'normal', # 0-1000, or light, normal, bold (see above for full list) + zdir: str | tuple[int, int, int] | None = None, # None, 'x', 'y', 'z', (1,1,0), (1,1,1), ... + color: str | cl.Color = 'b', # bgrcmykw (see above) + rotation: float = 0, # radians, 0=horizontal, pi/2=vertical ): + """ + Controls for how text gets rendered. + + Parameters + ---------- + horizontalalignment: str, optional + Horizontal alignment, one of 'center', 'right', 'left'. Default is 'center'. + verticalalignment: str, optional + Vertical alignment, one of 'center', 'top', 'bottom', 'baseline', 'center_baseline'. Default is 'center'. + fontsize: str | float, optional + float or xx-small, x-small, small, medium, large, x-large, xx-large. Default is 'medium'. + fontstyle: str, optional + normal, italic, oblique. Default is 'normal'. + fontweight: int | str, optional + 0-1000, or light, normal, bold (see above for full list). Default is 'normal'. + zdir: str | tuple[int, int, int] | None, optional + Which direction is up when rendering in 3d. One of 'x', 'y', 'z', or + a direction such as (1,1,0), (1,1,1), ..., or None for the + matplotlib default. Default is None. + color: str | Color, optional + Color of the text, which can be specified as either a matplotlib + named color or a Color instance. Default is 'b' (blue). + rotation: float, optional + The orientation of the text in radians where 0=horizontal and + pi/2=vertical. Default is 0. + """ super(RenderControlText, self).__init__() + # convert color to rgb tuple + if isinstance(color, cl.Color): + color = color.rgb() + # Set fields. self.horizontalalignment = horizontalalignment self.verticalalignment = verticalalignment @@ -71,6 +104,7 @@ def __init__( self.fontweight = fontweight self.zdir = zdir self.color = color + self.rotation = rotation def default(fontsize='medium', color='b'): From 9054aa40a516319c6af0d0ca9925191e7ef5ea10 Mon Sep 17 00:00:00 2001 From: bbean Date: Fri, 9 Aug 2024 12:30:57 -0600 Subject: [PATCH 016/105] add documentation for draw_xyz_text, fix rotation to be measured in radians, add unit test --- opencsp/common/lib/render/View3d.py | 107 +++++++++--------- .../data/input/View3d/test_draw_xyz_text.png | Bin 0 -> 30010 bytes opencsp/common/lib/render/test/test_View3d.py | 53 +++++++++ 3 files changed, 105 insertions(+), 55 deletions(-) create mode 100644 opencsp/common/lib/render/test/data/input/View3d/test_draw_xyz_text.png diff --git a/opencsp/common/lib/render/View3d.py b/opencsp/common/lib/render/View3d.py index 11887219d..6a2b59a72 100644 --- a/opencsp/common/lib/render/View3d.py +++ b/opencsp/common/lib/render/View3d.py @@ -551,10 +551,23 @@ def pq2xyz(self, pq): # XYZ PLOTTING - def draw_xyz_text(self, xyz, text, style=rctxt.default()): # An xyz is [x,y,z] + # An xyz is [x,y,z] + def draw_xyz_text(self, xyz: tuple[float, float, float], text: str, style: rctxt.RenderControlText | None = None): + """ + Draws the given text at the given location. + + Parameters + ---------- + xyz : tuple[float, float, float] + The x, y, and z location to draw the text at. + text : str + The text to be drawn. + style : rctxt.RenderControlText | None, optional + The style with which to draw the text, or None for rctxt.default(). By default None + """ if len(xyz) != 3: - lt.error('ERROR: In draw_xyz_text(), len(xyz)=', len(xyz), ' is not equal to 3.') - assert False + lt.error_and_raise(ValueError, 'ERROR: In draw_xyz_text(), len(xyz)=', len(xyz), ' is not equal to 3.') + if self.view_spec['type'] == '3d': self.axis.text( xyz[0], @@ -568,56 +581,39 @@ def draw_xyz_text(self, xyz, text, style=rctxt.default()): # An xyz is [x,y,z] fontweight=style.fontweight, zdir=style.zdir, color=style.color, + rotation=np.rad2deg(style.rotation), ) - elif self.view_spec['type'] == 'xy': - self.axis.text( - xyz[0], - xyz[1], - text, - horizontalalignment=style.horizontalalignment, - verticalalignment=style.verticalalignment, - fontsize=style.fontsize, - fontstyle=style.fontstyle, - fontweight=style.fontweight, - color=style.color, - ) - elif self.view_spec['type'] == 'xz': - self.axis.text( - xyz[0], - xyz[2], - text, - horizontalalignment=style.horizontalalignment, - verticalalignment=style.verticalalignment, - fontsize=style.fontsize, - fontstyle=style.fontstyle, - fontweight=style.fontweight, - color=style.color, - ) - elif self.view_spec['type'] == 'yz': - self.axis.text( - xyz[1], - xyz[2], - text, - horizontalalignment=style.horizontalalignment, - verticalalignment=style.verticalalignment, - fontsize=style.fontsize, - fontstyle=style.fontstyle, - fontweight=style.fontweight, - color=style.color, - ) - elif self.view_spec['type'] == 'vplane': - pq = vs.xyz2pq(xyz, self.view_spec) - self.axis.text( - pq[0], - pq[1], - text, - horizontalalignment=style.horizontalalignment, - verticalalignment=style.verticalalignment, - fontsize=style.fontsize, - fontstyle=style.fontstyle, - fontweight=style.fontweight, - color=style.color, - ) + elif self.view_spec['type'] in ['xy', 'xz', 'yz', 'vplane']: + coords1, coords2 = None, None + + if self.view_spec['type'] == 'xy': + coords1 = xyz[0] + coords2 = xyz[1] + elif self.view_spec['type'] == 'xz': + coords1 = xyz[0] + coords2 = xyz[2] + elif self.view_spec['type'] == 'yz': + coords1 = xyz[1] + coords2 = xyz[2] + elif self.view_spec['type'] == 'vplane': + pq = vs.xyz2pq(xyz, self.view_spec) + coords1 = pq[0] + coords2 = pq[1] + + if coords1 is not None: + self.axis.text( + coords1, + coords2, + text, + horizontalalignment=style.horizontalalignment, + verticalalignment=style.verticalalignment, + fontsize=style.fontsize, + fontstyle=style.fontstyle, + fontweight=style.fontweight, + color=style.color, + rotation=np.rad2deg(style.rotation), + ) + elif self.view_spec['type'] == 'camera': pq = vs.xyz2pq(xyz, self.view_spec) if pq: @@ -631,16 +627,17 @@ def draw_xyz_text(self, xyz, text, style=rctxt.default()): # An xyz is [x,y,z] fontstyle=style.fontstyle, fontweight=style.fontweight, color=style.color, + rotation=np.rad2deg(style.rotation), clip_box=self.axis.clipbox, clip_on=True, ) else: - lt.error( + lt.error_and_raise( + RuntimeError, "ERROR: In View3d.draw_xyz_text(), unrecognized view_spec['type'] = '" + str(self.view_spec['type']) - + "' encountered." + + "' encountered.", ) - assert False def draw_xyz( self, diff --git a/opencsp/common/lib/render/test/data/input/View3d/test_draw_xyz_text.png b/opencsp/common/lib/render/test/data/input/View3d/test_draw_xyz_text.png new file mode 100644 index 0000000000000000000000000000000000000000..946f214c7fc576d6612b6eb2510e68fa4c2ca18b GIT binary patch literal 30010 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 literal 0 HcmV?d00001 diff --git a/opencsp/common/lib/render/test/test_View3d.py b/opencsp/common/lib/render/test/test_View3d.py index 9223622f3..3f659da66 100644 --- a/opencsp/common/lib/render/test/test_View3d.py +++ b/opencsp/common/lib/render/test/test_View3d.py @@ -84,6 +84,59 @@ def test_draw_image(self): expected_image = np.array(expected_img) np.testing.assert_array_equal(actual_image, expected_image) + def test_draw_xyz_text(self): + """Verify that text gets drawn to the graph. Also test all the other options for drawing.""" + # draw a box, for reference + fig_record = self.setup_figure() + fig_record.view.draw_pq_list([(-1, -1), (1, -1), (1, 1), (-1, 1)], close=True) + + # basic text drawing + fig_record.view.draw_xyz_text((0, 0, 0), "center", style=rctxt.default(color='black')) + fig_record.view.draw_xyz_text((-1, -1, 0), "south-west", style=rctxt.default(color='black')) + fig_record.view.draw_xyz_text((1, -1, 0), "south-east", style=rctxt.default(color='black')) + fig_record.view.draw_xyz_text((1, 1, 0), "north-east", style=rctxt.default(color='black')) + fig_record.view.draw_xyz_text((-1, 1, 0), "north-west", style=rctxt.default(color='black')) + + # text options + fig_record.view.draw_xyz_text( + (-1, 0, 0), "vertical", style=rctxt.RenderControlText(color='orange', rotation=np.pi / 2) + ) + fig_record.view.draw_xyz_text( + (1, 0, 0), "upside-down", style=rctxt.RenderControlText(color='orange', rotation=np.pi) + ) + fig_record.view.draw_xyz_text( + (0, 0.1, 0), + "left aligned", + style=rctxt.RenderControlText(color='orange', horizontalalignment='left', fontsize='small'), + ) + fig_record.view.draw_xyz_text( + (0, -0.1, 0), + "right aligned", + style=rctxt.RenderControlText(color='orange', horizontalalignment='right', fontsize='large'), + ) + fig_record.view.draw_xyz_text( + (-0.5, 0, 0), + "top aligned", + style=rctxt.RenderControlText(color='orange', verticalalignment='top', fontstyle='italic'), + ) + fig_record.view.draw_xyz_text( + (0.5, 0, 0), + "bottom aligned", + style=rctxt.RenderControlText(color='orange', verticalalignment='bottom', fontweight='bold'), + ) + + # render + fig_record.view.show(equal=True) + image_text = fig_record.to_array() + fig_record.close() + + # save the output + Image.fromarray(image_text).save(ft.join(self.out_dir, f"{self.test_name}.png")) + + # load and compare + expected = np.array(Image.open(ft.join(self.in_dir, f"{self.test_name}.png"))) + np.testing.assert_array_equal(expected, image_text) + def test_draw_xyz(self): """Verify that the various accepted input arguments produce the same output.""" style = rcps.RenderControlPointSeq('None', marker='.') From 7d7f8be6cb65b2694295884ceb583f37ce87fb3b Mon Sep 17 00:00:00 2001 From: bbean Date: Fri, 9 Aug 2024 14:10:23 -0600 Subject: [PATCH 017/105] standardize colors in RenderControlPointSequence and in RenderControlText, add alpha option for markers --- opencsp/common/lib/render/color.py | 40 +++++++++++- .../render_control/RenderControlPointSeq.py | 65 ++++++++++++++----- .../lib/render_control/RenderControlText.py | 17 +++-- 3 files changed, 99 insertions(+), 23 deletions(-) diff --git a/opencsp/common/lib/render/color.py b/opencsp/common/lib/render/color.py index e6eef710c..1c7847764 100644 --- a/opencsp/common/lib/render/color.py +++ b/opencsp/common/lib/render/color.py @@ -8,7 +8,7 @@ """ -from typing import Iterator, Iterable +from typing import Iterator, Iterable, Union import numpy as np import matplotlib.colors @@ -73,12 +73,37 @@ def from_hsv(cls, hue: float, saturation: float, value: float, name: str, short_ rgb = matplotlib.colors.hsv_to_rgb((hue, saturation, value)) return cls(rgb[0], rgb[1], rgb[2], name, value) + @classmethod + def from_str(cls, sval='b') -> "Color": + longhand = sval + if sval in _plot_color_shorthands: + longhand = _plot_color_shorthands[sval] + + rgb = matplotlib.colors.to_rgb(sval) + + return cls(rgb[0], rgb[1], rgb[2], longhand, sval) + + @classmethod + def convert(cls, val: Union["Color", str, tuple, None]) -> "Color": + if val is None: + return None + elif isinstance(val, Color): + return val + elif isinstance(val, str): + return cls.from_str(val) + else: + rgb = val + return cls(rgb[0], rgb[1], rgb[2], 'tuple', 'tuple') + def rgb(self) -> tuple[float, float, float]: """ Returns color in [R,G,B] format, with range [0,1] for each. """ return (self.red, self.green, self.blue) + def rgba(self, alpha=1.0) -> tuple[float, float, float, float]: + return (self.red, self.green, self.blue, alpha) + def rgb_255(self) -> tuple[int, int, int]: """ Returns color in [R,G,B] format, with range [0,255] for each. @@ -245,3 +270,16 @@ def __iter__(self) -> Iterator[Color]: colors, so that we can use or remix them as necessary. Color order: blue, orange, green, red, purple, brown, pink, gray, yellow, cyan """ + + +_plot_color_shorthands = { + 'b': 'blue', + 'g': 'green', + 'r': 'red', + 'c': 'cyan', + 'm': 'magenta', + 'y': 'yellow', + 'k': 'black', + 'w': 'white', +} +""" From https://matplotlib.org/stable/users/explain/colors/colors.html """ diff --git a/opencsp/common/lib/render_control/RenderControlPointSeq.py b/opencsp/common/lib/render_control/RenderControlPointSeq.py index 6054ac847..98c4ddf38 100644 --- a/opencsp/common/lib/render_control/RenderControlPointSeq.py +++ b/opencsp/common/lib/render_control/RenderControlPointSeq.py @@ -3,6 +3,8 @@ """ +import matplotlib.colors + import opencsp.common.lib.render.color as clr @@ -83,6 +85,7 @@ def __init__( markeredgecolor: str | clr.Color = None, # Defaults to color above if not set. markeredgewidth=None, # Defaults to linewidth if not set. markerfacecolor: str | clr.Color = None, # Defaults to color above if not set. + markeralpha: float | None = None, vector_color: str | clr.Color = 'b', # Used if points are in a vector field. vector_linewidth: float = 1, # Used if points are in a vector field. vector_scale: float = 1.0, # Facter to grow/srhink vector length, for points in a vector field. @@ -108,6 +111,10 @@ def __init__( Width of the marker edge in pixels. Defaults is 'linewidth'. markerfacecolor : str | Color | None, optional The color of the marker faces. Default is 'color'. + markeralpha : float | None, optional + The alpha value (transparency) with which to draw the markers, where + 0=fully transparent and 1=fully opaque. None for matplotlib default + style. Default is None. vector_color : str | Color | None, optional The color for vectors. Only applies to points in a vector field. Default is 'b'. @@ -120,16 +127,6 @@ def __init__( """ super(RenderControlPointSeq, self).__init__() - # Convert color values - if isinstance(color, clr.Color): - color = color.rgb() - if isinstance(markeredgecolor, clr.Color): - markeredgecolor = markeredgecolor.rgb() - if isinstance(markerfacecolor, clr.Color): - markerfacecolor = markerfacecolor.rgb() - if isinstance(vector_color, clr.Color): - vector_color = vector_color.rgb() - # Set defaults. if markeredgecolor == None: markeredgecolor = color @@ -141,22 +138,56 @@ def __init__( # Set fields. self.linestyle = linestyle self.linewidth = linewidth - self.color = color + self._color = color self.marker = marker self.markersize = markersize - self.markeredgecolor = markeredgecolor + self._markeredgecolor = markeredgecolor self.markeredgewidth = markeredgewidth - self.markerfacecolor = markerfacecolor - self.vector_color = vector_color + self._markerfacecolor = markerfacecolor + self.markeralpha = markeralpha + self._vector_color = vector_color self.vector_linewidth = vector_linewidth self.vector_scale = vector_scale + self._standardize_color_values() + + @property + def color(self) -> tuple[float, float, float, float] | None: + if self._color is not None: + return self._color.rgba() + + @property + def markeredgecolor(self) -> tuple[float, float, float, float] | None: + if self._markeredgecolor is not None: + if self.markeralpha is not None: + return self._markeredgecolor.rgba(self.markeralpha) + + @property + def markerfacecolor(self) -> tuple[float, float, float, float] | None: + if self._markerfacecolor is not None: + if self.markeralpha is not None: + return self._markerfacecolor.rgba(self.markeralpha) + + @property + def vectorcolor(self) -> tuple[float, float, float, float] | None: + if self._vectorcolor is not None: + return self._vectorcolor.rgba() + # MODIFICATION def set_color(self, color): - self.color = color - self.markeredgecolor = color - self.markerfacecolor = color + self._color = color + self._markeredgecolor = color + self._markerfacecolor = color + + self._standardize_color_values() + + def _standardize_color_values(self): + # convert to 'Color' class + self._color = clr.Color.convert(self._color) + self._markeredgecolor = clr.Color.convert(self._markeredgecolor) + self._markerfacecolor = clr.Color.convert(self._markerfacecolor) + self._vector_color = clr.Color.convert(self._vector_color) # COMMON CASES diff --git a/opencsp/common/lib/render_control/RenderControlText.py b/opencsp/common/lib/render_control/RenderControlText.py index 9ac604cf1..a67054a2d 100644 --- a/opencsp/common/lib/render_control/RenderControlText.py +++ b/opencsp/common/lib/render_control/RenderControlText.py @@ -92,10 +92,6 @@ def __init__( """ super(RenderControlText, self).__init__() - # convert color to rgb tuple - if isinstance(color, cl.Color): - color = color.rgb() - # Set fields. self.horizontalalignment = horizontalalignment self.verticalalignment = verticalalignment @@ -103,9 +99,20 @@ def __init__( self.fontstyle = fontstyle self.fontweight = fontweight self.zdir = zdir - self.color = color + self._color = color self.rotation = rotation + self._standardize_color_values() + + @property + def color(self) -> tuple[float, float, float, float] | None: + if self._color is not None: + return self._color.rgba() + + def _standardize_color_values(self): + # convert to 'Color' class + self._color = cl.Color.convert(self._color) + def default(fontsize='medium', color='b'): """ From 00de04647f4d4bcee7984f6db04b3a334890198e Mon Sep 17 00:00:00 2001 From: bbean Date: Fri, 9 Aug 2024 14:12:28 -0600 Subject: [PATCH 018/105] test the various rendering options for RenderControlPointSequence --- opencsp/common/lib/render/View3d.py | 3 ++ .../test_draw_xyz_list_style_options.png | Bin 0 -> 25661 bytes opencsp/common/lib/render/test/test_View3d.py | 42 ++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 opencsp/common/lib/render/test/data/input/View3d/test_draw_xyz_list_style_options.png diff --git a/opencsp/common/lib/render/View3d.py b/opencsp/common/lib/render/View3d.py index 6a2b59a72..7c11affae 100644 --- a/opencsp/common/lib/render/View3d.py +++ b/opencsp/common/lib/render/View3d.py @@ -259,6 +259,7 @@ def _plot(self, x: list | list[list], y: list | list[list], *vargs, style: any = This will typically be a RenderControlPointSeq instance. By default None. """ + # draw with arrows if style is not None and isinstance(style, rcps.RenderControlPointSeq) and style.marker == "arrow": # some of the arguments between plot and arrow are different kwargs = copy.copy(kwargs) @@ -290,6 +291,8 @@ def _plot(self, x: list | list[list], y: list | list[list], *vargs, style: any = self.axis.arrow( c1[0], c1[1], c2[0] - c1[0], c2[1] - c1[1], *vargs, length_includes_head=True, **kwargs ) + + # draw normally else: self.axis.plot(x, y, *vargs, **kwargs) diff --git a/opencsp/common/lib/render/test/data/input/View3d/test_draw_xyz_list_style_options.png b/opencsp/common/lib/render/test/data/input/View3d/test_draw_xyz_list_style_options.png new file mode 100644 index 0000000000000000000000000000000000000000..0e949bbf79778a82043da635a82a1b23d2ba3598 GIT binary patch literal 25661 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 HN2L58ce|3P literal 0 HcmV?d00001 diff --git a/opencsp/common/lib/render/test/test_View3d.py b/opencsp/common/lib/render/test/test_View3d.py index 3f659da66..a1408c623 100644 --- a/opencsp/common/lib/render/test/test_View3d.py +++ b/opencsp/common/lib/render/test/test_View3d.py @@ -1,3 +1,4 @@ +import copy import unittest import opencsp.common.lib.tool.file_tools as ft @@ -179,6 +180,47 @@ def test_draw_xyz(self): np.testing.assert_array_equal(expected, image_xy_lists) np.testing.assert_array_equal(expected, image_arr) + def test_draw_xyz_list_style_options(self): + """Tests all the various render options for RenderControlPointSeq.""" + kwargs_default_other = { + "linestyle": ('-', '--'), + "linewidth": (1, 2), + "color": ('b', 'r'), + "marker": ('X', '+'), + "markersize": (6, 10), + "markeredgecolor": (None, 'r'), + "markeredgewidth": (None, 3), + "markerfacecolor": (None, 'r'), + "markeralpha": (1.0, 0.5), + } + defaults = {kwarg: kwargs_default_other[kwarg][0] for kwarg in kwargs_default_other} + others = {kwarg: kwargs_default_other[kwarg][1] for kwarg in kwargs_default_other} + + # setup the plot + fig_record = self.setup_figure() + + # plot all the options + for i, kwarg in enumerate(kwargs_default_other): + style_options = copy.copy(defaults) + style_options[kwarg] = others[kwarg] + style = rcps.RenderControlPointSeq(**style_options) + fig_record.view.draw_xyz_list([(i, 0, 0), (i, 1, 0)], style=style) + fig_record.view.draw_xyz_text( + (i, -0.5, 0), + kwarg, + rctxt.RenderControlText(verticalalignment='top', fontsize='small', color='black', rotation=np.pi / 2), + ) + fig_record.view.show(equal=True) + image_style_options = fig_record.to_array() + fig_record.close() + + # save the output + Image.fromarray(image_style_options).save(ft.join(self.out_dir, f"{self.test_name}.png")) + + # load and compare + expected = np.array(Image.open(ft.join(self.in_dir, f"{self.test_name}.png"))) + np.testing.assert_array_equal(expected, image_style_options) + def test_draw_pq_text(self): """Verify that text gets drawn to the graph. Also test all the other options for drawing.""" # draw a box, for reference From e6b04417f15709b578910f53f5f2761dd566dc6c Mon Sep 17 00:00:00 2001 From: bbean Date: Fri, 9 Aug 2024 14:29:40 -0600 Subject: [PATCH 019/105] add method View3d.draw_heatmap_2d() --- opencsp/common/lib/render/View3d.py | 54 ++++++++++++++ .../data/input/View3d/test_draw_heatmap2d.png | Bin 0 -> 14645 bytes opencsp/common/lib/render/test/test_View3d.py | 20 ++++++ .../render_control/RenderControlHeatmap.py | 68 ++++++++++++++++++ 4 files changed, 142 insertions(+) create mode 100644 opencsp/common/lib/render/test/data/input/View3d/test_draw_heatmap2d.png create mode 100644 opencsp/common/lib/render_control/RenderControlHeatmap.py diff --git a/opencsp/common/lib/render/View3d.py b/opencsp/common/lib/render/View3d.py index 7c11affae..44f2e52f3 100644 --- a/opencsp/common/lib/render/View3d.py +++ b/opencsp/common/lib/render/View3d.py @@ -13,6 +13,7 @@ from mpl_toolkits.mplot3d.axes3d import Axes3D import numpy as np from PIL import Image +import scipy.ndimage from matplotlib.axes import Axes import matplotlib.backend_bases as backb @@ -28,6 +29,7 @@ from opencsp.common.lib.geometry.Vxyz import Vxyz import opencsp.common.lib.render.axis_3d as ax3d import opencsp.common.lib.render.view_spec as vs +import opencsp.common.lib.render_control.RenderControlHeatmap as rcheat import opencsp.common.lib.render_control.RenderControlPointSeq as rcps import opencsp.common.lib.render_control.RenderControlText as rctxt import opencsp.common.lib.tool.log_tools as lt @@ -538,6 +540,58 @@ def draw_hist2d(self, h, xedges, yedges, *args, colorbar=False, **kwargs): plt.title('') plt.colorbar(im, shrink=0.9) + def draw_heatmap_2d( + self, + heatmap_2d: np.ndarray, + x_range: tuple[float, float] = None, + y_range: tuple[float, float] = None, + scale=100.0, + style: rcheat.RenderControlHeatmap = None, + colorbar_unimplemented=False, + ): + # validate input + if heatmap_2d.ndim > 2: + try: + heatmap_2d = heatmap_2d.squeeze() + except Exception: + pass + if heatmap_2d.ndim != 2: + lt.error_and_raise( + ValueError, + "Error in View3d.draw_heatmap_2d(): " + + f"heatmap should have two dimensions but instead has shape {heatmap_2d.shape}", + ) + + # normalize input + if x_range is None: + x_range = [0, heatmap_2d.shape[1]] + if y_range is None: + y_range = [0, heatmap_2d.shape[0]] + if style is None: + style = rcheat.RenderControlHeatmap() + + # interpolate heatmap_2d -> np.array((y_range, x_range)) + zoom_x = (x_range[1] - x_range[0]) / heatmap_2d.shape[1] * scale + zoom_y = (y_range[1] - y_range[0]) / heatmap_2d.shape[0] * scale + ranged_heatmap = scipy.ndimage.zoom(heatmap_2d, (zoom_x, zoom_y), order=0, grid_mode=False) + + # set the bounds on this plot + self.axis.set_xbound(x_range[0], x_range[1]) + self.axis.set_ybound(y_range[0], y_range[1]) + + # draw the heatmap + self.draw_image(ranged_heatmap, cmap=style.cmap) + + # draw the division lines + if style.linestyle_unimplemented is not None: + # TODO + pass + + # draw the colorbar + if colorbar_unimplemented: + # TODO + pass + # XYZ <---> PQ CONVERSION def xyz2pqw(self, xyz): diff --git a/opencsp/common/lib/render/test/data/input/View3d/test_draw_heatmap2d.png b/opencsp/common/lib/render/test/data/input/View3d/test_draw_heatmap2d.png new file mode 100644 index 0000000000000000000000000000000000000000..f7930e7017c8ef0871b9c938b776d3603741c7ee GIT binary patch literal 14645 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 v)pmF1FfesIn>Tq6RD(Yt@6&W*S-!r$ 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 Dq}M%r literal 0 HcmV?d00001 diff --git a/opencsp/common/lib/render/test/test_View3d.py b/opencsp/common/lib/render/test/test_View3d.py index a1408c623..491600cd5 100644 --- a/opencsp/common/lib/render/test/test_View3d.py +++ b/opencsp/common/lib/render/test/test_View3d.py @@ -11,6 +11,7 @@ import opencsp.common.lib.render_control.RenderControlAxis as rca import opencsp.common.lib.render_control.RenderControlFigure as rcfg import opencsp.common.lib.render_control.RenderControlFigureRecord as rcfr +import opencsp.common.lib.render_control.RenderControlHeatmap as rcheat import opencsp.common.lib.render_control.RenderControlPointSeq as rcps import opencsp.common.lib.render_control.RenderControlText as rctxt import opencsp.common.lib.tool.file_tools as ft @@ -85,6 +86,25 @@ def test_draw_image(self): expected_image = np.array(expected_img) np.testing.assert_array_equal(actual_image, expected_image) + def test_draw_heatmap2d(self): + # build the heatmap + linear = np.arange(0, 256, 1) + square = linear.reshape((16, 16)) + + # with single points + fig_record = self.setup_figure(tile=False) + fig_record.view.draw_heatmap_2d(square, style=rcheat.RenderControlHeatmap(cmap='inferno')) + fig_record.view.show(equal=True) + image_heatmap = fig_record.to_array() + fig_record.close() + + # save the output + Image.fromarray(image_heatmap).save(ft.join(self.out_dir, f"{self.test_name}.png")) + + # load and compare + expected = np.array(Image.open(ft.join(self.in_dir, f"{self.test_name}.png"))) + np.testing.assert_array_equal(expected, image_heatmap) + def test_draw_xyz_text(self): """Verify that text gets drawn to the graph. Also test all the other options for drawing.""" # draw a box, for reference diff --git a/opencsp/common/lib/render_control/RenderControlHeatmap.py b/opencsp/common/lib/render_control/RenderControlHeatmap.py new file mode 100644 index 000000000..278a73481 --- /dev/null +++ b/opencsp/common/lib/render_control/RenderControlHeatmap.py @@ -0,0 +1,68 @@ +import matplotlib.colors + + +class RenderControlHeatmap: + """ + Render control for a heatmap. + + Controls style of the heatmap. + + Choices from: + https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html + https://matplotlib.org/stable/gallery/color/colormap_reference.html + + Line styles + ----------- + '-' solid line style + '--' dashed line style + '-.' dash-dot line style + ':' dotted line style + 'None' no lines + + + Perceptually uniform color maps + ------------------------------- + 'Viridis' purple -> turquoise -> yellow (default) + 'Plasma' blue -> purple -> yellow-green + 'Inferno' black -> rust -> yellow-white + 'Magma' black -> maroon -> white + 'Cividis' navy -> grey -> yellow + + + Sequential color maps + --------------------- + 'Greys' white -> grey -> black + 'Purples' white -> light purple -> royal purple + 'Blues' white -> light blue -> dark blue + 'Greens' white -> light green -> forest green + 'Oranges' white -> orange -> burnt orange + 'Reds' white -> tangerine -> dark red + 'YlOrBr' white -> yellow -> orange -> brown + 'YlOrRd' white -> yellow -> orange -> dark red + 'OrRd' white -> orange -> dark red + 'PuRd' white -> purple -> dark red + 'RdPu' white -> pink -> purple + 'BuPu' white -> light blud -> faded blue -> dark purple + 'GrBu' white -> light green -> aqua -> dark blue + 'PuBu' white -> light purple -> faded blue -> dark blue + 'YlGnBl' white -> yellow -> green -> aqua -> blue -> dark blue + 'PuBlGn' white -> light purple -> sky blue -> forest green + 'BuGn' white -> aqua -> green -> forest green + 'YlGn' white -> yellow -> yellow green -> forest green + + + Miscellaneous colormaps + ----------------------- + 'jet' navy -> green -> rust + + """ + + def __init__( + self, + linestyle_unimplemented='None', + linewidth_unimplemented=1, + cmap: str | matplotlib.colors.Colormap = 'Viridis', + ): + self.linestyle_unimplemented = linestyle_unimplemented + self.linewidth_unimplemented = linewidth_unimplemented + self.cmap = cmap From 0510147e431376dc206e66ff167dc74ee5b065eb Mon Sep 17 00:00:00 2001 From: bbean Date: Fri, 9 Aug 2024 18:43:21 -0600 Subject: [PATCH 020/105] documentation --- opencsp/common/lib/render/View3d.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/opencsp/common/lib/render/View3d.py b/opencsp/common/lib/render/View3d.py index 44f2e52f3..91a4c6576 100644 --- a/opencsp/common/lib/render/View3d.py +++ b/opencsp/common/lib/render/View3d.py @@ -767,12 +767,24 @@ def draw_xyz_list( style: rcps.RenderControlPointSeq = None, label: str = None, ) -> None: - """Draw lines or closed polygons. + """ + Draw points, lines, or closed polygons. Parameters ---------- - input_xyz_list: List of xyz three vectors (eg [[0,0,0], [1,1,1]]) - close: Draw as a closed polygon (ignored if input_xyz_list < 3 points)""" + input_xyz_list: Iterable[tuple[float, float, float]] + List of xyz three vectors (eg [[0,0,0], [1,1,1]]) + close: Bool, optional + Draw as a closed polygon. This is done by adding the first value to + the end of the input list as a new last value. Ignored if + input_xyz_list < 3 points. Default is False. + style: RenderControlPointSeq | None, optional + The style with which to render the input, or None for + rcps.default(). Default is None. + label: str | None, optional + The label used for this graph in the legend, or None to be excluded + from the legend. Default is None. + """ if style == None: style = rcps.default() From 0e6619ec3e2d4f8934ae332333d2bbe4733aeaa7 Mon Sep 17 00:00:00 2001 From: bbean Date: Fri, 9 Aug 2024 18:44:39 -0600 Subject: [PATCH 021/105] generify View3d.draw_xyz_surface() --- opencsp/common/lib/render/View3d.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opencsp/common/lib/render/View3d.py b/opencsp/common/lib/render/View3d.py index 91a4c6576..156834f4c 100644 --- a/opencsp/common/lib/render/View3d.py +++ b/opencsp/common/lib/render/View3d.py @@ -890,7 +890,7 @@ def draw_Vxyz(self, V: Vxyz, close=False, style=None, label=None) -> None: self.draw_xyz_list(list(V.data.T), close, style, label) # TODO TJL: only implemented for 3d views, should extend - def draw_xyz_surface( + def _draw_xyz_surface_customshape( self, x_mesh: np.ndarray, y_mesh: np.ndarray, From 0a2dd209f8651a8b9703e8efa5d3bac97ffdd1e8 Mon Sep 17 00:00:00 2001 From: bbean Date: Fri, 9 Aug 2024 19:11:13 -0600 Subject: [PATCH 022/105] add 'gradient' option to View3d.draw_pq_list() --- opencsp/common/lib/render/View3d.py | 72 ++++++++++++++---- .../View3d/test_draw_pq_list_gradient.png | Bin 0 -> 14634 bytes opencsp/common/lib/render/test/test_View3d.py | 25 +++++- 3 files changed, 81 insertions(+), 16 deletions(-) create mode 100644 opencsp/common/lib/render/test/data/input/View3d/test_draw_pq_list_gradient.png diff --git a/opencsp/common/lib/render/View3d.py b/opencsp/common/lib/render/View3d.py index 156834f4c..8e742fe8f 100644 --- a/opencsp/common/lib/render/View3d.py +++ b/opencsp/common/lib/render/View3d.py @@ -1188,6 +1188,7 @@ def draw_pq_list( close: bool = False, style: rcps.RenderControlPointSeq = None, label: str = None, + gradient: bool | str = False, ): """ Draws the given list to this view. @@ -1205,6 +1206,21 @@ def draw_pq_list( which will draw a line plot. label : str, optional The label for this plot for use in the legend, or None for no label. By default None. + gradient : bool | str, optional + If True or a string, then the given list is drawn as a + linecollection with color map gradient (default 'Viridis'). If + False, then the list is drawn with the single 'style.color' color. + Default is False. + + Note: the color map is applied as a single color per segment. To get + a fade across a single line, you should do something similar to:: + + x1, y1 = line_start + x2, y2 = line_end + gradient_line_x = np.arange(x1, x2, 20).tolist() + gradient_line_y = np.arange(y1, y2, 20).tolist() + gradient_line = list(zip(gradient_line_x, gradient_line_y)) + draw_pq_list(gradient_line, gradient=True) """ if style is None: style = rcps.default() @@ -1229,21 +1245,47 @@ def draw_pq_list( + f"Should be one of {allowed_vs_types}.", ) - # Draw the point list lines and markers - self._plot( - [pq[0] for pq in pq_list], - [pq[1] for pq in pq_list], - style=style, - label=label, - linestyle=style.linestyle, - linewidth=style.linewidth, - color=style.color, - marker=style.marker, - markersize=style.markersize, - markeredgecolor=style.markeredgecolor, - markeredgewidth=style.markeredgewidth, - markerfacecolor=style.markerfacecolor, - ) + if (gradient == False) or (len(pq_list) == 1): + # Draw the point list lines and markers + self._plot( + [pq[0] for pq in pq_list], + [pq[1] for pq in pq_list], + style=style, + label=label, + linestyle=style.linestyle, + linewidth=style.linewidth, + color=style.color, + marker=style.marker, + markersize=style.markersize, + markeredgecolor=style.markeredgecolor, + markeredgewidth=style.markeredgewidth, + markerfacecolor=style.markerfacecolor, + ) + + else: + # construct the color map + cmap = gradient + if gradient == True: + cmap = 'viridis' + if isinstance(cmap, str): + cmap = matplotlib.colormaps[cmap] + + # set the color map + self.axis.set_prop_cycle('color', [cmap(i) for i in np.linspace(0.0, 1.0, len(pq_list) - 1)]) + + # draw the line segments + for i in range(len(pq_list) - 1): + self._plot( + [pq[0] for pq in pq_list[i : i + 2]], + [pq[1] for pq in pq_list[i : i + 2]], + style=style, + label=label, + linestyle=style.linestyle, + linewidth=style.linewidth, + marker=style.marker, + markersize=style.markersize, + markeredgewidth=style.markeredgewidth, + ) # VECTOR FIELD PLOTTING diff --git a/opencsp/common/lib/render/test/data/input/View3d/test_draw_pq_list_gradient.png b/opencsp/common/lib/render/test/data/input/View3d/test_draw_pq_list_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..6b751285bb559df0898e8baa4edfcec146eec7a3 GIT binary patch literal 14634 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 Date: Mon, 12 Aug 2024 13:45:30 -0600 Subject: [PATCH 023/105] typo --- opencsp/common/lib/render_control/RenderControlPointSeq.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/opencsp/common/lib/render_control/RenderControlPointSeq.py b/opencsp/common/lib/render_control/RenderControlPointSeq.py index 98c4ddf38..961d4e105 100644 --- a/opencsp/common/lib/render_control/RenderControlPointSeq.py +++ b/opencsp/common/lib/render_control/RenderControlPointSeq.py @@ -169,9 +169,9 @@ def markerfacecolor(self) -> tuple[float, float, float, float] | None: return self._markerfacecolor.rgba(self.markeralpha) @property - def vectorcolor(self) -> tuple[float, float, float, float] | None: - if self._vectorcolor is not None: - return self._vectorcolor.rgba() + def vector_color(self) -> tuple[float, float, float, float] | None: + if self._vector_color is not None: + return self._vector_color.rgba() # MODIFICATION From 486e5f4ac14e366f6f6901c47a192de5be9c711f Mon Sep 17 00:00:00 2001 From: bbean Date: Mon, 12 Aug 2024 13:48:04 -0600 Subject: [PATCH 024/105] standardize "color" import as "cl" --- example/targetcolor/example_TargetColor.py | 48 ++++--- .../render_control/RenderControlPointSeq.py | 18 +-- .../render_control/RenderControlSurface.py | 2 +- opencsp/common/lib/target/TargetColor.py | 130 ++++++++++-------- opencsp/common/lib/test/test_TargetColor.py | 38 ++--- 5 files changed, 128 insertions(+), 108 deletions(-) diff --git a/example/targetcolor/example_TargetColor.py b/example/targetcolor/example_TargetColor.py index 9dfb79528..cac3e9e01 100644 --- a/example/targetcolor/example_TargetColor.py +++ b/example/targetcolor/example_TargetColor.py @@ -5,7 +5,7 @@ import matplotlib import numpy as np -import opencsp.common.lib.render.color as Color # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED +import opencsp.common.lib.render.color as cl # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED import opencsp.common.lib.target.TargetColor as tc import opencsp.common.lib.target.target_color_2d_rgb as tc2r import opencsp.common.lib.target.target_color_convert as tcc @@ -76,7 +76,7 @@ def setup_class( # ?? SCAFFOLDING RCB -- ADD COLOR_BAR TYPE TIP BELOW def execute_example_linear_color_bar( - self, color_below_min: Color, color_bar, color_bar_name: str, color_above_max: Color, generate_all: bool + self, color_below_min: cl.Color, color_bar, color_bar_name: str, color_above_max: cl.Color, generate_all: bool ) -> None: if generate_all: # Linear color bar in x, discrete. @@ -139,7 +139,7 @@ def execute_example_linear_color_bar( # ?? SCAFFOLDING RCB -- ADD COLOR_BAR TYPE TIP BELOW def execute_example_polar_color_bar( - self, color_below_min: Color, color_bar, color_bar_name: str, color_above_max: Color + self, color_below_min: cl.Color, color_bar, color_bar_name: str, color_above_max: cl.Color ) -> None: # Default. target = tc.construct_target_polar_color_bar(self.image_width, self.image_height, self.dpm) @@ -188,28 +188,26 @@ def execute_example_extend_target(self) -> None: target = tc.construct_target_blue_under_red_cross_green(self.image_width, self.image_height, self.dpm) # Extend left. left_pixels = 10 # Pixels - extended_target_left = tc.extend_target_left(target, left_pixels, Color.white()) + extended_target_left = tc.extend_target_left(target, left_pixels, cl.white()) # self.save_and_check_image(extended_target_left.image, self.dpm, extended_target_left.description_inch(), '.png') # Extend right. right_pixels = 20 # Pixels - extended_target_left_right = tc.extend_target_right(extended_target_left, right_pixels, Color.grey()) + extended_target_left_right = tc.extend_target_right(extended_target_left, right_pixels, cl.grey()) # self.save_and_check_image(extended_target_left_right.image, self.dpm, extended_target_left_right.description_inch(), '.png') # Extend top. top_pixels = 30 # Pixels - extended_target_left_right_top = tc.extend_target_top( - extended_target_left_right, top_pixels, Color.light_grey() - ) + extended_target_left_right_top = tc.extend_target_top(extended_target_left_right, top_pixels, cl.light_grey()) # self.save_and_check_image(extended_target_left_right_top.image, self.dpm, extended_target_left_right_top.description_inch(), '.png') # Extend bottom. bottom_pixels = 40 # Pixels extended_target_left_right_top_bottom = tc.extend_target_bottom( - extended_target_left_right_top, bottom_pixels, Color.dark_grey() + extended_target_left_right_top, bottom_pixels, cl.dark_grey() ) # self.save_and_check_image(extended_target_left_right_top_bottom.image, self.dpm, extended_target_left_right_top_bottom.description_inch(), '.png') # Border all around. border_pixels = 5 # Pixels extended_target_left_right_top_bottom_border = tc.extend_target_all( - extended_target_left_right_top_bottom, border_pixels, Color.magenta() + extended_target_left_right_top_bottom, border_pixels, cl.magenta() ) self.save_and_check_image( extended_target_left_right_top_bottom_border.image, @@ -241,7 +239,7 @@ def execute_example_splice_targets_above_below(self) -> None: # Combine. # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? gap = 0 # Pixels # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? - spliced_target = tc.splice_targets_above_below(target_1, target_2, gap, Color.white()) + spliced_target = tc.splice_targets_above_below(target_1, target_2, gap, cl.white()) self.save_and_check_image(spliced_target.image, self.dpm, spliced_target.description_inch(), '.png') def execute_example_cascade_target_A(self) -> None: @@ -278,15 +276,15 @@ def execute_example_cascade_target_A(self) -> None: # Linear color bar definition. # Main: Color bar corrected for Nikon D3300 response. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.nikon_D3300_monitor_equal_step_color_bar() color_bar_name = 'D3300_monitor' # ?? SCAFFOLDING RCB -- THIS SHOULD BE A CLASS MEMBER - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." # Closed color wheel linear color bar. - ref_color_below_min = Color.black() # Black below bottom of color bar. + ref_color_below_min = cl.black() # Black below bottom of color bar. ref_color_bar = tcc.O_color_bar() ref_color_bar_name = 'O' # ?? SCAFFOLDING RCB -- THIS SHOULD BE A CLASS MEMBER - ref_color_above_max = Color.white() # White background for "saturated data." + ref_color_above_max = cl.white() # White background for "saturated data." cascade_target = tc.construct_linear_color_bar_cascade( # Dimensions. color_bar_width, @@ -360,7 +358,7 @@ def execute_example_cascade_target_A(self) -> None: gap_between_bars * composite_dpm ), # Pixels # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? ref_gap_pix=round(ref_gap * composite_dpm), # Pixels # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? - gap_color=Color.white(), + gap_color=cl.white(), ) # Fiducial marks. @@ -368,7 +366,7 @@ def execute_example_cascade_target_A(self) -> None: n_ticks_y = 25 # No units. Number of tick marks to draw along left/right vertical target edges. tick_length = 0.010 # Meters. Length to draw edge tick marks. tick_width_pix = 3 # Pixels. Width to draw edge tick marks; should be odd number. - tick_color: Color = Color.black() # Color. Color of edge tick marks. + tick_color: cl.Color = cl.black() # Color. Color of edge tick marks. cascade_target.set_ticks_along_top_and_bottom_edges(n_ticks_x, tick_length, tick_width_pix, tick_color) cascade_target.set_ticks_along_left_and_right_edges(n_ticks_y, tick_length, tick_width_pix, tick_color) @@ -380,20 +378,20 @@ def example_matlab(self) -> None: # Initialize test. self.start_test() # MATLAB color bar. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.matlab_color_bar() color_bar_name = 'matlab' - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." self.execute_example_linear_color_bar(color_below_min, color_bar, color_bar_name, color_above_max, False) def example_matlab_equal_angle(self) -> None: # Initialize test. self.start_test() # Normalized MATLAB color bar. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.normalize_color_bar_to_equal_angles(tcc.matlab_color_bar()) color_bar_name = 'matlab_equal_angle' - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." self.execute_example_linear_color_bar(color_below_min, color_bar, color_bar_name, color_above_max, False) # # Closed corner tour color bar. @@ -410,10 +408,10 @@ def example_corner_tour_closed_equal_angle(self) -> None: # Initialize test. self.start_test() # Normalized closed corner tour color bar. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.normalize_color_bar_to_equal_angles(tcc.corner_tour_closed_color_bar()) color_bar_name = 'corner_tour_closed_equal_angle' - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." self.execute_example_linear_color_bar(color_below_min, color_bar, color_bar_name, color_above_max, True) # # Closed color wheel linear color bar. @@ -427,10 +425,10 @@ def example_polar_color_bar(self) -> None: # Initialize test. self.start_test() # Closed color wheel polar image. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.O_color_bar() color_bar_name = 'O' # ?? SCAFFOLDING RCB -- THIS SHOULD BE A CLASS MEMBER - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." self.execute_example_polar_color_bar(color_below_min, color_bar, color_bar_name, color_above_max) def example_blue_under_red_cross_green(self) -> None: diff --git a/opencsp/common/lib/render_control/RenderControlPointSeq.py b/opencsp/common/lib/render_control/RenderControlPointSeq.py index 961d4e105..a521fc96d 100644 --- a/opencsp/common/lib/render_control/RenderControlPointSeq.py +++ b/opencsp/common/lib/render_control/RenderControlPointSeq.py @@ -5,7 +5,7 @@ import matplotlib.colors -import opencsp.common.lib.render.color as clr +import opencsp.common.lib.render.color as cl class RenderControlPointSeq: @@ -79,14 +79,14 @@ def __init__( self, # See above for details: linestyle='-', # '-', '--', '-.', ':', '' or 'None' linewidth: float = 1, # float - color: str | clr.Color = 'b', # line color + color: str | cl.Color = 'b', # line color marker='x', # .,ov^<>12348sp*hH+xXDd|_ or None markersize: float = 6, # float - markeredgecolor: str | clr.Color = None, # Defaults to color above if not set. + markeredgecolor: str | cl.Color = None, # Defaults to color above if not set. markeredgewidth=None, # Defaults to linewidth if not set. - markerfacecolor: str | clr.Color = None, # Defaults to color above if not set. + markerfacecolor: str | cl.Color = None, # Defaults to color above if not set. markeralpha: float | None = None, - vector_color: str | clr.Color = 'b', # Used if points are in a vector field. + vector_color: str | cl.Color = 'b', # Used if points are in a vector field. vector_linewidth: float = 1, # Used if points are in a vector field. vector_scale: float = 1.0, # Facter to grow/srhink vector length, for points in a vector field. ): @@ -184,10 +184,10 @@ def set_color(self, color): def _standardize_color_values(self): # convert to 'Color' class - self._color = clr.Color.convert(self._color) - self._markeredgecolor = clr.Color.convert(self._markeredgecolor) - self._markerfacecolor = clr.Color.convert(self._markerfacecolor) - self._vector_color = clr.Color.convert(self._vector_color) + self._color = cl.Color.convert(self._color) + self._markeredgecolor = cl.Color.convert(self._markeredgecolor) + self._markerfacecolor = cl.Color.convert(self._markerfacecolor) + self._vector_color = cl.Color.convert(self._vector_color) # COMMON CASES diff --git a/opencsp/common/lib/render_control/RenderControlSurface.py b/opencsp/common/lib/render_control/RenderControlSurface.py index 5229c83b6..a939d8a97 100644 --- a/opencsp/common/lib/render_control/RenderControlSurface.py +++ b/opencsp/common/lib/render_control/RenderControlSurface.py @@ -1,4 +1,4 @@ -import opencsp.common.lib.render.color as color +import opencsp.common.lib.render.color as cl import opencsp.common.lib.tool.log_tools as lt diff --git a/opencsp/common/lib/target/TargetColor.py b/opencsp/common/lib/target/TargetColor.py index b64db16d6..a091c7df8 100755 --- a/opencsp/common/lib/target/TargetColor.py +++ b/opencsp/common/lib/target/TargetColor.py @@ -11,7 +11,7 @@ from scipy.spatial.transform import Rotation from sympy import Symbol, diff -import opencsp.common.lib.render.color as Color # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED +import opencsp.common.lib.render.color as cl # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED import opencsp.common.lib.target.TargetColor as tc import opencsp.common.lib.target.target_color_2d_rgb as tc2r import opencsp.common.lib.target.target_color_convert as tcc @@ -31,7 +31,7 @@ def __init__( image_width: float, # Meters image_height: float, # Meters dpm: float, # dots per meter - initial_color: Color.Color, # Color to fill canvas before adding patterns. + initial_color: cl.Color, # Color to fill canvas before adding patterns. ) -> None: super().__init__(image_width, image_height, dpm) # initalizes the attributes universal to all mirrors # Set initial pattern. @@ -71,7 +71,7 @@ def set_pattern_description(self, description: str) -> None: # Linear color bar, x direction def set_image_to_linear_color_bar_x( - self, color_below_min: Color, color_bar, color_above_max: Color, discrete_or_continuous: str + self, color_below_min: cl, color_bar, color_above_max: cl, discrete_or_continuous: str ) -> None: n_rows, n_cols = self.rows_cols() for row in range(0, n_rows): @@ -94,14 +94,18 @@ def set_image_to_linear_color_bar_x( # Linear color bar, y direction def set_image_to_linear_color_bar_y( self, - color_below_min: Color, + color_below_min: cl, color_bar, - color_above_max: Color, + color_above_max: cl, discrete_or_continuous: str, - lateral_gradient_type: str = 'saturated_to_white', # Defines scheme for modulating saturation from left to right. Values: None, 'saturated_to_white' or 'light_to_saturated' - saturated_to_white_exponent: float = 1.5, # Dimensionless. Applies if lateral_gradient_type == 'saturated_to_white'. - light_to_saturated_min: float = 0.2, # Dimensionless. Applies if lateral_gradient_type == 'light_to_saturated'. - light_to_saturated_max: float = 1.0, # Dimensionless. Applies if lateral_gradient_type == 'light_to_saturated'. + # Defines scheme for modulating saturation from left to right. Values: None, 'saturated_to_white' or 'light_to_saturated' + lateral_gradient_type: str = 'saturated_to_white', + # Dimensionless. Applies if lateral_gradient_type == 'saturated_to_white'. + saturated_to_white_exponent: float = 1.5, + # Dimensionless. Applies if lateral_gradient_type == 'light_to_saturated'. + light_to_saturated_min: float = 0.2, + # Dimensionless. Applies if lateral_gradient_type == 'light_to_saturated'. + light_to_saturated_max: float = 1.0, ) -> None: n_rows, n_cols = self.rows_cols() for row in range(0, n_rows): @@ -182,26 +186,33 @@ def set_image_to_linear_color_bar_y( def set_image_to_polar_color_bar( self, # Control color by angle. - color_below_min: Color = Color.black(), # Color to use for values below min limit of color bar. - color_bar=tcc.O_color_bar(), # Color bar for angular values in [0,2pi). # ?? SCAFFOLDING RCB -- TYPE TIP NEEDED. - color_above_max: Color = Color.white(), # Color to use for values of max limit of color bar. - discrete_or_continuous: str = 'continuous', # 'discrete' or 'continuous' # ?? SCAFFOLDING RCB -- RENAME TO "color_interpolation_type" ? + color_below_min: cl = cl.black(), # Color to use for values below min limit of color bar. + # Color bar for angular values in [0,2pi). # ?? SCAFFOLDING RCB -- TYPE TIP NEEDED. + color_bar=tcc.O_color_bar(), + color_above_max: cl = cl.white(), # Color to use for values of max limit of color bar. + # 'discrete' or 'continuous' # ?? SCAFFOLDING RCB -- RENAME TO "color_interpolation_type" ? + discrete_or_continuous: str = 'continuous', # Modulating saturation with radius. - pattern_boundary: str = 'image_boundary', # Defines range for saturation modulation as a function of radius. Values: 'circle' or 'image_boundary' - radial_gradient_type: str = 'saturated_center_to_white', # Defines scheme for modulating saturation as a function of radius. Values: 'saturated_center_to_white' or 'light_center_to_saturated' - saturated_center_to_white_exponent: float = 1.5, # Dimensionless. Applies if radial_gradient_type == 'saturated_center_to_white'. - light_center_to_saturated_saturation_min: float = 0.2, # Dimensionless. Applies if radial_gradient_type == 'light_center_to_saturated'. - light_center_to_saturated_saturation_max: float = 1.0, # Dimensionless. Applies if radial_gradient_type == 'light_center_to_saturated'. + # Defines range for saturation modulation as a function of radius. Values: 'circle' or 'image_boundary' + pattern_boundary: str = 'image_boundary', + # Defines scheme for modulating saturation as a function of radius. Values: 'saturated_center_to_white' or 'light_center_to_saturated' + radial_gradient_type: str = 'saturated_center_to_white', + # Dimensionless. Applies if radial_gradient_type == 'saturated_center_to_white'. + saturated_center_to_white_exponent: float = 1.5, + # Dimensionless. Applies if radial_gradient_type == 'light_center_to_saturated'. + light_center_to_saturated_saturation_min: float = 0.2, + # Dimensionless. Applies if radial_gradient_type == 'light_center_to_saturated'. + light_center_to_saturated_saturation_max: float = 1.0, # Fiducial marks. draw_center_fiducial=True, # Boolean. Whether to draw a mark at the target center. center_fiducial_width_pix=3, # Pixels. Width of center fiducial; should be odd number. - center_fiducial_color: Color = Color.black(), # Color. Color of center fiducial. + center_fiducial_color: cl = cl.black(), # Color. Color of center fiducial. draw_edge_fiducials=True, # Boolean. Whether to draw fiducial tick marks along target edges. n_ticks_x=7, # No units. Number of tick marks to draw along top/bottom horizontal target edges. n_ticks_y=7, # No units. Number of tick marks to draw along left/right vertical target edges. tick_length=0.025, # Meters. Length to draw edge tick marks. tick_width_pix=3, # Pixels. Width to draw edge tick marks; should be odd number. - tick_color: Color = Color.black(), # Color. Color of edge tick marks. + tick_color: cl = cl.black(), # Color. Color of edge tick marks. ) -> None: n_rows, n_cols = self.rows_cols() center_row = n_rows / 2.0 @@ -422,7 +433,7 @@ def set_ticks_along_left_and_right_edges(self, n_ticks_y, tick_length, tick_widt ) assert False # ?? SCAFFOLDING RCB -- CONVERT TO EXCEPTION. - def set_fiducial_pixel(self, this_row: int, this_col: int, color: Color) -> None: + def set_fiducial_pixel(self, this_row: int, this_col: int, color: cl) -> None: n_rows, n_cols = self.rows_cols() if (this_row >= 0) and (this_row < n_rows): if (this_col >= 0) and (this_col < n_cols): @@ -493,14 +504,16 @@ def construct_target_linear_color_bar( image_width: float, # Meter image_height: float, # Meter dpm: float, # Dots per meter - color_below_min: Color, # Color for values below min of color bar. + color_below_min: cl, # Color for values below min of color bar. color_bar, # Color bar mapping values to colors. # ?? SCAFFOLDING RCB -- ADD COLOR_BAR TYPE TIP color_bar_name: str, # ?? SCAFFOLDING RCB -- REPLACE "color_bar_name" WITH CLASS FETCH - color_above_max: Color, # Color for values above max of color bar. + color_above_max: cl, # Color for values above max of color bar. x_or_y: str, # Direction of color variation. discrete_or_continuous: str, - lateral_gradient_type: str = None, # Defines scheme for modulating saturation from left to right. Values: None, 'saturated_to_white' or 'light_to_saturated' - saturated_to_white_exponent: float = 1.5, # Dimensionless. Applies if lateral_gradient_type == 'saturated_to_white'. + # Defines scheme for modulating saturation from left to right. Values: None, 'saturated_to_white' or 'light_to_saturated' + lateral_gradient_type: str = None, + # Dimensionless. Applies if lateral_gradient_type == 'saturated_to_white'. + saturated_to_white_exponent: float = 1.5, light_to_saturated_min: float = 0.2, # Dimensionless. Applies if lateral_gradient_type == 'light_to_saturated'. light_to_saturated_max: float = 1.0, # Dimensionless. Applies if lateral_gradient_type == 'light_to_saturated'. ) -> TargetColor: @@ -544,28 +557,34 @@ def construct_target_polar_color_bar( # Target dimensions. image_height: float, # Meter dpm: float, # Dots per meter # Control color by angle. - color_below_min: Color = Color.black(), # Color to use for values below min limit of color bar. + color_below_min: cl = cl.black(), # Color to use for values below min limit of color bar. color_bar=tcc.O_color_bar(), # Color bar for angular values in [0,2pi). # ?? SCAFFOLDING RCB -- TYPE TIP NEEDED. color_bar_name: str = 'O', # Terse name of color bar, for output filename. # ?? SCAFFOLDING RCB -- REPLACE "color_bar_name" WITH CLASS FETCH - color_above_max: Color = Color.white(), # Color to use for values of max limit of color bar. - discrete_or_continuous: str = 'continuous', # Indicates whether to interpolate colors between segments. Values 'discrete' or 'continuous' # ?? SCAFFOLDING RCB -- RENAME TO "color_interpolation_type" ? + color_above_max: cl = cl.white(), # Color to use for values of max limit of color bar. + # Indicates whether to interpolate colors between segments. Values 'discrete' or 'continuous' # ?? SCAFFOLDING RCB -- RENAME TO "color_interpolation_type" ? + discrete_or_continuous: str = 'continuous', # Modulating saturation with radius. - pattern_boundary: str = 'image_boundary', # Defines range for saturation modulation as a function of radius. Values 'circle' or 'image_boundary' - radial_gradient_type: str = 'saturated_center_to_white', # Defines scheme for modulatiing saturation as a function of radius. Values 'saturated_center_to_white' or 'light_center_to_saturated' + # Defines range for saturation modulation as a function of radius. Values 'circle' or 'image_boundary' + pattern_boundary: str = 'image_boundary', + # Defines scheme for modulatiing saturation as a function of radius. Values 'saturated_center_to_white' or 'light_center_to_saturated' + radial_gradient_type: str = 'saturated_center_to_white', radial_gradient_name: str = 's2w', # Terse name of radial intensity function, for output filename. Values 's2w' or 'l2s' - saturated_center_to_white_exponent: float = 1.5, # Dimensionless. Applies if radial_gradient_type == 'saturated_center_to_white'. - light_center_to_saturated_saturation_min: float = 0.2, # Dimensionless. Applies if radial_gradient_type == 'light_center_to_saturated'. - light_center_to_saturated_saturation_max: float = 1.0, # Dimensionless. Applies if radial_gradient_type == 'light_center_to_saturated'. + # Dimensionless. Applies if radial_gradient_type == 'saturated_center_to_white'. + saturated_center_to_white_exponent: float = 1.5, + # Dimensionless. Applies if radial_gradient_type == 'light_center_to_saturated'. + light_center_to_saturated_saturation_min: float = 0.2, + # Dimensionless. Applies if radial_gradient_type == 'light_center_to_saturated'. + light_center_to_saturated_saturation_max: float = 1.0, # Fiducial marks. draw_center_fiducial=True, # Boolean. Whether to draw a mark at the target center. center_fiducial_width_pix=3, # Pixels. Width of center fiducial; should be odd number. - center_fiducial_color: Color = Color.white(), # Color. Color of center fiducial. + center_fiducial_color: cl = cl.white(), # Color. Color of center fiducial. draw_edge_fiducials=True, # Boolean. Whether to draw fiducial tick marks along target edges. n_ticks_x=7, # No units. Number of tick marks to draw along top/bottom horizontal target edges. n_ticks_y=7, # No units. Number of tick marks to draw along left/right vertical target edges. tick_length=0.010, # Meters. Length to draw edge tick marks. tick_width_pix=3, # Pixels. Width to draw edge tick marks; should be odd number. - tick_color: Color = Color.black(), # Color. Color of edge tick marks. + tick_color: cl = cl.black(), # Color. Color of edge tick marks. ) -> TargetColor: # Blank target. target = tc.TargetColor(image_width, image_height, dpm, color_below_min) @@ -652,7 +671,7 @@ def construct_target_blue_under_red_cross_green( ) -> TargetColor: # Blank target. target = tc.TargetColor( - image_width, image_height, dpm, Color.black() + image_width, image_height, dpm, cl.black() ) # We will cover the entire image with new colors. # Set colors. target.set_image_to_blue_under_red_cross_green() @@ -671,7 +690,7 @@ def construct_target_rgb_cube_inscribed_square( ) -> TargetColor: # Blank target. target = tc.TargetColor( - image_width, image_height, dpm, Color.black() + image_width, image_height, dpm, cl.black() ) # We will cover the entire image with new colors. # Set colors. target.set_image_to_rgb_cube_inscribed_square(project_to_cube) @@ -703,7 +722,7 @@ def construct_target_rgb_cube_inscribed_square( def extend_target_left( target: TargetColor, # Target to extend. new_pixels: int, # Pixels. Number of additional pixels to extend. - new_color: Color.Color, # Color to fill new pixels. + new_color: cl.Color, # Color to fill new pixels. new_target_name: str = None, # If none, new target name will extend input target name. ) -> TargetColor: """ @@ -777,7 +796,7 @@ def extend_target_left( def extend_target_right( target: TargetColor, # Target to extend. new_pixels: int, # Pixels. Number of additional pixels to extend. - new_color: Color.Color, # Color to fill new pixels. + new_color: cl.Color, # Color to fill new pixels. new_target_name: str = None, # If none, new target name will extend input target name. ) -> TargetColor: """ @@ -858,7 +877,7 @@ def extend_target_right( def extend_target_top( target: TargetColor, # Target to extend. new_pixels: int, # Pixels. Number of additional pixels to extend. - new_color: Color.Color, # Color to fill new pixels. + new_color: cl.Color, # Color to fill new pixels. new_target_name: str = None, # If none, new target name will extend input target name. ) -> TargetColor: """ @@ -939,7 +958,7 @@ def extend_target_top( def extend_target_bottom( target: TargetColor, # Target to extend. new_pixels: int, # Pixels. Number of additional pixels to extend. - new_color: Color.Color, # Color to fill new pixels. + new_color: cl.Color, # Color to fill new pixels. new_target_name: str = None, # If none, new target name will extend input target name. ) -> TargetColor: """ @@ -1019,7 +1038,7 @@ def extend_target_bottom( def extend_target_all( target: TargetColor, # Target to extend. new_pixels: int, # Pixels. Number of additional pixels to extend. - new_color: Color.Color, # Color to fill new pixels. + new_color: cl.Color, # Color to fill new pixels. new_target_name: str = None, # If none, new target name will extend input target name. ) -> TargetColor: """ @@ -1053,7 +1072,7 @@ def extend_target_all( def extend_target_for_splice_left_right( - target: TargetColor, n_extend: int, fill_color: Color.Color, auto_expand: str + target: TargetColor, n_extend: int, fill_color: cl.Color, auto_expand: str ) -> TargetColor: if auto_expand == 'fill_top': new_target = extend_target_top(target, n_extend, fill_color, new_target_name=target.pattern_description) @@ -1104,7 +1123,7 @@ def splice_targets_left_right( left_target: TargetColor, # Target to place at left of new target. right_target: TargetColor, # Target to place at right of new target. gap: int, # Pixels. Gap to leave between targets. - initial_color: Color.Color, # Color to fill canvas before adding patterns. + initial_color: cl.Color, # Color to fill canvas before adding patterns. auto_expand: str = 'fill_even', # Whether to expand smaller target if sizes don't match. # Values: None, 'fill_top', 'fill_bottom', 'fill_even'. new_target_name: str = None, # If none, new target name will combine left/right names. @@ -1245,7 +1264,7 @@ def splice_targets_above_below( above_target: TargetColor, # Target to place at top of new target. below_target: TargetColor, # Target to place at bottom of new target. gap: int, # Pixels. Gap to leave between targets. - initial_color: Color.Color, # Color to fill canvas before adding patterns. + initial_color: cl.Color, # Color to fill canvas before adding patterns. new_target_name: str = None, # If none, new target name will combine above/below names. ) -> TargetColor: """ @@ -1530,27 +1549,30 @@ def construct_linear_color_bar_cascade( # Dimensions. composite_dpm, # dots/meter. Pixel resolution. # Main color bar. color_below_min, # Color. Color to use below minimum end of color bar. - color_bar, # Color sequence for color bar. - color_bar_name, # Terse descriptive name of color sequence, for output filename. + color_bar, # Color sequence for color bar. + color_bar_name, # Terse descriptive name of color sequence, for output filename. color_above_max, # Color. Color to use above maximum end of color bar. # Reference color bar. ref_color_below_min, # Color. Color to use below minimum end of reference color bar. - ref_color_bar, # Color sequence for reference color bar. - ref_color_bar_name, # Terse descriptive name of reference color sequence, for output filename. + ref_color_bar, # Color sequence for reference color bar. + ref_color_bar_name, # Terse descriptive name of reference color sequence, for output filename. ref_color_above_max, # Color. Color to use above maximum end of reference color bar. # Direction. x_or_y, # ?? SCAFFOLDING RCB -- DOESN'T CHANGE STACK OR CASCADE DIRECTION WRT X_OR_Y PARAMETER. # Color stack specification. stack_sequence, # List of stack heights desired. Example: [1, 2, 4, 6, 8, 10] - list_of_discrete_or_continuous_lists, # Corresponding list of lists of 'discrete' or 'continuous' strings indicating whether to interpolate colors for each stack entry. # ?? SCAFFOLDING RCB -- DOCUMENT BETTER + # Corresponding list of lists of 'discrete' or 'continuous' strings indicating whether to interpolate colors for each stack entry. # ?? SCAFFOLDING RCB -- DOCUMENT BETTER + list_of_discrete_or_continuous_lists, list_of_saturation_spec_lists, # ?? SCAFFOLDING RCB -- DOCUMENT THIS # Grey context bar specification. - include_grey_neighbors, # Boolean. Whether to include a discrete grey scale for disambiguation on either side of each stack. + # Boolean. Whether to include a discrete grey scale for disambiguation on either side of each stack. + include_grey_neighbors, grey_bar_width: float, # meters. Width of grey context bars, if included. # Space between bars. gap_between_bars_pix: int = 10, # pixels # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? ref_gap_pix: int = 10, # pixels # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? - gap_color=Color.white(), # Color for both gap between color bar stacks, and also spacing required at end of stack if needed. + # Color for both gap between color bar stacks, and also spacing required at end of stack if needed. + gap_color=cl.white(), ) -> tc.TargetColor: # Check input. if len(stack_sequence) == 0: @@ -1634,8 +1656,8 @@ def construct_linear_color_bar_cascade( # Dimensions. grey_rgb_list = [ (255 * x, 255 * x, 255 * x) for x in grey_scale_list ] # ?? SCAFFOLDING RCB -- IF COLOR_BAR BECOMES A CLASS, UPDATE THIS. - grey_below_min = Color.black() - grey_above_max = Color.white() + grey_below_min = cl.black() + grey_above_max = cl.white() grey_bar_name = 'grey_' + str(len(grey_scale_list)) grey_target = tc.construct_target_linear_color_bar( grey_bar_width, diff --git a/opencsp/common/lib/test/test_TargetColor.py b/opencsp/common/lib/test/test_TargetColor.py index d709bc718..cec1dec8c 100644 --- a/opencsp/common/lib/test/test_TargetColor.py +++ b/opencsp/common/lib/test/test_TargetColor.py @@ -5,7 +5,7 @@ import matplotlib import numpy as np -import opencsp.common.lib.render.color as Color # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED +import opencsp.common.lib.render.color as cl # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED import opencsp.common.lib.target.TargetColor as tc import opencsp.common.lib.target.target_color_2d_rgb as tc2r import opencsp.common.lib.target.target_color_convert as tcc @@ -74,7 +74,7 @@ def setUp(self): # ?? SCAFFOLDING RCB -- ADD COLOR_BAR TYPE TIP BELOW def execute_test_linear_color_bar( - self, color_below_min: Color, color_bar, color_bar_name: str, color_above_max: Color, generate_all: bool + self, color_below_min: cl, color_bar, color_bar_name: str, color_above_max: cl, generate_all: bool ) -> None: if generate_all: # Linear color bar in x, continuous. @@ -107,7 +107,7 @@ def execute_test_linear_color_bar( # ?? SCAFFOLDING RCB -- ADD COLOR_BAR TYPE TIP BELOW def execute_test_polar_color_bar( - self, color_below_min: Color, color_bar, color_bar_name: str, color_above_max: Color + self, color_below_min: cl, color_bar, color_bar_name: str, color_above_max: cl ) -> None: # Default. target = tc.construct_target_polar_color_bar(self.image_width, self.image_height, self.dpm) @@ -226,7 +226,7 @@ def execute_test_extend_target(self) -> None: target = tc.construct_target_blue_under_red_cross_green(self.image_width, self.image_height, self.dpm) # Border all around. border_pixels = 5 # Pixels - extended_target_left_right_top_bottom_border = tc.extend_target_all(target, border_pixels, Color.magenta()) + extended_target_left_right_top_bottom_border = tc.extend_target_all(target, border_pixels, cl.magenta()) self.save_and_check_image( extended_target_left_right_top_bottom_border.image, self.dpm, @@ -257,7 +257,7 @@ def execute_test_splice_targets_above_below(self) -> None: # Combine. # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? gap = 0 # Pixels # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? - spliced_target = tc.splice_targets_above_below(target_1, target_2, gap, Color.white()) + spliced_target = tc.splice_targets_above_below(target_1, target_2, gap, cl.white()) self.save_and_check_image(spliced_target.image, self.dpm, spliced_target.description_inch(), '.png') def execute_test_cascade_target_A(self) -> None: @@ -294,15 +294,15 @@ def execute_test_cascade_target_A(self) -> None: # Linear color bar definition. # Main: Color bar corrected for Nikon D3300 response. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.nikon_D3300_monitor_equal_step_color_bar() color_bar_name = 'D3300_monitor' # ?? SCAFFOLDING RCB -- THIS SHOULD BE A CLASS MEMBER - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." # Closed color wheel linear color bar. - ref_color_below_min = Color.black() # Black below bottom of color bar. + ref_color_below_min = cl.black() # Black below bottom of color bar. ref_color_bar = tcc.O_color_bar() ref_color_bar_name = 'O' # ?? SCAFFOLDING RCB -- THIS SHOULD BE A CLASS MEMBER - ref_color_above_max = Color.white() # White background for "saturated data." + ref_color_above_max = cl.white() # White background for "saturated data." cascade_target = tc.construct_linear_color_bar_cascade( # Dimensions. color_bar_width, @@ -376,7 +376,7 @@ def execute_test_cascade_target_A(self) -> None: gap_between_bars * composite_dpm ), # Pixels # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? ref_gap_pix=round(ref_gap * composite_dpm), # Pixels # ?? SCAFFOLDING RCB -- SHOULD THIS BE IN INCHES? - gap_color=Color.white(), + gap_color=cl.white(), ) # Fiducial marks. @@ -384,7 +384,7 @@ def execute_test_cascade_target_A(self) -> None: n_ticks_y = 25 # No units. Number of tick marks to draw along left/right vertical target edges. tick_length = 0.010 # Meters. Length to draw edge tick marks. tick_width_pix = 3 # Pixels. Width to draw edge tick marks; should be odd number. - tick_color: Color = Color.black() # Color. Color of edge tick marks. + tick_color: cl = cl.black() # Color. Color of edge tick marks. cascade_target.set_ticks_along_top_and_bottom_edges(n_ticks_x, tick_length, tick_width_pix, tick_color) cascade_target.set_ticks_along_left_and_right_edges(n_ticks_y, tick_length, tick_width_pix, tick_color) @@ -396,20 +396,20 @@ def test_matlab(self) -> None: # Initialize test. self.start_test() # MATLAB color bar. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.matlab_color_bar() color_bar_name = 'matlab' - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." self.execute_test_linear_color_bar(color_below_min, color_bar, color_bar_name, color_above_max, False) def test_matlab_equal_angle(self) -> None: # Initialize test. self.start_test() # Normalized MATLAB color bar. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.normalize_color_bar_to_equal_angles(tcc.matlab_color_bar()) color_bar_name = 'matlab_equal_angle' - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." self.execute_test_linear_color_bar(color_below_min, color_bar, color_bar_name, color_above_max, False) # # Closed corner tour color bar. @@ -426,10 +426,10 @@ def test_corner_tour_closed_equal_angle(self) -> None: # Initialize test. self.start_test() # Normalized closed corner tour color bar. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.normalize_color_bar_to_equal_angles(tcc.corner_tour_closed_color_bar()) color_bar_name = 'corner_tour_closed_equal_angle' - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." self.execute_test_linear_color_bar(color_below_min, color_bar, color_bar_name, color_above_max, True) # # Closed color wheel linear color bar. @@ -443,10 +443,10 @@ def test_polar_color_bar(self) -> None: # Initialize test. self.start_test() # Closed color wheel polar image. - color_below_min = Color.black() # Black below bottom of color bar. + color_below_min = cl.black() # Black below bottom of color bar. color_bar = tcc.O_color_bar() color_bar_name = 'O' # ?? SCAFFOLDING RCB -- THIS SHOULD BE A CLASS MEMBER - color_above_max = Color.white() # White background for "saturated data." + color_above_max = cl.white() # White background for "saturated data." self.execute_test_polar_color_bar(color_below_min, color_bar, color_bar_name, color_above_max) def test_blue_under_red_cross_green(self) -> None: From 59b3e6d5b140e74a42b11e342ae39c908b8b3acc Mon Sep 17 00:00:00 2001 From: bbean Date: Mon, 12 Aug 2024 13:51:38 -0600 Subject: [PATCH 025/105] move color.py -> Color.py --- .../common/lib/render/{color.py => _Color.py} | 567 +++++++++--------- .../render_control/RenderControlPointSeq.py | 2 +- .../render_control/RenderControlSurface.py | 6 +- .../lib/render_control/RenderControlText.py | 2 +- opencsp/common/lib/target/TargetColor.py | 2 +- 5 files changed, 289 insertions(+), 290 deletions(-) rename opencsp/common/lib/render/{color.py => _Color.py} (96%) diff --git a/opencsp/common/lib/render/color.py b/opencsp/common/lib/render/_Color.py similarity index 96% rename from opencsp/common/lib/render/color.py rename to opencsp/common/lib/render/_Color.py index 1c7847764..e194e3b55 100644 --- a/opencsp/common/lib/render/color.py +++ b/opencsp/common/lib/render/_Color.py @@ -1,285 +1,282 @@ -""" - -Color Management - -# ?? SCAFFOLDING RCB -- MODIFY FILENAME TO START WITH UPPERCASE "C" AND UPDATE CALLERS - - - -""" - -from typing import Iterator, Iterable, Union - -import numpy as np -import matplotlib.colors - - -class Color: - """ - Class representing an color. - - This will begin as a simple [R,G,B] model, but is likely to grow into something more sophisticated. - - Potential directions for growth: - - Support matplotlib color names: 'g', 'cyan', etc. - - Support transparency - - Support more sophisticated color models. - - Perhaps there is an existing Python class that we should use instead. - - """ - - def __init__(self, red: float, green: float, blue: float, name: str, short_name: str): - """ - Parameters - ---------- - red : float - The red component in the RGB color space. Range 0-1. - green : float - The green component in the RGB color space. Range 0-1. - blue : float - The blue component in the RGB color space. Range 0-1. - name : str - A descriptive name for the color. For example "black". - short_name : str - A short hand name for the color. For example "k". - """ - self.red = np.clip(red, 0, 1) - self.green = np.clip(green, 0, 1) - self.blue = np.clip(blue, 0, 1) - self.name = name - self.short_name = short_name - - @classmethod - def from_i255(cls, red: int, green: int, blue: int, name: str, short_name: str): - return cls(red / 255, green / 255, blue / 255, name, short_name) - - @classmethod - def from_hex(cls, hexval: str, name: str, short_name: str) -> "Color": - if hexval.startswith("0x"): - hexval = "#" + hexval[2:] - elif hexval.startswith("x"): - hexval = "#" + hexval[1:] - elif hexval.startswith("#"): - pass - else: - hexval = "#" + hexval - - rgb = matplotlib.colors.to_rgb(hexval) - return Color(rgb[0], rgb[1], rgb[2], name, short_name) - - @classmethod - def from_hsv(cls, hue: float, saturation: float, value: float, name: str, short_name: str): - rgb = matplotlib.colors.hsv_to_rgb((hue, saturation, value)) - return cls(rgb[0], rgb[1], rgb[2], name, value) - - @classmethod - def from_str(cls, sval='b') -> "Color": - longhand = sval - if sval in _plot_color_shorthands: - longhand = _plot_color_shorthands[sval] - - rgb = matplotlib.colors.to_rgb(sval) - - return cls(rgb[0], rgb[1], rgb[2], longhand, sval) - - @classmethod - def convert(cls, val: Union["Color", str, tuple, None]) -> "Color": - if val is None: - return None - elif isinstance(val, Color): - return val - elif isinstance(val, str): - return cls.from_str(val) - else: - rgb = val - return cls(rgb[0], rgb[1], rgb[2], 'tuple', 'tuple') - - def rgb(self) -> tuple[float, float, float]: - """ - Returns color in [R,G,B] format, with range [0,1] for each. - """ - return (self.red, self.green, self.blue) - - def rgba(self, alpha=1.0) -> tuple[float, float, float, float]: - return (self.red, self.green, self.blue, alpha) - - def rgb_255(self) -> tuple[int, int, int]: - """ - Returns color in [R,G,B] format, with range [0,255] for each. - """ - return (int(self.red * 255), int(self.green * 255), int(self.blue * 255)) - - def to_hex(self) -> str: - return matplotlib.colors.to_hex(self.rgb()).upper() - - def to_hsv(self) -> tuple[float, float, float]: - ret = matplotlib.colors.rgb_to_hsv(self.rgb()) - return float(ret[0]), float(ret[1]), float(ret[2]) - - def build_colormap(self, *next_colors: "Color") -> matplotlib.colors.Colormap: - """ - Build a colormap that will return a color between this instance and the - next color(s), given a value between 0 and 1. - - TODO add a "N" parameter to increase the number of colors in the - colormap. See the "N" parameter of - https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.ListedColormap.html#matplotlib-colors-listedcolormap. - - Parameters - ---------- - next_colors: list[Color] - The color(s) to fade this instance with. Typically this will only be - one color, such as for a red-to-blue fade. However, it could also be - multiple colors, such as for a blue-to-purple-to-yellow fade (the - matplotlib 'viridis' default). - """ - colors_sequence = [self] + list(next_colors) - colors_rgb = [np.array(list(clr.rgb())) for clr in colors_sequence] - ncolors = len(colors_sequence) - - mixed_colors = [np.zeros_like(colors_rgb[0]) for i in range(256)] - fade_ranges = np.array_split(np.arange(256, dtype=np.uint8), ncolors - 1) - for fade_idx, fade_range in enumerate(fade_ranges): - fade_range = fade_range.tolist() - fade_length = len(fade_range) - fade_start = fade_range[0] - - # mix the colors for this fade - color1 = colors_rgb[fade_idx] - color2 = colors_rgb[fade_idx + 1] - step_size = 1.0 / (fade_length - 1) - mix1 = [color1 * i for i in np.arange(1.0, 0.0 - step_size * 0.5, -step_size)] - mix2 = [color2 * i for i in np.arange(0.0, 1.0 + step_size * 0.5, step_size)] - for i in fade_range: - mixed_colors[i] = np.array(mix1[i - fade_start]) + np.array(mix2[i - fade_start]) - - new_colors = np.clip(mixed_colors, 0.0, 1.0) - name = "".join([clr.name.replace(" ", "") for clr in colors_sequence]) - newcmap = matplotlib.colors.ListedColormap(new_colors, name=name) - - # clamp to the extremis (for inputs < 0 or >= 1) - newcmap.set_under(new_colors[0]) - newcmap.set_over(new_colors[-1]) - - return newcmap - - -# GENERATORS - - -def black(): - return Color(0.0, 0.0, 0.0, 'black', 'k') - - -def dark_grey(): - return Color(0.25, 0.25, 0.25, 'dark grey', 'dg') - - -def grey(): - return Color(0.5, 0.5, 0.5, 'grey', 'gy') - - -def light_grey(): - return Color(0.75, 0.75, 0.75, 'light grey', 'lg') - - -def white(): - return Color(1.0, 1.0, 1.0, 'white', 'w') - - -def red(): - return Color(1.0, 0.0, 0.0, 'red', 'r') - - -def green(): - return Color(0.0, 1.0, 0.0, 'green', 'g') - - -def blue(): - return Color(0.0, 0.0, 1.0, 'blue', 'b') - - -def cyan(): - return Color(0.0, 1.0, 1.0, 'cyan', 'c') - - -def magenta(): - return Color(1.0, 0.0, 1.0, 'magenta', 'm') - - -def yellow(): - return Color(1.0, 1.0, 0.0, 'yellow', 'y') - - -def color_map(*colors_sequence: "Color"): - colors_sequence = list(colors_sequence) - return colors_sequence[0].build_colormap(*colors_sequence[1:]) - - -class _PlotColors(Iterable[Color]): - """Matplotlib default 'tab10' colors, from https://matplotlib.org/stable/users/prev_whats_new/dflt_style_changes.html""" - - def __init__(self): - self._color_hexes = [ - '#1f77b4', - '#ff7f0e', - '#2ca02c', - '#d62728', - '#9467bd', - '#8c564b', - '#e377c2', - '#7f7f7f', - '#bcbd22', - '#17becf', - ] - self.blue = Color.from_hex(self._color_hexes[0], "blue", "b") - self.orange = Color.from_hex(self._color_hexes[1], "orange", "o") - self.green = Color.from_hex(self._color_hexes[2], "green", "g") - self.red = Color.from_hex(self._color_hexes[3], "red", "r") - self.purple = Color.from_hex(self._color_hexes[4], "purple", "p") - self.brown = Color.from_hex(self._color_hexes[5], "brown", "br") - self.pink = Color.from_hex(self._color_hexes[6], "pink", "pi") - self.gray = Color.from_hex(self._color_hexes[7], "gray", "gr") - self.yellow = Color.from_hex(self._color_hexes[8], "yellow", "y") - self.cyan = Color.from_hex(self._color_hexes[9], "cyan", "c") - - self._color_names = ["blue", "orange", "green", "red", "purple", "brown", "pink", "gray", "yellow", "cyan"] - self._colors = [self[cn] for cn in self._color_names] - - def __getitem__(self, key: int | str) -> Color: - if isinstance(key, int): - key %= len(self._colors) - return self._colors[key] - elif isinstance(key, str): - return getattr(self, key) - else: - raise KeyError - - def __iter__(self) -> Iterator[Color]: - return iter(self._colors) - - -_plot_colors = _PlotColors() -_plot_color_names = ["blue", "orange", "green", "red", "purple", "brown", "pink", "gray", "yellow", "cyan"] -plot_colors = {name: _plot_colors[name] for name in _plot_color_names} -plot_colorsi = {i: _plot_colors[i] for i in range(len(_plot_color_names))} -""" Matplotlib default 'tab10' colors, from https://matplotlib.org/stable/users/prev_whats_new/dflt_style_changes.html - -We enumerate these colors here as the simplest possible way of accessing these -colors, so that we can use or remix them as necessary. - -Color order: blue, orange, green, red, purple, brown, pink, gray, yellow, cyan """ - - -_plot_color_shorthands = { - 'b': 'blue', - 'g': 'green', - 'r': 'red', - 'c': 'cyan', - 'm': 'magenta', - 'y': 'yellow', - 'k': 'black', - 'w': 'white', -} -""" From https://matplotlib.org/stable/users/explain/colors/colors.html """ +""" + +Color Management + + +""" + +from typing import Iterator, Iterable, Union + +import numpy as np +import matplotlib.colors + + +class Color: + """ + Class representing an color. + + This will begin as a simple [R,G,B] model, but is likely to grow into something more sophisticated. + + Potential directions for growth: + - Support matplotlib color names: 'g', 'cyan', etc. + - Support transparency + - Support more sophisticated color models. + + Perhaps there is an existing Python class that we should use instead. + + """ + + def __init__(self, red: float, green: float, blue: float, name: str, short_name: str): + """ + Parameters + ---------- + red : float + The red component in the RGB color space. Range 0-1. + green : float + The green component in the RGB color space. Range 0-1. + blue : float + The blue component in the RGB color space. Range 0-1. + name : str + A descriptive name for the color. For example "black". + short_name : str + A short hand name for the color. For example "k". + """ + self.red = np.clip(red, 0, 1) + self.green = np.clip(green, 0, 1) + self.blue = np.clip(blue, 0, 1) + self.name = name + self.short_name = short_name + + @classmethod + def from_i255(cls, red: int, green: int, blue: int, name: str, short_name: str): + return cls(red / 255, green / 255, blue / 255, name, short_name) + + @classmethod + def from_hex(cls, hexval: str, name: str, short_name: str) -> "Color": + if hexval.startswith("0x"): + hexval = "#" + hexval[2:] + elif hexval.startswith("x"): + hexval = "#" + hexval[1:] + elif hexval.startswith("#"): + pass + else: + hexval = "#" + hexval + + rgb = matplotlib.colors.to_rgb(hexval) + return Color(rgb[0], rgb[1], rgb[2], name, short_name) + + @classmethod + def from_hsv(cls, hue: float, saturation: float, value: float, name: str, short_name: str): + rgb = matplotlib.colors.hsv_to_rgb((hue, saturation, value)) + return cls(rgb[0], rgb[1], rgb[2], name, value) + + @classmethod + def from_str(cls, sval='b') -> "Color": + longhand = sval + if sval in _plot_color_shorthands: + longhand = _plot_color_shorthands[sval] + + rgb = matplotlib.colors.to_rgb(sval) + + return cls(rgb[0], rgb[1], rgb[2], longhand, sval) + + @classmethod + def convert(cls, val: Union["Color", str, tuple, None]) -> "Color": + if val is None: + return None + elif isinstance(val, Color): + return val + elif isinstance(val, str): + return cls.from_str(val) + else: + rgb = val + return cls(rgb[0], rgb[1], rgb[2], 'tuple', 'tuple') + + def rgb(self) -> tuple[float, float, float]: + """ + Returns color in [R,G,B] format, with range [0,1] for each. + """ + return (self.red, self.green, self.blue) + + def rgba(self, alpha=1.0) -> tuple[float, float, float, float]: + return (self.red, self.green, self.blue, alpha) + + def rgb_255(self) -> tuple[int, int, int]: + """ + Returns color in [R,G,B] format, with range [0,255] for each. + """ + return (int(self.red * 255), int(self.green * 255), int(self.blue * 255)) + + def to_hex(self) -> str: + return matplotlib.colors.to_hex(self.rgb()).upper() + + def to_hsv(self) -> tuple[float, float, float]: + ret = matplotlib.colors.rgb_to_hsv(self.rgb()) + return float(ret[0]), float(ret[1]), float(ret[2]) + + def build_colormap(self, *next_colors: "Color") -> matplotlib.colors.Colormap: + """ + Build a colormap that will return a color between this instance and the + next color(s), given a value between 0 and 1. + + TODO add a "N" parameter to increase the number of colors in the + colormap. See the "N" parameter of + https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.ListedColormap.html#matplotlib-colors-listedcolormap. + + Parameters + ---------- + next_colors: list[Color] + The color(s) to fade this instance with. Typically this will only be + one color, such as for a red-to-blue fade. However, it could also be + multiple colors, such as for a blue-to-purple-to-yellow fade (the + matplotlib 'viridis' default). + """ + colors_sequence = [self] + list(next_colors) + colors_rgb = [np.array(list(clr.rgb())) for clr in colors_sequence] + ncolors = len(colors_sequence) + + mixed_colors = [np.zeros_like(colors_rgb[0]) for i in range(256)] + fade_ranges = np.array_split(np.arange(256, dtype=np.uint8), ncolors - 1) + for fade_idx, fade_range in enumerate(fade_ranges): + fade_range = fade_range.tolist() + fade_length = len(fade_range) + fade_start = fade_range[0] + + # mix the colors for this fade + color1 = colors_rgb[fade_idx] + color2 = colors_rgb[fade_idx + 1] + step_size = 1.0 / (fade_length - 1) + mix1 = [color1 * i for i in np.arange(1.0, 0.0 - step_size * 0.5, -step_size)] + mix2 = [color2 * i for i in np.arange(0.0, 1.0 + step_size * 0.5, step_size)] + for i in fade_range: + mixed_colors[i] = np.array(mix1[i - fade_start]) + np.array(mix2[i - fade_start]) + + new_colors = np.clip(mixed_colors, 0.0, 1.0) + name = "".join([clr.name.replace(" ", "") for clr in colors_sequence]) + newcmap = matplotlib.colors.ListedColormap(new_colors, name=name) + + # clamp to the extremis (for inputs < 0 or >= 1) + newcmap.set_under(new_colors[0]) + newcmap.set_over(new_colors[-1]) + + return newcmap + + +# GENERATORS + + +def black(): + return Color(0.0, 0.0, 0.0, 'black', 'k') + + +def dark_grey(): + return Color(0.25, 0.25, 0.25, 'dark grey', 'dg') + + +def grey(): + return Color(0.5, 0.5, 0.5, 'grey', 'gy') + + +def light_grey(): + return Color(0.75, 0.75, 0.75, 'light grey', 'lg') + + +def white(): + return Color(1.0, 1.0, 1.0, 'white', 'w') + + +def red(): + return Color(1.0, 0.0, 0.0, 'red', 'r') + + +def green(): + return Color(0.0, 1.0, 0.0, 'green', 'g') + + +def blue(): + return Color(0.0, 0.0, 1.0, 'blue', 'b') + + +def cyan(): + return Color(0.0, 1.0, 1.0, 'cyan', 'c') + + +def magenta(): + return Color(1.0, 0.0, 1.0, 'magenta', 'm') + + +def yellow(): + return Color(1.0, 1.0, 0.0, 'yellow', 'y') + + +def color_map(*colors_sequence: "Color"): + colors_sequence = list(colors_sequence) + return colors_sequence[0].build_colormap(*colors_sequence[1:]) + + +class _PlotColors(Iterable[Color]): + """Matplotlib default 'tab10' colors, from https://matplotlib.org/stable/users/prev_whats_new/dflt_style_changes.html""" + + def __init__(self): + self._color_hexes = [ + '#1f77b4', + '#ff7f0e', + '#2ca02c', + '#d62728', + '#9467bd', + '#8c564b', + '#e377c2', + '#7f7f7f', + '#bcbd22', + '#17becf', + ] + self.blue = Color.from_hex(self._color_hexes[0], "blue", "b") + self.orange = Color.from_hex(self._color_hexes[1], "orange", "o") + self.green = Color.from_hex(self._color_hexes[2], "green", "g") + self.red = Color.from_hex(self._color_hexes[3], "red", "r") + self.purple = Color.from_hex(self._color_hexes[4], "purple", "p") + self.brown = Color.from_hex(self._color_hexes[5], "brown", "br") + self.pink = Color.from_hex(self._color_hexes[6], "pink", "pi") + self.gray = Color.from_hex(self._color_hexes[7], "gray", "gr") + self.yellow = Color.from_hex(self._color_hexes[8], "yellow", "y") + self.cyan = Color.from_hex(self._color_hexes[9], "cyan", "c") + + self._color_names = ["blue", "orange", "green", "red", "purple", "brown", "pink", "gray", "yellow", "cyan"] + self._colors = [self[cn] for cn in self._color_names] + + def __getitem__(self, key: int | str) -> Color: + if isinstance(key, int): + key %= len(self._colors) + return self._colors[key] + elif isinstance(key, str): + return getattr(self, key) + else: + raise KeyError + + def __iter__(self) -> Iterator[Color]: + return iter(self._colors) + + +_plot_colors = _PlotColors() +_plot_color_names = ["blue", "orange", "green", "red", "purple", "brown", "pink", "gray", "yellow", "cyan"] +plot_colors = {name: _plot_colors[name] for name in _plot_color_names} +plot_colorsi = {i: _plot_colors[i] for i in range(len(_plot_color_names))} +""" Matplotlib default 'tab10' colors, from https://matplotlib.org/stable/users/prev_whats_new/dflt_style_changes.html + +We enumerate these colors here as the simplest possible way of accessing these +colors, so that we can use or remix them as necessary. + +Color order: blue, orange, green, red, purple, brown, pink, gray, yellow, cyan """ + + +_plot_color_shorthands = { + 'b': 'blue', + 'g': 'green', + 'r': 'red', + 'c': 'cyan', + 'm': 'magenta', + 'y': 'yellow', + 'k': 'black', + 'w': 'white', +} +""" From https://matplotlib.org/stable/users/explain/colors/colors.html """ diff --git a/opencsp/common/lib/render_control/RenderControlPointSeq.py b/opencsp/common/lib/render_control/RenderControlPointSeq.py index a521fc96d..d92fffabd 100644 --- a/opencsp/common/lib/render_control/RenderControlPointSeq.py +++ b/opencsp/common/lib/render_control/RenderControlPointSeq.py @@ -5,7 +5,7 @@ import matplotlib.colors -import opencsp.common.lib.render.color as cl +import opencsp.common.lib.render.Color as cl class RenderControlPointSeq: diff --git a/opencsp/common/lib/render_control/RenderControlSurface.py b/opencsp/common/lib/render_control/RenderControlSurface.py index a939d8a97..c57fdeca1 100644 --- a/opencsp/common/lib/render_control/RenderControlSurface.py +++ b/opencsp/common/lib/render_control/RenderControlSurface.py @@ -1,4 +1,6 @@ -import opencsp.common.lib.render.color as cl +import matplotlib.colors + +import opencsp.common.lib.render.Color as cl import opencsp.common.lib.tool.log_tools as lt @@ -6,7 +8,7 @@ class RenderControlSurface: def __init__( self, draw_title=True, - color: str | None = "silver", + color: str | cl.Color | None = "silver", color_map: str | None = None, alpha: float = 0.25, edgecolor='black', diff --git a/opencsp/common/lib/render_control/RenderControlText.py b/opencsp/common/lib/render_control/RenderControlText.py index a67054a2d..cc88da7d3 100644 --- a/opencsp/common/lib/render_control/RenderControlText.py +++ b/opencsp/common/lib/render_control/RenderControlText.py @@ -3,7 +3,7 @@ """ -import opencsp.common.lib.render.color as cl +import opencsp.common.lib.render.Color as cl class RenderControlText: diff --git a/opencsp/common/lib/target/TargetColor.py b/opencsp/common/lib/target/TargetColor.py index a091c7df8..831cf87f7 100755 --- a/opencsp/common/lib/target/TargetColor.py +++ b/opencsp/common/lib/target/TargetColor.py @@ -11,7 +11,7 @@ from scipy.spatial.transform import Rotation from sympy import Symbol, diff -import opencsp.common.lib.render.color as cl # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED +import opencsp.common.lib.render.Color as cl # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED import opencsp.common.lib.target.TargetColor as tc import opencsp.common.lib.target.target_color_2d_rgb as tc2r import opencsp.common.lib.target.target_color_convert as tcc From b377fa9fe07df819f845fc80d26355052a7f077f Mon Sep 17 00:00:00 2001 From: bbean Date: Mon, 12 Aug 2024 13:52:13 -0600 Subject: [PATCH 026/105] finish moving color.py -> Color.py --- opencsp/common/lib/render/{_Color.py => Color.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename opencsp/common/lib/render/{_Color.py => Color.py} (100%) diff --git a/opencsp/common/lib/render/_Color.py b/opencsp/common/lib/render/Color.py similarity index 100% rename from opencsp/common/lib/render/_Color.py rename to opencsp/common/lib/render/Color.py From 7973e5dd68d2d3dd220bf02cf0214cfb7cae1c17 Mon Sep 17 00:00:00 2001 From: bbean Date: Mon, 12 Aug 2024 13:59:20 -0600 Subject: [PATCH 027/105] update RenderControlSurface to internally represent self.color as a Color object --- .../render_control/RenderControlSurface.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/opencsp/common/lib/render_control/RenderControlSurface.py b/opencsp/common/lib/render_control/RenderControlSurface.py index c57fdeca1..69618a41f 100644 --- a/opencsp/common/lib/render_control/RenderControlSurface.py +++ b/opencsp/common/lib/render_control/RenderControlSurface.py @@ -9,7 +9,7 @@ def __init__( self, draw_title=True, color: str | cl.Color | None = "silver", - color_map: str | None = None, + color_map: str | matplotlib.colors.Colormap | None = None, alpha: float = 0.25, edgecolor='black', linewidth=0.05, @@ -24,10 +24,10 @@ def __init__( ---------- draw_title : bool, optional If True then the title will be drawn on graph, default is True - color : str | None, optional + color : str | Color | None, optional The color of the plot if not using a color map. For example color.plot_colors.blue. By default "silver". - color_map : str | None, optional + color_map : str | Colormap None, optional The color map of the plot to help discern different plot values. See https://matplotlib.org/stable/gallery/color/colormap_reference.html for common options. By default None. @@ -52,7 +52,7 @@ def __init__( self.draw_title = draw_title self.alpha = alpha self.antialiased = False if self.alpha > 0.99 else None - self.color = color + self._color = color self.color_map = color_map self.edgecolor = edgecolor self.linewidth = linewidth @@ -61,6 +61,8 @@ def __init__( self.contour_alpha = 0.7 self.contours = {'x': False, 'y': False, 'z': False} + self._standardize_color_values() + # determine the type of contour to be drawn if contour is None or contour == False: self.contour = False @@ -86,3 +88,12 @@ def __init__( elif self.color is not None: # TODO create a custom color map based on the color pass + + @property + def color(self) -> tuple[float, float, float, float] | None: + if self._color is not None: + return self._color.rgba() + + def _standardize_color_values(self): + # convert to 'Color' class + self._color = cl.Color.convert(self._color) From c799c2402ed757ba8dbbaa79212fdcad60184075 Mon Sep 17 00:00:00 2001 From: bbean Date: Mon, 12 Aug 2024 14:22:48 -0600 Subject: [PATCH 028/105] fix another reference to "color" instead of "Color" --- opencsp/common/lib/target/TargetAbstract.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/opencsp/common/lib/target/TargetAbstract.py b/opencsp/common/lib/target/TargetAbstract.py index 01fe30b41..fbe209a3a 100755 --- a/opencsp/common/lib/target/TargetAbstract.py +++ b/opencsp/common/lib/target/TargetAbstract.py @@ -4,7 +4,7 @@ from opencsp.common.lib.geometry.Pxy import Pxy from opencsp.common.lib.geometry.RegionXY import RegionXY -from opencsp.common.lib.render.color import Color +import opencsp.common.lib.render.Color as cl from opencsp.common.lib.render_control.RenderControlMirror import RenderControlMirror import opencsp.common.lib.target.target_image as ti import opencsp.common.lib.tool.unit_conversion as uc @@ -28,7 +28,8 @@ def __init__( # Construct image object. self.image = ti.construct_target_image(self.image_width, self.image_height, self.dpm) # Set initial pattern. - self.pattern_description = 'blank' # ?? SCAFFOLDING RCB -- RENAME THIS VARIABLE TO "NAME"? SEE splice_targets_above_below() FOR MAYBE REASON WHY + # ?? SCAFFOLDING RCB -- RENAME THIS VARIABLE TO "NAME"? SEE splice_targets_above_below() FOR MAYBE REASON WHY + self.pattern_description = 'blank' # ACCESS @@ -66,7 +67,7 @@ def set_pattern_description(self, description: str) -> None: # ?? SCAFFOLDING RCB -- ASK TRISTAN ABOUT THIS # @abstractmethod # ?? SCAFFOLDING RCB -- FILL THIS IN - # def color_at(self, p:Pxy) -> Color: + # def color_at(self, p:Pxy) -> cl.Color: # """ # Gives the color of the point on the target @@ -79,7 +80,7 @@ def set_pattern_description(self, description: str) -> None: # Returns # ------- - # color : Color + # color : cl.Color # Image content at the point (x, y) # """ # ... From 616d4d706a819adfbc96f8c135a9c886c8cfe58e Mon Sep 17 00:00:00 2001 From: bbean Date: Mon, 12 Aug 2024 14:51:58 -0600 Subject: [PATCH 029/105] I'm 100% sure I already fixed this >.< --- example/targetcolor/example_TargetColor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/targetcolor/example_TargetColor.py b/example/targetcolor/example_TargetColor.py index cac3e9e01..327c326ae 100644 --- a/example/targetcolor/example_TargetColor.py +++ b/example/targetcolor/example_TargetColor.py @@ -5,7 +5,7 @@ import matplotlib import numpy as np -import opencsp.common.lib.render.color as cl # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED +import opencsp.common.lib.render.Color as cl # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED import opencsp.common.lib.target.TargetColor as tc import opencsp.common.lib.target.target_color_2d_rgb as tc2r import opencsp.common.lib.target.target_color_convert as tcc From 5e2ae7e93709abeee8e39c259886366642ef0f7e Mon Sep 17 00:00:00 2001 From: bbean Date: Mon, 12 Aug 2024 15:00:19 -0600 Subject: [PATCH 030/105] move test_color -> test_Color part 1 --- .../common/lib/render/test/{test_color.py => _test_color.py} | 2 +- opencsp/common/lib/test/test_TargetColor.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename opencsp/common/lib/render/test/{test_color.py => _test_color.py} (99%) diff --git a/opencsp/common/lib/render/test/test_color.py b/opencsp/common/lib/render/test/_test_color.py similarity index 99% rename from opencsp/common/lib/render/test/test_color.py rename to opencsp/common/lib/render/test/_test_color.py index 3dd1f7d03..1597ba816 100644 --- a/opencsp/common/lib/render/test/test_color.py +++ b/opencsp/common/lib/render/test/_test_color.py @@ -3,7 +3,7 @@ import matplotlib import opencsp.common.lib.tool.file_tools as ft -import opencsp.common.lib.render.color as cl +import opencsp.common.lib.render.Color as cl class test_Color(unittest.TestCase): diff --git a/opencsp/common/lib/test/test_TargetColor.py b/opencsp/common/lib/test/test_TargetColor.py index cec1dec8c..a6cfc36a8 100644 --- a/opencsp/common/lib/test/test_TargetColor.py +++ b/opencsp/common/lib/test/test_TargetColor.py @@ -5,7 +5,7 @@ import matplotlib import numpy as np -import opencsp.common.lib.render.color as cl # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED +import opencsp.common.lib.render.Color as cl # ?? SCAFFOLDING RCB - FIX FILENAME TO CAPITALIZED import opencsp.common.lib.target.TargetColor as tc import opencsp.common.lib.target.target_color_2d_rgb as tc2r import opencsp.common.lib.target.target_color_convert as tcc From 4f44ed43b5cf7f5aa864c8c0130fb2719c4214d8 Mon Sep 17 00:00:00 2001 From: bbean Date: Mon, 12 Aug 2024 15:01:04 -0600 Subject: [PATCH 031/105] move test_color -> test_Color part 2 --- opencsp/common/lib/render/test/{_test_color.py => test_Color.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename opencsp/common/lib/render/test/{_test_color.py => test_Color.py} (100%) diff --git a/opencsp/common/lib/render/test/_test_color.py b/opencsp/common/lib/render/test/test_Color.py similarity index 100% rename from opencsp/common/lib/render/test/_test_color.py rename to opencsp/common/lib/render/test/test_Color.py From 4c290d04615aaaa430a04ea1694d67e9a5c968bd Mon Sep 17 00:00:00 2001 From: bbean Date: Mon, 12 Aug 2024 16:01:17 -0600 Subject: [PATCH 032/105] forgot the reference image for the test --- .../input/View3d/test_draw_pq_list_arrows.png | Bin 0 -> 15742 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 opencsp/common/lib/render/test/data/input/View3d/test_draw_pq_list_arrows.png diff --git a/opencsp/common/lib/render/test/data/input/View3d/test_draw_pq_list_arrows.png b/opencsp/common/lib/render/test/data/input/View3d/test_draw_pq_list_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..bb794fc55c119399bb2d115916cee9537568fb41 GIT binary patch literal 15742 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 La_15yuiXA$iZsGi literal 0 HcmV?d00001 From 4c660785f2e82874fb2a274828aab7b2a4fed06b Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 11 Sep 2024 09:25:06 -0600 Subject: [PATCH 033/105] .github/ISSUE_TEMPALTE: Adjust software rev options --- .github/ISSUE_TEMPLATE/code-bug-report.yml | 7 ++----- .github/ISSUE_TEMPLATE/data-bug-report.yml | 7 ++----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/code-bug-report.yml b/.github/ISSUE_TEMPLATE/code-bug-report.yml index a21aa1ca9..2f418749b 100644 --- a/.github/ISSUE_TEMPLATE/code-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/code-bug-report.yml @@ -25,15 +25,12 @@ body: placeholder: Tell us what you see! validations: required: true - - type: dropdown + - type: textarea id: version attributes: label: Version description: What version of our software are you running? - options: - - develop@5fd52b5 - - main@8c65300 - default: 0 + placeholder: develop@c481fdc validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/data-bug-report.yml b/.github/ISSUE_TEMPLATE/data-bug-report.yml index 5204fac36..9177caec2 100644 --- a/.github/ISSUE_TEMPLATE/data-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/data-bug-report.yml @@ -25,15 +25,12 @@ body: placeholder: Tell us what you see! validations: required: true - - type: dropdown + - type: textarea id: version attributes: label: Version description: What version of our software are you running? - options: - - develop@5fd52b5 - - main@8c65300 - default: 0 + placeholder: develop@c481fdc validations: required: true - type: dropdown From 005a0689dd599306e00f696c8c2cc13aa3a437f5 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 11 Sep 2024 13:15:28 -0600 Subject: [PATCH 034/105] .github: Added PR template --- .github/PULL_REQUEST_TEMPLATE.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..1a342a819 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ +## Purpose + +_Please briefly describe the purpose of this pull request. If this fixes a github issue please include `e.g. fixes #22` so that the issue gets closed automatically when this is merged._ + +## Summary of changes + +_Please summarize the code changes in this pull request._ + +## Implementation notes + +_Please describe any relevant implementation details for reviewers, e.g. how correctness was verified._ + +## Submission checklist +- [ ] Existing tests are updated or new tests were added +- [ ] `opencsp/test/test_DocStringsExist.py` are verified to include this change or have been updated accordingly +- [ ] .rst file(s) under `doc/` are verified to include this change or have been updated accordingly + +## Additional information + +_Please provide any additional information here._ \ No newline at end of file From 7c1e297a7d80cfbf33be6e3248431fb707df2694 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 11 Sep 2024 13:58:06 -0600 Subject: [PATCH 035/105] doc: Update contributing --- doc/source/contributing.rst | 127 ++++++++++++++++-- .../1000_generate_shape/placeholder.txt | 0 .../2000_compare_shape/placeholder.txt | 0 .../3000_ray_trace_spot/placeholder.txt | 0 .../4000_spot_given_bcs/placeholder.txt | 0 .../5000_spot_analysis/placeholder.txt | 0 .../6000_compare_spot/placeholder.txt | 0 .../7000_cspace_analysis/placeholder.txt | 0 .../placeholder.txt | 0 .../app/optical_analysis/lib/placeholder.txt | 0 10 files changed, 114 insertions(+), 13 deletions(-) delete mode 100644 opencsp/app/optical_analysis/1000_generate_shape/placeholder.txt delete mode 100644 opencsp/app/optical_analysis/2000_compare_shape/placeholder.txt delete mode 100644 opencsp/app/optical_analysis/3000_ray_trace_spot/placeholder.txt delete mode 100644 opencsp/app/optical_analysis/4000_spot_given_bcs/placeholder.txt delete mode 100644 opencsp/app/optical_analysis/5000_spot_analysis/placeholder.txt delete mode 100644 opencsp/app/optical_analysis/6000_compare_spot/placeholder.txt delete mode 100644 opencsp/app/optical_analysis/7000_cspace_analysis/placeholder.txt delete mode 100644 opencsp/app/optical_analysis/8000_heliostat_calibration/placeholder.txt delete mode 100644 opencsp/app/optical_analysis/lib/placeholder.txt diff --git a/doc/source/contributing.rst b/doc/source/contributing.rst index 74d7da2d6..f51d718f6 100644 --- a/doc/source/contributing.rst +++ b/doc/source/contributing.rst @@ -99,6 +99,55 @@ commits: Getting Started --------------- +OpenCSP provides both a library and stand-alone applications that can be used for modeling concentrating solar-thermal power technologies. Lets briefly take a look at the directories within the OpenCSP code base. + +Directory Summary ++++++++++++++++++ + +- *opencsp/app*: OpenCSP library and applications +- *opencsp/common*: Common code used by the library and applications +- *doc*: developer documentation +- *example*: OpenCSP examples +- *contrib*: Contributed code that is not actively tested or maintained + +opencsp/app ++++++++++++ +This directory contains the OpenCSP library and application code. + +opencsp/app/camera_calibration +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Graphical User Interface which aides in the calibration of machine vision cameras. + +opencsp/app/scene_reconstruction +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Reconstructs a 3d scene of Aruco markers using a calibrated camera. + +opencsp/app/select_image_points +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +A Graphical User Interface that allows the user to select points on an image. Results are saved to text file. + +opencsp/app/sofast +^^^^^^^^^^^^^^^^^^ +High-precision deflectometry measurement of CSP mirrors, including heliostat facets, full heliostats, and dishes. + +opencsp/app/target +^^^^^^^^^^^^^^^^^^ +Generation and interpretation of optical targets. + + +opencsp/common +++++++++++++++ +This directory contains the OpenCSP common data and code used by the library and applications above. + +opencsp/common/data +^^^^^^^^^^^^^^^^^^^ +This directoy contains common data used for testing and running examples. + +opencsp/common/lib +^^^^^^^^^^^^^^^^^^ +This directory contains common code and data structures used by the library and application code above. For example, classes to represent light sources, facets, mirrors, and heliostats reside here. + + Setting up your development environment +++++++++++++++++++++++++++++++++++++++ @@ -116,28 +165,79 @@ How to install OpenCSP's dependencies With python version 3.10 or greater, run the following: +Linux +^^^^^ + :: $ cd /path/to/OpenCSP/../ - $ python -m venv ./venv_opencsp - # On Linux: - $ . ./venv_opencsp/bin/activate - # Or, on Windows: - $ . ./venv_opencsp/Scripts/activate - $ (venv_opencsp) cd OpenCSP - $ (venv_opencsp) pip install -r requirements.txt + $ python -m venv ./venv + # On Linux or MacOS: + $ . ./venv/bin/activate + $ (venv) cd OpenCSP + $ (venv) pip install -r requirements.txt + + +Windows +^^^^^^^ + +:: + + $ cd \path\to\OpenCSP\..\ + $ python -m venv .\venv + $ . .\venv\Scripts\activate + $ (venv) cd OpenCSP + $ (venv) pip install -r requirements.txt + + +MacOS +^^^^^ + +IMPORTANT: MacOS is not fully supported by OpenCSP. + +rawpy may be available via pip install, however, if you are on a M1 or M2 Mac, you may need to install rawpy from source. In order to install rawpy from source, we recommend using the brew package manager. In fact, ffmpeg can be installed with brew as well. + +Attempt to install the OpenCSP requirements: + +:: + + $ cd /path/to/OpenCSP/../ + $ python -m venv ./venv + $ . ./venv/bin/activate + $ (venv) cd OpenCSP + $ (venv) pip install -r requirements.txt + +If rawpy is not available, you can install it from source as follows: + +1. Install brew. Please see https://brew.sh. +2. Install rawpy from source: + +:: + + $ brew install python-tk@3.10 libomp llvm + $ git clone git@github.com:letmaik/rawpy.git + $ cd rawpy + $ pip install wheel numpy cython + $ pip install . + +3. Comment out the 'rawpy' line in requirements.txt and then run: + +:: + + $ (venv) cd OpenCSP + $ (venv) pip install -r requirements.txt Running OpenCSP's test suite ++++++++++++++++++++++++++++ -Within venv_opencsp, you can now run: +Within venv, you can now run: :: - $ (venv_opencsp) cd /path/to/OpenCSP - $ (venv_opencsp) export PYTHONPATH=$PWD - $ (venv_opencsp) cd opencsp - $ (venv_opencsp) pytest + $ (venv) cd /path/to/OpenCSP + $ (venv) export PYTHONPATH=$PWD + $ (venv) cd opencsp + $ (venv) pytest Testing @@ -306,4 +406,5 @@ the PR, consider filing a follow-on issue. Release Process --------------- -TODO +Stable releases are tagged on the `main` branch. The tip of the `main` branch is the latest stable release. +The `develop` branch will contain the latest unreleased changes and should be used with caution. \ No newline at end of file diff --git a/opencsp/app/optical_analysis/1000_generate_shape/placeholder.txt b/opencsp/app/optical_analysis/1000_generate_shape/placeholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/opencsp/app/optical_analysis/2000_compare_shape/placeholder.txt b/opencsp/app/optical_analysis/2000_compare_shape/placeholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/opencsp/app/optical_analysis/3000_ray_trace_spot/placeholder.txt b/opencsp/app/optical_analysis/3000_ray_trace_spot/placeholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/opencsp/app/optical_analysis/4000_spot_given_bcs/placeholder.txt b/opencsp/app/optical_analysis/4000_spot_given_bcs/placeholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/opencsp/app/optical_analysis/5000_spot_analysis/placeholder.txt b/opencsp/app/optical_analysis/5000_spot_analysis/placeholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/opencsp/app/optical_analysis/6000_compare_spot/placeholder.txt b/opencsp/app/optical_analysis/6000_compare_spot/placeholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/opencsp/app/optical_analysis/7000_cspace_analysis/placeholder.txt b/opencsp/app/optical_analysis/7000_cspace_analysis/placeholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/opencsp/app/optical_analysis/8000_heliostat_calibration/placeholder.txt b/opencsp/app/optical_analysis/8000_heliostat_calibration/placeholder.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/opencsp/app/optical_analysis/lib/placeholder.txt b/opencsp/app/optical_analysis/lib/placeholder.txt deleted file mode 100644 index e69de29bb..000000000 From 4f0b0b2aa2f3796ef88f4998cea60631d4440477 Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 11 Sep 2024 13:59:15 -0600 Subject: [PATCH 036/105] .github: Update PR template --- .github/PULL_REQUEST_TEMPLATE.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1a342a819..47073dada 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,6 +11,7 @@ _Please summarize the code changes in this pull request._ _Please describe any relevant implementation details for reviewers, e.g. how correctness was verified._ ## Submission checklist +- [ ] Target branch is `develop`, not `main` - [ ] Existing tests are updated or new tests were added - [ ] `opencsp/test/test_DocStringsExist.py` are verified to include this change or have been updated accordingly - [ ] .rst file(s) under `doc/` are verified to include this change or have been updated accordingly From e0e5676d11fd290a171fb2da9ff55f22e6a064bb Mon Sep 17 00:00:00 2001 From: Evan Harvey Date: Wed, 11 Sep 2024 14:05:51 -0600 Subject: [PATCH 037/105] doc: Update contributing --- doc/source/contributing.rst | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/doc/source/contributing.rst b/doc/source/contributing.rst index f51d718f6..cd4d5adcb 100644 --- a/doc/source/contributing.rst +++ b/doc/source/contributing.rst @@ -82,8 +82,9 @@ Continuous integration (CI) testing will fail if the changes are not pep8 compli black /path/to/opencsp -C -S -NOTE, the following pre-commit hook can be added to automatically apply black to your -commits: +.. note:: + The following pre-commit hook can be added to automatically apply black to your + commits: :: @@ -193,9 +194,10 @@ Windows MacOS ^^^^^ -IMPORTANT: MacOS is not fully supported by OpenCSP. +.. warning:: + MacOS is not fully supported by OpenCSP. -rawpy may be available via pip install, however, if you are on a M1 or M2 Mac, you may need to install rawpy from source. In order to install rawpy from source, we recommend using the brew package manager. In fact, ffmpeg can be installed with brew as well. +rawpy may be available via pip install, however, if you are on a M1, M2, or M3 Mac, you may need to install rawpy from source. In order to install rawpy from source, we recommend using the brew package manager. In fact, ffmpeg can be installed with brew as well. Attempt to install the OpenCSP requirements: @@ -353,9 +355,14 @@ Working with remotes Now that you have a fork of OpenCSP cloned, you have a single remote named `origin`. This remote refers to your fork on GitHub: https://github.com//OpenCSP. This fork contains the same branches that the upstream repository at https://github.com/sandialabs/OpenCSP contained -when it was forked. Note that the branches only reflect the state of the upstream repository at -the time it was forked. In order to create a new topic branch with the latest changes from upstream, -you must use multiple remotes. To create a upstream remote: +when it was forked. + +.. note:: + The branches only reflect the state of the upstream repository at the time it was forked. + In order to create a new topic branch with the latest changes from upstream, you must use + multiple remotes. + +To create a upstream remote: :: cd /path/to/OpenCSP From 582f525b0f63883bc3b232b973609b3d892cc558 Mon Sep 17 00:00:00 2001 From: mhhwang Date: Mon, 7 Oct 2024 12:26:14 -0600 Subject: [PATCH 038/105] sensitive strings reads hd5 files --- contrib/scripts/sensitive_strings.py | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/contrib/scripts/sensitive_strings.py b/contrib/scripts/sensitive_strings.py index e28f83631..500c6001f 100644 --- a/contrib/scripts/sensitive_strings.py +++ b/contrib/scripts/sensitive_strings.py @@ -101,7 +101,7 @@ def _register_file_in_cleared_cache(self, file_path: str, file_name_ext: str): cache_entry = fc.FileCache.for_file(self.root_search_dir, file_path, file_name_ext) self.new_cached_cleared_files.append(cache_entry) - def _is_binary_file(self, file_path: str, file_name_ext: str): + def _is_binary_file(self, rel_file_path: str, file_name_ext: str): is_binary_file = False # check if a binary file @@ -112,13 +112,13 @@ def _is_binary_file(self, file_path: str, file_name_ext: str): elif self._is_img_ext(ext): if ext in self._text_file_extensions: is_binary_file = False - elif (f"{file_path}/{file_name_ext}" in self._text_file_path_name_exts) or ( + elif (f"{rel_file_path}/{file_name_ext}" in self._text_file_path_name_exts) or ( file_name_ext in self._text_file_path_name_exts ): is_binary_file = False else: is_binary_file = True - elif ft.file_size(ft.join(file_path, file_name_ext)) > 1e6: + elif ft.file_size(self.norm_path(rel_file_path, file_name_ext)) > 1e6: # assume any file > 1MB is a binary file, in order to prevent # sensitive_strings from taking hours to check these files # needlessly @@ -126,20 +126,20 @@ def _is_binary_file(self, file_path: str, file_name_ext: str): if not is_binary_file: # attempt to parse the file as a text file try: - file_path_norm: str = self.norm_path(file_path, file_name_ext) + file_path_norm: str = self.norm_path(rel_file_path, file_name_ext) ft.read_text_file(file_path_norm) except UnicodeDecodeError: is_binary_file = True return is_binary_file - def _enqueue_unknown_binary_files_for_later_processing(self, file_path: str, file_name_ext: str): + def _enqueue_unknown_binary_files_for_later_processing(self, rel_file_path: str, file_name_ext: str): """If the given file is recognized as an allowed file, and it's fingerprint matches the allowed file, then we can dismiss it from the list of unfound files and add it to the list of the accepted files. However, if the given file isn't recognized or it's fingerprint is different, then add it to the unknown list, to be dealt with later.""" - file_ff = ff.FileFingerprint.for_file(self.root_search_dir, file_path, file_name_ext) + file_ff = ff.FileFingerprint.for_file(self.root_search_dir, rel_file_path, file_name_ext) if file_ff in self.allowed_binary_files: # we already know and trust this binary file @@ -150,11 +150,11 @@ def _enqueue_unknown_binary_files_for_later_processing(self, file_path: str, fil # we'll deal with unknown files as a group later self.unknown_binary_files.append(file_ff) - def parse_file(self, file_path: str, file_name_ext: str) -> list[str]: - file_path_norm: str = self.norm_path(file_path, file_name_ext) + def parse_file(self, rel_file_path: str, file_name_ext: str) -> list[str]: + file_path_norm: str = self.norm_path(rel_file_path, file_name_ext) lt.debug(file_path_norm) - if self._is_binary_file(file_path, file_name_ext): + if self._is_binary_file(rel_file_path, file_name_ext): return [] else: return ft.read_text_file(file_path_norm) @@ -447,23 +447,23 @@ def search_files(self): for file_path_name_ext in files: if self.verbose: lt.info(f"Searching file {file_path_name_ext}") - file_path, file_name, file_ext = ft.path_components(file_path_name_ext) + rel_file_path, file_name, file_ext = ft.path_components(file_path_name_ext) file_name_ext = file_name + file_ext - if self._is_file_in_cleared_cache(file_path, file_name_ext): + if self._is_file_in_cleared_cache(rel_file_path, file_name_ext): # file cleared in a previous run, don't need to check again - self._register_file_in_cleared_cache(file_path, file_name_ext) + self._register_file_in_cleared_cache(rel_file_path, file_name_ext) else: # need to check this file - if self._is_binary_file(file_path, file_name_ext): + if self._is_binary_file(rel_file_path, file_name_ext): # deal with non-parseable binary files as a group, below - self._enqueue_unknown_binary_files_for_later_processing(file_path, file_name_ext) + self._enqueue_unknown_binary_files_for_later_processing(rel_file_path, file_name_ext) else: # check text files for sensitive strings - file_matches = self.search_file(file_path, file_name_ext) + file_matches = self.search_file(rel_file_path, file_name_ext) if len(file_matches) > 0: matches[file_path_name_ext] = file_matches else: - self._register_file_in_cleared_cache(file_path, file_name_ext) + self._register_file_in_cleared_cache(rel_file_path, file_name_ext) # Potentially remove unfound binary files if len(self.unfound_allowed_binary_files) > 0 and self.remove_unfound_binaries: From cef59c84be38ae1970964ff9f2fd0af793547238 Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 13:58:23 -0600 Subject: [PATCH 039/105] 133 Fixed transform_relative_to error in opticOrientationAbstract. --- .../lib/csp/OpticOrientationAbstract.py | 43 ++++++++----------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/opencsp/common/lib/csp/OpticOrientationAbstract.py b/opencsp/common/lib/csp/OpticOrientationAbstract.py index f30ecb447..2c6156804 100644 --- a/opencsp/common/lib/csp/OpticOrientationAbstract.py +++ b/opencsp/common/lib/csp/OpticOrientationAbstract.py @@ -1,11 +1,11 @@ -from abc import abstractmethod, ABC +from abc import abstractmethod +import copy from warnings import warn + from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ -from opencsp.common.lib.tool.typing_tools import strict_types -import copy -class OpticOrientationAbstract(ABC): +class OpticOrientationAbstract: """ Classes that extend OpticOrientationAbstract are objects that can be in different orientations, and can contain child objects (that also extend OpticOrientationAbstract) @@ -45,23 +45,20 @@ class OpticOrientationAbstract(ABC): """ def __init__(self) -> None: - # self._children: list['OpticOrientationAbstract'] = None self._parent: 'OpticOrientationAbstract' = None self._self_to_parent_transform: TransformXYZ = None self._set_optic_children() def no_parent_copy(self): - """ - Deep copy of Optic without a parential attachement. - """ + """Deep copy of Optic without a parential attachement.""" copy_of_self = copy.deepcopy(self) copy_of_self._parent = None return copy_of_self def _set_optic_children(self) -> None: - """Call this function in the constructor to set the children of self - and set self as the parent of the children.""" + # Call this function in the constructor to set the children of self + # and set self as the parent of the children. if self.children is not None: for child in self.children: # print("debug child", child, "debug self", self) @@ -77,9 +74,9 @@ def children(self) -> list['OpticOrientationAbstract']: @abstractmethod def _add_child_helper(self, new_child: 'OpticOrientationAbstract'): "Add child OpticOrientationAbstract object to self." - ... def add_child(self, new_child: 'OpticOrientationAbstract', new_child_to_self_transform=TransformXYZ.identity()): + """Adds a child to the current optic""" if new_child.parent is not None: raise ValueError( "Cannot add a child optic if that child is already owned by a parent: \n" @@ -104,14 +101,13 @@ def add_child(self, new_child: 'OpticOrientationAbstract', new_child_to_self_tra @property def parent(self) -> 'OpticOrientationAbstract': - """...""" + """The parent of the current Optic""" return self._parent @property def _children_to_self_transform(self) -> list[TransformXYZ]: - """The list of transformations that take each child OpticOrientationAbstract object - from their frames of reference into the 'self' frame. - """ + # The list of transformations that take each child OpticOrientationAbstract object + # from their frames of reference into the 'self' frame. if self.children is None: return None return [child._self_to_parent_transform for child in self.children] @@ -156,31 +152,28 @@ def get_transform_relative_to(self: 'OpticOrientationAbstract', target: 'OpticOr `TransformXYZ` The transformation that takes self to the `target` frame of reference """ - warn("this function has not been verified") if target is self: return TransformXYZ.identity() # look up the tree searcher = self transform = TransformXYZ.identity() - while searcher._self_to_parent_transform is not None: - if searcher is target: - return transform + while searcher.parent is not None: transform = searcher._self_to_parent_transform * transform searcher = searcher._parent + if searcher is target: + return transform # look down the tree searcher = target transform = TransformXYZ.identity() - while searcher._self_to_parent_transform is not None: - if searcher is self: - return transform.inv() + while searcher.parent is not None: transform = searcher._self_to_parent_transform * transform searcher = searcher._parent + if searcher is self: + return transform.inv() - raise ValueError("target is not an in the parent-child" " tree of self.") - - pass # end of get_transform_relative_to + raise ValueError("The given 'target' is not an in the current parent-child tree.") def get_most_basic_optics(self) -> list['OpticOrientationAbstract']: """Return the list of the smallest optic that makes up composite optics.""" From e6c591abe45af44cd98a4f1ef12be73186105607 Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 13:59:45 -0600 Subject: [PATCH 040/105] 133 updated documentation in FacetEnsemble --- opencsp/common/lib/csp/FacetEnsemble.py | 87 +++---------------------- 1 file changed, 9 insertions(+), 78 deletions(-) diff --git a/opencsp/common/lib/csp/FacetEnsemble.py b/opencsp/common/lib/csp/FacetEnsemble.py index ef138ab3c..5cdab49b3 100644 --- a/opencsp/common/lib/csp/FacetEnsemble.py +++ b/opencsp/common/lib/csp/FacetEnsemble.py @@ -1,8 +1,5 @@ """Rigid ensemble of facets""" -import copy -from typing import Callable -from warnings import warn import numpy as np from scipy.spatial.transform import Rotation @@ -10,17 +7,13 @@ from opencsp.common.lib.csp.VisualizeOrthorectifiedSlopeAbstract import VisualizeOrthorectifiedSlopeAbstract from opencsp.common.lib.csp.Facet import Facet from opencsp.common.lib.csp.RayTraceable import RayTraceable -from opencsp.common.lib.geometry.LoopXY import LoopXY from opencsp.common.lib.geometry.Pxy import Pxy from opencsp.common.lib.geometry.Pxyz import Pxyz -from opencsp.common.lib.geometry.RegionXY import RegionXY, Resolution +from opencsp.common.lib.geometry.RegionXY import Resolution from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ from opencsp.common.lib.geometry.Vxyz import Vxyz from opencsp.common.lib.render.View3d import View3d -from opencsp.common.lib.render_control.RenderControlFacet import RenderControlFacet from opencsp.common.lib.render_control.RenderControlFacetEnsemble import RenderControlFacetEnsemble -from opencsp.common.lib.render_control.RenderControlMirror import RenderControlMirror -from opencsp.common.lib.render_control.RenderControlPointSeq import RenderControlPointSeq class FacetEnsemble(RayTraceable, VisualizeOrthorectifiedSlopeAbstract, OpticOrientationAbstract): @@ -42,16 +35,12 @@ def __init__(self, facets: list[Facet]): @property def facet_positions(self) -> Pxyz: - """ - Finds the locations of the facets relative to the `FacetEnsemble` origin. - If the ensemble was only modified using the `set_facet_positions` and - `set_facet_canting` functions then this essentially just ignored the - rotations. - """ + """The locations of the facets relative to the `FacetEnsemble` origin.""" return Pxyz.merge([facet._self_to_parent_transform.apply(Pxyz.origin()) for facet in self.facets]) @property def transform_mirror_to_self(self): + """List of transforms from Mirror to self""" return [facet.mirror.get_transform_relative_to(self) for facet in self.facets] # override from VisualizeOrthorectifiedSlopeAbstract @@ -175,7 +164,7 @@ def draw( # individual facets if facet_ensemble_style.draw_facets: - for idx, facet in enumerate(self.facets): + for facet in self.facets: transform_facet = transform * facet._self_to_parent_transform facet_style = facet_ensemble_style.get_facet_style(facet.name) facet.draw(view, facet_style, transform_facet) @@ -194,19 +183,16 @@ def draw( corners_moved = transform.apply(corners) view.draw_Vxyz(corners_moved, close=True, style=facet_ensemble_style.outline_style) - # debug function def set_facet_transform_list(self, transformations: list[TransformXYZ]): """ Combines the `set_facet_positions` and `set_facet_canting` functions into a single action. """ - warn("Untested function") for transformation, facet in zip(transformations, self.facets): facet._self_to_parent_transform = transformation def set_facet_positions(self, positions: Pxyz): - """ - The function for setting the positions of the facets relative to one another. - + """Sets the positions of the facets relative to the ensemble. + NOTE: Will remove previously set facet canting rotations """ if len(positions) != len(self.facets): raise ValueError( @@ -219,6 +205,9 @@ def set_facet_positions(self, positions: Pxyz): facet._self_to_parent_transform = TransformXYZ.from_V(pos) def set_facet_canting(self, canting_rotations: list[Rotation]): + """Sets facet canting relative to ensemble. + NOTE: Will remove previously set facet positionals + """ if len(canting_rotations) != len(self.facets): raise ValueError( f"This FacetEnsemble contains {len(self.facets)} and" @@ -229,61 +218,3 @@ def set_facet_canting(self, canting_rotations: list[Rotation]): pos: Pxyz canting: Rotation facet._self_to_parent_transform = TransformXYZ.from_R_V(canting, pos) - - # FUNCITONS BELOW THIS HAVE NOT BEEN TESTED !!! - - def define_pointing_function_UNVERIFIED(self, func: Callable[..., TransformXYZ]) -> None: - """Sets the canting function to use. I.e., defines the - "set_pointing" function. - - Parameters - ---------- - func : Callable - Function that returns a "child to base" TransformXYZ object. - """ - self.pointing_function = func - - def set_pointing_UNVERIFIED(self, *args) -> None: - """Sets current facet ensemble canting (i.e. sets - self.ori.transform_child_to_base using the given arguments. - """ - warn("Depricated, do not use OpticOrientation instance, use OpticOrietionAbstract.") - if self.pointing_function is None: - raise ValueError('self.pointing_function is not defined. Use self.define_pointing_function.') - - self._self_to_parent_transform = self.pointing_function(*args) - - @classmethod - def generate_az_el_UNVERIFIED(cls, facets: list[Facet]) -> 'FacetEnsemble': - """Generates HeliostatCantable object defined by a simple azimuth then elevation - canting strategy. The "pointing_function" accessed by self.set_pointing - has the following inputs - - az - float - azimuth angle (rotation about z axis) in radians - - el - float - elevation angle (rotation about x axis) in radians - """ - - def pointing_function(az: float, el: float) -> TransformXYZ: - r = Rotation.from_euler('zx', [az, el], degrees=False) - return TransformXYZ.from_R(r) - - # Create heliostat - heliostat = cls(facets) - heliostat.define_pointing_function(pointing_function) - - return heliostat - - @classmethod - def generate_rotation_defined_UNVERIFIED(cls, facets: list[Facet]) -> 'FacetEnsemble': - """Generates HeliostatCantable object defined by a given scipy Rotation object. - The "pointing_function" accessed by self.set_pointing has the following input - - rotation - scipy.spatial.transform.Rotation - """ - - def pointing_function(rotation: Rotation) -> TransformXYZ: - return TransformXYZ.from_R(rotation) - - # Create heliostat - heliostat = cls(facets) - heliostat.define_pointing_function(pointing_function) - - return heliostat From d7757c49ed9f0a3e775ecae4e39dcdb37fac69ae Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 14:00:24 -0600 Subject: [PATCH 041/105] 133 Fixed example_process_facet_ensemble. --- .../example_process_facet_ensemble.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/example/sofast_fringe/example_process_facet_ensemble.py b/example/sofast_fringe/example_process_facet_ensemble.py index 25fa4b37f..1e1ce4c3c 100644 --- a/example/sofast_fringe/example_process_facet_ensemble.py +++ b/example/sofast_fringe/example_process_facet_ensemble.py @@ -164,19 +164,17 @@ def example_process_facet_ensemble(): facet_ensemble_control = rcfe.RenderControlFacetEnsemble(default_style=facet_control, draw_outline=True) axis_control_m = rca.meters() - # TODO: enable once https://github.com/sandialabs/OpenCSP/issues/133 is resolved done # Plot slope map - # fig_record = fm.setup_figure(figure_control, axis_control_m, title='') - # ensemble.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_record.axis) - # fig_record.save(dir_save, 'slope_magnitude', 'png') + fig_record = fm.setup_figure(figure_control, axis_control_m, title='') + ensemble.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_record.axis) + fig_record.save(dir_save, 'slope_magnitude', 'png') - # TODO: enable once https://github.com/sandialabs/OpenCSP/issues/133 is resolved done # 5. Plot 3d representation of facet ensemble # =========================================== - # fig_record = fm.setup_figure_for_3d_data(figure_control, axis_control_m, title='Facet Ensemble') - # ensemble.draw(fig_record.view, facet_ensemble_control) - # fig_record.axis.axis('equal') - # fig_record.save(dir_save, 'facet_ensemble', 'png') + fig_record = fm.setup_figure_for_3d_data(figure_control, axis_control_m, title='Facet Ensemble') + ensemble.draw(fig_record.view, facet_ensemble_control) + fig_record.axis.axis('equal') + fig_record.save(dir_save, 'facet_ensemble', 'png') # 6. Save slope data as HDF5 file # =============================== From 5dd6ff1255aa6352cec83a8d33f90be1575e12ae Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 14:01:02 -0600 Subject: [PATCH 042/105] 133 Updated ProcessSofastFringe to work with new FacetEnsemble. --- opencsp/app/sofast/lib/ProcessSofastFringe.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFringe.py b/opencsp/app/sofast/lib/ProcessSofastFringe.py index d8ee997e3..978ed5156 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFringe.py +++ b/opencsp/app/sofast/lib/ProcessSofastFringe.py @@ -649,6 +649,7 @@ def get_optic( Optic object """ facets = [] + trans_list = [] for idx_mirror, data in enumerate(self.data_characterization_facet): # Get surface points pts: Vxyz = data.v_surf_points_facet @@ -673,16 +674,18 @@ def get_optic( mirror = MirrorPoint(pts, norm_vecs, shape, interp_type) # Create facet facet = Facet(mirror) - # Locate facet + # Locate facet within ensemble if self.optic_type == 'multi': trans: TransformXYZ = self.data_characterization_ensemble[idx_mirror].trans_facet_ensemble - facet._self_to_parent_transform = TransformXYZ.from_R_V(trans.R, trans.V) + trans_list.append(trans) # Save facets facets.append(facet) # Return optics if self.optic_type == 'multi': - return FacetEnsemble(facets) + ensemble = FacetEnsemble(facets) + ensemble.set_facet_transform_list(trans_list) + return ensemble else: return facets[0] From d2e785061ef8171048d5bd3ce22186fb70601867 Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 14:27:38 -0600 Subject: [PATCH 043/105] Added documentation. --- opencsp/app/sofast/lib/ProcessSofastFringe.py | 3 +- opencsp/common/lib/csp/FacetEnsemble.py | 50 +++++++++++++++++-- 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFringe.py b/opencsp/app/sofast/lib/ProcessSofastFringe.py index 978ed5156..6b9b6f34b 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFringe.py +++ b/opencsp/app/sofast/lib/ProcessSofastFringe.py @@ -645,8 +645,7 @@ def get_optic( Returns ------- - FacetEnsemble | Facet - Optic object + FacetEnsemble if ProcessSofastFringe.optic_type = 'multi', otherwise Facet """ facets = [] trans_list = [] diff --git a/opencsp/common/lib/csp/FacetEnsemble.py b/opencsp/common/lib/csp/FacetEnsemble.py index 5cdab49b3..d06d9d768 100644 --- a/opencsp/common/lib/csp/FacetEnsemble.py +++ b/opencsp/common/lib/csp/FacetEnsemble.py @@ -191,9 +191,29 @@ def set_facet_transform_list(self, transformations: list[TransformXYZ]): facet._self_to_parent_transform = transformation def set_facet_positions(self, positions: Pxyz): - """Sets the positions of the facets relative to the ensemble. - NOTE: Will remove previously set facet canting rotations """ + Set the positions of the facets relative to one another. + This function updates the positions of the facets in the ensemble. + It will remove any previously set facet canting rotations. + + Parameters + ---------- + positions : Pxyz + A sequence of positions to set for each facet. The length of + this sequence must match the number of facets in the ensemble. + + Raises + ------ + ValueError + If the length of `positions` does not match the number of facets + in the ensemble. + + Notes + ----- + This method modifies the internal transformation of each facet + based on the provided positions. + """ + # "ChatGPT 4o-mini" assisted with generating this docstring. if len(positions) != len(self.facets): raise ValueError( f"This FacetEnsemble contains {len(self.facets)} and" @@ -205,9 +225,31 @@ def set_facet_positions(self, positions: Pxyz): facet._self_to_parent_transform = TransformXYZ.from_V(pos) def set_facet_canting(self, canting_rotations: list[Rotation]): - """Sets facet canting relative to ensemble. - NOTE: Will remove previously set facet positionals """ + Set the canting rotations of the facets relative to the ensemble. + This function updates the canting rotations of the facets in the + ensemble. It will remove any previously set facet positional + transformations. + + Parameters + ---------- + canting_rotations : list[Rotation] + A list of rotation objects to set for each facet. The length + of this list must match the number of facets in the ensemble. + + Raises + ------ + ValueError + If the length of `canting_rotations` does not match the number + of facets in the ensemble. + + Notes + ----- + This method modifies the internal transformation of each facet + based on the provided canting rotations and their corresponding + positions. + """ + # "ChatGPT 4o-mini" assisted with generating this docstring. if len(canting_rotations) != len(self.facets): raise ValueError( f"This FacetEnsemble contains {len(self.facets)} and" From b4fd32598416a8a22129298f85f66f4c3ca94d7a Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 14:59:09 -0600 Subject: [PATCH 044/105] Reorganized ProcessSofastFixed function names. --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 70 +++++++++----------- 1 file changed, 31 insertions(+), 39 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 1a8986e03..f1b3cd767 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -55,6 +55,8 @@ def __init__( self.fixed_pattern_dot_locs = fixed_pattern_dot_locs self.data_facet = data_facet self.params = ParamsSofastFixed() + self.optic_type: Literal['single_facet', 'multi_facet', 'undefined'] = None + self.num_facets: int = None # Measurement data self.measurement: MeasurementSofastFixed @@ -87,21 +89,17 @@ def find_blobs(self) -> BlobIndex: pts_blob = ip.detect_blobs(self.measurement.image, self.blob_detector) # Index blobs - blob_index = BlobIndex(pts_blob, *self.fixed_pattern_dot_locs.dot_extent) - blob_index.search_thresh = self.params.blob_search_thresh - blob_index.search_perp_axis_ratio = self.params.search_perp_axis_ratio - blob_index.run(self.measurement.origin) + if self.optic_type == 'single_facet': + blob_index = BlobIndex(pts_blob, *self.fixed_pattern_dot_locs.dot_extent) + blob_index.search_thresh = self.params.blob_search_thresh + blob_index.search_perp_axis_ratio = self.params.search_perp_axis_ratio + blob_index.run(self.measurement.origin) + elif self.optic_type == 'multi_facet': + pass return blob_index - def calculate_mask(self) -> ndarray: - """Calculate mask image - - Parameters - ---------- - image : ndarray - Measurement image - """ + def _calculate_mask(self) -> ndarray: # Calculate mask im_dark = self.measurement.image * 0 images = np.concatenate((im_dark[..., None], self.measurement.image[..., None]), axis=2) @@ -113,37 +111,34 @@ def calculate_mask(self) -> ndarray: ] mask = ip.calc_mask_raw(images, *params) - if self.params.mask.keep_largest_area: + if self.optic_type == 'multi_facet': + lt.warn( + '"keep_largest_area" mask processing option cannot be used ' + 'for multifacet ensembles. This will be turned off.' + ) + self.params.mask.keep_largest_area = False + elif self.params.mask.keep_largest_area: mask = ip.keep_largest_mask_area(mask) return mask - def generate_geometry(self, blob_index: BlobIndex, mask_raw: np.ndarray) -> dict: - """Generates blob dataset from sofast dataset. + def load_measurement_data(self, measurement: MeasurementSofastFixed) -> None: + """Saves measurement data in class Parameters ---------- - blob_index : BlobIndex - BlobIndex object with all blobs assigned - mask_raw : ndarray - Mask array - - Returns - ------- - dict - Key word argument dictionary for SlopeSolver (does not include "surface_data") - - Sets Attributes - --------------- - self.data_geometry_general - self.data_image_proccessing_general - self.data_geometry_facet - self.data_image_processing_facet - self.data_error + measurement: MeasurementSofastFixed + Fixed pattern measurement object """ + self.measurement = measurement + + def _process_optic_singlefacet_geometry( + self, blob_index: BlobIndex, mask_raw: np.ndarray, surface: Surface2DAbstract + ) -> dict: + # Get image points and blob indices pts_image, pts_index_xy = blob_index.get_data() - # Process optic geometry + # Process optic geometry (find mask corners, etc.) ( self.data_geometry_general, self.data_image_proccessing_general, @@ -194,6 +189,7 @@ def generate_geometry(self, blob_index: BlobIndex, mask_raw: np.ndarray) -> dict 'v_align_point_optic': self.data_facet.v_facet_centroid, 'dist_optic_screen': self.measurement.dist_optic_screen, 'debug': self.params.debug_slope_solver, + 'surface': surface, } def load_measurement_data(self, measurement: MeasurementSofastFixed) -> None: @@ -218,14 +214,10 @@ def process_single_facet_optic(self, surface: Surface2DAbstract) -> None: self.blob_index = self.find_blobs() # Calculate mask - mask_raw = self.calculate_mask() - mask_raw = ip.keep_largest_mask_area(mask_raw) + mask_raw = self._calculate_mask() # Generate geometry and slope solver inputs - kwargs = self.generate_geometry(self.blob_index, mask_raw) - - # Add surface fitting parameters - kwargs.update({'surface': surface}) + kwargs = self._process_optic_singlefacet_geometry(self.blob_index, mask_raw, surface) # Calculate slope self.slope_solver = SlopeSolver(**kwargs) From 8d1be2ec27e0d67373bff8ebf13811de7bc49217 Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 15:01:45 -0600 Subject: [PATCH 045/105] Added optic_type and num_facets to process_single_facet_optic --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index f1b3cd767..9cb834699 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -210,6 +210,10 @@ def process_single_facet_optic(self, surface: Surface2DAbstract) -> None: surface : Surface2DAbstract Surface 2d class """ + + self.optic_type = 'single_facet' + self.num_facets = 1 + # Find blobs self.blob_index = self.find_blobs() From bc2cb49407aa87201a624a7996c5fcfacccc1ec7 Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 15:13:21 -0600 Subject: [PATCH 046/105] Surface and facet data are now lists. --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 50 ++++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 9cb834699..d423afcbc 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -31,11 +31,7 @@ class ProcessSofastFixed(HDF5_SaveAbstract): """Fixed Pattern Deflectrometry data processing class""" def __init__( - self, - orientation: SpatialOrientation, - camera: Camera, - fixed_pattern_dot_locs: DotLocationsFixedPattern, - data_facet: DefinitionFacet, + self, orientation: SpatialOrientation, camera: Camera, fixed_pattern_dot_locs: DotLocationsFixedPattern ) -> 'ProcessSofastFixed': """Instantiates class @@ -47,13 +43,10 @@ def __init__( Camera object fixed_pattern_dot_locs : DotLocationsFixedPattern Image projection dictionary - data_facet : DefinitionFacet - DefinitionFacet object """ self.orientation = orientation self.camera = camera self.fixed_pattern_dot_locs = fixed_pattern_dot_locs - self.data_facet = data_facet self.params = ParamsSofastFixed() self.optic_type: Literal['single_facet', 'multi_facet', 'undefined'] = None self.num_facets: int = None @@ -72,6 +65,9 @@ def __init__( self.blob_detector.filterByInertia = False # Calculations + self.data_facet: list[DefinitionFacet] + self.data_surface: list[Surface2DAbstract] + self.data_ensemble: DefinitionEnsemble self.data_slope_solver: SlopeSolverData self.data_geometry_general: cdc.CalculationDataGeometryGeneral self.data_image_proccessing_general: cdc.CalculationImageProcessingGeneral @@ -81,9 +77,6 @@ def __init__( self.blob_index: BlobIndex self.slope_solver: SlopeSolver - # Input parameters - self.data_surface: Surface2DAbstract = None - def find_blobs(self) -> BlobIndex: """Finds blobs in image""" pts_blob = ip.detect_blobs(self.measurement.image, self.blob_detector) @@ -146,7 +139,7 @@ def _process_optic_singlefacet_geometry( self.data_image_processing_facet, self.data_error, ) = pr.process_singlefacet_geometry( - self.data_facet, + self.data_facet[0], mask_raw, self.measurement.v_measure_point_facet, self.measurement.dist_optic_screen, @@ -178,7 +171,7 @@ def _process_optic_singlefacet_geometry( u_pixel_pointing_cam = self.camera.vector_from_pixel(pts_image) u_pixel_pointing_facet = u_pixel_pointing_cam.rotate(rot_cam_optic).as_Vxyz() - self.params.debug_slope_solver.optic_data = self.data_facet + self.params.debug_slope_solver.optic_data = self.data_facet[0] return { 'v_optic_cam_optic': v_optic_cam_optic, @@ -186,7 +179,7 @@ def _process_optic_singlefacet_geometry( 'u_measure_pixel_pointing_optic': u_cam_measure_point_facet, 'v_screen_points_facet': v_screen_points_facet, 'v_optic_screen_optic': v_optic_screen_optic, - 'v_align_point_optic': self.data_facet.v_facet_centroid, + 'v_align_point_optic': self.data_facet[0].v_facet_centroid, 'dist_optic_screen': self.measurement.dist_optic_screen, 'debug': self.params.debug_slope_solver, 'surface': surface, @@ -202,7 +195,7 @@ def load_measurement_data(self, measurement: MeasurementSofastFixed) -> None: """ self.measurement = measurement - def process_single_facet_optic(self, surface: Surface2DAbstract) -> None: + def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surface2DAbstract) -> None: """Processes single facet optic. Saves data to self.data_slope_solver Parameters @@ -213,6 +206,8 @@ def process_single_facet_optic(self, surface: Surface2DAbstract) -> None: self.optic_type = 'single_facet' self.num_facets = 1 + self.data_facet = [data_facet] + self.data_surface = [surface] # Find blobs self.blob_index = self.find_blobs() @@ -242,10 +237,11 @@ def save_to_hdf(self, file: str, prefix: str = ''): Prefix to append to folder path within HDF file (folders must be separated by "/"). Default is empty string ''. """ - # Sofast input + # Sofast input parameters self.params.save_to_hdf(file, f'{prefix:s}DataSofastInput/') - self.data_surface.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_000/') - self.data_facet.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_000/') + for idx, (data_facet, data_surface) in enumerate(zip(self.data_facet, self.data_surface)): + data_surface.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:3d}/') + data_facet.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:3d}/') # General self.data_error.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') @@ -263,10 +259,14 @@ def get_mirror( self, interpolation_type: Literal['given', 'bilinear', 'clough_tocher', 'nearest'] = 'nearest' ) -> MirrorPoint: """Returns mirror object with slope data""" - v_surf_pts = self.data_slope_solver.v_surf_points_facet - v_normals_data = np.ones((3, len(v_surf_pts))) - v_normals_data[:2, :] = self.data_slope_solver.slopes_facet_xy - v_normals_data[:2, :] *= -1 - v_normals = Uxyz(v_normals_data) - shape = RegionXY.from_vertices(self.data_facet.v_facet_corners.projXY()) - return MirrorPoint(v_surf_pts, v_normals, shape, interpolation_type) + if self.optic_type in ['single_facet', 'undefined']: + v_surf_pts = self.data_slope_solver.v_surf_points_facet + v_normals_data = np.ones((3, len(v_surf_pts))) + v_normals_data[:2, :] = self.data_slope_solver.slopes_facet_xy + v_normals_data[:2, :] *= -1 + v_normals = Uxyz(v_normals_data) + shape = RegionXY.from_vertices(self.data_facet[0].v_facet_corners.projXY()) + return MirrorPoint(v_surf_pts, v_normals, shape, interpolation_type) + elif self.optic_type == 'multi_facet': + # TODO: fill in for multifacet + pass From f22b8fc973c3903f9ff0c3daebbcc0d96fb33f94 Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 15:23:19 -0600 Subject: [PATCH 047/105] Data surface and facet data are lists. --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index d423afcbc..9cbe780a3 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -125,9 +125,7 @@ def load_measurement_data(self, measurement: MeasurementSofastFixed) -> None: """ self.measurement = measurement - def _process_optic_singlefacet_geometry( - self, blob_index: BlobIndex, mask_raw: np.ndarray, surface: Surface2DAbstract - ) -> dict: + def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: np.ndarray) -> dict: # Get image points and blob indices pts_image, pts_index_xy = blob_index.get_data() @@ -182,7 +180,7 @@ def _process_optic_singlefacet_geometry( 'v_align_point_optic': self.data_facet[0].v_facet_centroid, 'dist_optic_screen': self.measurement.dist_optic_screen, 'debug': self.params.debug_slope_solver, - 'surface': surface, + 'surface': self.data_surface[0], } def load_measurement_data(self, measurement: MeasurementSofastFixed) -> None: @@ -216,7 +214,7 @@ def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surfa mask_raw = self._calculate_mask() # Generate geometry and slope solver inputs - kwargs = self._process_optic_singlefacet_geometry(self.blob_index, mask_raw, surface) + kwargs = self._process_optic_singlefacet_geometry(self.blob_index, mask_raw) # Calculate slope self.slope_solver = SlopeSolver(**kwargs) From 32e4a79fa9c70d7658b31fd7addbedbe90cf89c0 Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 16:49:49 -0600 Subject: [PATCH 048/105] Updated documentation in PSF --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 9cbe780a3..194770fb0 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -126,15 +126,12 @@ def load_measurement_data(self, measurement: MeasurementSofastFixed) -> None: self.measurement = measurement def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: np.ndarray) -> dict: - # Get image points and blob indices - pts_image, pts_index_xy = blob_index.get_data() - # Process optic geometry (find mask corners, etc.) ( self.data_geometry_general, self.data_image_proccessing_general, - self.data_geometry_facet, - self.data_image_processing_facet, + self.data_geometry_facet, # list + self.data_image_processing_facet, # list self.data_error, ) = pr.process_singlefacet_geometry( self.data_facet[0], @@ -147,12 +144,15 @@ def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: n self.params.debug_geometry, ) + # Get image points and blob indices + pts_image, pts_index_xy = blob_index.get_data() + # Define optic orientation w.r.t. camera rot_optic_cam = self.data_geometry_general.r_optic_cam_refine_1 v_cam_optic_cam = self.data_geometry_general.v_cam_optic_cam_refine_2 u_cam_measure_point_facet = self.data_geometry_facet[0].u_cam_measure_point_facet - # Get screen-camera pose + # Get screen/camera poses rot_cam_optic = rot_optic_cam.inv() rot_optic_screen = self.orientation.r_cam_screen * rot_optic_cam rot_screen_optic = rot_optic_screen.inv() @@ -169,8 +169,10 @@ def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: n u_pixel_pointing_cam = self.camera.vector_from_pixel(pts_image) u_pixel_pointing_facet = u_pixel_pointing_cam.rotate(rot_cam_optic).as_Vxyz() + # Update debug data self.params.debug_slope_solver.optic_data = self.data_facet[0] + # Construct surface kwargs return { 'v_optic_cam_optic': v_optic_cam_optic, 'u_active_pixel_pointing_optic': u_pixel_pointing_facet, @@ -204,7 +206,7 @@ def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surfa self.optic_type = 'single_facet' self.num_facets = 1 - self.data_facet = [data_facet] + self.data_facet = [data_facet.copy()] self.data_surface = [surface] # Find blobs From 5ff9374342998ed6dd1023e5947070903e1cbecb Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 16:50:20 -0600 Subject: [PATCH 049/105] fixed docs in process_optics_geometry --- opencsp/app/sofast/lib/process_optics_geometry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opencsp/app/sofast/lib/process_optics_geometry.py b/opencsp/app/sofast/lib/process_optics_geometry.py index 76fdc27e6..4d9fa99f3 100644 --- a/opencsp/app/sofast/lib/process_optics_geometry.py +++ b/opencsp/app/sofast/lib/process_optics_geometry.py @@ -359,7 +359,7 @@ def process_undefined_geometry( def process_multifacet_geometry( - facet_data: DefinitionFacet, + facet_data: list[DefinitionFacet], ensemble_data: DefinitionEnsemble, mask_raw: ndarray, v_meas_pt_ensemble: Vxyz, From 64e532d18f2b8d2bca737a78e1020d67146fe227 Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 16:50:51 -0600 Subject: [PATCH 050/105] Updated test sofast fixed (for single facet only) --- opencsp/app/sofast/test/test_ProcessSofastFixed.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opencsp/app/sofast/test/test_ProcessSofastFixed.py b/opencsp/app/sofast/test/test_ProcessSofastFixed.py index 5166159b3..04c9a8cfd 100644 --- a/opencsp/app/sofast/test/test_ProcessSofastFixed.py +++ b/opencsp/app/sofast/test/test_ProcessSofastFixed.py @@ -60,12 +60,12 @@ def setUpClass(cls): # Instantiate class params = ParamsSofastFixed.load_from_hdf(file_exp, 'DataSofastInput/') - cls.process_sofast_fixed = ProcessSofastFixed(orientation, camera, dot_locs, facet_data) + cls.process_sofast_fixed = ProcessSofastFixed(orientation, camera, dot_locs) cls.process_sofast_fixed.params = params cls.process_sofast_fixed.load_measurement_data(measurement) # Process - cls.process_sofast_fixed.process_single_facet_optic(surface) + cls.process_sofast_fixed.process_single_facet_optic(facet_data, surface) def test_save_as_hdf(self): """Tests saving to HDF file""" From b924dd7ecb8b4f256f7e4e188095377e6736f505 Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 16:51:14 -0600 Subject: [PATCH 051/105] Fixed documentation in PSFr --- opencsp/app/sofast/lib/ProcessSofastFringe.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFringe.py b/opencsp/app/sofast/lib/ProcessSofastFringe.py index 6b9b6f34b..a8784752e 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFringe.py +++ b/opencsp/app/sofast/lib/ProcessSofastFringe.py @@ -258,9 +258,8 @@ def process_optic_multifacet( List of facet data objects. ensemble_data : DefinitionEnsemble Ensemble data object. - surface_data : dict - See Sofast documentation or Sofast.help() for more details. - + surface_data : list[Surface2dAbstract] + List of surface type definitions. """ # Check inputs if len(facet_data) != len(surfaces): From b5e8bcb1325f73be40e6c9447742bcbf4ecfc004 Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 16:58:49 -0600 Subject: [PATCH 052/105] Made slope_solver and data lists in PSFi --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 39 +++++++++---------- .../sofast/test/test_ProcessSofastFixed.py | 2 +- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 194770fb0..1cef51514 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -68,7 +68,7 @@ def __init__( self.data_facet: list[DefinitionFacet] self.data_surface: list[Surface2DAbstract] self.data_ensemble: DefinitionEnsemble - self.data_slope_solver: SlopeSolverData + self.data_slope_solver: list[SlopeSolverData] self.data_geometry_general: cdc.CalculationDataGeometryGeneral self.data_image_proccessing_general: cdc.CalculationImageProcessingGeneral self.data_geometry_facet: list[cdc.CalculationDataGeometryFacet] @@ -185,15 +185,6 @@ def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: n 'surface': self.data_surface[0], } - def load_measurement_data(self, measurement: MeasurementSofastFixed) -> None: - """Saves measurement data in class - - Parameters - ---------- - measurement: MeasurementSofastFixed - Fixed pattern measurement object - """ - self.measurement = measurement def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surface2DAbstract) -> None: """Processes single facet optic. Saves data to self.data_slope_solver @@ -219,12 +210,11 @@ def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surfa kwargs = self._process_optic_singlefacet_geometry(self.blob_index, mask_raw) # Calculate slope - self.slope_solver = SlopeSolver(**kwargs) - self.slope_solver.fit_surface() - self.slope_solver.solve_slopes() - self.data_slope_solver = self.slope_solver.get_data() - - self.data_surface = surface + slope_solver = SlopeSolver(**kwargs) + slope_solver.fit_surface() + slope_solver.solve_slopes() + self.slope_solver = slope_solver + self.data_slope_solver = [self.slope_solver.get_data()] def save_to_hdf(self, file: str, prefix: str = ''): """Saves data to given HDF5 file. Data is stored in CalculationsFixedPattern/... @@ -249,9 +239,16 @@ def save_to_hdf(self, file: str, prefix: str = ''): self.data_image_proccessing_general.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') # Calculations - self.data_slope_solver.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/facet/facet_000/') - self.data_geometry_facet[0].save_to_hdf(file, f'{prefix:s}DataSofastCalculation/facet/facet_000/') - self.data_image_processing_facet[0].save_to_hdf(file, f'{prefix:s}DataSofastCalculation/facet/facet_000/') + for idx_facet in range(self.num_facets): + self.data_slope_solver[idx_facet].save_to_hdf( + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:3d}/' + ) + self.data_geometry_facet[idx_facet].save_to_hdf( + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:3d}/' + ) + self.data_image_processing_facet[idx_facet].save_to_hdf( + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:3d}/' + ) lt.info(f'SofastFixed data saved to: {file:s} with prefix: {prefix:s}') @@ -260,9 +257,9 @@ def get_mirror( ) -> MirrorPoint: """Returns mirror object with slope data""" if self.optic_type in ['single_facet', 'undefined']: - v_surf_pts = self.data_slope_solver.v_surf_points_facet + v_surf_pts = self.data_slope_solver[0].v_surf_points_facet v_normals_data = np.ones((3, len(v_surf_pts))) - v_normals_data[:2, :] = self.data_slope_solver.slopes_facet_xy + v_normals_data[:2, :] = self.data_slope_solver[0].slopes_facet_xy v_normals_data[:2, :] *= -1 v_normals = Uxyz(v_normals_data) shape = RegionXY.from_vertices(self.data_facet[0].v_facet_corners.projXY()) diff --git a/opencsp/app/sofast/test/test_ProcessSofastFixed.py b/opencsp/app/sofast/test/test_ProcessSofastFixed.py index 04c9a8cfd..37340c399 100644 --- a/opencsp/app/sofast/test/test_ProcessSofastFixed.py +++ b/opencsp/app/sofast/test/test_ProcessSofastFixed.py @@ -84,7 +84,7 @@ def test_save_figure(self): def test_slopes_xy(self): """Tests slope data""" np.testing.assert_allclose( - self.process_sofast_fixed.data_slope_solver.slopes_facet_xy, self.exp_slopes_xy, rtol=0, atol=1e-6 + self.process_sofast_fixed.data_slope_solver[0].slopes_facet_xy, self.exp_slopes_xy, rtol=0, atol=1e-6 ) def tearDown(self) -> None: From 0ca1398d4a09f4d33a1ecbc921868ffb04db71aa Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 16:59:43 -0600 Subject: [PATCH 053/105] First implimentation of PSFi multi --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 124 +++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 1cef51514..26379fca2 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -9,6 +9,7 @@ from opencsp.app.sofast.lib.BlobIndex import BlobIndex import opencsp.app.sofast.lib.calculation_data_classes as cdc +from opencsp.app.sofast.lib.DefinitionEnsemble import DefinitionEnsemble from opencsp.app.sofast.lib.DefinitionFacet import DefinitionFacet from opencsp.app.sofast.lib.DotLocationsFixedPattern import DotLocationsFixedPattern import opencsp.app.sofast.lib.image_processing as ip @@ -66,6 +67,7 @@ def __init__( # Calculations self.data_facet: list[DefinitionFacet] + self.data_ensemble: DefinitionEnsemble self.data_surface: list[Surface2DAbstract] self.data_ensemble: DefinitionEnsemble self.data_slope_solver: list[SlopeSolverData] @@ -185,6 +187,78 @@ def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: n 'surface': self.data_surface[0], } + def _process_optic_multifacet_geometry(self, blob_indicies: list[BlobIndex], mask_raw: np.ndarray) -> list[dict]: + # Process optic geometry (find mask corners, etc.) + ( + self.data_geometry_general, + self.data_image_proccessing_general, + self.data_geometry_facet, # list + self.data_image_processing_facet, # list + self.data_error, + ) = pr.process_multifacet_geometry( + self.data_facet, + self.data_ensemble, + mask_raw, + self.measurement.v_measure_point_facet, + self.orientation, + self.camera, + self.measurement.dist_optic_screen, + self.params.geometry, + self.params.debug_geometry, + ) + + kwargs_list = [] + for idx_facet in range(self.num_facets): + # Get image points and blob indices + pts_image, pts_index_xy = blob_indicies[idx_facet].get_data() + + # Define optic orientation w.r.t. camera + rot_facet_ensemble = self.data_ensemble.r_facet_ensemble[idx_facet] + rot_ensemble_cam = self.data_geometry_general.r_optic_cam_refine_2 + rot_facet_cam = rot_ensemble_cam * rot_facet_ensemble + + v_cam_ensemble_cam = self.data_geometry_general.v_cam_optic_cam_refine_3 + v_ensemble_facet_ensemble = self.data_ensemble.v_facet_locations[idx_facet] + v_ensemble_facet_cam = v_ensemble_facet_ensemble.rotate(rot_ensemble_cam) + v_cam_facet_cam = v_cam_ensemble_cam + v_ensemble_facet_cam + + u_cam_measure_point_facet = self.data_geometry_facet[idx_facet].u_cam_measure_point_facet + + # Get screen/camera poses + rot_cam_facet = rot_facet_cam.inv() + rot_facet_screen = self.orientation.r_cam_screen * rot_facet_cam + rot_screen_facet = rot_facet_screen.inv() + + v_facet_cam_facet = -v_cam_facet_cam.rotate(rot_cam_facet) + v_cam_screen_facet = self.orientation.v_cam_screen_cam.rotate(rot_cam_facet) + v_facet_screen_facet = v_facet_cam_facet + v_cam_screen_facet + + # Calculate xyz screen points + v_screen_points_screen = self.fixed_pattern_dot_locs.xy_indices_to_screen_coordinates(pts_index_xy) + v_screen_points_facet = v_facet_screen_facet + v_screen_points_screen.rotate(rot_screen_facet) + + # Calculate active pixel pointing + u_pixel_pointing_cam = self.camera.vector_from_pixel(pts_image) + u_pixel_pointing_facet = u_pixel_pointing_cam.rotate(rot_cam_facet).as_Vxyz() + + # Update debug data + self.params.debug_slope_solver.optic_data = self.data_facet[idx_facet] + + # Construct list of surface kwargs + kwargs_list.append( + { + 'v_optic_cam_optic': v_facet_cam_facet, + 'u_active_pixel_pointing_optic': u_pixel_pointing_facet, + 'u_measure_pixel_pointing_optic': u_cam_measure_point_facet, + 'v_screen_points_facet': v_screen_points_facet, + 'v_optic_screen_optic': v_facet_screen_facet, + 'v_align_point_optic': self.data_geometry_facet[idx_facet].v_align_point_facet, + 'dist_optic_screen': self.data_geometry_facet[idx_facet].measure_point_screen_distance, + 'debug': self.params.debug_slope_solver, + 'surface': self.data_surface[idx_facet], + } + ) + return kwargs_list def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surface2DAbstract) -> None: """Processes single facet optic. Saves data to self.data_slope_solver @@ -216,6 +290,56 @@ def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surfa self.slope_solver = slope_solver self.data_slope_solver = [self.slope_solver.get_data()] + def process_multi_facet_optic( + self, data_facet: list[DefinitionFacet], surface: list[Surface2DAbstract], data_ensemble: DefinitionEnsemble + ) -> None: + """Processes multi facet optic. Saves data to self.data_slope_solver + + Parameters + ---------- + data_facet : list[DefinitionFacet] + List of facet data objects. + data_ensemble : DefinitionEnsemble + Ensemble data object. + surface_data : list[Surface2dAbstract] + List of surface type definitions. + """ + + # Check inputs + if len(data_facet) != len(surface): + lt.error_and_raise( + ValueError, + 'Length of data_facet does not equal length of data_surface' + f'data_facet={len(data_facet)}, surface_data={len(surface)}', + ) + + self.optic_type = 'multi_facet' + self.num_facets = len(data_facet) + self.data_facet = [d.copy() for d in data_facet] + self.data_ensemble = data_ensemble.copy() + self.data_surface = surface + + # Find blobs + self.blob_index = self.find_blobs() + + # Calculate mask + mask_raw = self._calculate_mask() + + # Generate geometry and slope solver inputs + kwargs_list = self._process_optic_multifacet_geometry(self.blob_index, mask_raw) + + # Calculate slope + self.slope_solver = [] + self.data_slope_solver = [] + + for kwargs in kwargs_list: + slope_solver = SlopeSolver(**kwargs) + slope_solver.fit_surface() + slope_solver.solve_slopes() + # TODO: Make slope_solver a list for both single/multi + self.slope_solver.append(slope_solver) + self.data_slope_solver.append(self.slope_solver.get_data()) + def save_to_hdf(self, file: str, prefix: str = ''): """Saves data to given HDF5 file. Data is stored in CalculationsFixedPattern/... From 44099860697167be1ba637dd8076c400d881343b Mon Sep 17 00:00:00 2001 From: Braden Date: Mon, 19 Aug 2024 17:01:43 -0600 Subject: [PATCH 054/105] Updated documentation and typing in PSFi. --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 26379fca2..3e12fbcce 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -77,7 +77,7 @@ def __init__( self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] self.data_error: cdc.CalculationError self.blob_index: BlobIndex - self.slope_solver: SlopeSolver + self.slope_solver: list[SlopeSolver] def find_blobs(self) -> BlobIndex: """Finds blobs in image""" @@ -331,12 +331,10 @@ def process_multi_facet_optic( # Calculate slope self.slope_solver = [] self.data_slope_solver = [] - for kwargs in kwargs_list: slope_solver = SlopeSolver(**kwargs) slope_solver.fit_surface() slope_solver.solve_slopes() - # TODO: Make slope_solver a list for both single/multi self.slope_solver.append(slope_solver) self.data_slope_solver.append(self.slope_solver.get_data()) From 1d2ebcfb2aa2edbf0150a7dbc43ffca17b4644ed Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 14:04:51 -0600 Subject: [PATCH 055/105] Fixed error in process_optics_geometry when finding expected ensemble perimeter xyz points --- opencsp/app/sofast/lib/process_optics_geometry.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/opencsp/app/sofast/lib/process_optics_geometry.py b/opencsp/app/sofast/lib/process_optics_geometry.py index 4d9fa99f3..fd5fc085a 100644 --- a/opencsp/app/sofast/lib/process_optics_geometry.py +++ b/opencsp/app/sofast/lib/process_optics_geometry.py @@ -451,7 +451,8 @@ def process_multifacet_geometry( # Calculate ensemble corners in ensemble coordinates v_ensemble_corns_ensemble = [] - for r_facet_ensemble_cur, (idx_facet, idx_corn) in zip(r_facet_ensemble, ensemble_corns_indices): + for idx_facet, idx_corn in ensemble_corns_indices: + r_facet_ensemble_cur = r_facet_ensemble[idx_facet] v_ensemble_corns_ensemble.append( ( v_facet_locs_ensemble[idx_facet] From 9bdbfe9f724bce252226cc60be6bd42e0b70f182 Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 14:08:56 -0600 Subject: [PATCH 056/105] Updated mask histogram calculations in image_processing. --- opencsp/app/sofast/lib/image_processing.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/opencsp/app/sofast/lib/image_processing.py b/opencsp/app/sofast/lib/image_processing.py index 942c64290..1ad66ae25 100644 --- a/opencsp/app/sofast/lib/image_processing.py +++ b/opencsp/app/sofast/lib/image_processing.py @@ -55,6 +55,11 @@ def calc_mask_raw( # Calculate histogram of delta image hist, edges = np.histogram(delta.flatten(), bins=N_BINS_IMAGE, density=True) + # Make sure first and last values of histogram are zero + hist = np.concatenate([[0], hist, [0]]) + delta = edges[1] - edges[0] + edges = np.concatenate([[edges[0] - delta], edges, [edges[-1] + delta]]) + # Find two peaks in histogram (light and dark regions) for dist in np.arange(N_PEAK_STEP, N_BINS_IMAGE, N_PEAK_STEP): peaks = find_peaks(x=hist, height=HIST_PEAK_THRESH, distance=dist)[0] @@ -67,8 +72,8 @@ def calc_mask_raw( idx_hist_min = np.argmin(hist[peaks[0] : peaks[1]]) + peaks[0] # Find index of histogram that is "hist_thresh" the way between the min and max - thresh_hist_min = edges[idx_hist_min + 1] - thresh_hist_max = edges[peaks[1]] + thresh_hist_min = edges[idx_hist_min + 1] - 1 + thresh_hist_max = edges[peaks[1]] - 1 thresh = thresh_hist_min + (thresh_hist_max - thresh_hist_min) * hist_thresh # Calculate threshold mask From c688ccec673815356aff027ac997af8675863c11 Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 16:00:20 -0600 Subject: [PATCH 057/105] Fixed error with variable name in calc_mask_raw --- opencsp/app/sofast/lib/image_processing.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/opencsp/app/sofast/lib/image_processing.py b/opencsp/app/sofast/lib/image_processing.py index 1ad66ae25..b5ad0158c 100644 --- a/opencsp/app/sofast/lib/image_processing.py +++ b/opencsp/app/sofast/lib/image_processing.py @@ -57,8 +57,8 @@ def calc_mask_raw( # Make sure first and last values of histogram are zero hist = np.concatenate([[0], hist, [0]]) - delta = edges[1] - edges[0] - edges = np.concatenate([[edges[0] - delta], edges, [edges[-1] + delta]]) + bin_step = edges[1] - edges[0] + edges = np.concatenate([[edges[0] - bin_step], edges, [edges[-1] + bin_step]]) # Find two peaks in histogram (light and dark regions) for dist in np.arange(N_PEAK_STEP, N_BINS_IMAGE, N_PEAK_STEP): @@ -72,8 +72,8 @@ def calc_mask_raw( idx_hist_min = np.argmin(hist[peaks[0] : peaks[1]]) + peaks[0] # Find index of histogram that is "hist_thresh" the way between the min and max - thresh_hist_min = edges[idx_hist_min + 1] - 1 - thresh_hist_max = edges[peaks[1]] - 1 + thresh_hist_min = edges[idx_hist_min + 1] + thresh_hist_max = edges[peaks[1]] thresh = thresh_hist_min + (thresh_hist_max - thresh_hist_min) * hist_thresh # Calculate threshold mask From 1d9fb9c50e94028f39cfb5d6e80a133db2e032ff Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 16:12:46 -0600 Subject: [PATCH 058/105] Changed surface to surfaces --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 3e12fbcce..62c7da343 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -291,7 +291,7 @@ def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surfa self.data_slope_solver = [self.slope_solver.get_data()] def process_multi_facet_optic( - self, data_facet: list[DefinitionFacet], surface: list[Surface2DAbstract], data_ensemble: DefinitionEnsemble + self, data_facet: list[DefinitionFacet], surfaces: list[Surface2DAbstract], data_ensemble: DefinitionEnsemble ) -> None: """Processes multi facet optic. Saves data to self.data_slope_solver @@ -301,23 +301,23 @@ def process_multi_facet_optic( List of facet data objects. data_ensemble : DefinitionEnsemble Ensemble data object. - surface_data : list[Surface2dAbstract] + surfaces : list[Surface2dAbstract] List of surface type definitions. """ # Check inputs - if len(data_facet) != len(surface): + if len(data_facet) != len(surfaces): lt.error_and_raise( ValueError, 'Length of data_facet does not equal length of data_surface' - f'data_facet={len(data_facet)}, surface_data={len(surface)}', + f'data_facet={len(data_facet)}, surface_data={len(surfaces)}', ) self.optic_type = 'multi_facet' self.num_facets = len(data_facet) self.data_facet = [d.copy() for d in data_facet] self.data_ensemble = data_ensemble.copy() - self.data_surface = surface + self.data_surface = surfaces # Find blobs self.blob_index = self.find_blobs() From 24aaf373a0aa7cc8127fa69f461f7c2b33fb8a05 Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 17:57:31 -0600 Subject: [PATCH 059/105] ProcessSofastFixed now takes in origin point and xy index as input for single and multi facets. --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 71 +++++++++++++++----- 1 file changed, 53 insertions(+), 18 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 62c7da343..42e887bf3 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -24,6 +24,7 @@ from opencsp.common.lib.deflectometry.Surface2DAbstract import Surface2DAbstract from opencsp.common.lib.geometry.RegionXY import RegionXY from opencsp.common.lib.geometry.Uxyz import Uxyz +from opencsp.common.lib.geometry.Vxy import Vxy from opencsp.common.lib.tool.hdf5_tools import HDF5_SaveAbstract import opencsp.common.lib.tool.log_tools as lt @@ -79,18 +80,26 @@ def __init__( self.blob_index: BlobIndex self.slope_solver: list[SlopeSolver] - def find_blobs(self) -> BlobIndex: - """Finds blobs in image""" + def find_blobs(self, pts_known: Vxy, xys_known: tuple[tuple[int, int]]) -> BlobIndex: + """Finds blobs in image + + Parameters + ---------- + pts_known : Vxy + Length N, xy pixel location of known point(s) with known xy dot index locations + xys_known : tuple[tuple[int]] + Length N integer xy dot indices + + NOTE: N=number of facets + """ pts_blob = ip.detect_blobs(self.measurement.image, self.blob_detector) # Index blobs - if self.optic_type == 'single_facet': - blob_index = BlobIndex(pts_blob, *self.fixed_pattern_dot_locs.dot_extent) - blob_index.search_thresh = self.params.blob_search_thresh - blob_index.search_perp_axis_ratio = self.params.search_perp_axis_ratio - blob_index.run(self.measurement.origin) - elif self.optic_type == 'multi_facet': - pass + blob_index = BlobIndex(pts_blob, *self.fixed_pattern_dot_locs.dot_extent) + blob_index.search_thresh = self.params.blob_search_thresh + blob_index.search_perp_axis_ratio = self.params.search_perp_axis_ratio + for pt_known, xy_known in zip(pts_known, xys_known): + blob_index.run(pt_known, xy_known[0], xy_known[1]) return blob_index @@ -187,7 +196,7 @@ def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: n 'surface': self.data_surface[0], } - def _process_optic_multifacet_geometry(self, blob_indicies: list[BlobIndex], mask_raw: np.ndarray) -> list[dict]: + def _process_optic_multifacet_geometry(self, blob_index: BlobIndex, mask_raw: np.ndarray) -> list[dict]: # Process optic geometry (find mask corners, etc.) ( self.data_geometry_general, @@ -210,7 +219,7 @@ def _process_optic_multifacet_geometry(self, blob_indicies: list[BlobIndex], mas kwargs_list = [] for idx_facet in range(self.num_facets): # Get image points and blob indices - pts_image, pts_index_xy = blob_indicies[idx_facet].get_data() + pts_image, pts_index_xy = blob_index.get_data() # Define optic orientation w.r.t. camera rot_facet_ensemble = self.data_ensemble.r_facet_ensemble[idx_facet] @@ -260,22 +269,36 @@ def _process_optic_multifacet_geometry(self, blob_indicies: list[BlobIndex], mas ) return kwargs_list - def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surface2DAbstract) -> None: + def process_single_facet_optic( + self, data_facet: DefinitionFacet, surface: Surface2DAbstract, pt_known: Vxy, xy_known: tuple[int, int] + ) -> None: """Processes single facet optic. Saves data to self.data_slope_solver Parameters ---------- + data_facet : DefinitionFacet objec + Facet definition surface : Surface2DAbstract Surface 2d class + pt_known : Vxy + Length 1, xy pixel location of known point(s) with known xy dot index locations + xy_known : tuple[int, int] + Integer xy dot indices """ + # Check inputs + if len(pt_known) != 1: + lt.error_and_raise( + ValueError, f'Only 1 pt_known can be given for single facet processing but {len(pt_known):d} were given' + ) + self.optic_type = 'single_facet' self.num_facets = 1 self.data_facet = [data_facet.copy()] self.data_surface = [surface] # Find blobs - self.blob_index = self.find_blobs() + self.blob_index = self.find_blobs(pt_known, (xy_known,)) # Calculate mask mask_raw = self._calculate_mask() @@ -291,7 +314,12 @@ def process_single_facet_optic(self, data_facet: DefinitionFacet, surface: Surfa self.data_slope_solver = [self.slope_solver.get_data()] def process_multi_facet_optic( - self, data_facet: list[DefinitionFacet], surfaces: list[Surface2DAbstract], data_ensemble: DefinitionEnsemble + self, + data_facet: list[DefinitionFacet], + surfaces: list[Surface2DAbstract], + data_ensemble: DefinitionEnsemble, + pts_known: Vxy, + xys_known: tuple[tuple[int, int]], ) -> None: """Processes multi facet optic. Saves data to self.data_slope_solver @@ -302,15 +330,22 @@ def process_multi_facet_optic( data_ensemble : DefinitionEnsemble Ensemble data object. surfaces : list[Surface2dAbstract] - List of surface type definitions. + List of surface type definitions + pts_known : Vxy + Length N, xy pixel location of known point(s) with known xy dot index locations + xys_known : tuple[tuple[int, int]] + List of N integer xy dot indices corresponding to pts_known + + NOTE: N=number of facets """ # Check inputs - if len(data_facet) != len(surfaces): + if len(data_facet) != len(surfaces) != len(pts_known) != len(xys_known): lt.error_and_raise( ValueError, 'Length of data_facet does not equal length of data_surface' - f'data_facet={len(data_facet)}, surface_data={len(surfaces)}', + + f'data_facet={len(data_facet)}, surface_data={len(surfaces)}, ' + + f'pts_known={len(pts_known)}, xys_known={len(xys_known)}', ) self.optic_type = 'multi_facet' @@ -320,7 +355,7 @@ def process_multi_facet_optic( self.data_surface = surfaces # Find blobs - self.blob_index = self.find_blobs() + self.blob_index = self.find_blobs(pts_known, xys_known) # Calculate mask mask_raw = self._calculate_mask() From f66761fa6d3cc227c6eb7bff1d9d04ceb05643d6 Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 21 Aug 2024 17:57:52 -0600 Subject: [PATCH 060/105] Added docs, stub, and checks to blobIndex --- opencsp/app/sofast/lib/BlobIndex.py | 125 ++++++++++++---------------- 1 file changed, 55 insertions(+), 70 deletions(-) diff --git a/opencsp/app/sofast/lib/BlobIndex.py b/opencsp/app/sofast/lib/BlobIndex.py index 0425bed9f..ce1d7f3b3 100644 --- a/opencsp/app/sofast/lib/BlobIndex.py +++ b/opencsp/app/sofast/lib/BlobIndex.py @@ -47,6 +47,8 @@ def __init__(self, points: Vxy, x_min: int, x_max: int, y_min: int, y_max: int) self._neighbor_dists = np.zeros((self._num_pts, 4)) * np.nan # left, right, up, down self.search_thresh = 5.0 # pixels + self.max_num_iters: int = 100 + """Maximum number of search iterations""" self.search_perp_axis_ratio = 3.0 self.apply_filter = False @@ -131,17 +133,14 @@ def _point_index_from_xy_index(self, idx_x: int, idx_y: int) -> tuple[bool, int] return (not np.isnan(idx)), int(idx) def _assign(self, idx_pt: int, idx_x: int, idx_y: int) -> None: - """Assigns given blob index an xy index + # Assigns given blob index an xy index + # idx_pt : int + # Index of point (indexing self._points) + # idx_x : int + # X blob index + # idx_y : int + # Y blob index - Parameters - ---------- - idx_pt : int - Index of point (indexing self._points) - idx_x : int - X blob index - idx_y : int - Y blob index - """ # Assign vectors self._idx_x[idx_pt] = idx_x self._idx_y[idx_pt] = idx_y @@ -153,13 +152,8 @@ def _assign(self, idx_pt: int, idx_x: int, idx_y: int) -> None: lt.debug(f'Blob number {idx_pt:d} was assigned ({idx_x:d}, {idx_y:d})') def _unassign(self, idx_pt: int) -> None: - """Unassigns a point index + # Unassigns a point index - Parameters - ---------- - idx_pt : int - Index of point (indexing self._points) - """ # Unassign matrices idx_mat_x = self._idx_x[idx_pt] + self._offset_x idx_mat_y = self._idx_y[idx_pt] + self._offset_y @@ -177,18 +171,12 @@ def _unassign(self, idx_pt: int) -> None: lt.debug(f'Blob number {idx_pt:d} was unassigned') - def _assign_center(self, pt_origin: Vxy) -> None: - """Assigns the center point to (0, 0) - - Parameters - ---------- - pt_origin : Vxy - Location of origin, pixels - """ + def _assign_center(self, pt_origin: Vxy, idx_x: int, idx_y: int) -> None: + # Assigns given origin point to given xy index idx, dist = self._nearest_unassigned_idx_from_xy_point(pt_origin) if dist > self.search_thresh: - lt.warn(f'Assigning point {idx:d} to index (0, 0) resulted in {dist:.2f} pixels error.') - self._assign(idx, 0, 0) + lt.warn(f'Assigning point {idx:d} to index ({idx_x:d}, {idx_y:d}) resulted in {dist:.2f} pixels error.') + self._assign(idx, idx_x, idx_y) def _find_nearest_in_direction( self, idx_pt: int, direction: Literal['right', 'left', 'up', 'down'] @@ -248,15 +236,14 @@ def _num_unassigned(self) -> int: """Returns number of unassigned points (referencing self._points)""" return np.logical_not(self._is_assigned).sum() - def _find_3x3_center_block(self) -> None: - """Finds the center 3x3 block around center point using nearest in direction method - a b c - d e f - g h i - """ - ret, idx_e = self._point_index_from_xy_index(0, 0) + def _find_3x3_center_block(self, idx_x: int, idx_y: int) -> None: + # Finds the center 3x3 block around center point using nearest in direction method + # a b c + # d e f + # g h i + ret, idx_e = self._point_index_from_xy_index(idx_x, idx_y) if not ret: - lt.warn('Could not find 3x3 center block. Could not find point index (0, 0).') + lt.warn(f'Could not find 3x3 center block. Could not find point index xy=({idx_x:d}, {idx_y:d}).') # Right idx_f, x, y = self._find_nearest_in_direction(idx_e, 'right') self._assign(idx_f, x, y) @@ -283,19 +270,16 @@ def _find_3x3_center_block(self) -> None: self._assign(idx_g, x, y) def _extend_data(self, direction: Literal['x', 'y'], step: Literal[1, -1]) -> None: - """Extends found blob rows/collumns in given direction - - Steps in the given axis, a or b - - Parameters - ---------- - direction : Literal['x', 'y'] - Axis to search - step : Literal[1, -1] - Direction to search - - 1 = right/down - - -1 = left/up - """ + # Extends found blob rows/collumns in given direction + # Steps in the given axis, a or b + # Parameters + # ---------- + # direction : Literal['x', 'y'] + # Axis to search + # step : Literal[1, -1] + # Direction to search + # - 1 = right/down + # - -1 = left/up if step not in [-1, 1]: raise ValueError(f'Step must be -1 or 1, not {step}') @@ -354,26 +338,23 @@ def _extend_data(self, direction: Literal['x', 'y'], step: Literal[1, -1]) -> No break def _exp_pt_from_pt_pair(self, pt_cur: Vxy, pt_prev: Vxy) -> Vxy: - """Calculates the expected point from a given current and previous point pair - - Parameters - ---------- - pt_cur : Vxy - Current point, pixels - pt_prev : Vxy - Previous point, pixels - - Returns - ------- - Vxy - Refined expected point location - """ + # Calculates the expected point from a given current and previous point pair + # Parameters + # ---------- + # pt_cur : Vxy + # Current point, pixels + # pt_prev : Vxy + # Previous point, pixels + # Returns + # ------- + # Vxy + # Refined expected point location del_y = (pt_cur.y - pt_prev.y)[0] # pixels del_x = (pt_cur.x - pt_prev.x)[0] # pixels return pt_cur + Vxy((del_x, del_y)) # pixels def _filter_bad_points(self) -> None: - """Filters erroneous assigned points""" + # Filters erroneous assigned points del_1_x = np.diff(self._points_mat, axis=1) del_1_y = np.diff(self._points_mat, axis=0) del_2_x = np.diff(del_1_x, axis=1) @@ -397,21 +378,23 @@ def _filter_bad_points(self) -> None: for idx in idxs_bad_pts: self._unassign(idx) - def run(self, pt_origin: Vxy) -> None: + def run(self, pt_known: Vxy, x_known: int, y_known: int) -> None: """Runs blob indexing sequence Parameters ---------- - pt_origin : Vxy - Location of origin point with blob index of (0, 0), pixels + pt_known : Vxy + Location of known point with known blob index, pixels + x/y_known : int + XY indies of known points """ # Assign center point - self._assign_center(pt_origin) + self._assign_center(pt_known, x_known, y_known) # Find 3x3 core point block - self._find_3x3_center_block() + self._find_3x3_center_block(x_known, y_known) # Extend rows prev_num_unassigned = self._num_unassigned() - for idx in range(100): + for idx in range(self.max_num_iters): self._extend_data('x', -1) self._extend_data('x', 1) if self.apply_filter: @@ -426,8 +409,7 @@ def run(self, pt_origin: Vxy) -> None: if prev_num_unassigned == cur_num_unassigned: lt.debug(f'All possible points found in {idx + 1:d} iterations.') break - else: - prev_num_unassigned = cur_num_unassigned + prev_num_unassigned = cur_num_unassigned def plot_points_labels(self, labels: bool = False) -> None: """Plots points and labels @@ -497,6 +479,9 @@ def get_data(self) -> tuple[Vxy, Vxy]: points = Vxy((x_pts[mask_assigned], y_pts[mask_assigned])) return points, indices + def get_data_in_region(self) -> tuple[Vxy, Vxy]: + """FILL IN DOCS""" + def get_data_mat(self) -> tuple[np.ndarray, np.ndarray]: """Returns found points and indices in matrix form From 46cbf3d5546280afeb17c40494d5ae1cb40bd48e Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 09:39:46 -0600 Subject: [PATCH 061/105] Added get-data_in_region to BlobIndex --- opencsp/app/sofast/lib/BlobIndex.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/opencsp/app/sofast/lib/BlobIndex.py b/opencsp/app/sofast/lib/BlobIndex.py index ce1d7f3b3..0e68a6176 100644 --- a/opencsp/app/sofast/lib/BlobIndex.py +++ b/opencsp/app/sofast/lib/BlobIndex.py @@ -4,6 +4,7 @@ import numpy as np from opencsp.common.lib.geometry.Vxy import Vxy +from opencsp.common.lib.geometry.LoopXY import LoopXY from opencsp.common.lib.tool import log_tools as lt @@ -479,8 +480,24 @@ def get_data(self) -> tuple[Vxy, Vxy]: points = Vxy((x_pts[mask_assigned], y_pts[mask_assigned])) return points, indices - def get_data_in_region(self) -> tuple[Vxy, Vxy]: - """FILL IN DOCS""" + def get_data_in_region(self, loop: LoopXY) -> tuple[Vxy, Vxy]: + """Returns found points and indices within given region + + Parameters + ---------- + loop : LoopXY + The loop to search within + + Returns + ------- + points : Vxy + Lenght N vector, located points xy locations, pixels + indices_xy : Vxy + Length N vector, located points xy blob indices, int + """ + points, indices = self.get_data() + mask = loop.is_inside(points) + return points[mask], indices[mask] def get_data_mat(self) -> tuple[np.ndarray, np.ndarray]: """Returns found points and indices in matrix form From 0e911d594b36a7bf90056a183320a11f5c0964d1 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 09:40:52 -0600 Subject: [PATCH 062/105] Added facet pointing and ensemble output to processSofastFixed --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 132 +++++++++++++++++-- 1 file changed, 120 insertions(+), 12 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 42e887bf3..bcd00b4c8 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -18,12 +18,16 @@ import opencsp.app.sofast.lib.process_optics_geometry as pr from opencsp.app.sofast.lib.SpatialOrientation import SpatialOrientation from opencsp.common.lib.camera.Camera import Camera +from opencsp.common.lib.csp.Facet import Facet +from opencsp.common.lib.csp.FacetEnsemble import FacetEnsemble from opencsp.common.lib.csp.MirrorPoint import MirrorPoint from opencsp.common.lib.deflectometry.SlopeSolver import SlopeSolver from opencsp.common.lib.deflectometry.SlopeSolverData import SlopeSolverData from opencsp.common.lib.deflectometry.Surface2DAbstract import Surface2DAbstract from opencsp.common.lib.geometry.RegionXY import RegionXY +from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ from opencsp.common.lib.geometry.Uxyz import Uxyz +from opencsp.common.lib.geometry.Vxyz import Vxyz from opencsp.common.lib.geometry.Vxy import Vxy from opencsp.common.lib.tool.hdf5_tools import HDF5_SaveAbstract import opencsp.common.lib.tool.log_tools as lt @@ -77,6 +81,7 @@ def __init__( self.data_geometry_facet: list[cdc.CalculationDataGeometryFacet] self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] self.data_error: cdc.CalculationError + self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] self.blob_index: BlobIndex self.slope_solver: list[SlopeSolver] @@ -115,7 +120,7 @@ def _calculate_mask(self) -> ndarray: ] mask = ip.calc_mask_raw(images, *params) - if self.optic_type == 'multi_facet': + if (self.optic_type == 'multi_facet') and self.params.mask.keep_largest_area: lt.warn( '"keep_largest_area" mask processing option cannot be used ' 'for multifacet ensembles. This will be turned off.' @@ -218,8 +223,11 @@ def _process_optic_multifacet_geometry(self, blob_index: BlobIndex, mask_raw: np kwargs_list = [] for idx_facet in range(self.num_facets): + # Get pixel region of current facet + loop = self.data_image_processing_facet[idx_facet].loop_facet_image_refine + # Get image points and blob indices - pts_image, pts_index_xy = blob_index.get_data() + pts_image, pts_index_xy = blob_index.get_data_in_region(loop) # Define optic orientation w.r.t. camera rot_facet_ensemble = self.data_ensemble.r_facet_ensemble[idx_facet] @@ -371,7 +379,90 @@ def process_multi_facet_optic( slope_solver.fit_surface() slope_solver.solve_slopes() self.slope_solver.append(slope_solver) - self.data_slope_solver.append(self.slope_solver.get_data()) + self.data_slope_solver.append(slope_solver.get_data()) + + # Calculate facet pointing + self._calculate_facet_pointing() + + def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'average') -> None: + """ + Calculates facet pointing relative to the given reference. + + Parameters + ---------- + reference : 'average' | int + If 'average', the pointing reference is the average of all + facet pointing directions. If, int, that facet index is assumed + to have perfect pointing. + """ + if self.data_slope_solver is None: + lt.error_and_raise(ValueError, 'Slopes must be solved first by running "solve_slopes".') + if (reference != 'average') and not isinstance(reference, int): + lt.error_and_raise(ValueError, 'Given reference must be int or "average".') + if isinstance(reference, int) and (reference >= self.num_facets): + lt.error_and_raise( + ValueError, f'Given facet index, {reference:d}, is out of range of 0-{self.num_facets - 1:d}.' + ) + + # Instantiate data list + self.data_calculation_ensemble = [] + + trans_facet_ensemble_list = [] + v_pointing_matrix = np.zeros((3, self.num_facets)) + for idx in range(self.num_facets): + # Get transformation from user-input and slope solving + trans_1 = TransformXYZ.from_R_V( + self.data_ensemble.r_facet_ensemble[idx], self.data_ensemble.v_facet_locations[idx] + ) + trans_2 = self.data_slope_solver[idx].trans_alignment + # Calculate inverse of slope solving transform + trans_2 = TransformXYZ.from_V(-trans_2.V) * TransformXYZ.from_R(trans_2.R.inv()) + # Create local to global transformation + trans_facet_ensemble_list.append(trans_2 * trans_1) + + # Calculate pointing vector in ensemble coordinates + v_pointing = Vxyz((0, 0, 1)).rotate(trans_facet_ensemble_list[idx].R) + v_pointing_matrix[:, idx] = v_pointing.data.squeeze() + + # Calculate reference pointing direction + if isinstance(reference, int): + v_pointing_ref = Vxyz(v_pointing_matrix[:, reference]) + elif reference == 'average': + v_pointing_ref = Vxyz(v_pointing_matrix.mean(1)) + # Calculate rotation to align pointing vectors + r_align_pointing = v_pointing_ref.align_to(Vxyz((0, 0, 1))) + trans_align_pointing = TransformXYZ.from_R(r_align_pointing) + + # Apply alignment rotation to total transformation + trans_facet_ensemble_list = [trans_align_pointing * t for t in trans_facet_ensemble_list] + + # Calculate global slope and surface points + for idx in range(self.num_facets): + # Get slope data + slopes = self.data_slope_solver[idx].slopes_facet_xy # facet coordinats + + # Calculate surface normals in local (facet) coordinates + u_surf_norms = np.ones((3, slopes.shape[1])) + u_surf_norms[:2] = -slopes + u_surf_norms = Uxyz(u_surf_norms).as_Vxyz() + + # Apply rotation to normal vectors + u_surf_norms_global = u_surf_norms.rotate(trans_facet_ensemble_list[idx].R) + # Convert normal vectors to global (ensemble) slopes + slopes_ensemble_xy = -u_surf_norms_global.data[:2] / u_surf_norms_global.data[2:] + + # Convert surface points to global (ensemble) coordinates + v_surf_points_ensemble = trans_facet_ensemble_list[idx].apply( + self.data_slope_solver[idx].v_surf_points_facet + ) + + # Calculate pointing vectors in ensemble coordinates + v_facet_pointing_ensemble = Vxyz((0, 0, 1)).rotate(trans_facet_ensemble_list[idx].R) + + data = cdc.CalculationFacetEnsemble( + trans_facet_ensemble_list[idx], slopes_ensemble_xy, v_surf_points_ensemble, v_facet_pointing_ensemble + ) + self.data_calculation_ensemble.append(data) def save_to_hdf(self, file: str, prefix: str = ''): """Saves data to given HDF5 file. Data is stored in CalculationsFixedPattern/... @@ -411,16 +502,33 @@ def save_to_hdf(self, file: str, prefix: str = ''): def get_mirror( self, interpolation_type: Literal['given', 'bilinear', 'clough_tocher', 'nearest'] = 'nearest' - ) -> MirrorPoint: + ) -> Facet | FacetEnsemble: """Returns mirror object with slope data""" - if self.optic_type in ['single_facet', 'undefined']: - v_surf_pts = self.data_slope_solver[0].v_surf_points_facet + facets = [] + trans_list = [] + for idx_facet in range(self.num_facets): + # Get mirror surface points + v_surf_pts = self.data_slope_solver[idx_facet].v_surf_points_facet + # Get point normal vectors v_normals_data = np.ones((3, len(v_surf_pts))) - v_normals_data[:2, :] = self.data_slope_solver[0].slopes_facet_xy + v_normals_data[:2, :] = self.data_slope_solver[idx_facet].slopes_facet_xy v_normals_data[:2, :] *= -1 v_normals = Uxyz(v_normals_data) - shape = RegionXY.from_vertices(self.data_facet[0].v_facet_corners.projXY()) - return MirrorPoint(v_surf_pts, v_normals, shape, interpolation_type) - elif self.optic_type == 'multi_facet': - # TODO: fill in for multifacet - pass + # Get optic shape + shape = RegionXY.from_vertices(self.data_facet[idx_facet].v_facet_corners.projXY()) + # Create mirror + mirror = MirrorPoint(v_surf_pts, v_normals, shape, interpolation_type) + # Create facet + facets.append(Facet(mirror)) + # Get facet pointing if multi-facet + if self.optic_type == 'multi_facet': + trans: TransformXYZ = self.data_calculation_ensemble[idx_facet].trans_facet_ensemble + trans_list.append(trans) + + # Return either ensemble or facet + if self.optic_type == 'multi_facet': + ensemble = FacetEnsemble(facets) + ensemble.set_facet_transform_list(trans_list) + return ensemble + else: + return facets[0] From f8ad6f57558726c6db16903ca0e50ff470a54f1f Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 09:41:37 -0600 Subject: [PATCH 063/105] Added check in FacetEnsemble that catches when corner z values cannot be found. --- opencsp/common/lib/csp/FacetEnsemble.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/opencsp/common/lib/csp/FacetEnsemble.py b/opencsp/common/lib/csp/FacetEnsemble.py index d06d9d768..61208ff8c 100644 --- a/opencsp/common/lib/csp/FacetEnsemble.py +++ b/opencsp/common/lib/csp/FacetEnsemble.py @@ -14,6 +14,7 @@ from opencsp.common.lib.geometry.Vxyz import Vxyz from opencsp.common.lib.render.View3d import View3d from opencsp.common.lib.render_control.RenderControlFacetEnsemble import RenderControlFacetEnsemble +import opencsp.common.lib.tool.log_tools as lt class FacetEnsemble(RayTraceable, VisualizeOrthorectifiedSlopeAbstract, OpticOrientationAbstract): @@ -56,10 +57,15 @@ def axis_aligned_bounding_box(self) -> tuple[float, float, float, float]: """ # Get XYZ locations of all points making up mirror region xyz = [] # facet frame - for facet in self.facets: + for facet_idx, facet in enumerate(self.facets): # Get all mirror region vertices points_xy = Pxy.merge([loop.vertices for loop in facet.mirror.region.loops]) # mirror frame points_z = facet.mirror.surface_displacement_at(points_xy) # mirror frame + # If the corners aren't in range of the mirror's interpolation function, set to 0 + if np.any(np.isnan(points_z)): + lt.warn(f'Could not find corner z values for facet number {facet_idx:d}; filling with zeros.') + points_z = np.nan_to_num(points_z, nan=0) + # Translate xyz points to their locations in the ensemble points_xyz = Pxyz((points_xy.x, points_xy.y, points_z)) # mirror frame points_xyz = facet.mirror.get_transform_relative_to(self).apply(points_xyz) # facet frame xyz.append(points_xyz) # facet frame From e5a45af6f95554b5567f13868608d248407cc707 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 09:46:15 -0600 Subject: [PATCH 064/105] Fixed testProcessSofastFixed --- opencsp/app/sofast/test/test_ProcessSofastFixed.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/opencsp/app/sofast/test/test_ProcessSofastFixed.py b/opencsp/app/sofast/test/test_ProcessSofastFixed.py index 37340c399..6b0988735 100644 --- a/opencsp/app/sofast/test/test_ProcessSofastFixed.py +++ b/opencsp/app/sofast/test/test_ProcessSofastFixed.py @@ -65,7 +65,9 @@ def setUpClass(cls): cls.process_sofast_fixed.load_measurement_data(measurement) # Process - cls.process_sofast_fixed.process_single_facet_optic(facet_data, surface) + pt_known = measurement.origin + xy_known = (0, 0) + cls.process_sofast_fixed.process_single_facet_optic(facet_data, surface, pt_known, xy_known) def test_save_as_hdf(self): """Tests saving to HDF file""" @@ -77,7 +79,7 @@ def test_save_figure(self): axis_control_m = rca.meters() fig_mng = fm.setup_figure(figure_control, axis_control_m, title='') - mirror = self.process_sofast_fixed.get_mirror('bilinear') + mirror = self.process_sofast_fixed.get_mirror('bilinear').mirror mirror.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_mng.axis) fig_mng.save(self.save_dir, 'sofast_fixed_orthorectified_slope_magnitude', 'png') From 7883af0e3b493a840dbb130defff892acc8f27ab Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 10:00:00 -0600 Subject: [PATCH 065/105] Made slope_solver attribute a list in ProcessSofastFixed --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index bcd00b4c8..ce93323df 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -318,8 +318,8 @@ def process_single_facet_optic( slope_solver = SlopeSolver(**kwargs) slope_solver.fit_surface() slope_solver.solve_slopes() - self.slope_solver = slope_solver - self.data_slope_solver = [self.slope_solver.get_data()] + self.slope_solver = [slope_solver] + self.data_slope_solver = [slope_solver.get_data()] def process_multi_facet_optic( self, From 289e9619fcd3555b87f88507f04f62f54d50e4ef Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 10:00:15 -0600 Subject: [PATCH 066/105] Fixed test_SofastConfiguration --- opencsp/app/sofast/lib/SofastConfiguration.py | 6 +++--- .../test/data/input/SofastConfiguration/stats_fixed.json | 2 +- opencsp/app/sofast/test/test_SofastConfiguration.py | 6 ++++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/opencsp/app/sofast/lib/SofastConfiguration.py b/opencsp/app/sofast/lib/SofastConfiguration.py index f10798b6b..d26b027f7 100644 --- a/opencsp/app/sofast/lib/SofastConfiguration.py +++ b/opencsp/app/sofast/lib/SofastConfiguration.py @@ -77,10 +77,10 @@ def get_measurement_stats(self) -> list[dict]: num_samps = len(data_calc.v_surf_points_facet) else: # Get data - data_surf = self.data_sofast_object.slope_solver.surface - data_calc = self.data_sofast_object.data_slope_solver + data_surf = self.data_sofast_object.slope_solver[idx_facet].surface + data_calc = self.data_sofast_object.data_slope_solver[idx_facet] # Sample resolution - surf_points = self.data_sofast_object.data_slope_solver.v_surf_points_facet + surf_points = self.data_sofast_object.data_slope_solver[idx_facet].v_surf_points_facet pts_index_xy = self.data_sofast_object.blob_index.get_data()[1] point_indices_mat = self.data_sofast_object.blob_index.get_data_mat()[1] offset_x = self.data_sofast_object.blob_index._offset_x diff --git a/opencsp/app/sofast/test/data/input/SofastConfiguration/stats_fixed.json b/opencsp/app/sofast/test/data/input/SofastConfiguration/stats_fixed.json index 325723a85..3175f0d09 100644 --- a/opencsp/app/sofast/test/data/input/SofastConfiguration/stats_fixed.json +++ b/opencsp/app/sofast/test/data/input/SofastConfiguration/stats_fixed.json @@ -3,6 +3,6 @@ "delta_x_sample_points_average": 0.019620769949538475, "delta_y_sample_points_average": 0.019562008548198912, "number_samples": 3782, - "focal_lengths_parabolic_xy": [-136.85679647500112, -146.7666251432111] + "focal_lengths_parabolic_xy": [-136.8543448388678, -146.76468150138166] } ] diff --git a/opencsp/app/sofast/test/test_SofastConfiguration.py b/opencsp/app/sofast/test/test_SofastConfiguration.py index f0b0fd300..489e80ca1 100644 --- a/opencsp/app/sofast/test/test_SofastConfiguration.py +++ b/opencsp/app/sofast/test/test_SofastConfiguration.py @@ -61,12 +61,14 @@ def _get_process_sofast_fixed(): measurement = MeasurementSofastFixed.load_from_hdf(file_meas) # Instantiate SofastFixed class and load measurement data - sofast = ProcessSofastFixed(orientation, camera, fixed_pattern_dot_locs, facet_data) + sofast = ProcessSofastFixed(orientation, camera, fixed_pattern_dot_locs) sofast.load_measurement_data(measurement) # Process surface = Surface2DParabolic(initial_focal_lengths_xy=(150.0, 150), robust_least_squares=False, downsample=1) - sofast.process_single_facet_optic(surface) + pt_known = measurement.origin + xy_known = (0, 0) + sofast.process_single_facet_optic(facet_data, surface, pt_known, xy_known) return sofast From 45801e8e57d353cdbcb5db4a234ee91333367ce0 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 10:10:10 -0600 Subject: [PATCH 067/105] Fixed calibrateSofastFixedDots --- .../app/sofast/lib/CalibrateSofastFixedDots.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/opencsp/app/sofast/lib/CalibrateSofastFixedDots.py b/opencsp/app/sofast/lib/CalibrateSofastFixedDots.py index c5629808c..395a1beb6 100644 --- a/opencsp/app/sofast/lib/CalibrateSofastFixedDots.py +++ b/opencsp/app/sofast/lib/CalibrateSofastFixedDots.py @@ -61,6 +61,7 @@ def __init__( x_max: int, y_min: int, y_max: int, + xy_pts_known: tuple[tuple[int, int]] = None, ) -> 'CalibrateSofastFixedDots': """Instantiates the calibration class @@ -69,7 +70,7 @@ def __init__( files_images : list[str] File paths to images of Aruco markers and dots origin_pts : Vxy - Points on the images corresponding to index (0, 0) + Points on the images corresponding to index `xy_pts_known` camera : Camera Camera calibration parameters of camera used to take images pts_xyz_corners : Vxyz @@ -80,6 +81,10 @@ def __init__( Expected min/max x index values (follows screen x axis) y_min/y_max : int Expected min/max y index values (follows screen y axis) + xy_pts_known : tuple[tuple[int, int]] + The origin point xy indices. One xy point for each input image. + For example, for two images using (0, 0) - xy_pts_known = ((0, 0), (0, 0)). + If None, defaults to all zeros. """ # Load images self._images: list[ImageMarker] = [] @@ -92,8 +97,12 @@ def __init__( for pt_xyz, pt_id in zip(pts_xyz_corners, pts_ids_corners): im.set_point_id_located(pt_id, pt_xyz.data.squeeze()) + if xy_pts_known is None: + xy_pts_known = ((0, 0),) * len(origin_pts) + # Save data self._origin_pts = origin_pts + self._xy_pts_known = xy_pts_known self._camera = camera self._pts_xyz_corners = pts_xyz_corners self._pts_ids_corners = pts_ids_corners @@ -150,7 +159,9 @@ def _find_dots_in_images(self) -> None: # Index all found points blob_index = BlobIndex(pts, -self._x_max, -self._x_min, self._y_min, self._y_max) blob_index.search_thresh = self.blob_search_threshold - blob_index.run(origin_pt) + blob_index.run( + origin_pt, x_known=self._xy_pts_known[idx_image][0], y_known=self._xy_pts_known[idx_image][1] + ) points, indices = blob_index.get_data_mat() # Save points and indices From 8e58a69405401554403fc0b7a3a4acd6468947d9 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 11:39:55 -0600 Subject: [PATCH 068/105] Updated Facet so that if z values cannot be interpolated for corners, they are set to zero with warning. --- opencsp/common/lib/csp/Facet.py | 79 +++------------------------------ 1 file changed, 6 insertions(+), 73 deletions(-) diff --git a/opencsp/common/lib/csp/Facet.py b/opencsp/common/lib/csp/Facet.py index bd9753aac..437bb0984 100644 --- a/opencsp/common/lib/csp/Facet.py +++ b/opencsp/common/lib/csp/Facet.py @@ -1,25 +1,19 @@ """Facet class inherited by all facet classes""" -from typing import Callable -from warnings import warn - import numpy as np -from scipy.spatial.transform import Rotation from opencsp.common.lib.csp.MirrorAbstract import MirrorAbstract from opencsp.common.lib.csp.RayTraceable import RayTraceable from opencsp.common.lib.csp.VisualizeOrthorectifiedSlopeAbstract import VisualizeOrthorectifiedSlopeAbstract -from opencsp.common.lib.geometry.LoopXY import LoopXY from opencsp.common.lib.geometry.Pxyz import Pxyz -from opencsp.common.lib.geometry.RegionXY import RegionXY from opencsp.common.lib.geometry.RegionXY import Resolution from opencsp.common.lib.geometry.Vxy import Vxy from opencsp.common.lib.geometry.Vxyz import Vxyz from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ from opencsp.common.lib.render.View3d import View3d from opencsp.common.lib.render_control.RenderControlFacet import RenderControlFacet -from opencsp.common.lib.render_control.RenderControlMirror import RenderControlMirror from opencsp.common.lib.csp.OpticOrientationAbstract import OpticOrientationAbstract +import opencsp.common.lib.tool.log_tools as lt UP = Vxyz([0, 0, 1]) @@ -45,6 +39,7 @@ def __init__(self, mirror: MirrorAbstract, name: str = None) -> 'Facet': @property def transform_mirror_to_self(self) -> TransformXYZ: + """Returns the mirror to facet 3d transform""" return self.mirror._self_to_parent_transform # override from VisualizeOrthorectifiedSlopeAbstract @@ -61,6 +56,10 @@ def axis_aligned_bounding_box(self) -> tuple[float, float, float, float]: # Get XYZ locations of all points making up mirror region points_xy = Vxy.merge([loop.vertices for loop in self.mirror.region.loops]) # mirror frame points_z = self.mirror.surface_displacement_at(points_xy) # mirror frame + # If the corners aren't in range of the mirror's interpolation function, set to 0 + if np.any(np.isnan(points_z)): + lt.warn('Could not find corner z values for facet; filling with zeros.') + points_z = np.nan_to_num(points_z, nan=0) points_xyz = Vxyz((points_xy.x, points_xy.y, points_z)) # mirror frame # Transform "mirror base" to "facet child" coordinates @@ -206,69 +205,3 @@ def draw(self, view: View3d, facet_style: RenderControlFacet = None, transform: if facet_style.draw_mirror_curvature: self.mirror.draw(view, facet_style.mirror_styles, transform * self.mirror._self_to_parent_transform) - - # pass # end function - - ### POINTING FUNCTION METHODS - # TODO TJL: Pointing Function methods are not tested with the updated base classes. - # There will need to be an addition to `Facet` that allows users to specify the ways - # a facet mounts the mirror it contains. Defining some function might - # be the way to do this, but that is a task for the future. - - def define_pointing_function_UNVERIFIED(self, func: Callable[..., TransformXYZ]) -> None: - """Sets the canting function to use. I.e., defines the - "set_pointing" function. - - Parameters - ---------- - func : Callable - Function that returns a "child to base" TransformXYZ object. - """ - self.pointing_function = func - - def set_pointing_UNVERIFIED(self, *args) -> None: - """Sets current facet canting (i.e. sets - self.ori.transform_child_to_base using the given arguments. - """ - # warn("Depricated, do not use OpticOrientation instance, use OpticOrietionAbstract.") - if self.pointing_function is None: - raise ValueError('self.pointing_function is not defined. Use self.define_pointing_function.') - # self.ori.transform_child_to_base = self.pointing_function(*args) - self.mirror._self_to_parent_transform = self.pointing_function(*args) - - @classmethod - def generate_az_el_UNVERIFIED(cls, mirror: MirrorAbstract) -> 'Facet': - """Generates Facet object defined by a simple azimuth then elevation - canting strategy. The "pointing_function" accessed by self.set_pointing - has the following inputs - - az - float - azimuth angle (rotation about z axis) in radians - - el - float - elevation angle (rotation about x axis) in radians - """ - - def pointing_function(az: float, el: float) -> TransformXYZ: - r = Rotation.from_euler('zx', [az, el], degrees=False) - return TransformXYZ.from_R(r) - - # Create facet - facet = cls(mirror) - facet.define_pointing_function(pointing_function) - - return facet - - @classmethod - def generate_rotation_defined_UNVERIFIED(cls, mirror: MirrorAbstract) -> 'Facet': - """Generates FacetCantable object defined by a given scipy Rotation object. - The "pointing_function" accessed by self.set_pointing has the following input - - rotation - scipy.spatial.transform.Rotation - rotation object - """ - - def pointing_function(rotation: Rotation) -> TransformXYZ: - return TransformXYZ.from_R(rotation) - - # Create facet - facet = cls(mirror) - facet.define_pointing_function(pointing_function) - - return facet - - ### END POINTING FUNCTION METHODS From bb9d9455b2cd390307fc008a91acbc0b46057628 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 13:19:22 -0600 Subject: [PATCH 069/105] Added test ensemble HDF5 input and output files --- .../calculation_facet_ensemble.h5 | Bin 0 -> 75656 bytes .../measurement_facet_ensemble.h5 | Bin 0 -> 2022488 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 opencsp/test/data/sofast_fixed/data_expected/calculation_facet_ensemble.h5 create mode 100644 opencsp/test/data/sofast_fixed/data_measurement/measurement_facet_ensemble.h5 diff --git a/opencsp/test/data/sofast_fixed/data_expected/calculation_facet_ensemble.h5 b/opencsp/test/data/sofast_fixed/data_expected/calculation_facet_ensemble.h5 new file mode 100644 index 0000000000000000000000000000000000000000..79d8bc9837cf58b4c553c196f677d97fa0a0e05d GIT binary patch literal 75656 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 literal 0 HcmV?d00001 diff --git a/opencsp/test/data/sofast_fixed/data_measurement/measurement_facet_ensemble.h5 b/opencsp/test/data/sofast_fixed/data_measurement/measurement_facet_ensemble.h5 new file mode 100644 index 0000000000000000000000000000000000000000..46bc8cbda552e4119cc4d54a932e1b88a1594cd6 GIT binary patch literal 2022488 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

Zha~)MY-) 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

^#1ytpQ9_xdO`X*CguK8roU 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

GP`%_Ef?*^z_*F{kOYp5P-AQ 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

J8Fs`2{K<9AxHc{%DFsJ&HGF=)fB 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

o6#^M5(-jG=&H;8JJXN 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 z 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 Date: Wed, 9 Oct 2024 15:37:30 -0600 Subject: [PATCH 096/105] Fixed typo --- example/sofast_fringe/example_process_facet_ensemble.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/sofast_fringe/example_process_facet_ensemble.py b/example/sofast_fringe/example_process_facet_ensemble.py index b0314b1a2..4cf83c4f3 100644 --- a/example/sofast_fringe/example_process_facet_ensemble.py +++ b/example/sofast_fringe/example_process_facet_ensemble.py @@ -162,7 +162,7 @@ def example_process_facet_ensemble(): # Plot slope map res = 0.002 # meter, make the plot with 2mm spatial resolution - clim = 7 # mrad, draw the plot with +/-7mrad scale bars, this mirror has erorrs that extent to about +/-7mrad + clim = 7 # mrad, draw the plot with +/-7mrad scale bars, this mirror has erorrs that extend to about +/-7mrad fig_record = fm.setup_figure(figure_control, axis_control_m, title='') ensemble.plot_orthorectified_slope(res=res, clim=clim, axis=fig_record.axis) fig_record.save(dir_save, 'slope_magnitude', 'png') From 18e7b4edebab8287ba0e5741d5b8c2927e7cdc21 Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 9 Oct 2024 15:39:01 -0600 Subject: [PATCH 097/105] Added defaults in docstrings --- opencsp/app/sofast/lib/BlobIndex.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/opencsp/app/sofast/lib/BlobIndex.py b/opencsp/app/sofast/lib/BlobIndex.py index b842cd77c..226522c16 100644 --- a/opencsp/app/sofast/lib/BlobIndex.py +++ b/opencsp/app/sofast/lib/BlobIndex.py @@ -63,13 +63,13 @@ def __init__(self, points: Vxy, x_min: int, x_max: int, y_min: int, y_max: int) self.search_thresh: float = 5.0 # pixels """Threshold, in pixels. As algorithm calculates the expected location of the next blob, if a blob - is within 'search_thresh' of the expected location, that blob is considered found""" + is within 'search_thresh' of the expected location, that blob is considered found. Default 5.0""" self.max_num_iters: int = 100 - """Maximum number of iterations to use when fitting found blobs to grid pattern""" + """Maximum number of iterations to use when fitting found blobs to grid pattern. Default 100""" self.search_perp_axis_ratio: float = 3.0 - """Ratio of point distances: (perpendicular to axis) / (along axis) used to search for points""" + """Ratio of point distances: (perpendicular to axis) / (along axis) used to search for points. Default 3.0""" self.apply_filter: bool = False - """To filter bad points (experimental, not implemented yet)""" + """To filter bad points (experimental, not implemented yet). Default False""" self._offset_x = -x_min # index self._offset_y = -y_min # index From 0ee90ed1d103668c63951e4b42118ca8d0b4eb08 Mon Sep 17 00:00:00 2001 From: Smith Date: Wed, 28 Aug 2024 14:09:23 -0600 Subject: [PATCH 098/105] Fixed typo. Added gain as option to live view mono basler example. --- example/camera_io/live_view_mono_Basler.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/example/camera_io/live_view_mono_Basler.py b/example/camera_io/live_view_mono_Basler.py index 590e73371..891e19bc4 100644 --- a/example/camera_io/live_view_mono_Basler.py +++ b/example/camera_io/live_view_mono_Basler.py @@ -12,7 +12,7 @@ def main(): parser = argparse.ArgumentParser( - prog='run_and_save_images_Basler_color', description='Shows live view from Basler monochrome camera.' + prog='live_view_mono_Basler', description='Shows live view from Basler monochrome camera.' ) parser.add_argument( 'camera_index', @@ -21,24 +21,29 @@ def main(): help='Camera index (0-indexed in order of camera serial number) to run.', ) parser.add_argument('--calibrate', action='store_true', help='calibrate camera exposure before capture') - parser.add_argument('-e', metavar='exposure', type=float, default=None, help='Camera exposure value') + parser.add_argument('-e', metavar='exposure', type=int, default=None, help='Camera exposure value') + parser.add_argument('-g', metavar='gain', type=int, default=None, help='Camera gain value') args = parser.parse_args() # Connect to camera cam = ImageAcquisitionMono(args.camera_index, 'Mono12') # Calibrate exposure and set frame rate - cam.frame_rate = 10 if args.calibrate: cam.calibrate_exposure() if args.e is not None: cam.exposure_time = args.e - print('Exposure time:', cam.exposure_time) - print('Frame rate:', cam.frame_rate) - print('Gain:', cam.gain) - print('') + if args.g is not None: + print(args.g) + cam.gain = args.g + + print('Exposure time range: ', cam.cap.ExposureTimeRaw.Min, '-', cam.cap.ExposureTimeRaw.Max) + print('Gain range: ', cam.cap.GainRaw.Min, '-', cam.cap.GainRaw.Max) + + print('Exposure time set:', cam.exposure_time) + print('Gain set:', cam.gain) # Show live view image LiveView(cam, highlight_saturation=False) From caf1f610867e954bbadaa7c1e04b3d91a1181d37 Mon Sep 17 00:00:00 2001 From: Smith Date: Wed, 28 Aug 2024 14:10:16 -0600 Subject: [PATCH 099/105] Created run and save images basler mono example. --- .../run_and_save_images_Basler_mono.py | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 example/camera_io/run_and_save_images_Basler_mono.py diff --git a/example/camera_io/run_and_save_images_Basler_mono.py b/example/camera_io/run_and_save_images_Basler_mono.py new file mode 100644 index 000000000..c92e5dea1 --- /dev/null +++ b/example/camera_io/run_and_save_images_Basler_mono.py @@ -0,0 +1,52 @@ +"""Example program that captures images from a 12 bit monochrome Basler +camera and saves the images in TIFF format. +""" + +import argparse +import imageio.v3 as imageio + +from opencsp.common.lib.camera.ImageAcquisition_DCAM_mono import ImageAcquisition + + +def main(): + parser = argparse.ArgumentParser( + prog='run_and_save_images_Basler_mono', + description='Captures N frames from a Basler camera. Saves images as 16 bit integers in TIFF format with filenames of the form: xx.tiff', + ) + parser.add_argument( + 'camera_index', type=int, help='Camera index (0-indexed in order of camera serial number) to run.' + ) + parser.add_argument('num_images', type=int, help='Number of images to capture and save.') + parser.add_argument('--calibrate', action='store_true', help='Calibrate camera exposure before capture.') + parser.add_argument( + '-p', + '--prefix', + metavar='prefix', + default='', + type=str, + help='Image save prefix to be appended before the filename.', + ) + args = parser.parse_args() + + # Connect to camera + cam = ImageAcquisition(args.camera_index, 'Mono12') + + # Calibrate exposure and set frame rate + if args.calibrate: + cam.calibrate_exposure() + + print('Exposure time:', cam.exposure_time) + print('Gain:', cam.gain) + + # Capture and save frames + for idx in range(args.num_images): + frame = cam.get_frame() + # Save by packing 12 bit image into 16 bit image + imageio.imwrite(f'{args.prefix}{idx:02d}.tiff', frame * 2**4) + + # Close camera + cam.close() + + +if __name__ == '__main__': + main() From f4511fbdb03e4819a4474e7bfbad63d06f135b49 Mon Sep 17 00:00:00 2001 From: Smith Date: Wed, 28 Aug 2024 14:10:49 -0600 Subject: [PATCH 100/105] Edited timeout and added multiple of 25 exposure rule for certain basler models. --- .../common/lib/camera/ImageAcquisition_DCAM_mono.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/opencsp/common/lib/camera/ImageAcquisition_DCAM_mono.py b/opencsp/common/lib/camera/ImageAcquisition_DCAM_mono.py index 27e7fd24c..c05c10394 100644 --- a/opencsp/common/lib/camera/ImageAcquisition_DCAM_mono.py +++ b/opencsp/common/lib/camera/ImageAcquisition_DCAM_mono.py @@ -75,7 +75,13 @@ def __init__(self, instance: int = 0, pixel_format: str = 'Mono8'): # Set exposure values to be stepped over when performing exposure calibration shutter_min = self.cap.ExposureTimeRaw.Min shutter_max = self.cap.ExposureTimeRaw.Max - self._shutter_cal_values = np.linspace(shutter_min, shutter_max, 2**13).astype(int) + + self._shutter_cal_values: np.ndarray = np.linspace(shutter_min, shutter_max, 2**13).astype(int) + + # Apply model-specific processing for Basler mono cameras + if devices[instance].GetModelName() == 'acA3088-16gm': + # If type acA3088-16gm, make sure shutter values are multiple of 25 + self._shutter_cal_values = (self._shutter_cal_values.astype(float) / 25).astype(int) * 25 @classmethod def _check_pypylon_version(cls): @@ -104,7 +110,9 @@ def instance_matches(self, possible_matches: list[ImageAcquisitionAbstract]) -> def get_frame(self) -> np.ndarray: # Start frame capture self.cap.StartGrabbingMax(1) - grabResult = self.cap.RetrieveResult(5000, pylon.TimeoutHandling_ThrowException) + grabResult = self.cap.RetrieveResult( + int(self.cap.ExposureTimeRaw.Max / 1000 * 1.5), pylon.TimeoutHandling_ThrowException + ) # Access image data if grabResult.GrabSucceeded(): From dd06e97f85e6ce86537644073fff9bb6cb21b72c Mon Sep 17 00:00:00 2001 From: Smith Date: Wed, 28 Aug 2024 14:11:04 -0600 Subject: [PATCH 101/105] Added more logging to iamge acq Abstract --- opencsp/common/lib/camera/ImageAcquisitionAbstract.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/opencsp/common/lib/camera/ImageAcquisitionAbstract.py b/opencsp/common/lib/camera/ImageAcquisitionAbstract.py index 25d212043..e1ede1f03 100644 --- a/opencsp/common/lib/camera/ImageAcquisitionAbstract.py +++ b/opencsp/common/lib/camera/ImageAcquisitionAbstract.py @@ -152,12 +152,14 @@ def _check_saturated(im): # Checks that the minimum value is under-exposed self.exposure_time = exposure_values[0] + lt.debug(f'Trying minimum exposure: {exposure_values[0]}') im = self.get_frame() if _check_saturated(im): lt.error_and_raise(ValueError, 'Minimum exposure value is too high; image still saturated.') # Checks that the maximum value is over-exposed self.exposure_time = exposure_values[-1] + lt.debug(f'Trying maximum exposure: {exposure_values[-1]}') im = self.get_frame() if not _check_saturated(im): lt.error_and_raise(ValueError, 'Maximum exposure value is too low; image not saturated.') From 538f360ea9ab4b6ea82e5b063e6c5a8ebfd17e40 Mon Sep 17 00:00:00 2001 From: Smith Date: Wed, 28 Aug 2024 14:15:10 -0600 Subject: [PATCH 102/105] Updated docs to run and save images basler mnoo --- example/camera_io/run_and_save_images_Basler_mono.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/camera_io/run_and_save_images_Basler_mono.py b/example/camera_io/run_and_save_images_Basler_mono.py index c92e5dea1..f57bed73e 100644 --- a/example/camera_io/run_and_save_images_Basler_mono.py +++ b/example/camera_io/run_and_save_images_Basler_mono.py @@ -1,5 +1,5 @@ """Example program that captures images from a 12 bit monochrome Basler -camera and saves the images in TIFF format. +camera and saves the images in TIFF format. Camera is run at minimum gain. """ import argparse From e9eba53605f4fe711a6d65e020744fc9bf90c9d3 Mon Sep 17 00:00:00 2001 From: Smith Date: Wed, 28 Aug 2024 14:16:31 -0600 Subject: [PATCH 103/105] Removed test line from live view mono Basler --- example/camera_io/live_view_mono_Basler.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/example/camera_io/live_view_mono_Basler.py b/example/camera_io/live_view_mono_Basler.py index 891e19bc4..cec800bc9 100644 --- a/example/camera_io/live_view_mono_Basler.py +++ b/example/camera_io/live_view_mono_Basler.py @@ -28,17 +28,18 @@ def main(): # Connect to camera cam = ImageAcquisitionMono(args.camera_index, 'Mono12') - # Calibrate exposure and set frame rate - if args.calibrate: - cam.calibrate_exposure() - + # Set exposure if args.e is not None: cam.exposure_time = args.e + # Set gain if args.g is not None: - print(args.g) cam.gain = args.g + # Calibrate exposure and set frame rate + if args.calibrate: + cam.calibrate_exposure() + print('Exposure time range: ', cam.cap.ExposureTimeRaw.Min, '-', cam.cap.ExposureTimeRaw.Max) print('Gain range: ', cam.cap.GainRaw.Min, '-', cam.cap.GainRaw.Max) From 9751fac7452414e71bcc9e078d72f14b00bc6003 Mon Sep 17 00:00:00 2001 From: Smith Date: Wed, 28 Aug 2024 14:17:15 -0600 Subject: [PATCH 104/105] Updated docs in live view mono basler --- example/camera_io/live_view_mono_Basler.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/example/camera_io/live_view_mono_Basler.py b/example/camera_io/live_view_mono_Basler.py index cec800bc9..00ddb9343 100644 --- a/example/camera_io/live_view_mono_Basler.py +++ b/example/camera_io/live_view_mono_Basler.py @@ -1,7 +1,4 @@ -""" -Example script that connects to and shows a live view from an -8 bit Basler monochrome camera. - +"""Example script that connects to and shows a live view from a 12 bit Basler monochrome camera. """ import argparse From e6455e92fd76f45eddf9948602f0c3c7d64dff47 Mon Sep 17 00:00:00 2001 From: Braden Date: Wed, 9 Oct 2024 16:27:56 -0600 Subject: [PATCH 105/105] Added docs to IA DCAM mono --- opencsp/common/lib/camera/ImageAcquisition_DCAM_mono.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/opencsp/common/lib/camera/ImageAcquisition_DCAM_mono.py b/opencsp/common/lib/camera/ImageAcquisition_DCAM_mono.py index c05c10394..36a33ec6c 100644 --- a/opencsp/common/lib/camera/ImageAcquisition_DCAM_mono.py +++ b/opencsp/common/lib/camera/ImageAcquisition_DCAM_mono.py @@ -110,9 +110,10 @@ def instance_matches(self, possible_matches: list[ImageAcquisitionAbstract]) -> def get_frame(self) -> np.ndarray: # Start frame capture self.cap.StartGrabbingMax(1) - grabResult = self.cap.RetrieveResult( - int(self.cap.ExposureTimeRaw.Max / 1000 * 1.5), pylon.TimeoutHandling_ThrowException - ) + exposure_time_ms = self.cap.ExposureTimeRaw.Max / 1000 # exposure time, ms + # Grab the frame + # After 1.5 times the expected image acquisition time, throw a pylon.TimeoutHandling_ThrowException + grabResult = self.cap.RetrieveResult(int(exposure_time_ms * 1.5), pylon.TimeoutHandling_ThrowException) # Access image data if grabResult.GrabSucceeded():

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ï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 M|MueFeg3=u8_VB4@&Et; literal 0 HcmV?d00001 From ef2413c64b506ec31457c89c649c12ac4f06f454 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 13:19:41 -0600 Subject: [PATCH 070/105] Reduced size of single facet fixed test data --- .../data_expected/calculation_facet.h5 | Bin 6289688 -> 82944 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/opencsp/test/data/sofast_fixed/data_expected/calculation_facet.h5 b/opencsp/test/data/sofast_fixed/data_expected/calculation_facet.h5 index 94b5f651c50a8c8c710d65a9f8fd3f05bff5cda5..2b1f79cdcb5329a1f85bccdeacb4f3e6bc372ef5 100644 GIT binary patch delta 2250 zcma)7PfR0K7=JT`Wv0MVm1U=e(gz_+>2BP@CZ?{5l!6G|#U0#|pa(mpme6d0+7_&v zXzE2tHUY*jSZYg593cbNBmGr#xy z{=Dz|X7}G`Vrip!+wVXVf`0i!@xg1x-nzJ>cH%w>BYR=PXc6TQRgeZBH^%`x6d60{ zt1yf?2IY;5R8tM(nE=|P1SMIzge7*2ZE7NySkBKR@^{7)ndDj~QAn?@AlP(!KywGd zbVni3(&el)GrR=RmP>N6^AzqELamM5i|Gv98S%C)rSpY&VJVl&FCqALq~`*a>gu)qd(oa2r+}Ie0nHfjdt%!Trz>cs6Ez48sjlS2!k% z;O?6m#tc-8(MEBQMRdJYmHRjoJo?D1K4uB#M@}XlvzW6z+#=l%6}neFbmx@_&wb^C zr(3dE!n*Mjs4ZBQycANli!i(?K~<63T;237c|svD08@c+cqPydhePu+_hwr+J|$)C zIccsjCjStRsm^IhCogHYhhL4_Ye~*|hBj@j$h4r3d@D1pY-#liqbbD0r-C4)j!=iG99#P2H0xcqiLW7K*Z4;@*^h%mcp29mhir2H)<)7T{z5k`@S>GUP zHz+r)Zg|IX^Bnvdae5vyAa|jD&@g%hyQV8M%!X=nm13OBfmO6~uM2y3f&m=nl+Pb9 zJg2P8z(28Dy7`;U_IQ@%AV%062NA*errmDTR)35KgLb+Dc#bo=O?HMe);Qq3$+&Ks k-(kIP;R(C8656>Nz**@Q4`V5OI{*Lx literal 6289688 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 zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ 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%0D-bVeGeEwASzHU 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 From 7900855abc8a685ab352f986d0cdb937f1f722af Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 13:20:11 -0600 Subject: [PATCH 071/105] Added facet and ensemble definitions for SFi --- .../Ensemble_split_NSTTF_facet.json | 18 ++++++++++++++++++ .../data/sofast_common/Facet_split_NSTTF.json | 10 ++++++++++ 2 files changed, 28 insertions(+) create mode 100644 opencsp/test/data/sofast_common/Ensemble_split_NSTTF_facet.json create mode 100644 opencsp/test/data/sofast_common/Facet_split_NSTTF.json diff --git a/opencsp/test/data/sofast_common/Ensemble_split_NSTTF_facet.json b/opencsp/test/data/sofast_common/Ensemble_split_NSTTF_facet.json new file mode 100644 index 000000000..af19eb8c2 --- /dev/null +++ b/opencsp/test/data/sofast_common/Ensemble_split_NSTTF_facet.json @@ -0,0 +1,18 @@ +{ + "v_facet_locations": { + "x": [-0.320, 0.320], + "y": [ 0.000, 0.000], + "z": [ 0.000, 0.000] + }, + "r_facet_ensemble": { + "0": [0.0, 0.0, 0.0], + "1": [0.0, 0.0, 0.0] + }, + "ensemble_perimeter": { + "facet_indices": [1, 0, 0, 1], + "corner_indices": [0, 1, 2, 3] + }, + "v_centroid_ensemble": { + "x": [0.0], "y": [0.0], "z": [0.0] + } +} \ No newline at end of file diff --git a/opencsp/test/data/sofast_common/Facet_split_NSTTF.json b/opencsp/test/data/sofast_common/Facet_split_NSTTF.json new file mode 100644 index 000000000..fdf232e9e --- /dev/null +++ b/opencsp/test/data/sofast_common/Facet_split_NSTTF.json @@ -0,0 +1,10 @@ +{ + "v_facet_corners": { + "x": [ 0.299, -0.299, -0.299, 0.299], + "y": [-0.610, -0.610, 0.610, 0.610], + "z": [ 0.0, 0.0, 0.0, 0.0 ] + }, + "v_centroid_facet": { + "x": [0.0], "y": [0.0], "z": [0.0] + } +} \ No newline at end of file From b37a01f00a87289bf1cd230300635e8eaf6ba47f Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 13:20:40 -0600 Subject: [PATCH 072/105] Fixed _000 prefix in SofastFixed HDF5 save output --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index ce93323df..feba07bca 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -478,8 +478,8 @@ def save_to_hdf(self, file: str, prefix: str = ''): # Sofast input parameters self.params.save_to_hdf(file, f'{prefix:s}DataSofastInput/') for idx, (data_facet, data_surface) in enumerate(zip(self.data_facet, self.data_surface)): - data_surface.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:3d}/') - data_facet.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:3d}/') + data_surface.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:03d}/') + data_facet.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:03d}/') # General self.data_error.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') @@ -489,13 +489,13 @@ def save_to_hdf(self, file: str, prefix: str = ''): # Calculations for idx_facet in range(self.num_facets): self.data_slope_solver[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:3d}/' + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' ) self.data_geometry_facet[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:3d}/' + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' ) self.data_image_processing_facet[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:3d}/' + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' ) lt.info(f'SofastFixed data saved to: {file:s} with prefix: {prefix:s}') From 3553e1b701c2e566d208cb8eb9b757234b1441ae Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 13:21:19 -0600 Subject: [PATCH 073/105] Updated testProcessSofastFixed to include ensemble testing. --- .../sofast/test/test_ProcessSofastFixed.py | 130 ++++++++++++++---- 1 file changed, 103 insertions(+), 27 deletions(-) diff --git a/opencsp/app/sofast/test/test_ProcessSofastFixed.py b/opencsp/app/sofast/test/test_ProcessSofastFixed.py index 6b0988735..4ab582d9b 100644 --- a/opencsp/app/sofast/test/test_ProcessSofastFixed.py +++ b/opencsp/app/sofast/test/test_ProcessSofastFixed.py @@ -7,6 +7,7 @@ import matplotlib.pyplot as plt import numpy as np +from opencsp.app.sofast.lib.DefinitionEnsemble import DefinitionEnsemble from opencsp.app.sofast.lib.DefinitionFacet import DefinitionFacet from opencsp.app.sofast.lib.DotLocationsFixedPattern import DotLocationsFixedPattern from opencsp.app.sofast.lib.MeasurementSofastFixed import MeasurementSofastFixed @@ -15,6 +16,7 @@ from opencsp.app.sofast.lib.SpatialOrientation import SpatialOrientation from opencsp.common.lib.camera.Camera import Camera from opencsp.common.lib.deflectometry.Surface2DParabolic import Surface2DParabolic +from opencsp.common.lib.geometry.Vxy import Vxy from opencsp.common.lib.opencsp_path.opencsp_root_path import opencsp_code_dir import opencsp.common.lib.render.figure_management as fm import opencsp.common.lib.render_control.RenderControlAxis as rca @@ -28,25 +30,71 @@ class TestProcessSofastFixed(unittest.TestCase): @classmethod def setUpClass(cls): """Loads data and runs ProcessSofastFixed""" - dir_sofast_fixed = join(opencsp_code_dir(), 'test/data/sofast_fixed') - dir_sofast_common = join(opencsp_code_dir(), 'test/data/sofast_common') - - # Definitions - file_camera = join(dir_sofast_common, "camera_sofast.h5") - file_facet = join(dir_sofast_common, "Facet_NSTTF.json") - file_ori = join(dir_sofast_common, 'spatial_orientation.h5') - file_dot_locs = join(dir_sofast_fixed, 'data_measurement/fixed_pattern_dot_locations.h5') - file_meas = join(dir_sofast_fixed, 'data_measurement/measurement_facet.h5') - file_exp = join(dir_sofast_fixed, 'data_expected/calculation_facet.h5') - - cls.save_dir = join(opencsp_code_dir(), 'app/sofast/test/data/output/process_sofast_fixed_single_facet') + cls.dir_sofast_fixed = join(opencsp_code_dir(), 'test/data/sofast_fixed') + cls.dir_sofast_common = join(opencsp_code_dir(), 'test/data/sofast_common') + cls.save_dir = join(opencsp_code_dir(), 'app/sofast/test/data/output/process_sofast_fixed') ft.create_directories_if_necessary(cls.save_dir) lt.logger(join(cls.save_dir, 'sofast_fixed_process_log.txt'), lt.log.ERROR) - surface = Surface2DParabolic(initial_focal_lengths_xy=(150.0, 150), robust_least_squares=False, downsample=1) + cls.sofast_single_facet: ProcessSofastFixed = None + cls.sofast_facet_ensemble: ProcessSofastFixed = None + cls.exp_slopes_xy_single_facet: np.ndarray = None + cls.exp_slopes_xy_facet_ensemble: list[np.ndarray] = None + + cls._process_facet_ensemble(cls) + cls._process_single_facet(cls) + + def _process_facet_ensemble(self): + # Definitions + file_camera = join(self.dir_sofast_common, "camera_sofast.h5") + file_facet = join(self.dir_sofast_common, "Facet_split_NSTTF.json") + file_ensemble = join(self.dir_sofast_common, 'Ensemble_split_NSTTF_facet.json') + file_ori = join(self.dir_sofast_common, 'spatial_orientation.h5') + file_dot_locs = join(self.dir_sofast_fixed, 'data_measurement/fixed_pattern_dot_locations.h5') + file_meas = join(self.dir_sofast_fixed, 'data_measurement/measurement_facet_ensemble.h5') + file_exp = join(self.dir_sofast_fixed, 'data_expected/calculation_facet_ensemble.h5') + + # Load data + camera = Camera.load_from_hdf(file_camera) + ensemble_data = DefinitionEnsemble.load_from_json(file_ensemble) + facet_data = [DefinitionFacet.load_from_json(file_facet)] * ensemble_data.num_facets + dot_locs = DotLocationsFixedPattern.load_from_hdf(file_dot_locs) + orientation = SpatialOrientation.load_from_hdf(file_ori) + measurement = MeasurementSofastFixed.load_from_hdf(file_meas) + surfaces = [ + Surface2DParabolic(initial_focal_lengths_xy=(150.0, 150), robust_least_squares=False, downsample=1) + ] * ensemble_data.num_facets + + # Load expected data + self.exp_slopes_xy_facet_ensemble = [] + for idx_facet in range(ensemble_data.num_facets): + datasets = [f'DataSofastCalculation/facet/facet_{idx_facet:03d}/SlopeSolverData/slopes_facet_xy'] + data = h5.load_hdf5_datasets(datasets, file_exp) + self.exp_slopes_xy_facet_ensemble.append(data['slopes_facet_xy']) + + # Instantiate class + params = ParamsSofastFixed.load_from_hdf(file_exp, 'DataSofastInput/') + self.sofast_facet_ensemble = ProcessSofastFixed(orientation, camera, dot_locs) + self.sofast_facet_ensemble.params = params + self.sofast_facet_ensemble.load_measurement_data(measurement) + + # Process + pts_known = Vxy(((853, 1031), (680, 683))) + xys_known = ((0, 0), (15, 0)) + self.sofast_facet_ensemble.process_multi_facet_optic(facet_data, surfaces, ensemble_data, pts_known, xys_known) + + def _process_single_facet(self): + # Definitions + file_camera = join(self.dir_sofast_common, "camera_sofast.h5") + file_facet = join(self.dir_sofast_common, "Facet_NSTTF.json") + file_ori = join(self.dir_sofast_common, 'spatial_orientation.h5') + file_dot_locs = join(self.dir_sofast_fixed, 'data_measurement/fixed_pattern_dot_locations.h5') + file_meas = join(self.dir_sofast_fixed, 'data_measurement/measurement_facet.h5') + file_exp = join(self.dir_sofast_fixed, 'data_expected/calculation_facet.h5') # Load data + surface = Surface2DParabolic(initial_focal_lengths_xy=(150.0, 150), robust_least_squares=False, downsample=1) camera = Camera.load_from_hdf(file_camera) facet_data = DefinitionFacet.load_from_json(file_facet) dot_locs = DotLocationsFixedPattern.load_from_hdf(file_dot_locs) @@ -56,37 +104,65 @@ def setUpClass(cls): # Load expected data datasets = ['DataSofastCalculation/facet/facet_000/SlopeSolverData/slopes_facet_xy'] data = h5.load_hdf5_datasets(datasets, file_exp) - cls.exp_slopes_xy = data['slopes_facet_xy'] + self.exp_slopes_xy_single_facet = data['slopes_facet_xy'] # Instantiate class params = ParamsSofastFixed.load_from_hdf(file_exp, 'DataSofastInput/') - cls.process_sofast_fixed = ProcessSofastFixed(orientation, camera, dot_locs) - cls.process_sofast_fixed.params = params - cls.process_sofast_fixed.load_measurement_data(measurement) + self.sofast_single_facet = ProcessSofastFixed(orientation, camera, dot_locs) + self.sofast_single_facet.params = params + self.sofast_single_facet.load_measurement_data(measurement) # Process pt_known = measurement.origin xy_known = (0, 0) - cls.process_sofast_fixed.process_single_facet_optic(facet_data, surface, pt_known, xy_known) + self.sofast_single_facet.process_single_facet_optic(facet_data, surface, pt_known, xy_known) - def test_save_as_hdf(self): + def test_save_facet_ensemble_as_hdf(self): """Tests saving to HDF file""" - self.process_sofast_fixed.save_to_hdf(join(self.save_dir, 'data_calculation_sofast_fixed.h5')) + self.sofast_facet_ensemble.save_to_hdf(join(self.save_dir, 'data_calculation_facet_ensemble.h5')) - def test_save_figure(self): - """Tests generating and saving a figure""" + def test_save_single_facet_as_hdf(self): + """Tests saving to HDF file""" + self.sofast_single_facet.save_to_hdf(join(self.save_dir, 'data_calculation_single_facet.h5')) + + def test_save_facet_ensemble_slope_figure(self): + """Tests genreating and saving a figure of a facet ensemble""" figure_control = rcfg.RenderControlFigure(tile_array=(1, 1), tile_square=True) axis_control_m = rca.meters() fig_mng = fm.setup_figure(figure_control, axis_control_m, title='') - mirror = self.process_sofast_fixed.get_mirror('bilinear').mirror - mirror.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_mng.axis) - fig_mng.save(self.save_dir, 'sofast_fixed_orthorectified_slope_magnitude', 'png') + ensemble = self.sofast_facet_ensemble.get_mirror('bilinear') + ensemble.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_mng.axis) + fig_mng.save(self.save_dir, 'slope_magnitude_facet_ensemble', 'png') + + def test_save_single_facet_slope_figure(self): + """Tests generating and saving a figure of a single facet""" + figure_control = rcfg.RenderControlFigure(tile_array=(1, 1), tile_square=True) + axis_control_m = rca.meters() - def test_slopes_xy(self): + fig_mng = fm.setup_figure(figure_control, axis_control_m, title='') + facet = self.sofast_single_facet.get_mirror('bilinear') + facet.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_mng.axis) + fig_mng.save(self.save_dir, 'slope_magnitude_single_facet', 'png') + + def test_slopes_xy_facet_ensemble(self): + """Tests slope data""" + for idx_facet in range(self.sofast_facet_ensemble.num_facets): + with self.subTest(i=idx_facet): + np.testing.assert_allclose( + self.sofast_facet_ensemble.data_slope_solver[idx_facet].slopes_facet_xy, + self.exp_slopes_xy_facet_ensemble[idx_facet], + rtol=0, + atol=1e-6, + ) + + def test_slopes_xy_single_facet(self): """Tests slope data""" np.testing.assert_allclose( - self.process_sofast_fixed.data_slope_solver[0].slopes_facet_xy, self.exp_slopes_xy, rtol=0, atol=1e-6 + self.sofast_single_facet.data_slope_solver[0].slopes_facet_xy, + self.exp_slopes_xy_single_facet, + rtol=0, + atol=1e-6, ) def tearDown(self) -> None: From 2a0d0eed3ebb22a2b4f569b3592f0d41b1addfd1 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 13:33:49 -0600 Subject: [PATCH 074/105] Unified PSFr and PSFi data container names --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 114 +++++++++--------- opencsp/app/sofast/lib/ProcessSofastFringe.py | 34 +++--- .../sofast/test/test_ProcessSofastFixed.py | 4 +- 3 files changed, 77 insertions(+), 75 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index feba07bca..36d530774 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -54,8 +54,6 @@ def __init__( self.camera = camera self.fixed_pattern_dot_locs = fixed_pattern_dot_locs self.params = ParamsSofastFixed() - self.optic_type: Literal['single_facet', 'multi_facet', 'undefined'] = None - self.num_facets: int = None # Measurement data self.measurement: MeasurementSofastFixed @@ -70,20 +68,24 @@ def __init__( self.blob_detector.filterByConvexity = False self.blob_detector.filterByInertia = False - # Calculations - self.data_facet: list[DefinitionFacet] - self.data_ensemble: DefinitionEnsemble - self.data_surface: list[Surface2DAbstract] - self.data_ensemble: DefinitionEnsemble - self.data_slope_solver: list[SlopeSolverData] + # Instantiate data containers + self.num_facets: int = None + self.optic_type: Literal['undefined', 'single', 'multi'] = None + self.data_facet_def: list[DefinitionFacet] + self.data_ensemble_def: DefinitionEnsemble + + self.data_surfaces: list[Surface2DAbstract] + self.data_geometry_general: cdc.CalculationDataGeometryGeneral self.data_image_proccessing_general: cdc.CalculationImageProcessingGeneral self.data_geometry_facet: list[cdc.CalculationDataGeometryFacet] self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] self.data_error: cdc.CalculationError + + self.data_calculation_facet: list[SlopeSolverData] self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] - self.blob_index: BlobIndex self.slope_solver: list[SlopeSolver] + self.blob_index: BlobIndex def find_blobs(self, pts_known: Vxy, xys_known: tuple[tuple[int, int]]) -> BlobIndex: """Finds blobs in image @@ -120,7 +122,7 @@ def _calculate_mask(self) -> ndarray: ] mask = ip.calc_mask_raw(images, *params) - if (self.optic_type == 'multi_facet') and self.params.mask.keep_largest_area: + if (self.optic_type == 'multi') and self.params.mask.keep_largest_area: lt.warn( '"keep_largest_area" mask processing option cannot be used ' 'for multifacet ensembles. This will be turned off.' @@ -150,7 +152,7 @@ def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: n self.data_image_processing_facet, # list self.data_error, ) = pr.process_singlefacet_geometry( - self.data_facet[0], + self.data_facet_def[0], mask_raw, self.measurement.v_measure_point_facet, self.measurement.dist_optic_screen, @@ -186,7 +188,7 @@ def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: n u_pixel_pointing_facet = u_pixel_pointing_cam.rotate(rot_cam_optic).as_Vxyz() # Update debug data - self.params.debug_slope_solver.optic_data = self.data_facet[0] + self.params.debug_slope_solver.optic_data = self.data_facet_def[0] # Construct surface kwargs return { @@ -195,10 +197,10 @@ def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: n 'u_measure_pixel_pointing_optic': u_cam_measure_point_facet, 'v_screen_points_facet': v_screen_points_facet, 'v_optic_screen_optic': v_optic_screen_optic, - 'v_align_point_optic': self.data_facet[0].v_facet_centroid, + 'v_align_point_optic': self.data_facet_def[0].v_facet_centroid, 'dist_optic_screen': self.measurement.dist_optic_screen, 'debug': self.params.debug_slope_solver, - 'surface': self.data_surface[0], + 'surface': self.data_surfaces[0], } def _process_optic_multifacet_geometry(self, blob_index: BlobIndex, mask_raw: np.ndarray) -> list[dict]: @@ -210,8 +212,8 @@ def _process_optic_multifacet_geometry(self, blob_index: BlobIndex, mask_raw: np self.data_image_processing_facet, # list self.data_error, ) = pr.process_multifacet_geometry( - self.data_facet, - self.data_ensemble, + self.data_facet_def, + self.data_ensemble_def, mask_raw, self.measurement.v_measure_point_facet, self.orientation, @@ -230,12 +232,12 @@ def _process_optic_multifacet_geometry(self, blob_index: BlobIndex, mask_raw: np pts_image, pts_index_xy = blob_index.get_data_in_region(loop) # Define optic orientation w.r.t. camera - rot_facet_ensemble = self.data_ensemble.r_facet_ensemble[idx_facet] + rot_facet_ensemble = self.data_ensemble_def.r_facet_ensemble[idx_facet] rot_ensemble_cam = self.data_geometry_general.r_optic_cam_refine_2 rot_facet_cam = rot_ensemble_cam * rot_facet_ensemble v_cam_ensemble_cam = self.data_geometry_general.v_cam_optic_cam_refine_3 - v_ensemble_facet_ensemble = self.data_ensemble.v_facet_locations[idx_facet] + v_ensemble_facet_ensemble = self.data_ensemble_def.v_facet_locations[idx_facet] v_ensemble_facet_cam = v_ensemble_facet_ensemble.rotate(rot_ensemble_cam) v_cam_facet_cam = v_cam_ensemble_cam + v_ensemble_facet_cam @@ -259,7 +261,7 @@ def _process_optic_multifacet_geometry(self, blob_index: BlobIndex, mask_raw: np u_pixel_pointing_facet = u_pixel_pointing_cam.rotate(rot_cam_facet).as_Vxyz() # Update debug data - self.params.debug_slope_solver.optic_data = self.data_facet[idx_facet] + self.params.debug_slope_solver.optic_data = self.data_facet_def[idx_facet] # Construct list of surface kwargs kwargs_list.append( @@ -272,19 +274,19 @@ def _process_optic_multifacet_geometry(self, blob_index: BlobIndex, mask_raw: np 'v_align_point_optic': self.data_geometry_facet[idx_facet].v_align_point_facet, 'dist_optic_screen': self.data_geometry_facet[idx_facet].measure_point_screen_distance, 'debug': self.params.debug_slope_solver, - 'surface': self.data_surface[idx_facet], + 'surface': self.data_surfaces[idx_facet], } ) return kwargs_list def process_single_facet_optic( - self, data_facet: DefinitionFacet, surface: Surface2DAbstract, pt_known: Vxy, xy_known: tuple[int, int] + self, data_facet_def: DefinitionFacet, surface: Surface2DAbstract, pt_known: Vxy, xy_known: tuple[int, int] ) -> None: - """Processes single facet optic. Saves data to self.data_slope_solver + """Processes single facet optic. Saves data to self.data_calculation_facet Parameters ---------- - data_facet : DefinitionFacet objec + data_facet_def : DefinitionFacet objec Facet definition surface : Surface2DAbstract Surface 2d class @@ -300,10 +302,10 @@ def process_single_facet_optic( ValueError, f'Only 1 pt_known can be given for single facet processing but {len(pt_known):d} were given' ) - self.optic_type = 'single_facet' + self.optic_type = 'single' self.num_facets = 1 - self.data_facet = [data_facet.copy()] - self.data_surface = [surface] + self.data_facet_def = [data_facet_def.copy()] + self.data_surfaces = [surface] # Find blobs self.blob_index = self.find_blobs(pt_known, (xy_known,)) @@ -319,23 +321,23 @@ def process_single_facet_optic( slope_solver.fit_surface() slope_solver.solve_slopes() self.slope_solver = [slope_solver] - self.data_slope_solver = [slope_solver.get_data()] + self.data_calculation_facet = [slope_solver.get_data()] def process_multi_facet_optic( self, - data_facet: list[DefinitionFacet], + data_facet_def: list[DefinitionFacet], surfaces: list[Surface2DAbstract], - data_ensemble: DefinitionEnsemble, + data_ensemble_def: DefinitionEnsemble, pts_known: Vxy, xys_known: tuple[tuple[int, int]], ) -> None: - """Processes multi facet optic. Saves data to self.data_slope_solver + """Processes multi facet optic. Saves data to self.data_calculation_facet Parameters ---------- - data_facet : list[DefinitionFacet] + data_facet_def : list[DefinitionFacet] List of facet data objects. - data_ensemble : DefinitionEnsemble + data_ensemble_def : DefinitionEnsemble Ensemble data object. surfaces : list[Surface2dAbstract] List of surface type definitions @@ -348,19 +350,19 @@ def process_multi_facet_optic( """ # Check inputs - if len(data_facet) != len(surfaces) != len(pts_known) != len(xys_known): + if len(data_facet_def) != len(surfaces) != len(pts_known) != len(xys_known): lt.error_and_raise( ValueError, - 'Length of data_facet does not equal length of data_surface' - + f'data_facet={len(data_facet)}, surface_data={len(surfaces)}, ' + 'Length of data_facet_def does not equal length of data_surfaces' + + f'data_facet_def={len(data_facet_def)}, surface_data={len(surfaces)}, ' + f'pts_known={len(pts_known)}, xys_known={len(xys_known)}', ) - self.optic_type = 'multi_facet' - self.num_facets = len(data_facet) - self.data_facet = [d.copy() for d in data_facet] - self.data_ensemble = data_ensemble.copy() - self.data_surface = surfaces + self.optic_type = 'multi' + self.num_facets = len(data_facet_def) + self.data_facet_def = [d.copy() for d in data_facet_def] + self.data_ensemble_def = data_ensemble_def.copy() + self.data_surfaces = surfaces # Find blobs self.blob_index = self.find_blobs(pts_known, xys_known) @@ -373,13 +375,13 @@ def process_multi_facet_optic( # Calculate slope self.slope_solver = [] - self.data_slope_solver = [] + self.data_calculation_facet = [] for kwargs in kwargs_list: slope_solver = SlopeSolver(**kwargs) slope_solver.fit_surface() slope_solver.solve_slopes() self.slope_solver.append(slope_solver) - self.data_slope_solver.append(slope_solver.get_data()) + self.data_calculation_facet.append(slope_solver.get_data()) # Calculate facet pointing self._calculate_facet_pointing() @@ -395,7 +397,7 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera facet pointing directions. If, int, that facet index is assumed to have perfect pointing. """ - if self.data_slope_solver is None: + if self.data_calculation_facet is None: lt.error_and_raise(ValueError, 'Slopes must be solved first by running "solve_slopes".') if (reference != 'average') and not isinstance(reference, int): lt.error_and_raise(ValueError, 'Given reference must be int or "average".') @@ -412,9 +414,9 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera for idx in range(self.num_facets): # Get transformation from user-input and slope solving trans_1 = TransformXYZ.from_R_V( - self.data_ensemble.r_facet_ensemble[idx], self.data_ensemble.v_facet_locations[idx] + self.data_ensemble_def.r_facet_ensemble[idx], self.data_ensemble_def.v_facet_locations[idx] ) - trans_2 = self.data_slope_solver[idx].trans_alignment + trans_2 = self.data_calculation_facet[idx].trans_alignment # Calculate inverse of slope solving transform trans_2 = TransformXYZ.from_V(-trans_2.V) * TransformXYZ.from_R(trans_2.R.inv()) # Create local to global transformation @@ -439,7 +441,7 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera # Calculate global slope and surface points for idx in range(self.num_facets): # Get slope data - slopes = self.data_slope_solver[idx].slopes_facet_xy # facet coordinats + slopes = self.data_calculation_facet[idx].slopes_facet_xy # facet coordinats # Calculate surface normals in local (facet) coordinates u_surf_norms = np.ones((3, slopes.shape[1])) @@ -453,7 +455,7 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera # Convert surface points to global (ensemble) coordinates v_surf_points_ensemble = trans_facet_ensemble_list[idx].apply( - self.data_slope_solver[idx].v_surf_points_facet + self.data_calculation_facet[idx].v_surf_points_facet ) # Calculate pointing vectors in ensemble coordinates @@ -477,9 +479,9 @@ def save_to_hdf(self, file: str, prefix: str = ''): """ # Sofast input parameters self.params.save_to_hdf(file, f'{prefix:s}DataSofastInput/') - for idx, (data_facet, data_surface) in enumerate(zip(self.data_facet, self.data_surface)): - data_surface.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:03d}/') - data_facet.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:03d}/') + for idx, (data_facet_def, data_surfaces) in enumerate(zip(self.data_facet_def, self.data_surfaces)): + data_surfaces.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:03d}/') + data_facet_def.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:03d}/') # General self.data_error.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') @@ -488,7 +490,7 @@ def save_to_hdf(self, file: str, prefix: str = ''): # Calculations for idx_facet in range(self.num_facets): - self.data_slope_solver[idx_facet].save_to_hdf( + self.data_calculation_facet[idx_facet].save_to_hdf( file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' ) self.data_geometry_facet[idx_facet].save_to_hdf( @@ -508,25 +510,25 @@ def get_mirror( trans_list = [] for idx_facet in range(self.num_facets): # Get mirror surface points - v_surf_pts = self.data_slope_solver[idx_facet].v_surf_points_facet + v_surf_pts = self.data_calculation_facet[idx_facet].v_surf_points_facet # Get point normal vectors v_normals_data = np.ones((3, len(v_surf_pts))) - v_normals_data[:2, :] = self.data_slope_solver[idx_facet].slopes_facet_xy + v_normals_data[:2, :] = self.data_calculation_facet[idx_facet].slopes_facet_xy v_normals_data[:2, :] *= -1 v_normals = Uxyz(v_normals_data) # Get optic shape - shape = RegionXY.from_vertices(self.data_facet[idx_facet].v_facet_corners.projXY()) + shape = RegionXY.from_vertices(self.data_facet_def[idx_facet].v_facet_corners.projXY()) # Create mirror mirror = MirrorPoint(v_surf_pts, v_normals, shape, interpolation_type) # Create facet facets.append(Facet(mirror)) # Get facet pointing if multi-facet - if self.optic_type == 'multi_facet': + if self.optic_type == 'multi': trans: TransformXYZ = self.data_calculation_ensemble[idx_facet].trans_facet_ensemble trans_list.append(trans) # Return either ensemble or facet - if self.optic_type == 'multi_facet': + if self.optic_type == 'multi': ensemble = FacetEnsemble(facets) ensemble.set_facet_transform_list(trans_list) return ensemble diff --git a/opencsp/app/sofast/lib/ProcessSofastFringe.py b/opencsp/app/sofast/lib/ProcessSofastFringe.py index a8784752e..8399fb2c4 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFringe.py +++ b/opencsp/app/sofast/lib/ProcessSofastFringe.py @@ -63,8 +63,8 @@ class ProcessSofastFringe(HDF5_SaveAbstract): - data_error - errors between optic/sceario definitions and internal calculations - data_image_processing_general - general optic image processing calculations - data_image_processing_facet - facet specific image processing calculations - - data_characterization_facet - facet specific slope calculations in facet reference frame - - data_characterization_ensemble - facet specific slope/pointing calculations in ensemble reference frame + - data_calculation_facet - facet specific slope calculations in facet reference frame + - data_calculation_ensemble - facet specific slope/pointing calculations in ensemble reference frame External Data Storage --------------------- @@ -198,8 +198,8 @@ def __init__( self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] = None self.data_error: cdc.CalculationError = None - self.data_characterization_facet: list[SlopeSolverData] = None - self.data_characterization_ensemble: list[cdc.CalculationFacetEnsemble] = None + self.data_calculation_facet: list[SlopeSolverData] = None + self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] = None def help(self) -> None: """Prints Sofast doc string""" @@ -514,7 +514,7 @@ def _solve_slopes(self, surfaces: list[Surface2DAbstract]) -> None: lt.error_and_raise(ValueError, 'Not all facets geometrically processed; cannot solve slopes.') # Loop through all input facets and solve slopes - self.data_characterization_facet = [] + self.data_calculation_facet = [] for facet_idx in range(self.num_facets): # Check debug status if self.params.debug_slope_solver.debug_active: @@ -543,7 +543,7 @@ def _solve_slopes(self, surfaces: list[Surface2DAbstract]) -> None: slope_solver.solve_slopes() # Save slope data - self.data_characterization_facet.append(slope_solver.get_data()) + self.data_calculation_facet.append(slope_solver.get_data()) # Save input surface parameters data self.data_surfaces = surfaces @@ -559,7 +559,7 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera facet pointing directions. If, int, that facet index is assumed to have perfect pointing. """ - if self.data_characterization_facet is None: + if self.data_calculation_facet is None: lt.error_and_raise(ValueError, 'Slopes must be solved first by running "solve_slopes".') if reference != 'average' and not isinstance(reference, int): lt.error_and_raise(ValueError, 'Given reference must be int or "average".') @@ -569,7 +569,7 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera ) # Instantiate data list - self.data_characterization_ensemble = [] + self.data_calculation_ensemble = [] trans_facet_ensemble_list = [] v_pointing_matrix = np.zeros((3, self.num_facets)) @@ -578,7 +578,7 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera trans_1 = TransformXYZ.from_R_V( self.data_ensemble_def.r_facet_ensemble[idx], self.data_ensemble_def.v_facet_locations[idx] ) - trans_2 = self.data_characterization_facet[idx].trans_alignment + trans_2 = self.data_calculation_facet[idx].trans_alignment # Calculate inverse of slope solving transform trans_2 = TransformXYZ.from_V(-trans_2.V) * TransformXYZ.from_R(trans_2.R.inv()) # Create local to global transformation @@ -603,7 +603,7 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera # Calculate global slope and surface points for idx in range(self.num_facets): # Get slope data - slopes = self.data_characterization_facet[idx].slopes_facet_xy # facet coordinats + slopes = self.data_calculation_facet[idx].slopes_facet_xy # facet coordinats # Calculate surface normals in local (facet) coordinates u_surf_norms = np.ones((3, slopes.shape[1])) @@ -617,7 +617,7 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera # Convert surface points to global (ensemble) coordinates v_surf_points_ensemble = trans_facet_ensemble_list[idx].apply( - self.data_characterization_facet[idx].v_surf_points_facet + self.data_calculation_facet[idx].v_surf_points_facet ) # Calculate pointing vectors in ensemble coordinates @@ -626,7 +626,7 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera data = cdc.CalculationFacetEnsemble( trans_facet_ensemble_list[idx], slopes_ensemble_xy, v_surf_points_ensemble, v_facet_pointing_ensemble ) - self.data_characterization_ensemble.append(data) + self.data_calculation_ensemble.append(data) def get_optic( self, interp_type: Literal['bilinear', 'clough_tocher', 'nearest'] = 'nearest' @@ -648,7 +648,7 @@ def get_optic( """ facets = [] trans_list = [] - for idx_mirror, data in enumerate(self.data_characterization_facet): + for idx_mirror, data in enumerate(self.data_calculation_facet): # Get surface points pts: Vxyz = data.v_surf_points_facet # Get normals from slopes @@ -674,7 +674,7 @@ def get_optic( facet = Facet(mirror) # Locate facet within ensemble if self.optic_type == 'multi': - trans: TransformXYZ = self.data_characterization_ensemble[idx_mirror].trans_facet_ensemble + trans: TransformXYZ = self.data_calculation_ensemble[idx_mirror].trans_facet_ensemble trans_list.append(trans) # Save facets facets.append(facet) @@ -725,7 +725,7 @@ def save_to_hdf(self, file: str, prefix: str = ''): # Calculations, one per facet for idx_facet in range(self.num_facets): # Save facet slope data - self.data_characterization_facet[idx_facet].save_to_hdf( + self.data_calculation_facet[idx_facet].save_to_hdf( file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' ) # Save facet geometry data @@ -737,8 +737,8 @@ def save_to_hdf(self, file: str, prefix: str = ''): file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' ) - if self.data_characterization_ensemble: + if self.data_calculation_ensemble: # Save ensemle data - self.data_characterization_ensemble[idx_facet].save_to_hdf( + self.data_calculation_ensemble[idx_facet].save_to_hdf( file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' ) diff --git a/opencsp/app/sofast/test/test_ProcessSofastFixed.py b/opencsp/app/sofast/test/test_ProcessSofastFixed.py index 4ab582d9b..1ac9fcef5 100644 --- a/opencsp/app/sofast/test/test_ProcessSofastFixed.py +++ b/opencsp/app/sofast/test/test_ProcessSofastFixed.py @@ -150,7 +150,7 @@ def test_slopes_xy_facet_ensemble(self): for idx_facet in range(self.sofast_facet_ensemble.num_facets): with self.subTest(i=idx_facet): np.testing.assert_allclose( - self.sofast_facet_ensemble.data_slope_solver[idx_facet].slopes_facet_xy, + self.sofast_facet_ensemble.data_calculation_facet[idx_facet].slopes_facet_xy, self.exp_slopes_xy_facet_ensemble[idx_facet], rtol=0, atol=1e-6, @@ -159,7 +159,7 @@ def test_slopes_xy_facet_ensemble(self): def test_slopes_xy_single_facet(self): """Tests slope data""" np.testing.assert_allclose( - self.sofast_single_facet.data_slope_solver[0].slopes_facet_xy, + self.sofast_single_facet.data_calculation_facet[0].slopes_facet_xy, self.exp_slopes_xy_single_facet, rtol=0, atol=1e-6, From 90e6b4837003fd8fbc8adac04bbd89c0345e30ce Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 13:37:30 -0600 Subject: [PATCH 075/105] Changed get_mirror to get_optic in SFi --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 66 +++++++++---------- .../sofast/test/test_ProcessSofastFixed.py | 4 +- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 36d530774..0e33fe0bd 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -466,6 +466,39 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera ) self.data_calculation_ensemble.append(data) + def get_optic( + self, interpolation_type: Literal['given', 'bilinear', 'clough_tocher', 'nearest'] = 'nearest' + ) -> Facet | FacetEnsemble: + """Returns mirror object with slope data""" + facets = [] + trans_list = [] + for idx_facet in range(self.num_facets): + # Get mirror surface points + v_surf_pts = self.data_calculation_facet[idx_facet].v_surf_points_facet + # Get point normal vectors + v_normals_data = np.ones((3, len(v_surf_pts))) + v_normals_data[:2, :] = self.data_calculation_facet[idx_facet].slopes_facet_xy + v_normals_data[:2, :] *= -1 + v_normals = Uxyz(v_normals_data) + # Get optic shape + shape = RegionXY.from_vertices(self.data_facet_def[idx_facet].v_facet_corners.projXY()) + # Create mirror + mirror = MirrorPoint(v_surf_pts, v_normals, shape, interpolation_type) + # Create facet + facets.append(Facet(mirror)) + # Get facet pointing if multi-facet + if self.optic_type == 'multi': + trans: TransformXYZ = self.data_calculation_ensemble[idx_facet].trans_facet_ensemble + trans_list.append(trans) + + # Return either ensemble or facet + if self.optic_type == 'multi': + ensemble = FacetEnsemble(facets) + ensemble.set_facet_transform_list(trans_list) + return ensemble + else: + return facets[0] + def save_to_hdf(self, file: str, prefix: str = ''): """Saves data to given HDF5 file. Data is stored in CalculationsFixedPattern/... @@ -501,36 +534,3 @@ def save_to_hdf(self, file: str, prefix: str = ''): ) lt.info(f'SofastFixed data saved to: {file:s} with prefix: {prefix:s}') - - def get_mirror( - self, interpolation_type: Literal['given', 'bilinear', 'clough_tocher', 'nearest'] = 'nearest' - ) -> Facet | FacetEnsemble: - """Returns mirror object with slope data""" - facets = [] - trans_list = [] - for idx_facet in range(self.num_facets): - # Get mirror surface points - v_surf_pts = self.data_calculation_facet[idx_facet].v_surf_points_facet - # Get point normal vectors - v_normals_data = np.ones((3, len(v_surf_pts))) - v_normals_data[:2, :] = self.data_calculation_facet[idx_facet].slopes_facet_xy - v_normals_data[:2, :] *= -1 - v_normals = Uxyz(v_normals_data) - # Get optic shape - shape = RegionXY.from_vertices(self.data_facet_def[idx_facet].v_facet_corners.projXY()) - # Create mirror - mirror = MirrorPoint(v_surf_pts, v_normals, shape, interpolation_type) - # Create facet - facets.append(Facet(mirror)) - # Get facet pointing if multi-facet - if self.optic_type == 'multi': - trans: TransformXYZ = self.data_calculation_ensemble[idx_facet].trans_facet_ensemble - trans_list.append(trans) - - # Return either ensemble or facet - if self.optic_type == 'multi': - ensemble = FacetEnsemble(facets) - ensemble.set_facet_transform_list(trans_list) - return ensemble - else: - return facets[0] diff --git a/opencsp/app/sofast/test/test_ProcessSofastFixed.py b/opencsp/app/sofast/test/test_ProcessSofastFixed.py index 1ac9fcef5..bfe2e54d2 100644 --- a/opencsp/app/sofast/test/test_ProcessSofastFixed.py +++ b/opencsp/app/sofast/test/test_ProcessSofastFixed.py @@ -131,7 +131,7 @@ def test_save_facet_ensemble_slope_figure(self): axis_control_m = rca.meters() fig_mng = fm.setup_figure(figure_control, axis_control_m, title='') - ensemble = self.sofast_facet_ensemble.get_mirror('bilinear') + ensemble = self.sofast_facet_ensemble.get_optic('bilinear') ensemble.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_mng.axis) fig_mng.save(self.save_dir, 'slope_magnitude_facet_ensemble', 'png') @@ -141,7 +141,7 @@ def test_save_single_facet_slope_figure(self): axis_control_m = rca.meters() fig_mng = fm.setup_figure(figure_control, axis_control_m, title='') - facet = self.sofast_single_facet.get_mirror('bilinear') + facet = self.sofast_single_facet.get_optic('bilinear') facet.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_mng.axis) fig_mng.save(self.save_dir, 'slope_magnitude_single_facet', 'png') From 0924ae7e804e9639f9085db08ab79e58d39f0961 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 13:51:36 -0600 Subject: [PATCH 076/105] Changed slope_solver to slope_solvers --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 30 ++++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 0e33fe0bd..ef89be8c2 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -71,21 +71,21 @@ def __init__( # Instantiate data containers self.num_facets: int = None self.optic_type: Literal['undefined', 'single', 'multi'] = None - self.data_facet_def: list[DefinitionFacet] - self.data_ensemble_def: DefinitionEnsemble + self.data_facet_def: list[DefinitionFacet] = None + self.data_ensemble_def: DefinitionEnsemble = None - self.data_surfaces: list[Surface2DAbstract] + self.data_surfaces: list[Surface2DAbstract] = None - self.data_geometry_general: cdc.CalculationDataGeometryGeneral - self.data_image_proccessing_general: cdc.CalculationImageProcessingGeneral - self.data_geometry_facet: list[cdc.CalculationDataGeometryFacet] - self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] - self.data_error: cdc.CalculationError + self.data_geometry_general: cdc.CalculationDataGeometryGeneral = None + self.data_image_proccessing_general: cdc.CalculationImageProcessingGeneral = None + self.data_geometry_facet: list[cdc.CalculationDataGeometryFacet] = None + self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] = None + self.data_error: cdc.CalculationError = None - self.data_calculation_facet: list[SlopeSolverData] - self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] - self.slope_solver: list[SlopeSolver] - self.blob_index: BlobIndex + self.data_calculation_facet: list[SlopeSolverData] = None + self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] = None + self.slope_solvers: list[SlopeSolver] = None + self.blob_index: BlobIndex = None def find_blobs(self, pts_known: Vxy, xys_known: tuple[tuple[int, int]]) -> BlobIndex: """Finds blobs in image @@ -320,7 +320,7 @@ def process_single_facet_optic( slope_solver = SlopeSolver(**kwargs) slope_solver.fit_surface() slope_solver.solve_slopes() - self.slope_solver = [slope_solver] + self.slope_solvers = [slope_solver] self.data_calculation_facet = [slope_solver.get_data()] def process_multi_facet_optic( @@ -374,13 +374,13 @@ def process_multi_facet_optic( kwargs_list = self._process_optic_multifacet_geometry(self.blob_index, mask_raw) # Calculate slope - self.slope_solver = [] + self.slope_solvers = [] self.data_calculation_facet = [] for kwargs in kwargs_list: slope_solver = SlopeSolver(**kwargs) slope_solver.fit_surface() slope_solver.solve_slopes() - self.slope_solver.append(slope_solver) + self.slope_solvers.append(slope_solver) self.data_calculation_facet.append(slope_solver.get_data()) # Calculate facet pointing From 00a174802b32eb7349f6df90ac9d108dad0a9a85 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 14:00:34 -0600 Subject: [PATCH 077/105] Instantiated ProcessSofastAbstract and integrated into SFr and SFi --- .../app/sofast/lib/ProcessSofastAbstract.py | 47 +++++++++++++++++++ opencsp/app/sofast/lib/ProcessSofastFixed.py | 27 +++-------- opencsp/app/sofast/lib/ProcessSofastFringe.py | 30 +++--------- .../test/test_integration_single_facet.py | 6 +-- 4 files changed, 62 insertions(+), 48 deletions(-) create mode 100644 opencsp/app/sofast/lib/ProcessSofastAbstract.py diff --git a/opencsp/app/sofast/lib/ProcessSofastAbstract.py b/opencsp/app/sofast/lib/ProcessSofastAbstract.py new file mode 100644 index 000000000..79b9563f0 --- /dev/null +++ b/opencsp/app/sofast/lib/ProcessSofastAbstract.py @@ -0,0 +1,47 @@ +from typing import Literal + +import numpy as np + +import opencsp.app.sofast.lib.AbstractMeasurementSofast as ams +import opencsp.app.sofast.lib.calculation_data_classes as cdc +from opencsp.app.sofast.lib.DefinitionEnsemble import DefinitionEnsemble +from opencsp.app.sofast.lib.DefinitionFacet import DefinitionFacet +from opencsp.app.sofast.lib.DisplayShape import DisplayShape as Display +import opencsp.app.sofast.lib.image_processing as ip +from opencsp.app.sofast.lib.MeasurementSofastFringe import MeasurementSofastFringe +from opencsp.app.sofast.lib.ParamsSofastFringe import ParamsSofastFringe +import opencsp.app.sofast.lib.process_optics_geometry as po +from opencsp.app.sofast.lib.SpatialOrientation import SpatialOrientation +from opencsp.common.lib.camera.Camera import Camera +from opencsp.common.lib.csp.Facet import Facet +from opencsp.common.lib.csp.FacetEnsemble import FacetEnsemble +from opencsp.common.lib.csp.MirrorPoint import MirrorPoint +from opencsp.common.lib.deflectometry.SlopeSolver import SlopeSolver +from opencsp.common.lib.deflectometry.SlopeSolverData import SlopeSolverData +from opencsp.common.lib.deflectometry.Surface2DAbstract import Surface2DAbstract +from opencsp.common.lib.geometry.RegionXY import RegionXY +from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ +from opencsp.common.lib.geometry.Uxyz import Uxyz +from opencsp.common.lib.geometry.Vxy import Vxy +from opencsp.common.lib.geometry.Vxyz import Vxyz +from opencsp.common.lib.tool.hdf5_tools import HDF5_SaveAbstract +import opencsp.common.lib.tool.log_tools as lt + + +class ProcessSofastAbstract: + def __init__(self): + self.num_facets: int = None + self.optic_type: Literal['undefined', 'single', 'multi'] = None + self.data_facet_def: list[DefinitionFacet] = None + self.data_ensemble_def: DefinitionEnsemble = None + + self.data_surfaces: list[Surface2DAbstract] = None + + self.data_geometry_general: cdc.CalculationDataGeometryGeneral = None + self.data_image_proccessing_general: cdc.CalculationImageProcessingGeneral = None + self.data_geometry_facet: list[cdc.CalculationDataGeometryFacet] = None + self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] = None + self.data_error: cdc.CalculationError = None + + self.data_calculation_facet: list[SlopeSolverData] = None + self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] = None diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index ef89be8c2..05c1a9b78 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -15,6 +15,7 @@ import opencsp.app.sofast.lib.image_processing as ip from opencsp.app.sofast.lib.MeasurementSofastFixed import MeasurementSofastFixed from opencsp.app.sofast.lib.ParamsSofastFixed import ParamsSofastFixed +from opencsp.app.sofast.lib.ProcessSofastAbstract import ProcessSofastAbstract import opencsp.app.sofast.lib.process_optics_geometry as pr from opencsp.app.sofast.lib.SpatialOrientation import SpatialOrientation from opencsp.common.lib.camera.Camera import Camera @@ -22,7 +23,6 @@ from opencsp.common.lib.csp.FacetEnsemble import FacetEnsemble from opencsp.common.lib.csp.MirrorPoint import MirrorPoint from opencsp.common.lib.deflectometry.SlopeSolver import SlopeSolver -from opencsp.common.lib.deflectometry.SlopeSolverData import SlopeSolverData from opencsp.common.lib.deflectometry.Surface2DAbstract import Surface2DAbstract from opencsp.common.lib.geometry.RegionXY import RegionXY from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ @@ -33,7 +33,7 @@ import opencsp.common.lib.tool.log_tools as lt -class ProcessSofastFixed(HDF5_SaveAbstract): +class ProcessSofastFixed(HDF5_SaveAbstract, ProcessSofastAbstract): """Fixed Pattern Deflectrometry data processing class""" def __init__( @@ -50,14 +50,14 @@ def __init__( fixed_pattern_dot_locs : DotLocationsFixedPattern Image projection dictionary """ + super().__init__() + self.orientation = orientation self.camera = camera + self.measurement: MeasurementSofastFixed self.fixed_pattern_dot_locs = fixed_pattern_dot_locs self.params = ParamsSofastFixed() - # Measurement data - self.measurement: MeasurementSofastFixed - # Define blob detector self.blob_detector: cv.SimpleBlobDetector_Params = cv.SimpleBlobDetector_Params() self.blob_detector.minDistBetweenBlobs = 2 @@ -68,22 +68,7 @@ def __init__( self.blob_detector.filterByConvexity = False self.blob_detector.filterByInertia = False - # Instantiate data containers - self.num_facets: int = None - self.optic_type: Literal['undefined', 'single', 'multi'] = None - self.data_facet_def: list[DefinitionFacet] = None - self.data_ensemble_def: DefinitionEnsemble = None - - self.data_surfaces: list[Surface2DAbstract] = None - - self.data_geometry_general: cdc.CalculationDataGeometryGeneral = None - self.data_image_proccessing_general: cdc.CalculationImageProcessingGeneral = None - self.data_geometry_facet: list[cdc.CalculationDataGeometryFacet] = None - self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] = None - self.data_error: cdc.CalculationError = None - - self.data_calculation_facet: list[SlopeSolverData] = None - self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] = None + # Instantiate other data containers self.slope_solvers: list[SlopeSolver] = None self.blob_index: BlobIndex = None diff --git a/opencsp/app/sofast/lib/ProcessSofastFringe.py b/opencsp/app/sofast/lib/ProcessSofastFringe.py index 8399fb2c4..b9a723aa9 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFringe.py +++ b/opencsp/app/sofast/lib/ProcessSofastFringe.py @@ -13,6 +13,7 @@ import opencsp.app.sofast.lib.image_processing as ip from opencsp.app.sofast.lib.MeasurementSofastFringe import MeasurementSofastFringe from opencsp.app.sofast.lib.ParamsSofastFringe import ParamsSofastFringe +from opencsp.app.sofast.lib.ProcessSofastAbstract import ProcessSofastAbstract import opencsp.app.sofast.lib.process_optics_geometry as po from opencsp.app.sofast.lib.SpatialOrientation import SpatialOrientation from opencsp.common.lib.camera.Camera import Camera @@ -20,7 +21,6 @@ from opencsp.common.lib.csp.FacetEnsemble import FacetEnsemble from opencsp.common.lib.csp.MirrorPoint import MirrorPoint from opencsp.common.lib.deflectometry.SlopeSolver import SlopeSolver -from opencsp.common.lib.deflectometry.SlopeSolverData import SlopeSolverData from opencsp.common.lib.deflectometry.Surface2DAbstract import Surface2DAbstract from opencsp.common.lib.geometry.RegionXY import RegionXY from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ @@ -31,7 +31,7 @@ import opencsp.common.lib.tool.log_tools as lt -class ProcessSofastFringe(HDF5_SaveAbstract): +class ProcessSofastFringe(HDF5_SaveAbstract, ProcessSofastAbstract): """Class that processes measurement data captured by a SOFAST system. Computes optic surface slope and saves data to HDF5 format. @@ -175,32 +175,14 @@ def __init__( display : Display Display object used to capture data. """ - # Store data + super().__init__() + + self.orientation = orientation + self.camera = camera self.measurement = measurement self.display = display - self.camera = camera - self.orientation = orientation - - # Define default calculation parameters self.params = ParamsSofastFringe() - # Instantiate data containers - self.num_facets: int = 0 - self.optic_type: Literal['undefined', 'single', 'multi'] = None - self.data_facet_def: list[DefinitionFacet] = None - self.data_ensemble_def: DefinitionEnsemble = None - - self.data_surfaces: list[Surface2DAbstract] = None - - self.data_geometry_general: cdc.CalculationDataGeometryGeneral = None - self.data_image_processing_general: cdc.CalculationImageProcessingGeneral = None - self.data_geometry_facet: list[cdc.CalculationDataGeometryFacet] = None - self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] = None - self.data_error: cdc.CalculationError = None - - self.data_calculation_facet: list[SlopeSolverData] = None - self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] = None - def help(self) -> None: """Prints Sofast doc string""" print(self.__doc__) diff --git a/opencsp/app/sofast/test/test_integration_single_facet.py b/opencsp/app/sofast/test/test_integration_single_facet.py index 8e8c9284b..227f5796e 100644 --- a/opencsp/app/sofast/test/test_integration_single_facet.py +++ b/opencsp/app/sofast/test/test_integration_single_facet.py @@ -80,9 +80,9 @@ def setUpClass(cls, base_dir: str | None = None): sofast.process_optic_singlefacet(facet_data, surface) # Store test data - cls.slopes.append(sofast.data_characterization_facet[0].slopes_facet_xy) - cls.surf_coefs.append(sofast.data_characterization_facet[0].surf_coefs_facet) - cls.v_surf_points_facet.append(sofast.data_characterization_facet[0].v_surf_points_facet.data) + cls.slopes.append(sofast.data_calculation_facet[0].slopes_facet_xy) + cls.surf_coefs.append(sofast.data_calculation_facet[0].surf_coefs_facet) + cls.v_surf_points_facet.append(sofast.data_calculation_facet[0].v_surf_points_facet.data) def test_slopes(self): datasets = ['DataSofastCalculation/facet/facet_000/SlopeSolverData/slopes_facet_xy'] From f1a525724664219da735ec483c99ae2697bbc737 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 14:29:19 -0600 Subject: [PATCH 078/105] Added save_to_hdf to PSA. --- .../app/sofast/lib/ProcessSofastAbstract.py | 83 ++++++++++++++----- opencsp/app/sofast/lib/ProcessSofastFixed.py | 43 +--------- opencsp/app/sofast/lib/ProcessSofastFringe.py | 59 +------------ 3 files changed, 66 insertions(+), 119 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastAbstract.py b/opencsp/app/sofast/lib/ProcessSofastAbstract.py index 79b9563f0..86c8a53ba 100644 --- a/opencsp/app/sofast/lib/ProcessSofastAbstract.py +++ b/opencsp/app/sofast/lib/ProcessSofastAbstract.py @@ -1,34 +1,15 @@ from typing import Literal -import numpy as np - -import opencsp.app.sofast.lib.AbstractMeasurementSofast as ams import opencsp.app.sofast.lib.calculation_data_classes as cdc from opencsp.app.sofast.lib.DefinitionEnsemble import DefinitionEnsemble from opencsp.app.sofast.lib.DefinitionFacet import DefinitionFacet -from opencsp.app.sofast.lib.DisplayShape import DisplayShape as Display -import opencsp.app.sofast.lib.image_processing as ip -from opencsp.app.sofast.lib.MeasurementSofastFringe import MeasurementSofastFringe -from opencsp.app.sofast.lib.ParamsSofastFringe import ParamsSofastFringe -import opencsp.app.sofast.lib.process_optics_geometry as po -from opencsp.app.sofast.lib.SpatialOrientation import SpatialOrientation -from opencsp.common.lib.camera.Camera import Camera -from opencsp.common.lib.csp.Facet import Facet -from opencsp.common.lib.csp.FacetEnsemble import FacetEnsemble -from opencsp.common.lib.csp.MirrorPoint import MirrorPoint -from opencsp.common.lib.deflectometry.SlopeSolver import SlopeSolver from opencsp.common.lib.deflectometry.SlopeSolverData import SlopeSolverData from opencsp.common.lib.deflectometry.Surface2DAbstract import Surface2DAbstract -from opencsp.common.lib.geometry.RegionXY import RegionXY -from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ -from opencsp.common.lib.geometry.Uxyz import Uxyz -from opencsp.common.lib.geometry.Vxy import Vxy -from opencsp.common.lib.geometry.Vxyz import Vxyz from opencsp.common.lib.tool.hdf5_tools import HDF5_SaveAbstract import opencsp.common.lib.tool.log_tools as lt -class ProcessSofastAbstract: +class ProcessSofastAbstract(HDF5_SaveAbstract): def __init__(self): self.num_facets: int = None self.optic_type: Literal['undefined', 'single', 'multi'] = None @@ -38,10 +19,70 @@ def __init__(self): self.data_surfaces: list[Surface2DAbstract] = None self.data_geometry_general: cdc.CalculationDataGeometryGeneral = None - self.data_image_proccessing_general: cdc.CalculationImageProcessingGeneral = None + self.data_image_processing_general: cdc.CalculationImageProcessingGeneral = None self.data_geometry_facet: list[cdc.CalculationDataGeometryFacet] = None self.data_image_processing_facet: list[cdc.CalculationImageProcessingFacet] = None self.data_error: cdc.CalculationError = None self.data_calculation_facet: list[SlopeSolverData] = None self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] = None + + self.params = None + + def save_to_hdf(self, file: str, prefix: str = ''): + """Saves data to given file. Data is stored as: PREFIX + Folder/Field_1 + + Parameters + ---------- + file : str + HDF file to save to + prefix : str + Prefix to append to folder path within HDF file (folders must be separated by "/") + """ + # Log + lt.info(f'Saving Sofast data to: {file:s}, in HDF5 folder: "{prefix:s}"') + + # One per measurement + if self.data_error is not None: + self.data_error.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') + self.data_geometry_general.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') + self.data_image_processing_general.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') + + # Sofast parameters + self.params.save_to_hdf(file, f'{prefix:s}DataSofastInput/') + + # Facet definition + if self.data_facet_def is not None: + for idx_facet, facet_data in enumerate(self.data_facet_def): + facet_data.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx_facet:03d}/') + + # Ensemble definition + if self.data_ensemble_def is not None: + self.data_ensemble_def.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/') + + # Surface definition + for idx_facet, surface in enumerate(self.data_surfaces): + surface.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx_facet:03d}/') + + # Calculations, one per facet + for idx_facet in range(self.num_facets): + # Save facet slope data + if self.data_calculation_facet is not None: + self.data_calculation_facet[idx_facet].save_to_hdf( + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' + ) + # Save facet geometry data + if self.data_geometry_facet is not None: + self.data_geometry_facet[idx_facet].save_to_hdf( + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' + ) + # Save facet image processing data + if self.data_image_processing_facet is not None: + self.data_image_processing_facet[idx_facet].save_to_hdf( + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' + ) + # Save ensemle data + if self.data_calculation_ensemble is not None: + self.data_calculation_ensemble[idx_facet].save_to_hdf( + file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' + ) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 05c1a9b78..8efda44b3 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -29,11 +29,10 @@ from opencsp.common.lib.geometry.Uxyz import Uxyz from opencsp.common.lib.geometry.Vxyz import Vxyz from opencsp.common.lib.geometry.Vxy import Vxy -from opencsp.common.lib.tool.hdf5_tools import HDF5_SaveAbstract import opencsp.common.lib.tool.log_tools as lt -class ProcessSofastFixed(HDF5_SaveAbstract, ProcessSofastAbstract): +class ProcessSofastFixed(ProcessSofastAbstract): """Fixed Pattern Deflectrometry data processing class""" def __init__( @@ -132,7 +131,7 @@ def _process_optic_singlefacet_geometry(self, blob_index: BlobIndex, mask_raw: n # Process optic geometry (find mask corners, etc.) ( self.data_geometry_general, - self.data_image_proccessing_general, + self.data_image_processing_general, self.data_geometry_facet, # list self.data_image_processing_facet, # list self.data_error, @@ -192,7 +191,7 @@ def _process_optic_multifacet_geometry(self, blob_index: BlobIndex, mask_raw: np # Process optic geometry (find mask corners, etc.) ( self.data_geometry_general, - self.data_image_proccessing_general, + self.data_image_processing_general, self.data_geometry_facet, # list self.data_image_processing_facet, # list self.data_error, @@ -483,39 +482,3 @@ def get_optic( return ensemble else: return facets[0] - - def save_to_hdf(self, file: str, prefix: str = ''): - """Saves data to given HDF5 file. Data is stored in CalculationsFixedPattern/... - - Parameters - ---------- - file : str - HDF file to save to - prefix : str, optional - Prefix to append to folder path within HDF file (folders must be separated by "/"). - Default is empty string ''. - """ - # Sofast input parameters - self.params.save_to_hdf(file, f'{prefix:s}DataSofastInput/') - for idx, (data_facet_def, data_surfaces) in enumerate(zip(self.data_facet_def, self.data_surfaces)): - data_surfaces.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:03d}/') - data_facet_def.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx:03d}/') - - # General - self.data_error.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') - self.data_geometry_general.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') - self.data_image_proccessing_general.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') - - # Calculations - for idx_facet in range(self.num_facets): - self.data_calculation_facet[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' - ) - self.data_geometry_facet[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' - ) - self.data_image_processing_facet[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' - ) - - lt.info(f'SofastFixed data saved to: {file:s} with prefix: {prefix:s}') diff --git a/opencsp/app/sofast/lib/ProcessSofastFringe.py b/opencsp/app/sofast/lib/ProcessSofastFringe.py index b9a723aa9..87f0ba4a1 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFringe.py +++ b/opencsp/app/sofast/lib/ProcessSofastFringe.py @@ -27,11 +27,10 @@ from opencsp.common.lib.geometry.Uxyz import Uxyz from opencsp.common.lib.geometry.Vxy import Vxy from opencsp.common.lib.geometry.Vxyz import Vxyz -from opencsp.common.lib.tool.hdf5_tools import HDF5_SaveAbstract import opencsp.common.lib.tool.log_tools as lt -class ProcessSofastFringe(HDF5_SaveAbstract, ProcessSofastAbstract): +class ProcessSofastFringe(ProcessSofastAbstract): """Class that processes measurement data captured by a SOFAST system. Computes optic surface slope and saves data to HDF5 format. @@ -668,59 +667,3 @@ def get_optic( return ensemble else: return facets[0] - - def save_to_hdf(self, file: str, prefix: str = ''): - """Saves data to given file. Data is stored as: PREFIX + Folder/Field_1 - - Parameters - ---------- - file : str - HDF file to save to - prefix : str - Prefix to append to folder path within HDF file (folders must be separated by "/") - """ - # Log - lt.info(f'Saving SofastFringe data to: {file:s}, in HDF5 folder: "{prefix:s}"') - - # One per measurement - if self.data_error is not None: - self.data_error.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') - self.data_geometry_general.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') - self.data_image_processing_general.save_to_hdf(file, f'{prefix:s}DataSofastCalculation/general/') - - # Sofast parameters - self.params.save_to_hdf(file, f'{prefix:s}DataSofastInput/') - - # Facet definition - if self.data_facet_def is not None: - for idx_facet, facet_data in enumerate(self.data_facet_def): - facet_data.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx_facet:03d}/') - - # Ensemble definition - if self.data_ensemble_def is not None: - self.data_ensemble_def.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/') - - # Surface definition - for idx_facet, surface in enumerate(self.data_surfaces): - surface.save_to_hdf(file, f'{prefix:s}DataSofastInput/optic_definition/facet_{idx_facet:03d}/') - - # Calculations, one per facet - for idx_facet in range(self.num_facets): - # Save facet slope data - self.data_calculation_facet[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' - ) - # Save facet geometry data - self.data_geometry_facet[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' - ) - # Save facet image processing data - self.data_image_processing_facet[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' - ) - - if self.data_calculation_ensemble: - # Save ensemle data - self.data_calculation_ensemble[idx_facet].save_to_hdf( - file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' - ) From b0cbd4ad573689e1dde28f9dcbef6ecfc1a50a65 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 16:38:31 -0600 Subject: [PATCH 079/105] Added facet pointing test data to SFi calcultion HDF5 --- .../calculation_facet_ensemble.h5 | Bin 75656 -> 80208 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/opencsp/test/data/sofast_fixed/data_expected/calculation_facet_ensemble.h5 b/opencsp/test/data/sofast_fixed/data_expected/calculation_facet_ensemble.h5 index 79d8bc9837cf58b4c553c196f677d97fa0a0e05d..193dfaebadccffcbfef3974ac5747794ef89b1d4 100644 GIT binary patch delta 714 zcmeA;&vM}t%LEOk0LzV9e({q(=yFVMh*uDIPRvOz%}FfD%+GVpD^AT#%1LDag30=N znwuZQFJJ~M>`2C^&~a1BIwnmf1__WxAm~tM1k(_bfnfube?b#0vUz=)B;)1}>Bo@u zcxa*ODS+}P=s@&r&jRZCkv(DeWCdmkZX^>Yul7{q(1mE`*tn6M$x;DqIRnE7h;>jN z14BtsVqS54T4Hi)Nqj1jS0Q>C7%V1k)CZf6WcTFXJgS@=7TAp60C5><#zz<^NU}h+ zV9=8bl^i)c^dXitOgY2fQ6fBwI>Kky`;``{HO z`v>Ab^6&b_+VA$br+B~W%Kis))=k>JjcNZe?vmgCf$A8({+nH&uCRZ>{1hFzFVF25 zGK%aU`Nr;N2wGVmnW|vVH<5oK$h?B=n#Cpuo$M!WluP-_o>pzTY)6hUnH1-8ZBLA>>=p41Dw2aO-*-vGLb!Jm2k(oBW@{7_pG dVy{=}L2P0AV81!hqJe$#hAaW*2YTSZ007C!((C{L delta 90 zcmccciKXK_%LEOk4)u*%e({qX(l{nJ#4AiL$nuz^%CY%F`~+sOSVuBQ%we(uv&5#9 mbxf1*MRRR_kS4%5c>|BbW{wP~$croi#)$_sHvh<;up0nd+$9$P From ac6706948cfe48895377cb2fe2fb7ab8e73abd55 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 16:39:10 -0600 Subject: [PATCH 080/105] Added facet pointing test to SFi test --- .../sofast/test/test_ProcessSofastFixed.py | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/opencsp/app/sofast/test/test_ProcessSofastFixed.py b/opencsp/app/sofast/test/test_ProcessSofastFixed.py index bfe2e54d2..053437813 100644 --- a/opencsp/app/sofast/test/test_ProcessSofastFixed.py +++ b/opencsp/app/sofast/test/test_ProcessSofastFixed.py @@ -1,4 +1,4 @@ -"""Example script that runs fixed pattern deflectometry analysis on saved data +"""Test script that runs fixed pattern deflectometry analysis on saved data """ from os.path import join @@ -41,6 +41,7 @@ def setUpClass(cls): cls.sofast_facet_ensemble: ProcessSofastFixed = None cls.exp_slopes_xy_single_facet: np.ndarray = None cls.exp_slopes_xy_facet_ensemble: list[np.ndarray] = None + cls.exp_facet_pointing_trans: list[np.ndarray] = None cls._process_facet_ensemble(cls) cls._process_single_facet(cls) @@ -68,10 +69,15 @@ def _process_facet_ensemble(self): # Load expected data self.exp_slopes_xy_facet_ensemble = [] + self.exp_facet_pointing_trans = [] for idx_facet in range(ensemble_data.num_facets): - datasets = [f'DataSofastCalculation/facet/facet_{idx_facet:03d}/SlopeSolverData/slopes_facet_xy'] + datasets = [ + f'DataSofastCalculation/facet/facet_{idx_facet:03d}/SlopeSolverData/slopes_facet_xy', + f'DataSofastCalculation/facet/facet_{idx_facet:03d}/CalculationEnsemble/trans_facet_ensemble', + ] data = h5.load_hdf5_datasets(datasets, file_exp) self.exp_slopes_xy_facet_ensemble.append(data['slopes_facet_xy']) + self.exp_facet_pointing_trans.append(data['trans_facet_ensemble']) # Instantiate class params = ParamsSofastFixed.load_from_hdf(file_exp, 'DataSofastInput/') @@ -165,6 +171,17 @@ def test_slopes_xy_single_facet(self): atol=1e-6, ) + def test_facet_pointing_ensemble(self): + """Tests facet pointing""" + for idx_facet in range(self.sofast_facet_ensemble.num_facets): + with self.subTest(i=idx_facet): + np.testing.assert_allclose( + self.sofast_facet_ensemble.data_calculation_ensemble[idx_facet].trans_facet_ensemble.matrix, + self.exp_facet_pointing_trans[idx_facet], + rtol=0, + atol=1e-6, + ) + def tearDown(self) -> None: # Make sure we release all matplotlib resources. plt.close('all') From d3d63c1fda45a18c2fec9a5dbacff0829c9457b7 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 16:41:28 -0600 Subject: [PATCH 081/105] Moved get_optic and _calculate_facet_pointing methods to abstract process sofast class. --- .../app/sofast/lib/ProcessSofastAbstract.py | 210 +++++++++++++++++- opencsp/app/sofast/lib/ProcessSofastFixed.py | 123 ---------- opencsp/app/sofast/lib/ProcessSofastFringe.py | 149 ------------- 3 files changed, 209 insertions(+), 273 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastAbstract.py b/opencsp/app/sofast/lib/ProcessSofastAbstract.py index 86c8a53ba..baee5a261 100644 --- a/opencsp/app/sofast/lib/ProcessSofastAbstract.py +++ b/opencsp/app/sofast/lib/ProcessSofastAbstract.py @@ -1,15 +1,81 @@ +""" +Abstract module for processing SOFAST data. + +This module provides the `ProcessSofastAbstract` class, which defines common attributes and methods +used for processing SOFAST data. It includes functionality for saving data to HDF5 files, calculating +facet pointing, and generating OpenCSP representations of the optic under test. + +Notes +----- +- The `ProcessSofastAbstract` class is designed to be subclassed and extended with specific + processing logic. + +ChatGPT 40 assisted in generating some docstrings in this module. +""" + from typing import Literal +import numpy as np + + import opencsp.app.sofast.lib.calculation_data_classes as cdc from opencsp.app.sofast.lib.DefinitionEnsemble import DefinitionEnsemble from opencsp.app.sofast.lib.DefinitionFacet import DefinitionFacet +from opencsp.common.lib.csp.Facet import Facet +from opencsp.common.lib.csp.FacetEnsemble import FacetEnsemble +from opencsp.common.lib.csp.MirrorPoint import MirrorPoint from opencsp.common.lib.deflectometry.SlopeSolverData import SlopeSolverData from opencsp.common.lib.deflectometry.Surface2DAbstract import Surface2DAbstract +from opencsp.common.lib.geometry.RegionXY import RegionXY +from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ +from opencsp.common.lib.geometry.Uxyz import Uxyz +from opencsp.common.lib.geometry.Vxy import Vxy +from opencsp.common.lib.geometry.Vxyz import Vxyz from opencsp.common.lib.tool.hdf5_tools import HDF5_SaveAbstract import opencsp.common.lib.tool.log_tools as lt class ProcessSofastAbstract(HDF5_SaveAbstract): + """ + Abstract class for ProcessSofast classes defining common attributes and methods. + + Attributes + ---------- + num_facets : int + Number of facets in the optic. + optic_type : Literal['undefined', 'single', 'multi'] + Type of optic being processed. + data_facet_def : list[DefinitionFacet] + List of facet definitions. + data_ensemble_def : DefinitionEnsemble + Ensemble definition of the optic. + data_surfaces : list[Surface2DAbstract] + List of surface definitions. + data_geometry_general : cdc.CalculationDataGeometryGeneral + General geometry data for the calculation. + data_image_processing_general : cdc.CalculationImageProcessingGeneral + General image processing data for the calculation. + data_geometry_facet : list[cdc.CalculationDataGeometryFacet] + List of geometry data for each facet. + data_image_processing_facet : list[cdc.CalculationImageProcessingFacet] + List of image processing data for each facet. + data_error : cdc.CalculationError + Error data for the calculation. + data_calculation_facet : list[SlopeSolverData] + List of slope solver data for each facet. + data_calculation_ensemble : list[cdc.CalculationFacetEnsemble] + List of calculation data for the ensemble. + params : HDF5_SaveAbstract + Parameters for the calculation. + + Methods + ------- + save_to_hdf(file: str, prefix: str = '') + Saves data to the given HDF file. + get_optic(interp_type: Literal['bilinear', 'clough_tocher', 'nearest'] = 'nearest') -> FacetEnsemble | Facet + Returns the OpenCSP representation of the optic under test. + """ + def __init__(self): self.num_facets: int = None self.optic_type: Literal['undefined', 'single', 'multi'] = None @@ -27,7 +93,7 @@ def __init__(self): self.data_calculation_facet: list[SlopeSolverData] = None self.data_calculation_ensemble: list[cdc.CalculationFacetEnsemble] = None - self.params = None + self.params: HDF5_SaveAbstract = None def save_to_hdf(self, file: str, prefix: str = ''): """Saves data to given file. Data is stored as: PREFIX + Folder/Field_1 @@ -86,3 +152,145 @@ def save_to_hdf(self, file: str, prefix: str = ''): self.data_calculation_ensemble[idx_facet].save_to_hdf( file, f'{prefix:s}DataSofastCalculation/facet/facet_{idx_facet:03d}/' ) + + def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'average') -> None: + """ + Calculates facet pointing relative to the given reference. + + Parameters + ---------- + reference : 'average' | int + If 'average', the pointing reference is the average of all + facet pointing directions. If, int, that facet index is assumed + to have perfect pointing. + """ + if self.data_calculation_facet is None: + lt.error_and_raise(ValueError, 'Slopes must be solved first by running "solve_slopes".') + if reference != 'average' and not isinstance(reference, int): + lt.error_and_raise(ValueError, 'Given reference must be int or "average".') + if isinstance(reference, int) and reference >= self.num_facets: + lt.error_and_raise( + ValueError, f'Given facet index, {reference:d}, is out of range of 0-{self.num_facets - 1:d}.' + ) + + # Instantiate data list + self.data_calculation_ensemble = [] + + trans_facet_ensemble_list = [] + v_pointing_matrix = np.zeros((3, self.num_facets)) + for idx in range(self.num_facets): + # Get transformation from user-input and slope solving + trans_1 = TransformXYZ.from_R_V( + self.data_ensemble_def.r_facet_ensemble[idx], self.data_ensemble_def.v_facet_locations[idx] + ) + trans_2 = self.data_calculation_facet[idx].trans_alignment + # Calculate inverse of slope solving transform + trans_2 = TransformXYZ.from_V(-trans_2.V) * TransformXYZ.from_R(trans_2.R.inv()) + # Create local to global transformation + trans_facet_ensemble_list.append(trans_2 * trans_1) + + # Calculate pointing vector in ensemble coordinates + v_pointing = Vxyz((0, 0, 1)).rotate(trans_facet_ensemble_list[idx].R) + v_pointing_matrix[:, idx] = v_pointing.data.squeeze() + + # Calculate reference pointing direction + if isinstance(reference, int): + v_pointing_ref = Vxyz(v_pointing_matrix[:, reference]) + elif reference == 'average': + v_pointing_ref = Vxyz(v_pointing_matrix.mean(1)) + # Calculate rotation to align pointing vectors + r_align_pointing = v_pointing_ref.align_to(Vxyz((0, 0, 1))) + trans_align_pointing = TransformXYZ.from_R(r_align_pointing) + + # Apply alignment rotation to total transformation + trans_facet_ensemble_list = [trans_align_pointing * t for t in trans_facet_ensemble_list] + + # Calculate global slope and surface points + for idx in range(self.num_facets): + # Get slope data + slopes = self.data_calculation_facet[idx].slopes_facet_xy # facet coordinats + + # Calculate surface normals in local (facet) coordinates + u_surf_norms = np.ones((3, slopes.shape[1])) + u_surf_norms[:2] = -slopes + u_surf_norms = Uxyz(u_surf_norms).as_Vxyz() + + # Apply rotation to normal vectors + u_surf_norms_global = u_surf_norms.rotate(trans_facet_ensemble_list[idx].R) + # Convert normal vectors to global (ensemble) slopes + slopes_ensemble_xy = -u_surf_norms_global.data[:2] / u_surf_norms_global.data[2:] + + # Convert surface points to global (ensemble) coordinates + v_surf_points_ensemble = trans_facet_ensemble_list[idx].apply( + self.data_calculation_facet[idx].v_surf_points_facet + ) + + # Calculate pointing vectors in ensemble coordinates + v_facet_pointing_ensemble = Vxyz((0, 0, 1)).rotate(trans_facet_ensemble_list[idx].R) + + data = cdc.CalculationFacetEnsemble( + trans_facet_ensemble_list[idx], slopes_ensemble_xy, v_surf_points_ensemble, v_facet_pointing_ensemble + ) + self.data_calculation_ensemble.append(data) + + def get_optic( + self, interp_type: Literal['bilinear', 'clough_tocher', 'nearest'] = 'nearest' + ) -> FacetEnsemble | Facet: + """Returns the OpenCSP representation of the optic under test. Returns either + a Facet or FacetEnsemble object depending on the optic type. Each mirror is + represented by a MirrorPoint object. Each mirror origin is co-located with its + parent facet origin. + + Parameters + ---------- + interp_type : {'bilinear', 'clough_tocher', 'nearest'}, optional + Mirror interpolation type, by default 'nearest' + + Returns + ------- + FacetEnsemble | Facet + Optic object + """ + if self.data_calculation_facet is None: + lt.error_and_raise(ValueError, 'Sofast data must be processed before optic is available.') + + facets = [] + trans_list = [] + for idx_mirror in range(self.num_facets): + # Get surface points + pts: Vxyz = self.data_calculation_facet[idx_mirror].v_surf_points_facet + # Get normals from slopes + slopes: np.ndarray = self.data_calculation_facet[idx_mirror].slopes_facet_xy + norm_data = np.ones((3, slopes.shape[1])) + norm_data[:2] = -slopes + norm_vecs = Uxyz(norm_data) + # Get mirror shape + if self.optic_type == 'undefined': + # Find bounding box + x1 = pts.x.min() + x2 = pts.x.max() + y1 = pts.y.min() + y2 = pts.y.max() + vertices = Vxy(([x1, x1, x2, x2], [y1, y2, y2, y1])) + else: + # Get optic region from optic definition + vertices = self.data_facet_def[idx_mirror].v_facet_corners.projXY() + shape = RegionXY.from_vertices(vertices) + # Create mirror + mirror = MirrorPoint(pts, norm_vecs, shape, interp_type) + # Create facet + facet = Facet(mirror) + # Locate facet within ensemble + if self.optic_type == 'multi': + trans: TransformXYZ = self.data_calculation_ensemble[idx_mirror].trans_facet_ensemble + trans_list.append(trans) + # Save facets + facets.append(facet) + + # Return optics + if self.optic_type == 'multi': + ensemble = FacetEnsemble(facets) + ensemble.set_facet_transform_list(trans_list) + return ensemble + else: + return facets[0] diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 8efda44b3..8564f2401 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -1,14 +1,11 @@ """Class that handles the processing of fixed pattern deflectometry data. """ -from typing import Literal - import cv2 as cv import numpy as np from numpy import ndarray from opencsp.app.sofast.lib.BlobIndex import BlobIndex -import opencsp.app.sofast.lib.calculation_data_classes as cdc from opencsp.app.sofast.lib.DefinitionEnsemble import DefinitionEnsemble from opencsp.app.sofast.lib.DefinitionFacet import DefinitionFacet from opencsp.app.sofast.lib.DotLocationsFixedPattern import DotLocationsFixedPattern @@ -19,15 +16,8 @@ import opencsp.app.sofast.lib.process_optics_geometry as pr from opencsp.app.sofast.lib.SpatialOrientation import SpatialOrientation from opencsp.common.lib.camera.Camera import Camera -from opencsp.common.lib.csp.Facet import Facet -from opencsp.common.lib.csp.FacetEnsemble import FacetEnsemble -from opencsp.common.lib.csp.MirrorPoint import MirrorPoint from opencsp.common.lib.deflectometry.SlopeSolver import SlopeSolver from opencsp.common.lib.deflectometry.Surface2DAbstract import Surface2DAbstract -from opencsp.common.lib.geometry.RegionXY import RegionXY -from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ -from opencsp.common.lib.geometry.Uxyz import Uxyz -from opencsp.common.lib.geometry.Vxyz import Vxyz from opencsp.common.lib.geometry.Vxy import Vxy import opencsp.common.lib.tool.log_tools as lt @@ -369,116 +359,3 @@ def process_multi_facet_optic( # Calculate facet pointing self._calculate_facet_pointing() - - def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'average') -> None: - """ - Calculates facet pointing relative to the given reference. - - Parameters - ---------- - reference : 'average' | int - If 'average', the pointing reference is the average of all - facet pointing directions. If, int, that facet index is assumed - to have perfect pointing. - """ - if self.data_calculation_facet is None: - lt.error_and_raise(ValueError, 'Slopes must be solved first by running "solve_slopes".') - if (reference != 'average') and not isinstance(reference, int): - lt.error_and_raise(ValueError, 'Given reference must be int or "average".') - if isinstance(reference, int) and (reference >= self.num_facets): - lt.error_and_raise( - ValueError, f'Given facet index, {reference:d}, is out of range of 0-{self.num_facets - 1:d}.' - ) - - # Instantiate data list - self.data_calculation_ensemble = [] - - trans_facet_ensemble_list = [] - v_pointing_matrix = np.zeros((3, self.num_facets)) - for idx in range(self.num_facets): - # Get transformation from user-input and slope solving - trans_1 = TransformXYZ.from_R_V( - self.data_ensemble_def.r_facet_ensemble[idx], self.data_ensemble_def.v_facet_locations[idx] - ) - trans_2 = self.data_calculation_facet[idx].trans_alignment - # Calculate inverse of slope solving transform - trans_2 = TransformXYZ.from_V(-trans_2.V) * TransformXYZ.from_R(trans_2.R.inv()) - # Create local to global transformation - trans_facet_ensemble_list.append(trans_2 * trans_1) - - # Calculate pointing vector in ensemble coordinates - v_pointing = Vxyz((0, 0, 1)).rotate(trans_facet_ensemble_list[idx].R) - v_pointing_matrix[:, idx] = v_pointing.data.squeeze() - - # Calculate reference pointing direction - if isinstance(reference, int): - v_pointing_ref = Vxyz(v_pointing_matrix[:, reference]) - elif reference == 'average': - v_pointing_ref = Vxyz(v_pointing_matrix.mean(1)) - # Calculate rotation to align pointing vectors - r_align_pointing = v_pointing_ref.align_to(Vxyz((0, 0, 1))) - trans_align_pointing = TransformXYZ.from_R(r_align_pointing) - - # Apply alignment rotation to total transformation - trans_facet_ensemble_list = [trans_align_pointing * t for t in trans_facet_ensemble_list] - - # Calculate global slope and surface points - for idx in range(self.num_facets): - # Get slope data - slopes = self.data_calculation_facet[idx].slopes_facet_xy # facet coordinats - - # Calculate surface normals in local (facet) coordinates - u_surf_norms = np.ones((3, slopes.shape[1])) - u_surf_norms[:2] = -slopes - u_surf_norms = Uxyz(u_surf_norms).as_Vxyz() - - # Apply rotation to normal vectors - u_surf_norms_global = u_surf_norms.rotate(trans_facet_ensemble_list[idx].R) - # Convert normal vectors to global (ensemble) slopes - slopes_ensemble_xy = -u_surf_norms_global.data[:2] / u_surf_norms_global.data[2:] - - # Convert surface points to global (ensemble) coordinates - v_surf_points_ensemble = trans_facet_ensemble_list[idx].apply( - self.data_calculation_facet[idx].v_surf_points_facet - ) - - # Calculate pointing vectors in ensemble coordinates - v_facet_pointing_ensemble = Vxyz((0, 0, 1)).rotate(trans_facet_ensemble_list[idx].R) - - data = cdc.CalculationFacetEnsemble( - trans_facet_ensemble_list[idx], slopes_ensemble_xy, v_surf_points_ensemble, v_facet_pointing_ensemble - ) - self.data_calculation_ensemble.append(data) - - def get_optic( - self, interpolation_type: Literal['given', 'bilinear', 'clough_tocher', 'nearest'] = 'nearest' - ) -> Facet | FacetEnsemble: - """Returns mirror object with slope data""" - facets = [] - trans_list = [] - for idx_facet in range(self.num_facets): - # Get mirror surface points - v_surf_pts = self.data_calculation_facet[idx_facet].v_surf_points_facet - # Get point normal vectors - v_normals_data = np.ones((3, len(v_surf_pts))) - v_normals_data[:2, :] = self.data_calculation_facet[idx_facet].slopes_facet_xy - v_normals_data[:2, :] *= -1 - v_normals = Uxyz(v_normals_data) - # Get optic shape - shape = RegionXY.from_vertices(self.data_facet_def[idx_facet].v_facet_corners.projXY()) - # Create mirror - mirror = MirrorPoint(v_surf_pts, v_normals, shape, interpolation_type) - # Create facet - facets.append(Facet(mirror)) - # Get facet pointing if multi-facet - if self.optic_type == 'multi': - trans: TransformXYZ = self.data_calculation_ensemble[idx_facet].trans_facet_ensemble - trans_list.append(trans) - - # Return either ensemble or facet - if self.optic_type == 'multi': - ensemble = FacetEnsemble(facets) - ensemble.set_facet_transform_list(trans_list) - return ensemble - else: - return facets[0] diff --git a/opencsp/app/sofast/lib/ProcessSofastFringe.py b/opencsp/app/sofast/lib/ProcessSofastFringe.py index 87f0ba4a1..40d959af1 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFringe.py +++ b/opencsp/app/sofast/lib/ProcessSofastFringe.py @@ -2,11 +2,8 @@ to calculate surface slopes. """ -from typing import Literal - import numpy as np -import opencsp.app.sofast.lib.calculation_data_classes as cdc from opencsp.app.sofast.lib.DefinitionEnsemble import DefinitionEnsemble from opencsp.app.sofast.lib.DefinitionFacet import DefinitionFacet from opencsp.app.sofast.lib.DisplayShape import DisplayShape as Display @@ -17,16 +14,9 @@ import opencsp.app.sofast.lib.process_optics_geometry as po from opencsp.app.sofast.lib.SpatialOrientation import SpatialOrientation from opencsp.common.lib.camera.Camera import Camera -from opencsp.common.lib.csp.Facet import Facet -from opencsp.common.lib.csp.FacetEnsemble import FacetEnsemble -from opencsp.common.lib.csp.MirrorPoint import MirrorPoint from opencsp.common.lib.deflectometry.SlopeSolver import SlopeSolver from opencsp.common.lib.deflectometry.Surface2DAbstract import Surface2DAbstract -from opencsp.common.lib.geometry.RegionXY import RegionXY -from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ -from opencsp.common.lib.geometry.Uxyz import Uxyz from opencsp.common.lib.geometry.Vxy import Vxy -from opencsp.common.lib.geometry.Vxyz import Vxyz import opencsp.common.lib.tool.log_tools as lt @@ -528,142 +518,3 @@ def _solve_slopes(self, surfaces: list[Surface2DAbstract]) -> None: # Save input surface parameters data self.data_surfaces = surfaces - - def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'average') -> None: - """ - Calculates facet pointing relative to the given reference. - - Parameters - ---------- - reference : 'average' | int - If 'average', the pointing reference is the average of all - facet pointing directions. If, int, that facet index is assumed - to have perfect pointing. - """ - if self.data_calculation_facet is None: - lt.error_and_raise(ValueError, 'Slopes must be solved first by running "solve_slopes".') - if reference != 'average' and not isinstance(reference, int): - lt.error_and_raise(ValueError, 'Given reference must be int or "average".') - if isinstance(reference, int) and reference >= self.num_facets: - lt.error_and_raise( - ValueError, f'Given facet index, {reference:d}, is out of range of 0-{self.num_facets - 1:d}.' - ) - - # Instantiate data list - self.data_calculation_ensemble = [] - - trans_facet_ensemble_list = [] - v_pointing_matrix = np.zeros((3, self.num_facets)) - for idx in range(self.num_facets): - # Get transformation from user-input and slope solving - trans_1 = TransformXYZ.from_R_V( - self.data_ensemble_def.r_facet_ensemble[idx], self.data_ensemble_def.v_facet_locations[idx] - ) - trans_2 = self.data_calculation_facet[idx].trans_alignment - # Calculate inverse of slope solving transform - trans_2 = TransformXYZ.from_V(-trans_2.V) * TransformXYZ.from_R(trans_2.R.inv()) - # Create local to global transformation - trans_facet_ensemble_list.append(trans_2 * trans_1) - - # Calculate pointing vector in ensemble coordinates - v_pointing = Vxyz((0, 0, 1)).rotate(trans_facet_ensemble_list[idx].R) - v_pointing_matrix[:, idx] = v_pointing.data.squeeze() - - # Calculate reference pointing direction - if isinstance(reference, int): - v_pointing_ref = Vxyz(v_pointing_matrix[:, reference]) - elif reference == 'average': - v_pointing_ref = Vxyz(v_pointing_matrix.mean(1)) - # Calculate rotation to align pointing vectors - r_align_pointing = v_pointing_ref.align_to(Vxyz((0, 0, 1))) - trans_align_pointing = TransformXYZ.from_R(r_align_pointing) - - # Apply alignment rotation to total transformation - trans_facet_ensemble_list = [trans_align_pointing * t for t in trans_facet_ensemble_list] - - # Calculate global slope and surface points - for idx in range(self.num_facets): - # Get slope data - slopes = self.data_calculation_facet[idx].slopes_facet_xy # facet coordinats - - # Calculate surface normals in local (facet) coordinates - u_surf_norms = np.ones((3, slopes.shape[1])) - u_surf_norms[:2] = -slopes - u_surf_norms = Uxyz(u_surf_norms).as_Vxyz() - - # Apply rotation to normal vectors - u_surf_norms_global = u_surf_norms.rotate(trans_facet_ensemble_list[idx].R) - # Convert normal vectors to global (ensemble) slopes - slopes_ensemble_xy = -u_surf_norms_global.data[:2] / u_surf_norms_global.data[2:] - - # Convert surface points to global (ensemble) coordinates - v_surf_points_ensemble = trans_facet_ensemble_list[idx].apply( - self.data_calculation_facet[idx].v_surf_points_facet - ) - - # Calculate pointing vectors in ensemble coordinates - v_facet_pointing_ensemble = Vxyz((0, 0, 1)).rotate(trans_facet_ensemble_list[idx].R) - - data = cdc.CalculationFacetEnsemble( - trans_facet_ensemble_list[idx], slopes_ensemble_xy, v_surf_points_ensemble, v_facet_pointing_ensemble - ) - self.data_calculation_ensemble.append(data) - - def get_optic( - self, interp_type: Literal['bilinear', 'clough_tocher', 'nearest'] = 'nearest' - ) -> FacetEnsemble | Facet: - """Returns the OpenCSP representation of the optic under test. For - single facet data collects, returns a Facet object, and for multi-facet - collects, returns a FacetEnsemble object. Each mirror is represented - by a MirrorPoint object. Each mirror origin is co-located with its - parent facet origin. - - Parameters - ---------- - interp_type : {'bilinear', 'clough_tocher', 'nearest'}, optional - Mirror interpolation type, by default 'nearest' - - Returns - ------- - FacetEnsemble if ProcessSofastFringe.optic_type = 'multi', otherwise Facet - """ - facets = [] - trans_list = [] - for idx_mirror, data in enumerate(self.data_calculation_facet): - # Get surface points - pts: Vxyz = data.v_surf_points_facet - # Get normals from slopes - slopes: np.ndarray = data.slopes_facet_xy - norm_data = np.ones((3, slopes.shape[1])) - norm_data[:2] = -slopes - norm_vecs = Uxyz(norm_data) - # Get mirror shape - if self.optic_type == 'undefined': - # Find bounding box - x1 = pts.x.min() - x2 = pts.x.max() - y1 = pts.y.min() - y2 = pts.y.max() - vertices = Vxy(([x1, x1, x2, x2], [y1, y2, y2, y1])) - else: - # Get optic region from optic definition - vertices = self.data_facet_def[idx_mirror].v_facet_corners.projXY() - shape = RegionXY.from_vertices(vertices) - # Create mirror - mirror = MirrorPoint(pts, norm_vecs, shape, interp_type) - # Create facet - facet = Facet(mirror) - # Locate facet within ensemble - if self.optic_type == 'multi': - trans: TransformXYZ = self.data_calculation_ensemble[idx_mirror].trans_facet_ensemble - trans_list.append(trans) - # Save facets - facets.append(facet) - - # Return optics - if self.optic_type == 'multi': - ensemble = FacetEnsemble(facets) - ensemble.set_facet_transform_list(trans_list) - return ensemble - else: - return facets[0] From 61a4e42c09b774a39aae87a8b400f056f497513c Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 16:42:32 -0600 Subject: [PATCH 082/105] Updated all calls to data_characterization_facet to data_calculation_facet --- .../sofast_fringe/generate_test_data_multi_facet.py | 2 +- .../sofast_fringe/generate_test_data_single_facet.py | 2 +- .../sofast_fringe/generate_test_data_undefined.py | 2 +- example/sofast_fringe/example_process_facet_ensemble.py | 2 +- example/sofast_fringe/example_process_single_facet.py | 2 +- example/sofast_fringe/example_process_undefined_shape.py | 2 +- opencsp/app/sofast/lib/SofastConfiguration.py | 2 +- opencsp/app/sofast/test/test_integration_multi_facet.py | 4 ++-- opencsp/app/sofast/test/test_integration_undefined.py | 4 ++-- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/contrib/test_data_generation/sofast_fringe/generate_test_data_multi_facet.py b/contrib/test_data_generation/sofast_fringe/generate_test_data_multi_facet.py index 51e7a3e88..d2acc6346 100644 --- a/contrib/test_data_generation/sofast_fringe/generate_test_data_multi_facet.py +++ b/contrib/test_data_generation/sofast_fringe/generate_test_data_multi_facet.py @@ -73,7 +73,7 @@ def generate_dataset( image = np.zeros(mask.shape) * np.nan for idx in range(sofast.num_facets): mask = sofast.data_image_processing_facet[idx].mask_processed - slopes_xy = sofast.data_characterization_facet[idx].slopes_facet_xy + slopes_xy = sofast.data_calculation_facet[idx].slopes_facet_xy slopes = np.sqrt(np.sum(slopes_xy**2, 0)) image[mask] = slopes plt.figure() diff --git a/contrib/test_data_generation/sofast_fringe/generate_test_data_single_facet.py b/contrib/test_data_generation/sofast_fringe/generate_test_data_single_facet.py index f92c41a90..a3e7b2711 100644 --- a/contrib/test_data_generation/sofast_fringe/generate_test_data_single_facet.py +++ b/contrib/test_data_generation/sofast_fringe/generate_test_data_single_facet.py @@ -74,7 +74,7 @@ def generate_dataset( # Show slope map mask = sofast.data_image_processing_facet[0].mask_processed - slopes_xy = sofast.data_characterization_facet[0].slopes_facet_xy + slopes_xy = sofast.data_calculation_facet[0].slopes_facet_xy slopes = np.sqrt(np.sum(slopes_xy**2, 0)) image = np.zeros(mask.shape) * np.nan image[mask] = slopes diff --git a/contrib/test_data_generation/sofast_fringe/generate_test_data_undefined.py b/contrib/test_data_generation/sofast_fringe/generate_test_data_undefined.py index 1282f6f05..b6ba77c26 100644 --- a/contrib/test_data_generation/sofast_fringe/generate_test_data_undefined.py +++ b/contrib/test_data_generation/sofast_fringe/generate_test_data_undefined.py @@ -54,7 +54,7 @@ def generate_dataset( # Show slope map mask = sofast.data_image_processing_facet[0].mask_processed - slopes_xy = sofast.data_characterization_facet[0].slopes_facet_xy + slopes_xy = sofast.data_calculation_facet[0].slopes_facet_xy slopes = np.sqrt(np.sum(slopes_xy**2, 0)) image = np.zeros(mask.shape) * np.nan image[mask] = slopes diff --git a/example/sofast_fringe/example_process_facet_ensemble.py b/example/sofast_fringe/example_process_facet_ensemble.py index 1e1ce4c3c..223331f24 100644 --- a/example/sofast_fringe/example_process_facet_ensemble.py +++ b/example/sofast_fringe/example_process_facet_ensemble.py @@ -145,7 +145,7 @@ def example_process_facet_ensemble(): # 3. Log best-fit parabolic focal lengths # ======================================= for idx in range(sofast.num_facets): - surf_coefs = sofast.data_characterization_facet[idx].surf_coefs_facet + surf_coefs = sofast.data_calculation_facet[idx].surf_coefs_facet focal_lengths_xy = [1 / 4 / surf_coefs[2], 1 / 4 / surf_coefs[5]] lt.info(f'Facet {idx:d} xy focal lengths (meters): {focal_lengths_xy[0]:.3f}, {focal_lengths_xy[1]:.3f}') diff --git a/example/sofast_fringe/example_process_single_facet.py b/example/sofast_fringe/example_process_single_facet.py index 3974ea6d6..a2772487a 100644 --- a/example/sofast_fringe/example_process_single_facet.py +++ b/example/sofast_fringe/example_process_single_facet.py @@ -74,7 +74,7 @@ def example_process_single_facet(): # 3. Log best-fit parabolic focal lengths # ======================================= - surf_coefs = sofast.data_characterization_facet[0].surf_coefs_facet + surf_coefs = sofast.data_calculation_facet[0].surf_coefs_facet focal_lengths_xy = [1 / 4 / surf_coefs[2], 1 / 4 / surf_coefs[5]] lt.info(f'Facet xy focal lengths (meters): ' f'{focal_lengths_xy[0]:.3f}, {focal_lengths_xy[1]:.3f}') diff --git a/example/sofast_fringe/example_process_undefined_shape.py b/example/sofast_fringe/example_process_undefined_shape.py index cae41551e..45efa07f0 100644 --- a/example/sofast_fringe/example_process_undefined_shape.py +++ b/example/sofast_fringe/example_process_undefined_shape.py @@ -72,7 +72,7 @@ def example_process_undefined_shape_facet(): # 3. Log best-fit parabolic focal lengths # ======================================= - surf_coefs = sofast.data_characterization_facet[0].surf_coefs_facet + surf_coefs = sofast.data_calculation_facet[0].surf_coefs_facet focal_lengths_xy = [1 / 4 / surf_coefs[2], 1 / 4 / surf_coefs[5]] lt.info(f'Facet xy focal lengths (meters): ' f'{focal_lengths_xy[0]:.3f}, {focal_lengths_xy[1]:.3f}') diff --git a/opencsp/app/sofast/lib/SofastConfiguration.py b/opencsp/app/sofast/lib/SofastConfiguration.py index d26b027f7..c30f960d1 100644 --- a/opencsp/app/sofast/lib/SofastConfiguration.py +++ b/opencsp/app/sofast/lib/SofastConfiguration.py @@ -62,7 +62,7 @@ def get_measurement_stats(self) -> list[dict]: for idx_facet in range(num_facets): if self._is_fringe: # Get data - data_calc = self.data_sofast_object.data_characterization_facet[idx_facet] + data_calc = self.data_sofast_object.data_calculation_facet[idx_facet] data_im_proc = self.data_sofast_object.data_image_processing_facet[idx_facet] data_surf = self.data_sofast_object.data_surfaces[idx_facet] diff --git a/opencsp/app/sofast/test/test_integration_multi_facet.py b/opencsp/app/sofast/test/test_integration_multi_facet.py index 0dc1c1b6c..fcdb71f35 100644 --- a/opencsp/app/sofast/test/test_integration_multi_facet.py +++ b/opencsp/app/sofast/test/test_integration_multi_facet.py @@ -132,8 +132,8 @@ def setUpClass(cls, base_dir: str | None = None): cls.file_dataset = file_dataset for idx in range(sofast.num_facets): - cls.data_test['slopes_facet_xy'].append(sofast.data_characterization_facet[idx].slopes_facet_xy) - cls.data_test['surf_coefs_facet'].append(sofast.data_characterization_facet[idx].surf_coefs_facet) + cls.data_test['slopes_facet_xy'].append(sofast.data_calculation_facet[idx].slopes_facet_xy) + cls.data_test['surf_coefs_facet'].append(sofast.data_calculation_facet[idx].surf_coefs_facet) def test_slope(self): for idx in range(self.num_facets): diff --git a/opencsp/app/sofast/test/test_integration_undefined.py b/opencsp/app/sofast/test/test_integration_undefined.py index 15ce0aa21..845bd118e 100644 --- a/opencsp/app/sofast/test/test_integration_undefined.py +++ b/opencsp/app/sofast/test/test_integration_undefined.py @@ -91,8 +91,8 @@ def test_undefined(self): sofast.process_optic_undefined(surface) # Test - slopes = sofast.data_characterization_facet[0].slopes_facet_xy - slope_coefs = sofast.data_characterization_facet[0].slope_coefs_facet + slopes = sofast.data_calculation_facet[0].slopes_facet_xy + slope_coefs = sofast.data_calculation_facet[0].slope_coefs_facet np.testing.assert_allclose(data['slopes_facet_xy'], slopes, atol=1e-7, rtol=0) np.testing.assert_allclose(data['slope_coefs_facet'], slope_coefs, atol=1e-8, rtol=0) From 6fc92cd0fa5e54f3ae12a3f3b4990313b310db6c Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 17:07:01 -0600 Subject: [PATCH 083/105] Revert of removing ABC from OO --- opencsp/common/lib/csp/OpticOrientationAbstract.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opencsp/common/lib/csp/OpticOrientationAbstract.py b/opencsp/common/lib/csp/OpticOrientationAbstract.py index 2c6156804..766aa7935 100644 --- a/opencsp/common/lib/csp/OpticOrientationAbstract.py +++ b/opencsp/common/lib/csp/OpticOrientationAbstract.py @@ -1,11 +1,11 @@ -from abc import abstractmethod +from abc import abstractmethod, ABC import copy from warnings import warn from opencsp.common.lib.geometry.TransformXYZ import TransformXYZ -class OpticOrientationAbstract: +class OpticOrientationAbstract(ABC): """ Classes that extend OpticOrientationAbstract are objects that can be in different orientations, and can contain child objects (that also extend OpticOrientationAbstract) From 6dd5d978c7ed6aaa80413e249df6866e562e1bf7 Mon Sep 17 00:00:00 2001 From: Braden Date: Thu, 22 Aug 2024 17:18:19 -0600 Subject: [PATCH 084/105] Fixed reference to slope_solver and slope_solver_data in SofastConfiguration class. --- opencsp/app/sofast/lib/SofastConfiguration.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/opencsp/app/sofast/lib/SofastConfiguration.py b/opencsp/app/sofast/lib/SofastConfiguration.py index c30f960d1..f12d7e703 100644 --- a/opencsp/app/sofast/lib/SofastConfiguration.py +++ b/opencsp/app/sofast/lib/SofastConfiguration.py @@ -77,10 +77,10 @@ def get_measurement_stats(self) -> list[dict]: num_samps = len(data_calc.v_surf_points_facet) else: # Get data - data_surf = self.data_sofast_object.slope_solver[idx_facet].surface - data_calc = self.data_sofast_object.data_slope_solver[idx_facet] + data_surf = self.data_sofast_object.slope_solvers[idx_facet].surface + data_calc = self.data_sofast_object.data_calculation_facet[idx_facet] # Sample resolution - surf_points = self.data_sofast_object.data_slope_solver[idx_facet].v_surf_points_facet + surf_points = self.data_sofast_object.data_calculation_facet[idx_facet].v_surf_points_facet pts_index_xy = self.data_sofast_object.blob_index.get_data()[1] point_indices_mat = self.data_sofast_object.blob_index.get_data_mat()[1] offset_x = self.data_sofast_object.blob_index._offset_x From 71ba3a6f72feb5cac19592ee2a751d57e1d5bae6 Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 15:02:52 -0600 Subject: [PATCH 085/105] Fixed typing in generate_dataset() --- .../sofast_fringe/generate_test_data_single_facet.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contrib/test_data_generation/sofast_fringe/generate_test_data_single_facet.py b/contrib/test_data_generation/sofast_fringe/generate_test_data_single_facet.py index a3e7b2711..f3a550df8 100644 --- a/contrib/test_data_generation/sofast_fringe/generate_test_data_single_facet.py +++ b/contrib/test_data_generation/sofast_fringe/generate_test_data_single_facet.py @@ -3,7 +3,7 @@ """ from os.path import join, dirname, exists -from typing import Literal +from typing import Literal, Final import matplotlib.pyplot as plt import numpy as np @@ -73,8 +73,9 @@ def generate_dataset( print(f'All data saved to: {file_dataset_out:s}') # Show slope map - mask = sofast.data_image_processing_facet[0].mask_processed - slopes_xy = sofast.data_calculation_facet[0].slopes_facet_xy + idx_facet: Final = 0 + mask = sofast.data_image_processing_facet[idx_facet].mask_processed + slopes_xy = sofast.data_calculation_facet[idx_facet].slopes_facet_xy slopes = np.sqrt(np.sum(slopes_xy**2, 0)) image = np.zeros(mask.shape) * np.nan image[mask] = slopes From 6c226aca90e6fcc89e0c6b4ad0f2810bcdc5cef6 Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 15:03:21 -0600 Subject: [PATCH 086/105] Got rid or explianed 'magic numbers' in example process facet ensemble.py --- .../example_process_facet_ensemble.py | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/example/sofast_fringe/example_process_facet_ensemble.py b/example/sofast_fringe/example_process_facet_ensemble.py index 223331f24..b0314b1a2 100644 --- a/example/sofast_fringe/example_process_facet_ensemble.py +++ b/example/sofast_fringe/example_process_facet_ensemble.py @@ -8,6 +8,7 @@ from opencsp.app.sofast.lib.MeasurementSofastFringe import MeasurementSofastFringe from opencsp.app.sofast.lib.ProcessSofastFringe import ProcessSofastFringe from opencsp.app.sofast.lib.SpatialOrientation import SpatialOrientation +from opencsp.app.sofast.lib.SofastConfiguration import SofastConfiguration from opencsp.common.lib.camera.Camera import Camera from opencsp.common.lib.csp.FacetEnsemble import FacetEnsemble from opencsp.common.lib.deflectometry.Surface2DParabolic import Surface2DParabolic @@ -132,21 +133,16 @@ def example_process_facet_ensemble(): data['robust_least_squares'] = bool(data['robust_least_squares']) surfaces.append(Surface2DParabolic(**data)) - # Update search parameters - # sofast.params.mask_hist_thresh = 0.83 - # sofast.params.geometry.perimeter_refine_perpendicular_search_dist = 15.0 - # sofast.params.geometry.facet_corns_refine_frac_keep = 1.0 - # sofast.params.geometry.facet_corns_refine_perpendicular_search_dist = 3.0 - # sofast.params.geometry.facet_corns_refine_step_length = 5.0 - # Process sofast.process_optic_multifacet(facet_data, ensemble_data, surfaces) # 3. Log best-fit parabolic focal lengths # ======================================= - for idx in range(sofast.num_facets): - surf_coefs = sofast.data_calculation_facet[idx].surf_coefs_facet - focal_lengths_xy = [1 / 4 / surf_coefs[2], 1 / 4 / surf_coefs[5]] + sofast_config = SofastConfiguration() + sofast_config.load_sofast_object(sofast) + sofast_stats = sofast_config.get_measurement_stats() + for stat in sofast_stats: + focal_lengths_xy = stat['focal_lengths_parabolic_xy'] lt.info(f'Facet {idx:d} xy focal lengths (meters): {focal_lengths_xy[0]:.3f}, {focal_lengths_xy[1]:.3f}') # 4. Plot slope magnitude @@ -165,8 +161,10 @@ def example_process_facet_ensemble(): axis_control_m = rca.meters() # Plot slope map + res = 0.002 # meter, make the plot with 2mm spatial resolution + clim = 7 # mrad, draw the plot with +/-7mrad scale bars, this mirror has erorrs that extent to about +/-7mrad fig_record = fm.setup_figure(figure_control, axis_control_m, title='') - ensemble.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_record.axis) + ensemble.plot_orthorectified_slope(res=res, clim=clim, axis=fig_record.axis) fig_record.save(dir_save, 'slope_magnitude', 'png') # 5. Plot 3d representation of facet ensemble From 43c6422e3ff53762af5a0ec6d3659aef7e0ee123 Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 15:04:01 -0600 Subject: [PATCH 087/105] Added typing argument in ProcessSofastFringe --- opencsp/app/sofast/lib/ProcessSofastFringe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFringe.py b/opencsp/app/sofast/lib/ProcessSofastFringe.py index 40d959af1..163d0e331 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFringe.py +++ b/opencsp/app/sofast/lib/ProcessSofastFringe.py @@ -170,7 +170,7 @@ def __init__( self.camera = camera self.measurement = measurement self.display = display - self.params = ParamsSofastFringe() + self.params: ParamsSofastFringe = ParamsSofastFringe() def help(self) -> None: """Prints Sofast doc string""" From 99d7d0d663cbc44ef0cd2be0b1fce8ca0c6aa98f Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 15:42:01 -0600 Subject: [PATCH 088/105] Used Enum in BlobIndex step. --- opencsp/app/sofast/lib/BlobIndex.py | 57 +++++++++++++++++++---------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/opencsp/app/sofast/lib/BlobIndex.py b/opencsp/app/sofast/lib/BlobIndex.py index 0e68a6176..b842cd77c 100644 --- a/opencsp/app/sofast/lib/BlobIndex.py +++ b/opencsp/app/sofast/lib/BlobIndex.py @@ -1,3 +1,4 @@ +from enum import Enum from typing import Literal import matplotlib.pyplot as plt @@ -8,6 +9,16 @@ from opencsp.common.lib.tool import log_tools as lt +class Step(Enum): + """Gives step direction + - Left/right for horizontal searches + - Up/down for vertical searches + """ + + RIGHT_OR_DOWN = 1 + LEFT_OR_UP = -1 + + class BlobIndex: """Class containing blob indexing algorithms to assign indices to blobs in a rough grid pattern. X/Y axes correspond to image axes; +x is to right, +y is down. Class takes in points (in units @@ -17,12 +28,15 @@ class BlobIndex: Attributes ---------- search_thresh : float - + Threshold, in pixels. As algorithm calculates the expected location of the next blob, if a blob + is within "search_thresh" of the expected location, that blob is considered found. + max_num_iters : int + Maximum number of iterations to use when fitting found blobs to grid pattern. search_perp_axis_ratio : float Ratio of point distances: (perpendicular to axis) / (along axis) used to search for points. apply_filter : bool - To filter bad points (experimental) + To filter bad points (experimental, not implemented yet) """ def __init__(self, points: Vxy, x_min: int, x_max: int, y_min: int, y_max: int) -> 'BlobIndex': @@ -47,11 +61,15 @@ def __init__(self, points: Vxy, x_min: int, x_max: int, y_min: int, y_max: int) self._is_assigned = np.zeros(self._num_pts, dtype=bool) self._neighbor_dists = np.zeros((self._num_pts, 4)) * np.nan # left, right, up, down - self.search_thresh = 5.0 # pixels + self.search_thresh: float = 5.0 # pixels + """Threshold, in pixels. As algorithm calculates the expected location of the next blob, if a blob + is within 'search_thresh' of the expected location, that blob is considered found""" self.max_num_iters: int = 100 - """Maximum number of search iterations""" - self.search_perp_axis_ratio = 3.0 - self.apply_filter = False + """Maximum number of iterations to use when fitting found blobs to grid pattern""" + self.search_perp_axis_ratio: float = 3.0 + """Ratio of point distances: (perpendicular to axis) / (along axis) used to search for points""" + self.apply_filter: bool = False + """To filter bad points (experimental, not implemented yet)""" self._offset_x = -x_min # index self._offset_y = -y_min # index @@ -270,19 +288,18 @@ def _find_3x3_center_block(self, idx_x: int, idx_y: int) -> None: idx_g, x, y = self._find_nearest_in_direction(idx_d, 'down') self._assign(idx_g, x, y) - def _extend_data(self, direction: Literal['x', 'y'], step: Literal[1, -1]) -> None: + def _extend_data(self, direction: Literal['x', 'y'], step: Step) -> None: # Extends found blob rows/collumns in given direction # Steps in the given axis, a or b + # # Parameters # ---------- # direction : Literal['x', 'y'] # Axis to search - # step : Literal[1, -1] + # step : Step # Direction to search - # - 1 = right/down - # - -1 = left/up - if step not in [-1, 1]: - raise ValueError(f'Step must be -1 or 1, not {step}') + if not isinstance(step, Step): + raise ValueError(f'Step must be a Step class, not type {type(step)}') if direction == 'x': idxs_a = self._idx_y @@ -302,8 +319,8 @@ def _extend_data(self, direction: Literal['x', 'y'], step: Literal[1, -1]) -> No is_b = idxs_b[mask] # indices of points on axis # Step through all points on axis for i_b in is_b: - if not i_b + step in is_b: # If adjacent point is not assigned, find it - idx_b_prev = i_b - step # Index used for slope calc + if not i_b + step.value in is_b: # If adjacent point is not assigned, find it + idx_b_prev = i_b - step.value # Index used for slope calc if idx_b_prev in is_b: # If history exists, find points for idx_b_next in range(500): # First iteration, use previously assigned points @@ -329,11 +346,11 @@ def _extend_data(self, direction: Literal['x', 'y'], step: Literal[1, -1]) -> No # Assign point if dist < self.search_thresh: if direction == 'x': - idx_x = int(i_b + step + (idx_b_next * step)) + idx_x = int(i_b + step.value + (idx_b_next * step.value)) idx_y = int(idx_a) else: idx_x = int(idx_a) - idx_y = int(i_b + step + (idx_b_next * step)) + idx_y = int(i_b + step.value + (idx_b_next * step.value)) self._assign(idx_new, idx_x, idx_y) else: break @@ -396,12 +413,12 @@ def run(self, pt_known: Vxy, x_known: int, y_known: int) -> None: # Extend rows prev_num_unassigned = self._num_unassigned() for idx in range(self.max_num_iters): - self._extend_data('x', -1) - self._extend_data('x', 1) + self._extend_data('x', Step(-1)) + self._extend_data('x', Step(1)) if self.apply_filter: self._filter_bad_points() - self._extend_data('y', -1) - self._extend_data('y', 1) + self._extend_data('y', Step(-1)) + self._extend_data('y', Step(1)) if self.apply_filter: self._filter_bad_points() From 0d6be36f2b3accf2bac03e479eea9a2826093c7b Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 15:42:56 -0600 Subject: [PATCH 089/105] Fixed typo in Processsofastabstract --- opencsp/app/sofast/lib/ProcessSofastAbstract.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastAbstract.py b/opencsp/app/sofast/lib/ProcessSofastAbstract.py index baee5a261..3b959e6f7 100644 --- a/opencsp/app/sofast/lib/ProcessSofastAbstract.py +++ b/opencsp/app/sofast/lib/ProcessSofastAbstract.py @@ -10,7 +10,7 @@ - The `ProcessSofastAbstract` class is designed to be subclassed and extended with specific processing logic. -ChatGPT 40 assisted in generating some docstrings in this module. +ChatGPT 4o assisted in generating some docstrings in this module. """ from typing import Literal From c6a83b828f3193e480415b8aa8e23da8034f225d Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 16:02:16 -0600 Subject: [PATCH 090/105] Updated readability in ProcessSofastAbstract --- opencsp/app/sofast/lib/ProcessSofastAbstract.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastAbstract.py b/opencsp/app/sofast/lib/ProcessSofastAbstract.py index 3b959e6f7..a7badf09e 100644 --- a/opencsp/app/sofast/lib/ProcessSofastAbstract.py +++ b/opencsp/app/sofast/lib/ProcessSofastAbstract.py @@ -211,14 +211,15 @@ def _calculate_facet_pointing(self, reference: Literal['average'] | int = 'avera slopes = self.data_calculation_facet[idx].slopes_facet_xy # facet coordinats # Calculate surface normals in local (facet) coordinates - u_surf_norms = np.ones((3, slopes.shape[1])) + number_data_points = slopes.shape[1] + u_surf_norms = np.ones((3, number_data_points)) u_surf_norms[:2] = -slopes u_surf_norms = Uxyz(u_surf_norms).as_Vxyz() # Apply rotation to normal vectors u_surf_norms_global = u_surf_norms.rotate(trans_facet_ensemble_list[idx].R) # Convert normal vectors to global (ensemble) slopes - slopes_ensemble_xy = -u_surf_norms_global.data[:2] / u_surf_norms_global.data[2:] + slopes_ensemble_xy = -u_surf_norms_global.projXY().data / u_surf_norms_global.z # Convert surface points to global (ensemble) coordinates v_surf_points_ensemble = trans_facet_ensemble_list[idx].apply( @@ -261,7 +262,8 @@ def get_optic( pts: Vxyz = self.data_calculation_facet[idx_mirror].v_surf_points_facet # Get normals from slopes slopes: np.ndarray = self.data_calculation_facet[idx_mirror].slopes_facet_xy - norm_data = np.ones((3, slopes.shape[1])) + number_data_points = slopes.shape[1] + norm_data = np.ones((3, number_data_points)) norm_data[:2] = -slopes norm_vecs = Uxyz(norm_data) # Get mirror shape From 4f3843643dfeb94073968296b6011bd0e80d74a8 Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 16:32:51 -0600 Subject: [PATCH 091/105] Updated typing in PSF --- opencsp/app/sofast/lib/ProcessSofastFixed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opencsp/app/sofast/lib/ProcessSofastFixed.py b/opencsp/app/sofast/lib/ProcessSofastFixed.py index 8564f2401..95ae9d58a 100644 --- a/opencsp/app/sofast/lib/ProcessSofastFixed.py +++ b/opencsp/app/sofast/lib/ProcessSofastFixed.py @@ -45,7 +45,7 @@ def __init__( self.camera = camera self.measurement: MeasurementSofastFixed self.fixed_pattern_dot_locs = fixed_pattern_dot_locs - self.params = ParamsSofastFixed() + self.params: ParamsSofastFixed = ParamsSofastFixed() # Define blob detector self.blob_detector: cv.SimpleBlobDetector_Params = cv.SimpleBlobDetector_Params() From 0c350605068372f7e1b023ec0367ec3ef1f2bec0 Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 16:39:02 -0600 Subject: [PATCH 092/105] Updated documentation in test PSF --- .../sofast/test/test_ProcessSofastFixed.py | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/opencsp/app/sofast/test/test_ProcessSofastFixed.py b/opencsp/app/sofast/test/test_ProcessSofastFixed.py index 053437813..395bb782d 100644 --- a/opencsp/app/sofast/test/test_ProcessSofastFixed.py +++ b/opencsp/app/sofast/test/test_ProcessSofastFixed.py @@ -138,7 +138,9 @@ def test_save_facet_ensemble_slope_figure(self): fig_mng = fm.setup_figure(figure_control, axis_control_m, title='') ensemble = self.sofast_facet_ensemble.get_optic('bilinear') - ensemble.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_mng.axis) + res_meter = 0.002 # meter, 2mm resolution + clim_mrad = 7 # +/- 7 mrad color bar limits + ensemble.plot_orthorectified_slope(res=res_meter, clim=clim_mrad, axis=fig_mng.axis) fig_mng.save(self.save_dir, 'slope_magnitude_facet_ensemble', 'png') def test_save_single_facet_slope_figure(self): @@ -148,7 +150,9 @@ def test_save_single_facet_slope_figure(self): fig_mng = fm.setup_figure(figure_control, axis_control_m, title='') facet = self.sofast_single_facet.get_optic('bilinear') - facet.plot_orthorectified_slope(res=0.002, clim=7, axis=fig_mng.axis) + res_meter = 0.002 # meter, 2mm resolution + clim_mrad = 7 # +/- 7 mrad color bar limits + facet.plot_orthorectified_slope(res=res_meter, clim=clim_mrad, axis=fig_mng.axis) fig_mng.save(self.save_dir, 'slope_magnitude_single_facet', 'png') def test_slopes_xy_facet_ensemble(self): @@ -158,8 +162,8 @@ def test_slopes_xy_facet_ensemble(self): np.testing.assert_allclose( self.sofast_facet_ensemble.data_calculation_facet[idx_facet].slopes_facet_xy, self.exp_slopes_xy_facet_ensemble[idx_facet], - rtol=0, - atol=1e-6, + rtol=0, # relative tolerance (i.e. +/- a fixed fraction of the expected value) + atol=1e-6, # absolute tolerance (i.e. +/- a fixed value) ) def test_slopes_xy_single_facet(self): @@ -167,8 +171,8 @@ def test_slopes_xy_single_facet(self): np.testing.assert_allclose( self.sofast_single_facet.data_calculation_facet[0].slopes_facet_xy, self.exp_slopes_xy_single_facet, - rtol=0, - atol=1e-6, + rtol=0, # relative tolerance (i.e. +/- a fixed fraction of the expected value) + atol=1e-6, # absolute tolerance (i.e. +/- a fixed value) ) def test_facet_pointing_ensemble(self): @@ -178,8 +182,8 @@ def test_facet_pointing_ensemble(self): np.testing.assert_allclose( self.sofast_facet_ensemble.data_calculation_ensemble[idx_facet].trans_facet_ensemble.matrix, self.exp_facet_pointing_trans[idx_facet], - rtol=0, - atol=1e-6, + rtol=0, # relative tolerance (i.e. +/- a fixed fraction of the expected value) + atol=1e-6, # absolute tolerance (i.e. +/- a fixed value) ) def tearDown(self) -> None: From d798e1c5a2c13d1d27de0401a02777c33134051c Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 16:42:37 -0600 Subject: [PATCH 093/105] updated docs in test_sofastConfiguration --- opencsp/app/sofast/test/test_SofastConfiguration.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/opencsp/app/sofast/test/test_SofastConfiguration.py b/opencsp/app/sofast/test/test_SofastConfiguration.py index 489e80ca1..e4cec6035 100644 --- a/opencsp/app/sofast/test/test_SofastConfiguration.py +++ b/opencsp/app/sofast/test/test_SofastConfiguration.py @@ -65,6 +65,10 @@ def _get_process_sofast_fixed(): sofast.load_measurement_data(measurement) # Process + # - Since we are using an NSTTF mirror with about a 150m focal length, + # we will seed the initial focal lengths with 150 in x and y + # - Since we are testing SofastFixed (which has sparse data compared + # to SofastFringe), we will not downsample the data (set downsample to 1) surface = Surface2DParabolic(initial_focal_lengths_xy=(150.0, 150), robust_least_squares=False, downsample=1) pt_known = measurement.origin xy_known = (0, 0) @@ -95,6 +99,10 @@ def _get_process_sofast_fringe(): facet_data = DefinitionFacet.load_from_json(file_facet) # Define surface definition (parabolic surface) + # - Since we are using an NSTTF mirror with about a 300m focal length, + # we will seed the initial focal lengths with 300 in x and y + # - Since we are testing SofastFringe (which has dense data sampling), + # we will downsample the data by a factor of 10 surface = Surface2DParabolic(initial_focal_lengths_xy=(300.0, 300.0), robust_least_squares=True, downsample=10) # Calibrate fringes From 059170560843e6709bdbb2d50fc1371e289f8470 Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 16:44:03 -0600 Subject: [PATCH 094/105] updated docs in FacetEnsemble --- opencsp/common/lib/csp/FacetEnsemble.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opencsp/common/lib/csp/FacetEnsemble.py b/opencsp/common/lib/csp/FacetEnsemble.py index 61208ff8c..e28f320c5 100644 --- a/opencsp/common/lib/csp/FacetEnsemble.py +++ b/opencsp/common/lib/csp/FacetEnsemble.py @@ -63,7 +63,7 @@ def axis_aligned_bounding_box(self) -> tuple[float, float, float, float]: points_z = facet.mirror.surface_displacement_at(points_xy) # mirror frame # If the corners aren't in range of the mirror's interpolation function, set to 0 if np.any(np.isnan(points_z)): - lt.warn(f'Could not find corner z values for facet number {facet_idx:d}; filling with zeros.') + lt.warn(f'Could not find corner z values for facet number {facet_idx:3d}; filling with zeros.') points_z = np.nan_to_num(points_z, nan=0) # Translate xyz points to their locations in the ensemble points_xyz = Pxyz((points_xy.x, points_xy.y, points_z)) # mirror frame From 14ab57796b50b55459b41824ff3cc8aa4771a0d0 Mon Sep 17 00:00:00 2001 From: Braden Date: Tue, 8 Oct 2024 17:06:44 -0600 Subject: [PATCH 095/105] Updated calculated facet hdf5 --- .../data_expected/calculation_facet.h5 | Bin 82944 -> 173856 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/opencsp/test/data/sofast_fixed/data_expected/calculation_facet.h5 b/opencsp/test/data/sofast_fixed/data_expected/calculation_facet.h5 index 2b1f79cdcb5329a1f85bccdeacb4f3e6bc372ef5..40a253f06310538e7957b25c34d62ee4d647fba9 100644 GIT binary patch delta 91618 zcmXV&X*|^L_r`|`l|l@Bj7hK~H)#z2`dTI@dY(P$QNlx2}kiTS89f&E5IIj7K~-SBUok z*^(@C@r3_{^QTVu`gooT@IP_tq^o-X>Aycb|MxeEBp014olmvY{_7Ph=YzIdL&n_7QQnmV?cU1h%Jbdhb_M;e#8kVk z=G)>JI}0yK3|}n4Bu%HiJQsDcl^sRVc>{%&p)-qo>oj-r?b|d(S(a{GoKj-G~oK~)UZ1|bvRj7t+w$Ne8R#L z2Uf4I!W5^srgQ4>34=Wwg_KG$`Cx}}HMtN|lZ+L;QjII`B;HK2r zc!+`Gg?Gj4ylF?{c@OsY$#x=kC0$}iN*5~Lv}5?t&K_j@Z;5Ht+g_w(SG3GZzYhuM zMiEbnyZg}`k6QN+w*mB0J0|Kqi;LCGi?>$*tJfio8s~sj>urf$$#IC=orT9T&p5JB@f|+hl`&wJO{CH+}IV#-2>S6_360vBo;3AtlM}NP)R-PH0Oz9 z;>fgAqq~5LZoK$zOt}ZESQ83N$tB&G*?CTD1F%|`)O?rwsssDJn)`SptQ}jPc8Ysr z#=ucbl5Z-d6^rZho9-TM!c>O_u?trkusGhNdUhqC8s5Zme^P^!g-$y?*;a*bXIq!vDNuoRO%Uzwn6Da3R?rF$AA8m8|us7m;dhN%Qa=SYFvBVaU<{zKgzlP)g( z{7Weskp`E%t*1XnB>D9RGrBVorOtQ9^7HwK{fwP|?|v~NC9lniy{6-R4WnV z$<`xECDlktC-}|bZMDesO9B73hxJG}Mo-*s1E9LRgi({-g6dnIFqC#PP(+X762ZiF zL^#hk=u8NABBsUHuLUt($kgPboARa}G^eUQZ1=JkWynU6%9Z;N?O9x;P+31RW#mgD z{Q<(kDl+=v_w9S)F0b=L9n|#eOJMfH|v=siER0gwN2`(`LqhiT+b#TBn>u(L(gs{4DYFsUoRGRF;LiskOx zZN{aTeUtw_Wp^QF-;EWB6$8efEl+F|eTk{AW@Dr>K&;dkow4YNsWO=YLD5l&YVmg0 zJ;L)jqRe^=yuO`@oYy^mlw}TbbSns!u`NdIl=MmH=HWjA|Kyw*mOldJoXT$%UNq4<8J-Xf?QvUvbG^JG6` zKOaN}9L*M`wZq6u+9h(C78@CC*)2WznT@2hPeeU^z(L}@ngKN`T$H-Bj{B>Di;B1e=Prwh;wi%`8Kg``YIbU^a?INWe#J; zSM|+A$`BTKBQz!8H;BuMCjyEn132=|y2&L=Sy=ts)6!)PeYoC6+Gg<~6KB3YuHOo* z=_}OTUn}kcdx>ONt0vmMjwmdGwzGO({??b5Ep ztvExRs5KuNfzoU3JMMYC0h4XJ5@*)dVR58v;FMZ}$?1=qk8TA$*S>oE1z3{@Rm(Ij zq4Y{u%J?W1Vsc{8wD1OCE!K89{yUW3A-}YoLSU`F?2?z-Sxnk%a7AWo6e8vFXXWYx z>Q*%~WSEJ_2lVMxa`}itYqi_6ytS0YnsGwYmN5aZyjW3PA_$U|q9vX5&!@=%b;{LtKiqAo}; z>K*MuOnxtEW-qYr8;uP(+lvf>CzLEFm?-|Ip>*B(enc1$`MHwcSSWB=_C9ORLF7#B zv6gNdLZ)5sWY&qZQT^hZH1P&DvXnNnzk88`rdsw{x=C|UY(og&LM0cCdKU`aKQMxX z{TWUUU0m#IB0Q{T#Kj@K3Ho;V9PBZzP5U4Le!@>WbOn@dk7r?F@z7;$Zw-nXycr_! zz+p#*z5gIi-5lX}7g*CL)LJu_v+&XzY9FpQ^Rje=|WNsuIH>s-zy8OdrHd<%`v7PP&o0V%iU3hkr``UO+3UO$&KIVf-?=Rk}-VlW-qMh18I?!gXQ50XR zXCl&6cEYf5K1$waD>}5P7*TIhSW?@{5k>M)eFw3;644aq6|RO=BWiJQ@2Ro(DC*^g zG(CH$-Sz)8Qkjitnki@g*P;cPZhL2xFw=&_w@6=ULIIT(lt7pWQA$g0$mq_C<7a z@d_^I%W*?4wBLUVA-NoEs`uy15a>Eg<>WLCSkL8uNO{&bj0H6nvNFI?#lK>@Y`O?- zdZ|-qjQ#+g`T8P%Y0R&p2WmTT+?fNJ$fn&%Q=vy2`5B33P3$oUf}m-G*q5SXA7k9T_|kVHp-c4bK#Pcub}XjlcZH^-JnT zatTo)#MWM9+Fu#hmd^w~ptnv!vmc4;-_A|RWFcFpc#&H1K~!JEY3&RgLKzwMHl(&; zL>90OIUdbM!~$Vm>b;MH0%8{1Yd9Pv$L33af0K&@5M8lMd;~@9IkOi7YpK95p=<*# z*7}#JU7yFn&xX}ZOE+-v^xB)+Vc~3C(_&eAk28$Dj(Xp9g84w!?O^EYkU`v4?V_k| zJb;b6;@HbJu)xlHwl#42u=q#Tz=sSbff zoS}y67VL@z1|CmV&OI1zr$p_r)Z>?o(TR?;}!=#+umP6hz6`lG0rF29ds`d_4Xk4^fu( z$xMvAMU;6l7Hzl;k<@};ai{2rQrmf2-3vO$RdAw1aw65-i!HIn7UZy3zO*H_8xyFY=Hq zYRishB1*Vz+O%XpQaWfYwd*zunv1Kf`mX^*z8GXwVn2lHZQ>|LXv2sWduWAeC>s@M z&PqPt%t4WlH;8rCbC5z4y_-<==Aweg{e{1mji9P^Cmikr>sIl)f+S-uF1wVz%D9Mw zE6#s-9}6|Sc80kq1=fsuH|VhCD75Qk_|+cT5FYn(`udarU0-UIcQG5lUD-be)TCJ0 zO_^eqKGKH;95&fCy=G!c=hq2m-(DP#m8xE9_TYf15JI$aSvRKcTi7Vt+lkrbrafW6 z+LjsYECj5_S?!*6dJIhcGqCV-Q!7@N8Y)^=+=MCTI)1C`HsIt>8me={wV1k9^=6(= z4Gt{h-<$-qpz|H$;o&{N`iGE4u~{j0cJ-kDvVuv;e16{A7)rRs*JEOKFEMGJusHcr z8(7n<_3gTWbs6J+wcBjK~bPcW)5Y_(@MuPaaCHwNAa<{1&lYJ0er7 z$`EyxBAD^QGw}987y$@Gb#H zE#;#VaxY-+SJB=#-1iA;_^HlajzvRQtMz+OI&~1s%5{A@YC3=wj)*^;m1JS(8GfP3 z(LQYOB%e6_iirnIKM5)L^|Y|;Hmu!Z$M2Rzt1gr(LrF_po+YA z7u#{{`AQ+@0}Mh**NVp-?XQK>ns6Y)*HL{RShE`{1&=ywaq`wJ;?iC|@MECs1k(fG91F3tjF6w48CbKW>FfUe$J+F6xt9l^zPMVW zK*$f1^4>X_j1qSdwX!<9GZJdJ?|~>H26TOX&CPSwd5C?{?#bgEV7+npbarML65hDA zPnktWrauMF@}B@3e!!qo4r(~L^~38QUiFAncT@Y~??%K>U(b8uZVRG5O}*AG%0P_Y zYW2Td+L3^Kc12<-STp}e3cP??ZjSpimAKH2s1-M&5=MHEdhFw?!`4g`l{mE|oY9Ap z-;%yjj9G};7VDo|HGrts`*c^y4k7j9UbJ)m!^rg6$H|S(Y*h0iZqIfYxl-$jeY#UP zh|2rmWVsF(#g}jWAv(rImftVsc-oGjf*N;D>>wAf>7BG&X2!)=Eo3T)74Km5DjZO_ zD$Bv-RZki(-DhL1U9Ugim>$L%TDqS%y&J+xsv%?4JA;_MHg2&C^lhs;+w)0+g+2c6 ztTTsNp3$S_oSVVK3-2{7XMCWP3%HIZXh11n%iajjmI@w?o}#F#0s2l2cE8h6iy8VYm-|59jJf3} zz2<^OuBHBxr9+58Zyzpn0Ongf9TF_rh?*r^6!epgY{eAcy2rr?rtnpA z4UAwaL(Ou)I?Qnm!^S@y{z4Fn?219O#z&K{NKPE2upq_;Z01C#fue~~)dj^pRP z3VqlIR*f&B74f$c*wl2$w=l5@dkhn45_=o4T*;@1#+Aa#reS2(Ad}9D}y=cQ( z`)ZUdUZnVA0&F?`Z(#b3dc-JcxaG6036bU80{a?a+`hIhH(iB+Xpbjz`LDL4xvZy@ zjJgh_-nv$Bw+OUv)eU!3T)L5X-toK3s(Mf|%WjA2X0U3ie{CqlO^8;y7vHPR!q`2! zalMSs0Gj)?L3sst5YamM_3!Ay*gfn&eD4U1+x3i1Z@;k7%-JFy>Rk@9l@N>nw1bOm z6Q3-1ZibQU0fkBEfjzfdIcPt|#b>UUuw`tx*z5MB!5~DsVT+q|&6L2V_r@%9d&0&s zJNyKRQ#@=u#co?|-9Cgpl1caCBL}hITD|j1;MoFDNy79h7M?rz@X`G~sO`=x$mwZJ zET~X1?+rRn-h6Q612DIxt+3686s>+J)S|1Y6AKe_vjL!UuXUHZygb_RD0##Fy8SSA z-^=T|!3Q$0+_vt|gC-ombc)FI+S7mo9ZVQ6>Y$GwJ*a|D)L?^v1FK#B%XE|7#uopp z?S~I11WpA-g|?R&#%h+-3s=+-q51$9mu?rDEnbu4$KXgK6PoLBl_IUSazx^j_L9F7g9R0q97fZ)Bfp%#Jq*l&iA@Ba}5*8?dkFm^zTE?iM_veb@iiUBH`b_I|O}v zAcJRB*&v#>kBz2o9Y!;1dRh0ip|;=Y55G9dMoayysAsQpP;nV|nKhY<#yx`yZ&iWL zO$SztYmA`hJNPI|K5}u_-+vi&i1Br{-HQ}%>bxzZ&A4alcD_~o|2Mx zFD@<>nw;F%gMAOa=u;Nx#)99Ui(G8)#0tZo(&wLa;05pU;0|D}o@Q9gRbk-xFpI%& zBpAt9Kg=S4IeE#7T8?r9rr(c>_|RQT;HYDEudH0byNOtSQT$Pf>GSR;LcHMJ+^qKI zCoyr>u0#js z%i4ogegShcpZqEP*@BYKxF7qV!$47PYM+Jgwxfup>?;zz9f)1}d#ME2 z^mwCD#!B~YRG)8MJy+a=sMahEEny~#SUF!m=-G!T9p*JBtNW4jRF;$KwgF`8_(D&I zcru8_>ox{amJcIYo!Cp`d)a8=lPuaW$VQpTWwqQ;4$2HmI9MgYMOvHmYCgW>qIF79 zg}3&OAlcRkyHQ|nzLfO+$Z<%`zZV=3YT;n{Z1^1YrTS{p8wkFR1O}vqQUov-)sq+n#`TsZ40g2g7gv=hx3r zd5yrsCGH-)dQ+$ykLTX=W-~jn)}6RjGASLH)cNA-LmwE!{p?fJRAF_K*Z;s9bk4rf z)6p6WI{*DlTU(_8&$*Cf3fo}}SATwY-Wk%hKii0=-IJA=+>^fd`_BqYorqIAA`fwS z?2Yo6gP?O`C!@SQP}|){wpd&S=G%*2t#AS6_0F5G*`LQG!eX;b;XOoYn^lus1(A#V zq{KRiT-Yal3WMkK5WVx8&$MtcBHM-wIdWc+hYiarxaMAR>3yq;l zBk0C{AC^DV_Qc2;EOU~Jr*72Lu59ICoyJfNDK*%T=(%?hz+A;vl-;z9jUzXgZ5D1G z!ltudoIgYl;+dOXX!bwkf%bweYgm{l;0SI}8tTKw+2QNrK<6`E=Lf}rxq;u6E$4Kg zwog07=C16gQsvt1^l;Tc%QDE-Ge~Q=+ z9!~3u=rakZ?eeY>%?E+GgY>tk|3nztX*RP z8c&qWeqe6&+&%6IrKB6WWA5ZrxM$Rf{-YB0gN2CiA8;Uh6QF4T>WLyD^xFM4^a}XVI#LLzQ^}ZbC54#rk4A285emxIrE+$B3ALEYbXg&6)@#wA}b)PzMjX}nuOFqeY5R&UKudoC0V7^ z4qLMO|JLx{&qrik;q{DH#fXx;+tMSY9HN&QTg79Qh&r15OQowCu?vk-XWc;O+UNX6 zXP})2eRnUgZ$e5o9WvgdusNAHtEsYw0G+S0O?i609b&W7@ow}EMAvWhFMxYSg>gN3Ifb(upGeV7t|=${4+QuSR4_D6zxvEv2<`+Pl! zWSGj9gpWiwRywY-Bz6jX`&0MR{$&ug)}^&GLFWNmvfuAL$iSu}K}E}AF z!UhVQ6hQ@G&OOzyhe79OcW!h6=A>U;#G#iL3W4GZ_A+mo@?k{IdQki>@8Xk*o->q=hya^Bc)fZpRW2|L1-2TLrkkePhN#zSgF%vd3)?HS^X_76iiRS4!jtoXw1ZUDTeeT1__ELMw^O)GN-^)z%3T(q|f2(8~_TX!H z@BI%Ox^aeC@0{hgPE3%eN{`*C?7(HIes_7VKnz#?m-n4M12b}V3O<);#nZ<_?IV(# zuoAECQ~MnaSgF(JX-#%5R@aH%S*}`xGo&vUoh<{MPf7oL7gm9tv%jVsj{%)ivTy6f zfzElJMH%gbQeRrc+1sd0Npp-7Z1zAZ)|;#@vp-2Bn?pQF47lD`cXu@(LNs$7}d7SCii*_B9C{j z^&QPaNN&K^_V#KvD$CdUuviFV`dEB>v?B+Rd;Jub{DYXiQDpCYB5X>JNmY$+9zmPZ zN^^ev;)1E|{k)3^;o@xjAS?b49LyAp%0H*d@>oWW@6o7zk@3xdokmf=pR1I z9^Cw>z}K7HjiX*(HGT9QqF0kawplq?IF5)Xp%ekNed+$BqlOGjO7(qxK&lnfgX9Lo zA(D|3F*@^34#x9YO+!UmE%vqGtH@FY=7N>QTJIoc-?MAYaRO?)>&S1PQ^4HfeG`v= z0j9gLO9eRDm@bu+`6)XUQ#FrRc(P(Ki8NbYtVPD82ARqG6%Pxw#cFmdI(XGJu#}s94kOCLAQac2kgU1q&BBUv35MJlRCj z=Qh}OfdoP};4Jud_LjlvC;^zyN#WaeIQ79wMnT|yem?|-Q{$^w0&{VTvnr*>u&d zD4PJidRx?66rf~>X6hNo5=0IwU74p}fhano^oG}!$aiUpim`kRBE7ij`Y9X6bHD2C zAC*DpCq-*aXiadeCi7t39$?NVb4bjTfy7fn7sjI?hNCI|&F}6&zE2-F{*r|wH1o*) zjPo#_XUT8hPze_9(vKStLBo-y(zRN8n3(?3SYmrzFBYaSysAz@ zKfms(aaf@nFNFU{7ya3Z1w($F)PmA}?Stgp9gw+{|DI^GBMdy}9x1+6q!kX5C^N+4 z$8h~}AnRo4HaM+3!a{2bYw@@*=h*#2HJDj&{a02YFmD@FFK~eI{N#vu%Z?IEInlZp zx(WKZq}{EWj4ZI}%fEkdd;zQ0kKTS8V=zfd`S*g3JEE>UAUCiw4$%YR*?<3n%)J#) zdVI)6?3eK`pPCiGcfpJ}WT{_*==`P)4f`t)T`4iIJEIa&s>F-(Rca75_tIg*B49ox zBdw_h%p3PDzf=M-+#&4?hYVU#go&h)o&${Mw=gU(9ep_?kjwtA}cLf_Ca}`q=lYw?l@Q75l zEFH!H0taL#8V9k;nHFBV$N^mQIYqnKl7+{mmk;`j_2XhcQ_(|x5W^MKJ)KDI#p@LB zP*0!e!K0yipOS&O?xKU_k(o}M!8+$11L0?uYpk734v>?0$xBrkJ`k;{{exAi$C-IIp~~z@raY&kqS)y_^sz7FVyzk zTTiIY=3`Ru_1c=_S(swpB-j1zIVN%46V~jC2IePj2faFjNE@Chy?z4BJ5Iav$fO}U zpNh5K-)uw{x|JK_0i}IRFkjTA1hJRIU5q|fK_Hrsde^NSxM1u#<}VA(>G1{$W@T{Q z79uA4Nv{D>G>Tqj)ifdJ+F1R^hg*@siT=0Pje*z-=YI6iz{82;#g_a53%9|G!Dj&N zTr|CC$HQ)9I}owdv9|}&-30yRrI|>4EIVY!`98$1nyd3^gqzb>rebT!!~ml8vwAyV zRvTB?S!`J|gi`kQf9qzp?v-`3RYf>s3wGo#Y?J zjuvhbMMUc$HgHjOijNtc*)L=;aH*JYxR}#YU*@HFu3%e7+LsZBWd zHH>Oi)wLWo*sAq;br-#@#guG`Q^fxLHJJMG3LhgKVmQ9jlZ+jpbBjgosLo5FQ5R?m;5pBISVpB(tgwQR0WC>61%dH4>DJ zlYRrD|J<7A*bOn<)qB>T9a>Sbnu2F>0C+fih%d_8(ezi+*;2kvB(SNGQ)vm~xqjN` zA1U2%dayd+9t08RfedLKX?M3hY8 zRm;PsA>`;R@r(0cZEu_0aS>{}muQQ;EHJOJG1m+F$wAa`E2+>}E+Y58v9p4HZmVUj z`f?Gj_5%=N_`V16%ibp7vl(8hQCo}Gr$t{&$>>j&n=$4#mf zLFT?;>uYyKLE296f7#(>&cc}ud^xHT{h0owpy|>O6DO}Xq!uT_D)oF))KSp+9Fcg% zVplhAb}pQ7f!gjXf9$Oby#vRepf!DsZpX#`SY@L%1Jl^{%^TDqZg*xso2`INs#Qcx zh8Zxoy-W#!t(vfl64OYt2FDMbmtf>nV!~O}Rohz`JY47+ePwnrCO3~RU7HNdb)GNA zk7UC7{Bfa`D=^>hzUB}=FlYAct{e41q_ge6U+O(Vq;VdaSWRQcB$NBv^ z;ZWPp^7wRK0oyKqAWQFB1tLqvv_GQ5v0LApF=M?Nl`W#vegC<+cD-DzB!2I_6 zJ7F=FFu_K?o(9qp#o*gV1be5g!ME%FIsAH#g9MaSZhAk4RZD1=?`B}W=5XK7E5Bi# zW;o}28*2N@%ZJ`x|IER^f;T;3nsacM?NLpOVu)NF#W!Ev$i_-0eNVL)hj7%mqJUBT zAf9d-F540@fGtr{!|X8@4p|fS=@|h!7ohAeQv&8B!>G!2P}^gZLjJ9H?ZL&fvGJwy zaLxM8?t96vPCPZe*R&j%4`_*Mo_^4d7g{-0G`M=3&i*D}tka4Owy$;G-vHyeRDi;- zV+}YW&wlE5Q!TDf6Ud_L)L`GAjsL#Bfzp0sS;Wze6*yUY_XH8$3d}DUd5A?oZC|ps ztT-$aQ^dwx@9hHS0d)dV<@aDbPi6&8_#u+d;vR2hVD7ua@ZJrm?V}#O{rWkG{`H=Z zYFq(0o`OvU@g>MvG04?8t^(0o)wXumfQ5T0ve2(n1BZ&chaWdVJHP05<&j$hQp&wW z$W8uhLa=$_i@gQ2nys9W;!Oq$eC}o!-3!;O9`fndlAS0%PD_00=`Q5)`~IaH@4C^P zz3B^^MTpxMo!|B!VIta%!ek=84=Js&$hMg5N96e1)w?JIsQzFu>+1bMWI8pQD8L#* znOodGtX$7VrrjcEZ*qO0YE_T!rv%7m9I|tsNROaSragy@>Nhg;L5-Pm)im!o4}Qfl||h19_Z)A z%Qqz)hwb^Ezvef)YB9Uw{ki_y>$3l1tOjN5_+$x5()1LSr{{_K~cG%LaZ1N!z~uI-nal3 z&hT2c?uurlG~4#&bz&=l43;)m8pOg{?S7c+5W5}uvTZ7UDRd&+Yk#~SUFw2!Svseo z9(1nP=P)4Hi=69cV}4pPA>S+UXnNU)>QDLDlIHpmdw?Es<0x#;DH37+NrUhuy%bmU z3EKJRU|A_RWcE0=^0ehUHd5Lg{XqpH8IKFw6J6#B4w}Bb|FcCr7x`xMoGAk47d@Cs z>^8`drEN$`vj?MT?g08sp%JvlVR}FrLTpa@~LDu<^?v)3|qQ*;pVe{8-`-*q+Zx zs`9e zcT?=f)TiaOUcZ4ka&7)n-+?2LtgF;RnAP$gxi5EPV9L^4VuHXtLuQR;HLD3nXq;J@ zdb$A{=<6==>;v1bl$?3%2s}a=NnKCmK|BArj_;QYly+gi5tXiDOpPxViGB{H-4XHq ziG|WG!zv{F^nm$Wrh1OWeM~ZNbN^&>9#QX=*8eI8oo{}8y@U?^yynDMTq@M|{f@c! zn}K;JS@v%R)ON9-_YY*ksK(Zu-rWl;7B`q#Y+*d#b#TX;A$TujbWk-f9GLr7V#E*`xq$YQn-!ws&}aep<41+EjjbE~A2?s7FN>7~9ONE2x_EF7G9)P^@dDUgGa15fp z?49yISf5YoE6vq*U=zN2*J(G{o)p z{VMqtY!p$IewYc&6>&W!~9bY_b&z2Z6_rxTcqj~uF&hf(dFAz$JvV6Mh} z5j6@j7p18j8V2N|25p4$$#_H>6%aVS<|U#V?P&hMLqlZxF8Sj50_6NXo4mafW;Oli z+Sc8`JpGBQ-~{yZoBBK6oQHm%;Jl#3QwL-9$^!>e8W2gK)-~iRK5@4)Lz-~TP0B2hc=d^0`mgJXNpIU zvT%KI-@~2ce%vfQ$Fpq=EL=kI2c=x7?E=fk-ul7Cg#G&R_h8#2&K;hd2Igea-m23e zb4RboALSF;aU$WAesv6(3mav5`FVqf6Y#iu`wv7iOK86Hfe^i#WcLdFsKs(su}}WN z$%My4-rSSz!2Hw}+8{(S^9to{e9)SuoKS}`>+zduzhl?LW<(|bNugU-#qsqp)O&L8|)<|7La7Csm?D1Kxh zXWZ^LquhaP1zv_LQae#bfAGhvHC>4EX~)&A!aay-H^Kfcf~|ybe355hTCtm2mR}7u#!Doya)N#j6)WCWBy;8q4Ak z$2ABJ9uwSlPx&PqTOak>FS!m*qhii@*+TScJK46+uxb#`tyK@9K_s&-Vk%$8iiM4d zS_!nJACogBRB|TZ(s`B7!6$`K+nY~@+Fj_u3!<`etD&~5XE}9bzk*!i$ynb1A^fEYt6!EMeeVNjGRw!DmVBti@zG)9FU+Bz z(}+DjbK45g=;p!KdYJ6{6Nf06# z-?4w;SI;48tBDi41={%}Z=x~(OGNQmGV+QSWPY<}f|%heL}UuO??Ng?)PM(mkqQ_& zH=KI=ds`J^^S9A0^T5M3l>ES|b?`pezvj_TD2)!*>YEv6HhuGoo!}s*SgH-YT_$ z7>?juzTF90>0wbeo<^@7oJqr&rW4yd(=v#KTlTRB6JS>RI@NQ+g#|0r&i8NR z`(cCeXTAA%CN7xWvw!GaFIEbXd2>Fj2Tv=TP`4;|V+E$MLkh(0>zWVkxbUt6Gt9cP zId<13L!1FE}oB$^xEzhomm&hX+cgL}hX4N$~CQkMHG$_CnnLSG!|9)b??8 zUF{PUa5B+vaR0x!ox;%8U+-3e>4k|t2c==fGL*Rc4lN5)|MUXibb`Fu@tk-0$~VnpS{T^nvdQCW6(D3Q&`xyfNyjeZ-FBciXLUj*A8 zl2A5j0XkonuG^Cc?}&FyA0Pbz%vWq*uXPYcvfyHzT}Rx2KVV&#c{29stba zRGW)`rL*x&Oyl-0Xy=hN2XvH{62n+aSfsYFZx9Eh=`wCs4&bQm?_a8Wvv5tx&6pc1 z{kYz`A#u+FJV3O)mSkSliwA1WN5d}nU^#)w&{~adY~ zyepnNlgVs>x8oir*SeB4TXFGODcV?h6Q*0KAAfTgWNy1Q+n4w+ZttSsJ*W=M>Nr zflMa(DXU`M1^T(cd}od=tXPaz*~p85&dG|qs|q1*e{w6U`wHm1X{kzJC&cYDou>u@ zP9oC2f$K`V5WPOLPyhTZ4JBvpSaDC3hDd^hMy`4xqKt@@{tPNbB$1slArXLl^MDoM zVqb+w>vxLve*oXUrPSBjwGL5DY6KFOz$4RBih#Jp5+Vh77hpH~mX$N5ZNb zs;f_Qpz$v|LXC4fQK0kX{aSpmHP`0hvoVFs$4x)J#3evG-)eVdo&^_>Mj-)9H^SCD zMX~vpB@3y4mRJ0C2Ocy`{3NV1>)<8g3Asy47l8TZj&4Pm)sn@hOv)f`&*bU5vuMFV zTDQ-AtoQf@qzA58BuH8H>LpdD4VM< zHibZKKPz+eunt^6ri=^Kt!~9p3b&a#@espB+Y7mq8{lEHfa%{CwQyxGJ#$wYHY~(t ziL2zaO3XgxbFK9#)b_JMuMCudxqi=*F%e)c>2y=17IdzB%_1oYbS@j5WW5N?=famP zGj&3w)ndOZ5*{K_>~EbvdJw}oHHToUjKq)*b53u{mg5QXc zixTZnR)WIOK>sqQU3G#zx7!C$E3r9;95+&`|^*>ziP}7(-5q^ zRSAbrW0SXuO%<4ac!(+W3t~9`C}raj@NfZ^&6NL`k2j8cqyzIZ-qZ_~z+8MPgZ|wK zCKxL>Lg*np9`6(LnofnIwQb_keZbu8w0+}RXy+B%KW}%2c0Ro_r=SXSKKH9PIJgQ? zqmN!G;D^U6!N+?H?$sf>fshKZen%rBJ&b)dQ_+lQLFB3g*EYm>B$6OmH9;;h8sF}abOpV=9>i0aCtz0B!_P01hK@@aUaHvBiaVsAfk4qbKF z%7=x>mPFKC+5l3Tamv;k97M_Y#9O|v9!5(`V;7QORI9gCA+8sJhf|SL!CxS57x?(r z{0gjCY=g#LxI;hpvVQvd#ikJycRq9VGpOwWzj2Yd9T&^-om1WqI?r=5(@}#<=P`5t z?vgY%er?N<5rK9t^=hna`;uWCo1?43(?5vCb*+O6GvN{Ht1!;%AQm3oMTx2356G7i zw-ohfA&2{M^v_j#FHRlbo2n1Y$zNH%4*R>YZU5YZ{eL^L$D#SGf1q=N4|nGc0^6}; z)IVpHy%4=d_OIDB)`I1DYzE`);Sp-J^S~NTJ*Fj`6rQsO3-^6}PWo^)p4)MIJFf%C zoT9JGUtf-$kMCV6-2ljm7q(lna`Q3$e-vGLAe3JeRZ$W}5u%8SlqD)sx!Ua!g+i7h zLQ)}QBqCB$5y=)3LiTK*eV1*<3}cuXL`q4rmHOS^U(YvY<9zqM`|dsGydPUu>LelN znbs{rnTYwNP6LG%PYDixt1#QgCg4A#TW)s!8C0Dqxqdk#1^kUvpE{k$0girKjm8xi z=jMi`g@70P*Yw<{&DGrD?&Ug zLJF`9$7T9H^al+Lk1vh1>_^O34Y%}Prvvxapb(o(EVm~!ledgw+CF;*uKCi227Ka`&q-&U5d7GI_UzJ|PQwWjfuM!WmET z{Yx7lIRCbkF-jEwB{%ObV%zBb*lPJsLh0nY#*w~u;>w4(AHAn=d#=FsJ*~cp z;HcXy+NRn-a4(~=y@^`FOjx(SQWMkm6YAANpf7?$BgEqfWy^9lc5hh$EY z4Brt|SMO=sx*_Jf8!w#SgqUm11aCAj0ghbl{o+#3fI~Rnv-2imE)=^xW(-*}3A&W5 z2HdLs7|#^ijdT0T_ffZk2vCyfTkqgo1BNE_^&MO5vHL}g^42$kp~Ljd!r2z!|D^7@ zf2IxP{EWNx2)X~-b-5(_v9hw z!Y&o|(zrd(6cZ-J)DjV{yfl3&jB~9BN{C_wwpdEKw?he$=)F#EP8Y+R(Q@)jGj>=M zo|M*XMaW6)1-0+)IJZX(el5??1b?dz^_^nRK(i`S_wP}p$-FqD_d6^bG?yPQmy9a_ zNe-@?ajQx}(&*wbV;2HCb0}}T-D<#Xr`XRs+v}k-sctT<6H~bU<@ubB80Sf%-?Qg1 zg|o2V&>n(Qd#d2_U|#H|xkc$OGwTLY)4SlO);T@UWOcW2fDb8A*95e&C=G^;j0lVO zRFIWZXV%Z*+C zT*jl+Y)BL)?5_U1ew7=FSiFoBe{-Xt;pb+r_ixxB{(i~7Z`&{lWOM&s%$h_2a^}l_ zWthW#y;qx9ikQ!Exy+x%ynTLo-lym!CLx!%X@3H;UQ5*WB^x3GvTcJXle-v8GR?+s z2eHNS&}BGthXEbKPQbx+T=UgVfwoG!=Zyda>f zCv=I_Lul^crHLWtf7+gT-t$3&0WPYUpCTFzI4}#nd)kSRpj^Yh%4k3qC;F%@wux{% z+Qr|*gKRjlv#zdpY6%*1_0q33h`DHN9oM&Vg5#6*jnY5Ggujs8uA|(zoO?U%xpfY^ z=c|`R+je6aZuiCf%0Pr%vsS2x6ruzEGJAx@GLa59pH^Zq^BU*&XX(NY*+#f@zTk>TwBOqSc14&&njh4YOAAp5VgQippGyh?vd1?mogh49R? z@)JxDaSEQh#$rNA$a>A_o5*^7*G^lzjtv~Y=07WEv7wxITL=%5+dEynB&WV$XXU6Q ziAF}uFI}-KAYl%7^ZiO|IT;9DeaM(N z?IO1vm-A;<*T1Ub)XwppR4dkc8}s(Xsp6rX*gmhV^$}=nN0YeyfBWQ7(J*|kZ0bc5 zab+<%gZjIk;3s!RVwlf9(Qg|? zfuee&*^S^v7KwQD_r){%9u{%V^+GB=9@la81-|bqP_4H6;-Al*Xe1)uN4I*-Abf4s zyjQkI1|-XKyZ1gi;bkYan&9jw{6DeHin?fon(0QR)7VM1exdh8${jJkt9(V{Foocd z7Z3WeoJ?pcwVw>d?)e|1Q=fH_-0oIf*CZxG!kSFREA=1m+lle)7|_^^h66s!=&!?? z2(7czTulr0gunL-|7ugr;k*q4OPZ<(%`T4Jho4}a>-MZIds9qE{yHTe_%V;rl$VRv z`IAX-&{M9sm|&b|gssUgz>-YF+0|#G&9KV;%eu+(8TfZS^i<);w0-v-jm;#lY^=$? z?g)Q^bNii6Yw<7GR#SN!ZLd!NvwfkMaTQB4cAOtRZ>|Ua+@9vz8Z5oOF&b<%Ma(^4 zb(DT<12@h42N&*lfLeKDW*Z-};Evk8d#R0{5+4?_=b!XIXRGFY|IcJd9~0iEq=%$- zMRl3M1SS)AJ|3_pxCtA$+##4!`)zGe2$uI%}HWIA*96gN3^5nf^*rkljEtM-@_JYmT>TPA4MfrCv%E^@zFb zsoINUnMBpz?Pe;L80Qt&%e{ONbL$xqNwzs~d>$5AZj8(MDe*Duy{< z)z60K*i|EaI~X^@#JQc``gEBt0g|b5<%cbCf6i2t*5O0Z`CIkOrt(IJAo=*!=%SH` zEk_jpr#6Ui`TgvwR|oKGUs(9IybF}P?o^#S(G4Y(SK=9udJw`JKX#3ip_7p@BcaiY zRIH6N@3ACfw(fYw#8(t3mh!kO9O?%WGjZo1p)fQQS;g^{e*o9>Z_%^gcMd{G#)Yjn zorge^>*v2RG#q%?^sMP7+0L@pn7Tc5R=4Vf0{y=!jg5k(d;elawn5B&xLjpxN?IG7}Y-;Sp@zIBig zS-~t3M9iOUP^vMp9Uzp{gzj|6(}}&Z`PcIhbFavz#k=h^!maCS-rJW{BI2fvXC8LX z9|opzJM2OW$HPKTmL{;pa!*|S&+Bfa*-7NcUO>YEDciljcc0dW%cLe^e3rCpRd+ox?zYm~ftdeY7CPyInD1WJFZZ~ZsQOux zpqrFOa2z8aIn;=8{=1Pk^DxHwi&vXY{m+1uH3%ao*@D08+IP1&pF`C>9+_NQjB_7x zn}4yG!da|%rS}-SYSlTfcCwM&{%(Jd9!Z7(f1i^2R&B(*u#3ACYcf^3{3`M>n8UqP zT%~gWx93fqN1Lf_FtuLuHUBkiv2a&@*T6DdqHLzN0mix4_|F)f=eSinXIn-2M8=v> z_SbCa1xZhlp080@dL;??t{SI-)`zoKZ{l*E9$i0r8X=#WwUs5283Vx26LOl6AB6ek zuAk!FF^7A){m}JuOxVV__xjQg6rr1HxPAy>!N7~Cc}ppr+wEQ4lPlQp)sXk|-95v= zPG^Z<#O}FlZrz^;*jAgRwSjII#<_U}wFZ~-tWOetWv|d@fOwtJw1l>u-{g+z)}lc1 zjx*^o<1vF6Z=cyBV?IEnO!8~`Dbk68(l@>~h`H7ql1wnh`LhQ7)Y~tp#Gkd=KmS=F z8;)ZrXt@N181OFt^JNHqgMP(w*2HuZT3DL z!4_ib(fR1h$C?O3oh4RRZ9T#9fMg@7zP}dd{)C&sB~^svi;es$?&T;#-!)NlvzTDM zZk{|BgP31R^H(Eh5}M9A#QtjMG>r2| z@r|l9jPsW7+t<9nt(v;o)mxLeoJTxAt0RTWxxAlyu}Td{lBTvEmmR^YM@sx%R@oDAKSCH2JkRtuB6duxfRor#X?OG#BkRl@kb^y}q>|E1n_zTU-z zweru3_{2P-idS^XIu?IhU-Io6cWLfZ^XE%i^syV4d)cRNhzz{snxF?j)y1 zP!e&Vjtb&lEtB=6wHRqK!6QGrY&xJs^ury)KPXV-GIBk65{-k-I8<&$%tgp21vn9N zug{x=#|~lIe%@nCVknl|bG<&&`;i%SPi87#xgV;kMWO>ja5;CY`e8`L4$F79*BW~; z%zY!>3cS#=wJMEH5;8{yB*lAnWCr)=8(vM#JVLXm)~259?QDoMFjn1G&4!x7H8sJg zWC(3OmH59%&1&@}BW@atxPS4Qd$j)=9zx+33>x9))U-8&sXkKs72qOho`g(F7s2zhuAhHeww?F^S}LMzxCm!O@F|b+%yah&Hm|-sXjwndboW z#l36mX&B!Xp4;Ede?YPt`E3giVl6So4iUnVEAQizn{(?xDR?`TWYmaI7<2yQ#PGIO zUH2}w4LC?@G>@9o9jIJLZ2s`O6Xr9O-Ii%#3swIjjfDAn$=CSd_A#VNuoWMD-iNJ~ z+O(!{Y^TX?^f9@Itrh+bM~0vxZp-U)o_5`#0|)=Ho85f_V0d5l-CvAv8d!+8Bi4Ez ze@+WuV8YbO+rMwkqCXgKv3vk}$dD56Zq0v%SaWxH=XEr&!P{1QCKeS8hVUqE37Jqe z_Cs%I$choP>7LhzW&TSPp^B8*N?jTt znAb84Blej@^XUsu%Z<$#fA~8*iGHRd*0q{>7G@Q)x$wRmQr+q!z+@K)YB{vWZYS zb7a@a^m-zf2M?n$?K;JNaW+ zcXSNAZY3q*KHPmav@50%{SsMJBI$HP=dO;ony-+}4)&%&6Uc<(*b%r%wHHd56j}Ws zD)_g||8k^Z&X#h{!B-x)Wx`S7OGivzWxAmm(Z5*5Y=Y|EEDdeUSK?TF!eX8HEdrwcC$64iIrF zLsHWF=|t|4kV_6Yg`2!cmz%0VD`we@t>Jg5=mnqiXHKP;82459a%PlF@CNRvSRaq+ zd9^etr`8nhwm0jWe%gqJU`m`PveG&T$$FvOX=z-yb9R5e6WM}wzPt2f8I0>lQ|f$9 zJ*MeJMvbbqM9C7Xe0vox+wul}nL)U0>rFq}^bD8nM_Zb@vvJujUvd|r*6OzM;ec_bc}|os9Px|9}w$HX_;GI=YXUI-+|dK#QG8S&G;Ww zE*u9q3|JOw=x|Z*m5XL%IBs(_Z|YlZ{Bgq7qL?+x9!W_ zMJ&B|%8nU5V}X~nx?qAbrfP+6{8&9`%?y?UwJV2-wy{jnEB=_Goz1)4i9}|SA?;4Cs|?2h|v6aRh#84-N(QogwTR=cyM zjuSDyW(FfEUMyW_(N?39)Y z%fzijQtQc!1wxNINQ9Qqt4kOvld9ZNX1F;UQEU-U` zMCS9}R_#MbYW?;|)7K#y{9pe~uE|8G_o`i*OCaTdb=qX3RSTBcR!*+;;V1>oDLL>KaJgdnxFA95NgaZW)|V$E_G!D>;UZSRXm*WaW?B?`}Wmuc{r`in$an zG>u}kBUM>;xLoHl*1lpzW7o{sFfa2v88k&FxE9rW(OYU)^qDZ+eiJfdu_THl9Pzr#G?%cnDo~jJ zJ%$B)+1_8q)zH(i^W*YM6Ma`{s=bici^0UemMW=l$ zxm!Oli4lWvl$C5|5{6l?ube>Pp@^|@)lV#=r>}UeM7upeTspMl)&Ue4^P=|92je=o z)S)^zpGIuc5uf#Sq7oxN6xW{+?Irv*o*enxN+t~Z<(QN^=p$g7KKw@wHRSIGo@J`8e+S z5=rZW*AI;uVpy-KHvjzuvG#G`X1XENb!V>{({T${uX$DWf0COTNw&EA3$om#r{#SF zYM{y^*+nM_=kUL0|ITP&i!_4Z3`VS#G^LB)`?Ud6eqGScy_lLs8XumW>V)x%W_K}+ zYr`__*d)YyJpbP3CY-_z8xP)od7u}4LCVIyJ;boqYmiwvh??>UCI8gD{m{fZuX+0+ z9k*tR(Qlsh4}fIpm};yd#&y#*{cWD;1-0zXgSS>p;MRH;8onHvj8!_ZUz5@Q>y^^4 zQ%6utuFAP@IUBv8hPD^V@eC8RDV>nZ57`9U>nu;zFBV~aT5PwYC5u=oa=G^$!6cYU z=ay}fLCoI|`P>jeSAFhlvl3(mL3&tT_DbaO0KvWge8Pp3$a>NG9c_$QD+S1}_Ir<8 zuRp!gA+}UP)6Ra)&JAeAT)fspzlKcw5iMV+_Ua)-1fwrh@4=4A`1l>;Z|L#1=R}x^ zT?b+P%cuCqw>Coa>V_0q5@PL9d^?`MiFncYv1Ds3?zWFOT#VROi}Amo%g^p9##%!vit4yt>&a(tIEQh)>VkI5Xa=EKaYmw;AFdp{3Xn!t zy*?I=Hrr)!>u(?fqWOsb6YPvy$BkGU)F9StyJZtOUw;S;0$PQ$ofKRtEq4hdT(d@?-SWH7GRgVUd{n3|1jUXyVQg@#uR zHcb9sRy*dmGJFIr)_Z*|x8W2nyK&mtHxk|SuhjfJfm<(0kFy^KG_fDJoM1&Kgp(nVW2&q4(=)j4)Y$fLBxA(BJ!p-;HiyN0~ z%|9ewIS$OjSKSRS*2VQYtLyo`#~Iin1*YfPko-Rj?4AgrR%ZLxLn_I;rXAWUKKZUeQN`TwL_8hJQrep%=G*_oWgTE zr9@_t$Y_1Z{Adj>*HvSru@6SKa1N)wW${R27u+Q~e3Fd@A+HiPaUH}G>P;uoyU-qF zIxsBvFv&1){_Bwe&f!&$X)S3lP?(SxFt=(9yJKG^Bd?$8$NAy5*_i~K!li<=$9@f< zn3efU>eL`ApI#33h7LjQvVi(`4oFy5JlZeD!-6)_-CL_G@{su;lN%&!$_C!lp4^ac zY$#H@7*-}YOk_Mayr};i$?3TQkzGs3ZZYG`h_z=Cu5SnSdA8wlz0_r)x(EHfCO-Sh z$qf-%2_gyFlMJGu;LqH_^Z}yk)2NZmdF+s!wqmsYpN3ao(atZS5wsxl#{<^r{}W=* zE%jwR`uTa-%rmQTz1C2z>u^QSr&T8}k4tqEhrBsEelt*TbZU!btbPaKRkE;gk&SUp z_qUUBY$2+yjb-ZoX(Yxgv*}_Ui1qpgmf>6tVdj=%Y3h!tS%Lh;TzVP7eCD@Se6EN{ ztaVq<--u9mD6P^;$w2=fh5MV%|4bw}^6x5l{0u`o{ov-*gNXIjVOd=boWo^Q8}?kl zIef%{&Nzs1ojP@)>ltGGH2YIs9hOwiug|-V%QgRa%%cj#T5`*`)kJI^XeP|%=vzD}_PX&zv9B9i`gL{B^_tont z78#m=9#M%UmGQExB0yP1S9do8Nsam!_2GH`Lv5FyJB zmb@~BTdqJeaxAi2X72scu*R;ph@kx1<2=Z8`0jQ|v=Xc2ymVOSKqYPllJ3Ui6dpH{ z_|dfzm+R2y6Qo@(7}xn*ZwYKghVrHJ?_MF+B9VK&do??VL@`~;;m$U~e}(zyw2N3W zEs9WV7;Pl1`+mhQIb&)j+7NT|XAKdtNifF2xeB}8-CCrEGPG#>&g7>QVK_5>53I#0 zoOL91e`p4#WUE?TiV*63BIDJI2=($B(hdQ>n|ShpMy6dBZn>UCr>(w@aUHB;@4OpH z=}$vV9V4+b@+Fr&o`rKbWlOsx1N}facdM;NQhILW!vu+kC`72s(2|nI<$A4RNo8>} z_#6D1EHlH3DQ}(Nt+|hocw=?92MQ6I9L2{yws(Vdyu!J$z#iZzBdy`O&qlAOmbZJ4 z97lGGJ%w@!PrXU>c;x?bC5p?W4kal#^@H0p+9jtd+;S;4G|Ho$zKG@XitBb*C6{+9 zYRevi0$Gi~UALK7uDf(?L;}fcBR@9XtidUK?E%F{mvFgW;vUnS!|K_S{MQy3*0DB) zl%xc-XeEh$$ve!&CQ9e@7WiE8R4N(&j>lb0BCl_5{N4d3(YDD)-Bcata2;=hlQRsW z>iJ5Z`^a81$sEy7y^MDH9QnyzC^T~W>d)k>rx7M!SCq}6ec!gwLY(lCyteyg)mRIe za7)SDckKr5uA}*q|4HK%zWXfoB^~`gs!~L^i56k@Af)*hc>R)74%e7 zY9k@Zy8QLPrFz0FJ}1oQOASGD{wq}KT17A^zpkE6DnrtF-Og|_#`Vl!lkH3I364MZ z8P_5*h^oJ}ViN_3wZT5Y&(?^whl;Uk%q`$(2_T0hy#W7=+)lgbR1)rP=kBRk;`Z9y zWrblGwnVao12f7oHxpcGXjY9PQU{kdp}A`GfZETSc^6A5p*&l|w_q2{)Yf-dS~Ezh zjkfJV(Me({kMEz+kKp!sl33r28q&nYQ}?!@g`2y7tA$q&R4uEmzlFgp>FGUy91v*l&HC(hw!7S%7S zhM;Y`is?`=`u*&tZei|VfyEEkuK~@7HTj;cniFGH6`r*ADdEKa>!>X=y>c=YDH4SHCDr%Ih&A_3?sv8tL&Tp+k)_*<3__B2 zr*HZ_cE60p8?2q_M4;37#njD6LJv#H+Sf`Wd`(HwYQ9t=#Kz7pL>8?YbrQ0_oIO&YgWy-alxtAXMi{=&w<5_N!u6V0>C>_r zJjH76+NHDS>Iu!~qrnyZH7FDeUfgpY({PK2a}JR>haYVkTi#bhSpVZA?_YdRXr9O{ z-+vBMGil+|foX^}=N5tJ;!uKPf8VXIR=0s;?&7J1KQBP@X~wWJ7YYv|0+n?MteS1= zvN+y^UJ(3b(nqgWERpVXesi%6=vqluF;tSpWEjN2WYX|S9mpFxUH+8=XI*sI1 zm#glz7N#gUDKrPw)r_as7=m)TxwD0K5Ffx+$-%vvipiubg0h^a$n41}WxRFA` zQVPcX?@G_+1;(WSMtQaxYfPm^u2J^Drfos0crQ48wWz zxWaUM4MB?Ni?w2#U_9ISC^)^qx!XzMi1!D?_`P7k!HM@oRqG@DCl@iE=h9}MzCw&i zteTB?5o7;Xq$+!FbiF^k81yg(tJyZs--Y$g z%^u@Yl_(s%9Ic`&)QuI+Q(KojaPIC_*5Su^o{~T6nukmVS#GsgHesTOzgfR-g6|Rhlt=-@sv7@ zHk{Y(EWhGbi#y?9pvKV-qUn^l-h6f&@xt!@GeKqSc*s`#rWQ34ZlN4!@0`FY`1LH0 z9St=^XRu_Sgbwbsnk71#-y_s|Nz$Z*k44C6R#~GpjacjL8mYI%cz!Zf8B0Q}ZwF;D z#1QN32+3XgKEQFz%WUyx3=$7dGv1hBJXfvm+KEDAhtBFJVZ-CsfY7EBNJ=Xr zCG-Z3u^@f^RdiY)8|ELHT5RPR25VWjKDSIf?Z#^JohW`bq2-_CA$yxe9D4I%gZ(g* z2$2vgv)4kc*g3VhBE;C=^oi74zCqN0yDfiEfz4}M?&}|}(TT*=bbUS~Am03YhE{;Y zBcn#Y1s6WS4OT(8_qY$I{Zy~*k$6XLQf-&e>+RrHcGpTZj^k`yamNAjT6#551J@2_#CZDkbvs>e@V9qR zs5yc0Jn56u@j4BdJ2%GNT$>A;W?xR%{ls|gZcW{dgau9Q&hfA^tdb>&)_Dw~-v6Zc zp(rEN4dq3wDx{$u-y`#bmoB6B`^%iUn+S&U7R4V^#Td?)mV4hR>%@wR%Es?oyGbxV z-}A2&F}BVLeX8{ZOD9tLLIOxY^dhe^HK9>~DfOEe)9!;1goo zlTRxW4?YkZByw|e&!jdE5MNs(_IG)r%zRZoaBqk{O~QZ@5vqAMN*;y-%!d z_VyBjhuSmSS!ANFQ!YmxE1^nvnnewdcN2nf)1^m9OL#(Ap_r#vWgC&M{dc&1TMMC; z%9bgM$1Rn;>AeaGES3C_m$0qC)2i+-+4&u-Lb?9L({)*xdd2PX1PlS}_fM99$z6@5syzGru+{JkH3V6A<15dNjxmV}N&ji_);uYd(ujebS*mlVj zm){#UF*ZM0;HzRbn(!Q5u}fY${Y5O@jvbff_QOKu%?n2!;p%Bv-RfmNN+Z($1#SEh ziaQ@s=F56Ct>?C}l-Tu^O!zatDf~W;f8b8iW3#1?4WN0Wa-`xus@%4hTB#huI-j98 zhcNjgoaLg&{KYcc)$aXj#5fx+#!0;z7-2)$*wJxmJX+=KM80kLC>xp!4i0a}>wKS! z)s{G}|5R^ag(VxEU7Z5fIL1Gj2r|Uin{uAyW=yg{)LQ;x=rkJ+l6;RR#9;za>SE`1 zVwMd@@hk^9Odglt7nxAT@hQ28>&(*siAIj`vSq`d?fE!Xa^)~sESiRYTr&)j8g9o7 z*A2tbC8M!>Lc`GI@ILO8@GzVi)UI(v<;0`$VC`>cUL*cNr-^IFFywVm9~8+TO{XHI zI9_2GNHv4&TKO-sVb@ifT%aBPg>}@p#>?nX8vdwak2P*ieMoO87Hpus{p3o&fLueY)JU29@}^y8=1X~DRYeTu~^Av zTk#(0rR7MkeTo0_?1C8ABsT0YEM6g&$_9<6j=2dbBsN@+^oU!J>{PAQJH|?J^ed_E zNq)zMXBpN?_W}H(tzpwyc(1%-Z%Pe7%wzYKv78WM?uC^2jepp1UQx>BDhU&dv%@kU z?r;yo@7Ak4d5Gm!tCVfhs8;_R^OUB8Cb6v>T}a93{l0Uz8tI@r3!X5aZkM^if@7DL zOa8!X>5XaQcko(4{OL^@ybe^4R3#z(Hi5D#Ani7ejfu)6Ul#PL2S$S*8Ww)cEt`T^@ac#Ar-wKu`K3F!Am1nN*x~uz|6lj-sriEA-3;pH|9L?D zmo`N0#pZDs!P38u<6>&BslpQ$9F?ti>cZwzu+wRagjg2D2Hm&Z@QMYQDbubCi7faj zpf_ok&VpS>V%<`+SfE=sLi$I|XTeTAx0kFE7JRv^U1V9#0+n@>eoNIXI6Ne=`VSO4G|OBkMeG?;f2&mO2!>F?6+(ZjRr(^0rIwd)48oDCWsOpz2k z+!h3fVdQ>{rxL1O)^ON0rbIG9&~zj{`4JPM;x$)o2w{Q)f9rs9AQR5@{yx3@E)%AY zxOcNiXhQjQkFgkDzr3*J<5Un6?hAZ=&=<;t)>lfgk8$IoD^DK(itiJvu`K!86DAbe zZ#u|}?>~RHO+gAr(%C~|I%fDohs>&H>!MIjUnnkb{1P=Aqt9+nzrr`%W-g+Xh*Pm! zK$T)D6Y~D>?rP3t!e6TqH|bm^B!s0Z_~R5U{lxq25?U%9E$?QpMJon=9*?TjDzxG7 z$_wsoV1h?!Xzw_lBU+hw-HMTv0yqjb7QD7 z3zF|H&G4zSptSi3CtCx>CO>_nT#w>C=5RZiQ=0{^brR2n8L>cJd&Wf7g2V#3np^h7 z6&9>eGU=Q4VZqxF%kDLgSzz~OS+98l3$$P49Uzyo;NR%^(+|7xgG)40t-rItBk2?o zzLpJrsx##&GRSUMp8fCv*ueAn%f9I|822B09!Waj+QF~EIB=$iL>Yp()sF1%ACZrv-Wju}W(X97zlzP)4?#)7QoA``U+U^G6K)!UmEy8S zoAG%M8@tRD$U~5w%?Qru9|9}MM_0{8hoHNYdMoAY5blnZ^G{3-!O>Iv=gVh?z*~R2 zE@^QHDcpP;yZ;Trb}={ZnH5Zsxi%zBT8}A{(zcv|Y91zRc`6!umyZcM&e->c;_~~- zPfPx$027|x`aNQfwpk-Tc$uc6OgN*kQaK3ib(G2X&+Gj^3Z47RhqB#oF&p^2@b`MM zGZs7Wgo7WmIUc*jnLxko`}Zh5uhnwl&;^uwrgnrIT*Tj}#;hf2d|Khk~K)pVW5hDl&oa&9UWFVM2vdQ;O(5^zm8qFq6EW2|tBxqsk62p*AY%{50TA zbz0!XucIg`%V1_nX*1!%J>`chk+kYmLZk6qWP**7mr9{C6Z#L8mp=7jLj0t^?b>iA zxQCNkHyGgE?b6$^M|%?y#ZVX!H;yrIF*4vXrGq*OSs`d0h&j*58N7r>y#zfaAy$QH8kw! z?+(J~<_%7g4+nwsZLWU$Go<00oN4h(9E5_(lQ;a+2f-?X$HnU1ApE5H<|P*oLY>L! zM6N2l*7dos*fI#NTZ2zG&<25cz07wOozQA*9L)m*xu`>mvp53Eld zv#S^wgr2<|Ot(J##w{Qu-a803)vqZBakL7ty4*${goDjGHc|L{o2)mV{QC!C)8zuA z%uo22HN~xX@_i6qi&Z>Yi`EV0R>?P=IELVhz0@DuHAAQ|>*o^3v!uOV^ zz-p^ie`5DA;P|q?0blTO(}+Cl0A)0>**BNNLsDmebmYamj+$s9Kf>ObbqWoKS}W!#Ey|{57YP&H#1-x0)=vV_Bpu`kUePR{{5bRXB#d;V~io!XFj|4EuKC z3ogDpVXubQyWP*%xMVP(rq1H;|4+QHw>DglgZQ1C^WFt zZ=!Nz*393YA-J5BG;|N|6$7K{f+U=*Nh+SHmIJ8& zt%^EFIfJ}^-5){;<^%8~yv=^%`~dvQ9j=ePJOEkhaj!*O20(!Bv1b#G6sdilLhb_) zxvb7LSWnza2pj-EOG%-Z4+r4namyNyr~x?SoDAtP18`VLxu$ZS258Cx?zf~`5e>CC19Sno#`*xWS$w#b!fL-9$2+~qGPC^*iLI#Ti4 z*EZ+71+rrF)K7&kAY(%9Vsdi>w$s}-J*oLTjUTw?%jNO447f3LCgQ^`JbFd-^HnW!o!MM}7+dhBnOGgR`}iOXUh~}g zz;O`zHJ1|~uohf-gD#_6gr4sYi)??5_d~H&@aJDY`r(p})-AQAe)u6=7i*6#w$YKr z>mwWKaO_E1$z=&TkPoFk__2)+rXWH5-c5%GrH=XYN_3c6G?zQGmk#&l#2@gH)aa1d zCCd?|Nr#h{%iC;E(9yHOs>BVgxPKjQ6?>&m2k%4IDxHn!;1_UsbH6DaZuZ`~RcB0x zFD`~TS%!4@m;3o;t2P~Y1Qutv1E_B$zKs*Db)a+Qaq^679rt!7Lw4gUkvUfK{( zho-ID9Sx%Ki)s7)C1U9CeiMIfNHQJx8}*`jis`UNbz9kskNBTrH(F}X(1DV6Gcjt* z0B}Z*_HR8p02RgFUZKtdu#>B!us#AG*DT&2kv#xiQgu~A9Rr~9fW%dN{>K1pEY#_( z7h-^Iq5@anVFr}N>pcvr>jQSI`5dOHa8Z|UWVW{t3`JC&mnQn4;Uwoi#rZy9b4~wo#4wXCm;q^pL#&LAPIJUajPh7SiR(vxrekIorMUjs$ zSR%cTMKb%7IgMQH=laurF(|LS(|SO5BkFRDoHH6X9_!&zs0e3cE5|@ z>3&F&i+$v1(hoX1na|WM`hm2Sx%; zvHG?smg^og-iqMGYa!aLGHn{!frX6%A>$ z&)joAFed4+D_KBkPc|Bn*-R7}G}7R+irjLQJ{s)h{=@Nmf(HKzUDl_dLNbDHs8ec* z2K^VOirW9t;LYRDCysOVLHh}>wJF#$mf)zmvT}7FsFmI6s9xR&%g*P!uULkUtBlwl zUeO1!n~6NtzxX~6-Pp4ve4zEs)bA{OU^l(gsbZ6g=_+K;#a6c>~gVJjo7wL}e zvovUtIyL?S<$8(JPmV9**vXuXID=m({YE&e8h>xHw{=$c4-Nb&G2Scii^;K0>|TxU z-(YmoUJAe9p>5i}KHPnv(Z(IHYAxQpbH*f6w@4q{E0_#?y0s6!vUzkwWcuKA*}GT! zWcy&FuE8^H#XeYbKt!NGxev-eITiJ)_Q9Z$vun2oesKp5&eJFQAa7vl)!6AiaQuG4 zCGu<^oR?Xt{^wjD?8@$*lE>=~Qf5_v0e%5>&HAhO{C?Hx>dopHO$FykGRyb&!HD4> z$1Q4oaCj!sV%3p8aQ|s}Qpl(eHvG6|dFFB-m`;bE6ejgSuQ$)5=oEZBWnGIdh9fJz z?^nn&yvzUokrmz559VQ9&fPlwpz8SgvYKr_xGo5b^Z8;J-gZ~Jg*PkANuP}^>W4{z zqJ5LC{qQE6M9n(mONI1Z9F~VsLUB&#Ow{ZXD#-BVRP+FB|U-wQur-bRIcTUvs9u}J;BdJAs_g9;9Y5(Y9uR6J8Ae57fV3f=9UPhU(@ zVc=OX%V(Af;VIvoT^6Y@F1_cE?>{PdlT?2*omSA`9*rvfmJ4qt-N-||%V_YWv1s%c zK7OOcUSTsHMzihh$)*ur8n6eucOAsT=3YzQtTDxrQM@Z&kcS3VKL3uKUq^$-Ce!b< zH_+hr74@v&qNoper`8>hqv7QZyx%2h;E-`vNO1=ZR(Ry^qsY>Lrzp+g4_k#6@TaPHvKxR##U^ZTN|B6g2$LC3qvoY5wA$S@b^QY_=n_P(50C2I%o8PkNiT`K|JG4&!TZ!=R+?Xf4PvG zR)f6Vy@sAkI8J+)qTO0AM83(ey;9o?Mbm>fCL4O;&B$;2k9fV)F>gAcz8Au|(&Sy* zdcjx!X-7+UFT@K?RJYUcefl=gZw~ds4cR6GB@(L_3bjlwc8vDI?ZDHKoFl!k$2Z#L z*hDW3MvEPB`qT?wj9>C*;&rZywT;&_cE9dUo{+;)S&YXud9fEd6R7gE`Chn|uqplS zLNDB%RM0*9yBD_6O!`bYsBrpS#IZ-qsBr4M<<4K6RPZTo}S zJ#Pz8!J~EGWF9{i-cYo2Y;lZOZ7%EvH^?sAE!W|0KWj{7g52Qf(vt#$1 z!YE*nTx6#8gaU16u7**tZ4cT1vV-gc`VDK0Lv}xoKhYIJPZ{j=F2HiHZs+4 zrJ4e(PKnLl>YzXZb!D+DodPcID;c9q3M|GDZ&ODo@SCJ&wlU~41;RD{-B)urhcp*9#+7T zc}mN^7Y^fr@p?WOmbYv+cZK)D&4T6QR}y-G^MOjeO)iGzY1h6ZWxeo>x%Wxj1v32L z<{vz7Lk7K5Q33yZ$jeoVn^ZZHVd8JZHDhNI8C(y1TvJCZ(O}A z8N1tjdzgHwWC)PkI}`Pq3_CX;6qHIN!}cB7&G~Qe4Gw<^xPfC!Sp1g;9A9kunktn} zhMqzm^LBim;{)X+3ck-q$vD3W93#RDm9^iJVeL4l>+LKu#M-%CjLatE3CJE9mvYFU zUzD(%RFp{uNxR)E+S15y{qC&Xh9ok)A6Pm1Hl7ThMd}LG@C&Y+arc$Q4-i*Bm8!|rc_BPjtk@$K`^W71S_(3jvZ|oYt4^V#mQ>_6B10QZhT5EN#FpjqOh?8 z7IS?}ukP)D>N2mHf0G?RwdHD6SxWxVU9kUhPPP;NjBUxfzqJ#-sEs`C+uI3Rx3>A4 zS#(15+Qc$r(r!De=lF@v^&Hr{(<9=J1_#cR+XY*1=fE1{_4T-o19wax^1dUu^__ZC zy*7t@?5CK?@&X60e7<<*harc&p-jb{hdI#xc5lidOAh?Z-SO7w0=aT|f;+VN8V7u& zzWXUVaG-aK&D$StWP_m_Z?pn95W0VYbBHLOjwR<+#YK{i=8NY5m*A7*~KstwfNL@Ocol7+MA|=kInR4L4$-I!0RvZut&{rBD z4B0MTWYcw>0~&m%a~ULFC9QEqFe$~#Vy#LuC*?YiA_p%I68ng?^^I?&9B&TOuGYD6 zDA4`5s43c;1GHZfzNVoZ*sqpNdyz&G(!O)6w2IVzhy`o@WOG2qpYvyAhyxqTnF;0# z9B_}kF5kO?{I^@;tv|@mhL~f4a|{tS2%IgWs*qZ+2XfCZZzc7AuAP-fZC0~k!|$UV z`&HPmRgc^D;&y_UXWy3+0#!iMo>%3=&6$9Jn@O+*^OC#$WJHP5q&OfTc(5^FZ- zXz@*TpJs!p*tKOB2_7uu-cUpmb-K^@>*8THXx@Qlexes(XUO|5gB;ZH#sPCm(+)P6 zCA>7*ti^_FKUuXR8f=gj+1%5+i49xYCmZSs9?TdB3EaYlzr8&jvSi_8nwx)D}@5t(Bi~+e=UX$Ytolp+?dUVA2N0H7lmx#=Ju;FEN4UT z!H;}WG&V@QQmrlLFkzd))$}WGnPBqV_?hw`6HcUz7Eh8ZSmmYSZj$6Stxn%xvjrX& zJm2mVw^oD&FOA;I1t_vWogsB9O_K$&LKOYBklifM_hSWpH)g?y!>Kz?n6SX{Hplz? zVHWJ2yU*2skOi{#d?yc(dC5Pr=Vgwtpf&yQ6Roo>xOi~k=7~!zSY!|we3$f)ZHkV+ zB6FVw1=A|qb?&iXPjpi6IwuxvQ2yt<;K+i)%)vV`E-XkFQB<1oWPuk&B90N|M)W&U zeSiDAvLI+qDf6o{3u^htZ!9OcvEWYUJPEi$*LLvzEfz$79uaT9!U9g9)NBUXc$tfl zmbx_y)Wm|t!cUWgbru}@Na8gbD(8*taZNV8U6mh^x=IS-^96 zL!2xT9*ee8*kvWj0;%xDRjzAT6zGxOxJGR=p;r38>Qj0wxVADk-18_4f?sX=r+$(J z@d={#7c5zD@{3V#%VZn;dsuPXY-2m{M$6L;PPap|)9}d6d+iYT_}7U*BdZ?QrtU3aY_kCghAh zD|sZs1m1_=GUDZ!P~q`r)rJjB@~_y=G)n7FCNu;+IJf5@6E5U*YM&t3`!^*@b`KLS zzolH{r;tYDzw(yiAq^&kNj#dkrOE`_{`1MF*D~SQqEL5Ll1N8*o^|?4Cg9+e$MJ$p z;BNM13UV=FRcVob!smAQ65`})%qAxi+oarA(hfSp!+r0g+hJP(%V_i6c33J9!8E(j z4t744`1(*galik_~-66eX*aP}W_CZ?{-{zFIFV8s;&>8_JxUSgNgX6rU+-P@J?`BWR| zZ;1N5!>kSD*A{i{H*bTUL+iiC?QMe!$}mPP*KUI+`vugVu51HV_X*Bso;ITQ6MV&O zq80u#=N`D*+Y0G+w29@7t=X6>0^o z%^@K;Z)p}>Ytjm5 z?9ObxYu8GFy8|fN{o=^J0okkoVu`+J|~gAW*LISei<(lD6{Sb@Cuo*m39)>)>MrnrL-3EEvotojYR-xq+mu8riaX4h{*bI#n z&)v~?o551?+^Hqr&G03+#Mj8P8MG+9)-Ha{P~P|5U6!C`v3;fjnHR1eQE>}yhKUUq z?f*qK!`9>+=1f8}oXWI}dKA|TSMR&?dO#Me`DS)CBf>Y{hNw6S0X?J(onRn;_;%POXSBVMJxy%)Dk3 zNYce_P=dBJ!D8L#g+J7qAnnOl>NBY(5Z~r~QGuvbyi{JiE%Iw4$nR)m?e1%Y_0QgU5y{9&S z*^QBnTe}-TpN6#^KN|qw!sjwc21wfSPaaWYz=w1*#(&!x;I98`h3Z}g{JWFREwY~h zPtvNBJWUy3=F_`4!j?gLMenCmJs2S4vd_HqF#|SSNLw-z#{h%#6rLZ!Wej-jcJ8A_ z9Rn<@%Xw=%7;u8N`Y`1kgIp5ZmCsL*wOubSX^;U;J(pGaCm4|Scl$}4VnEiZQHu{h z8IUn}>)@-!jqu{8nUFO%xi38Zlcqbvfa|lZdPbiaP;r#UVjY_SQS_>oXH*8fUq&@p z9?AeQihBOVJloN_Who{mTAS$otfKyNdxG3$~eA~YPj)+Hy4Er>I zmc7<1{)Y`v>ighYo+k-V`aHIijQ{CaE|%fZ082COG+PjV$#joB62T4NuuKVkBO4%w zS2(C8p#j2WmTTGNH^3QzI`1>34N$rFm6b6OrIi`s;rIAN>i?U!b#9ZItAifvV>2uG z>9A`;qkXS99n8WqZ$zx4gW@^Pz9X7+kQ$9}3D=geb`tywrLluQ(e1GUb>t*b6 zoTJcTMc26SqDA%a;^EF;<-GOq>vN{HyhJ@DiNSQday=w3sCgD{sRswKFD~Bt^|0ZQ ze22j9dKjkWJV@88hYExHzZ%Ir_3y&^dBu7#+&d}J!BY<(CEv^s{Gh|y(hWMhd+6j% zDy{EO9UazOepeuuNrxj`&fFrD1Ug((Hq(hGxU|lH)I5?7bJW6l<0LwW&o!-aA?P_I zXFga&ht`T6@