Skip to content

Commit

Permalink
kam1a adding convert method to collection (closes #917) (#992)
Browse files Browse the repository at this point in the history
* 917_KAM1_WIP

* WIP_917_KAM1a

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fixing nested structure , attempt 1, added kwargs

* fixing nested structure , attempt 1, added kwargs

* fixing nested structure , attempt 1, added kwargs

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* updating test script for validation of convert, script syntax not verified, WIP

* updating test script for validation of convert, script syntax not verified, WIP

* included working test script

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* with changelog updata

* added checks for a different kind

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* revised per review, refactored test for pytest

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* vscode fix

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
kameyer226 and pre-commit-ci[bot] committed Feb 22, 2021
1 parent 123a9b1 commit f7a264d
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 0 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).

## [3.3.3]

## Added
- Collection.convert method for converting all units of a single kind of a collection's data to another unit (with test script)

### Fixed
- Further handling for readonly files
- Improved chopping with axes that span the kept axes removed
Expand Down
12 changes: 12 additions & 0 deletions WrightTools/collection/_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,18 @@ def create_collection(self, name="collection", position=None, **kwargs):
setattr(self, name, collection)
return collection

def convert(self, units, convert_variables=False, verbose=True):
"""Convert units of a collection.
Parameters
----------
units: string
Units to convert to.
"""

for name in self.item_names:
item = self[name]
item.convert(units, convert_variables=convert_variables, verbose=verbose)

def create_data(self, name="data", position=None, **kwargs):
"""Create a new child data.
Expand Down
83 changes: 83 additions & 0 deletions tests/collection/convert.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import WrightTools as wt
import numpy as np


def test_collection_convert():
def my_resonance(xi, yi, intensity=1, FWHM=500, x0=7000):
def single(arr, intensity=intensity, FWHM=FWHM, x0=x0):
return intensity * (0.5 * FWHM) ** 2 / ((xi - x0) ** 2 + (0.5 * FWHM) ** 2)

return single(xi) * single(yi)

xi = np.linspace(6000, 8000, 75)[:, None]
yi = np.linspace(6000, 8000, 75)[None, :]
zi = my_resonance(xi, yi)

results = wt.Collection(name="results")
results.create_data(name="neat")
results.neat.create_variable(name="T1", units="fs", values=xi)
results.neat.create_variable(name="w2", units="wn", values=yi)
results.neat.create_channel(name="signal", values=zi)
results.neat.transform("T1", "w2")

results.create_data(name="messy")
results.messy.create_variable(name="w1", units="wn", values=xi)
results.messy.create_variable(name="w2", units="wn", values=yi)
results.messy.create_channel(name="signal", values=zi)
results.messy.transform("w1", "w2")

results.create_data(name="confusing")
results.confusing.create_variable(name="w1", units="wn", values=xi)
results.confusing.create_variable(name="w2", units="wn", values=yi)
results.confusing.create_channel(name="signal", values=zi)
results.confusing.transform("w1", "w2")

calibration = results.create_collection(name="calibration")
calibration.create_data(name="OPA1_tune_test")
calibration.OPA1_tune_test.create_variable(name="w1", units="wn", values=xi)
calibration.OPA1_tune_test.create_variable(name="w2", units="wn", values=yi)
calibration.OPA1_tune_test.create_channel(name="signal", values=zi)
calibration.OPA1_tune_test.transform("w1", "w2")

calibration.create_data(name="OPA2_tune_test")
calibration.OPA2_tune_test.create_variable(name="w1", units="wn", values=xi)
calibration.OPA2_tune_test.create_variable(name="w2", units="wn", values=yi)
calibration.OPA2_tune_test.create_channel(name="signal", values=zi)
calibration.OPA2_tune_test.transform("w1", "w2")

displays = results.create_collection(name="displays")
displays.create_data(name="figure1")
displays.figure1.create_variable(name="w1", units="wn", values=xi)
displays.figure1.create_variable(name="w2", units="wn", values=yi)
displays.figure1.create_channel(name="signal", values=zi)
displays.figure1.transform("w1", "w2")

displayfig2 = displays.create_collection(name="figure2")
displayfig2.create_data(name="main")
displayfig2.main.create_variable(name="w1", units="wn", values=xi)
displayfig2.main.create_variable(name="w2", units="wn", values=yi)
displayfig2.main.create_channel(name="signal", values=zi)
displayfig2.main.transform("w1", "w2")

displayfig2.create_data(name="inset")
displayfig2.inset.create_variable(name="w1", units="wn", values=xi)
displayfig2.inset.create_variable(name="w2", units="wn", values=yi)
displayfig2.inset.create_channel(name="signal", values=zi)
displayfig2.inset.transform("w1", "w2")

results.convert("eV")

# alternating indices should be enough to prove all are eV
assert results.neat.units[0] == "fs" # verifies conversion of diff. kind is excluded
assert results.neat.units[1] == "eV"
assert results.messy.units[1] == "eV"
assert results.confusing.units[0] == "eV"
assert results.calibration.OPA1_tune_test.units[1] == "eV"
assert results.calibration.OPA2_tune_test.units[0] == "eV"
assert results.displays.figure1.units[1] == "eV"
assert results.displays.figure2.main.units[0] == "eV"
assert results.displays.figure2.inset.units[1] == "eV"


if __name__ == "__main__":
test_collection_convert()

0 comments on commit f7a264d

Please sign in to comment.