Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
475 commits
Select commit Hold shift + click to select a range
71a5b33
Process can have multiple terms, which may be quantites
rprospero Apr 14, 2025
f898889
Fix hdf process term parsing
rprospero Apr 14, 2025
a07e991
Correctly parse process notes
rprospero Apr 14, 2025
4e72922
Add type hint to load_data filename
rprospero Apr 14, 2025
dcf2f70
More concise source parsing
rprospero Apr 24, 2025
8218bec
Whitespace fix
rprospero Apr 24, 2025
394e0fd
Typehint on load_data
rprospero Apr 24, 2025
a313357
Fix up Source parser
rprospero Apr 24, 2025
39dad03
Add raw data to xml metadata
rprospero Apr 15, 2025
b9ca28d
Add raw handling to reader
rprospero Apr 15, 2025
ef63ca5
Enable raw data filter
rprospero Apr 15, 2025
f1ad19d
Start testing data filter
rprospero Apr 15, 2025
82d0a32
Run through code formatter
rprospero Apr 15, 2025
43f6c0f
Simplify metadata filtering
rprospero Apr 24, 2025
a578cb7
Raise KeyError instead of ValueError
rprospero May 7, 2025
73db2d6
Fix up ascii reader tests
rprospero May 8, 2025
aff7372
Update creation of SasData in trend
rprospero May 8, 2025
4fddb75
Properly compare named units with unnamed units
rprospero May 8, 2025
56820da
Enforce loading test reference files in UTF-8
rprospero May 8, 2025
7c42a8d
Skeleton framework for SESANS data
rprospero May 6, 2025
badd5e9
Start parsing sesans header
rprospero May 6, 2025
7989071
Start parsing SESANS sample metadata
rprospero May 6, 2025
1a3a0ff
Include SESANS angle metadata
rprospero May 6, 2025
dab5956
Multiple SESANS files in reader test
rprospero May 6, 2025
1b56c58
Parse actual data from SES files
rprospero May 6, 2025
9c208a1
Add Raw SESANS Node Data
rprospero May 7, 2025
5d1c248
Update XML test references to include apertures
rprospero May 7, 2025
4810c8c
SESANS metadata as a process, not an aperture
rprospero May 7, 2025
49ac759
Fixup lint
rprospero May 7, 2025
1209ebf
Make changes suggested in PR review
rprospero May 19, 2025
347c23f
Fix simple typos from rebase
rprospero Jun 3, 2025
a8f711e
Add equality testing for quantities
rprospero Jun 10, 2025
4277b8b
More tests for quantities
rprospero Jun 10, 2025
6a5c4a7
Fix meshmerge calculation
rprospero Jun 17, 2025
4b0cc7f
Ruff format.
jamescrake-merani Jun 23, 2025
ce4c127
This comment was repetitive.
jamescrake-merani Jun 23, 2025
bd282e0
Ruff format.
jamescrake-merani Jun 24, 2025
f9cbea1
Function to guess the dataset type.
jamescrake-merani Jun 24, 2025
6303f9a
Function for loading a file with default params.
jamescrake-merani Jun 24, 2025
8eeb4a7
Ruff format.
jamescrake-merani Jun 24, 2025
bf6710d
Remove imports ruff is complaining aren't used.
jamescrake-merani Jun 24, 2025
0cce30a
Added a test to make sure 2d data gets read right.
jamescrake-merani Jun 24, 2025
6d7493d
Makes sure the dataset type gets guessed.
jamescrake-merani Jun 24, 2025
e6e6b00
Use basename for sasdata ascii name.
jamescrake-merani Jun 25, 2025
067f63b
Be consistent with how basename is called.
jamescrake-merani Jul 4, 2025
2dc2b80
Move comment to avoid odd Ruff format.
jamescrake-merani Jul 4, 2025
068c90d
Move comment again.
jamescrake-merani Jul 4, 2025
c3dcae7
Fixed test.
jamescrake-merani Jul 4, 2025
0c5a619
Created an import metadata function.
jamescrake-merani Jul 7, 2025
62f4b5d
Remove the old function.
jamescrake-merani Jul 7, 2025
b4b4587
Use the new import function.
jamescrake-merani Jul 7, 2025
1eff40b
Remove these imports.
jamescrake-merani Jul 7, 2025
bbf2154
Need to use keywords for this dataclass.
jamescrake-merani Jul 7, 2025
561249d
Import the mumag data for testing.
jamescrake-merani Jul 7, 2025
8bbb7cb
Added a case for mumag data.
jamescrake-merani Jul 7, 2025
0c0e349
Added test for loading ascii data with metadata.
jamescrake-merani Jul 7, 2025
aa931e9
Use params filenames not just filenames.
jamescrake-merani Jul 7, 2025
66c7c0f
Fixed column parameters.
jamescrake-merani Jul 7, 2025
bda7fc0
Doh. Missing commas on filename list.
jamescrake-merani Jul 7, 2025
259432d
Roll the raw metadata into the metadata object.
jamescrake-merani Jul 7, 2025
ae9544b
Need to fill in all the parameters.
jamescrake-merani Jul 7, 2025
3a4f340
Forgot process :P
jamescrake-merani Jul 7, 2025
225317e
Consider both of these.
jamescrake-merani Jul 7, 2025
8869e59
Combine both metadata so we go through all of them
jamescrake-merani Jul 7, 2025
c4e31da
Raw metadata is in lists.
jamescrake-merani Jul 7, 2025
805202b
I don't know what these decimals were.
jamescrake-merani Jul 7, 2025
3192fa3
Start implementing ModellingRequirements
rprospero Jun 18, 2025
09ed5c5
Start testing modelling requirements
rprospero Jun 18, 2025
c162616
Start adding better tests for ModellingRequirements
rprospero Jun 18, 2025
c1cf86e
Flip order of parameters on compose
rprospero Jun 18, 2025
0ee9f09
Don't assume that Sesans includes smear
rprospero Jun 18, 2025
f52dfb3
Enable left composition by null model
rprospero Jun 18, 2025
eba0238
support right addition of NullModel
rprospero Jun 18, 2025
0fe66d7
Allow preprocess and postprocess steps
rprospero Jun 18, 2025
51545b6
Start performing Hankel transform for SESANS
rprospero Jun 18, 2025
d6eadaa
Ignore slit smearing before SESANS
rprospero Jun 20, 2025
9d20a72
Pull sesans metadata from file
rprospero Jun 20, 2025
c66bc80
Add unit test for Hankel transform
rprospero Jun 20, 2025
2dc4ac6
Fix units with error calculation
rprospero Jun 20, 2025
75b7b33
χ² squared based test
rprospero Jun 20, 2025
2a5d28e
Code Review Suggestions
rprospero Jun 20, 2025
f2b6098
Fix up rename in compose
rprospero Jun 20, 2025
9fc084c
Fix uncertainty in SESANS parser
rprospero Jul 1, 2025
b45e8ee
Update SESANS units in unit_kinds
rprospero Jul 14, 2025
401fc7d
Applies auto fixes for ruff rule F401
DrPaulSharp Jul 17, 2025
ca08f73
Applies auto fixes for ruff rule E714
DrPaulSharp Jul 17, 2025
38ebeb4
Applies auto fixes for ruff rule F541
DrPaulSharp Jul 17, 2025
67e8f79
Test should fail when there's no data.
Jul 18, 2025
d036066
Added a get default unit function.
Jul 18, 2025
038a4d9
Use the new get default unit function.
Jul 18, 2025
38c0710
Pass in the unit group as well.
Jul 18, 2025
9113d7b
Return value if it isn't None.
Jul 18, 2025
dae66d9
Set the dataset type properly.
Jul 18, 2025
d7bf0e2
Expect 2D test to fail.
Jul 18, 2025
8a16e94
Use Quantity in models
rprospero Jul 14, 2025
644bd66
Don't use a quantity for model post processing
rprospero Jul 14, 2025
b68fbd1
Basic Pinhole model
rprospero Jul 14, 2025
ffcd1d5
Refactor pinhole tests
rprospero Jul 15, 2025
242799c
Fix radius bug in smearing
rprospero Jul 17, 2025
5b2cd45
More realisting δq
rprospero Jul 18, 2025
334f8f2
Combine Smearing and Sesans tests
rprospero Jul 17, 2025
b2ba247
Define model metadata in constructor
rprospero Jul 18, 2025
8193c92
Better testing range for pinhole
rprospero Jul 18, 2025
eab3c17
Add slit smearing
rprospero Jul 18, 2025
58dae47
Remove old commented code
rprospero Jul 18, 2025
32a758f
Vectorise slit calculation
rprospero Jul 21, 2025
8ae15d7
Check combination of slit models
rprospero Jul 21, 2025
5fe86a2
Decrease logical depth of linear_extrapolation
rprospero Jul 31, 2025
5fc0f7d
Decrease logical depth of slit_resolution
rprospero Jul 31, 2025
e22bf62
Decrease logical depth of geometric_extrapolation
rprospero Jul 31, 2025
ed5b802
Apply PR changes
rprospero Jul 31, 2025
c2a0452
Fixes ruff linting errors (#140)
DrPaulSharp Aug 1, 2025
ee5ff40
Adds Pyupgrade (UP) ruleset and rules SIM118 & SIM300 to ruff linter …
DrPaulSharp Aug 6, 2025
a7356eb
Applies fixes for isort (I) ruff ruleset (#146)
DrPaulSharp Aug 7, 2025
3abb921
Fixes whitespace errors
DrPaulSharp Aug 6, 2025
b1e2c50
Fix hours, days, and years
rprospero Aug 1, 2025
94bf3fc
Add command for explicitly formatting quantity units
rprospero Aug 1, 2025
59ba0ba
Add test harness for serialisation
rprospero Jun 3, 2025
69907da
Add first real json property
rprospero Aug 1, 2025
ddcd932
Export data type
rprospero Aug 1, 2025
c55f48c
Add mask and model requirements
rprospero Aug 1, 2025
cc4d8ce
Start exporting metadata
rprospero Aug 1, 2025
376b563
Start adding sample details
rprospero Aug 1, 2025
2610dea
Export process metadata
rprospero Aug 1, 2025
5193bb3
Export Instrument and Raw metadata
rprospero Aug 1, 2025
1bf0846
Support exporting Quantities
rprospero Aug 1, 2025
d569dce
Remove unneeded default calls
rprospero Aug 1, 2025
2dd1adf
Start writing decoder
rprospero Aug 1, 2025
ce9c9c9
Correctly export sample temperature
rprospero Aug 1, 2025
dd73b0c
Fix notes nodes type
rprospero Aug 1, 2025
682a67d
Decode metadata from json
rprospero Aug 1, 2025
4155c12
Use proper bytes for numpy serialisation
rprospero Aug 11, 2025
2c32658
Fix historical unit errors
rprospero Aug 1, 2025
d18a286
Parse MetaNode
rprospero Aug 1, 2025
97fd3a2
Use .json extension for JSON files
rprospero Aug 11, 2025
bd14ff5
Establish settings for ruff and pycodestyle
rprospero Aug 12, 2025
415c2f8
Fix formatting
rprospero Aug 12, 2025
5828081
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Aug 12, 2025
b400e48
Adds main check to "transforms.py"
DrPaulSharp Aug 13, 2025
a9d6347
Start descending
rprospero Aug 12, 2025
9c0fa67
Convert tail call recursion to loop
rprospero Aug 13, 2025
64687b2
Enumerate keys for access
rprospero Aug 13, 2025
32c8432
Descend into dicts
rprospero Aug 13, 2025
fa4b32f
Fix access to dict items
rprospero Aug 13, 2025
d4b6973
Fix formatting and doctstrings
rprospero Aug 13, 2025
7074ba9
Enable tag collection
rprospero Aug 13, 2025
89149f7
Fix PR Comments
rprospero Aug 13, 2025
5237034
Formatting fixes
rprospero Aug 14, 2025
d63edc1
Start encoding
rprospero Aug 15, 2025
61eadd3
Test saving with XML files
rprospero Sep 8, 2025
5ded05a
More tests for sample metadata
rprospero Sep 8, 2025
d9617f7
Switch to safe asserts
rprospero Sep 8, 2025
34ece6d
Start serialising process
rprospero Sep 9, 2025
1db29d9
Start serialising process
rprospero Sep 9, 2025
69e5255
Write instrument tests
rprospero Sep 9, 2025
cc3c3f8
Start testing g5 round trip
rprospero Sep 10, 2025
af8d883
Fix *most* of the round trip issues
rprospero Sep 10, 2025
38399a8
Everything passes if we ignore raw
rprospero Sep 10, 2025
9161ed1
Start trying to serialise raw data
rprospero Sep 10, 2025
4c007c4
Simplify test setup
rprospero Sep 10, 2025
8f2d66a
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Sep 12, 2025
057eb24
Attach metadata to every entry
rprospero Sep 11, 2025
ae1f882
Add comments to as_h5
rprospero Sep 11, 2025
803cc80
Fix up file handling of test
rprospero Sep 11, 2025
6449224
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Sep 12, 2025
b80789b
Remove debugging print
rprospero Sep 12, 2025
3f907f3
Respond to PR suggestions
rprospero Sep 24, 2025
11b6dc1
Adds local pre-commit hook for ruff linting auto fixes
DrPaulSharp Sep 29, 2025
45e02ef
Handle bytes type object in units parser
rprospero Sep 24, 2025
40c50ff
Fix underline length in metadata export
rprospero Sep 24, 2025
a830bda
Fix import of actual sasdata
rprospero Sep 24, 2025
4a6d1d2
Tweak json handling
rprospero Sep 24, 2025
ff6bef9
Fix most of HDF file loading
rprospero Sep 24, 2025
3b81533
Properly save multidimensional data
rprospero Sep 26, 2025
0d9dbaf
Fix parsing of exception in test
rprospero Sep 26, 2025
fa2bfff
Perform serialisation test on ALL example data
rprospero Sep 26, 2025
4289bee
Export json
rprospero Sep 26, 2025
16394c3
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Sep 26, 2025
d600bb2
Fix json export of data objects
rprospero Sep 26, 2025
ae61c9f
Fixes to json export
rprospero Sep 26, 2025
24c5bbc
Respond to PR suggestions
rprospero Oct 7, 2025
6180ee0
Use file name as file id
rprospero Oct 7, 2025
310f225
157 refactor design documentation (#158)
lucas-wilkins Oct 21, 2025
1b75d68
Redesign tests (#155)
jamescrake-merani Oct 22, 2025
6b91602
Mark dataload test for faster turnaround
rprospero Oct 22, 2025
0c5b753
Ruff code formatting
rprospero Oct 22, 2025
59ea1a5
Fix up HDF Test case
rprospero Oct 22, 2025
8802495
Start moving HDF tests into James test framework
rprospero Oct 22, 2025
addfb75
Start moving XML into James test framework
rprospero Oct 22, 2025
4c19302
Move round trip testing into main framework
rprospero Oct 22, 2025
b48f5bf
Move json testing into test framework
rprospero Oct 22, 2025
14a5ec8
Eliminate old testing detritus
rprospero Oct 22, 2025
d02819d
Start on Sesans testing
rprospero Oct 22, 2025
4c7303b
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Oct 22, 2025
fedc59b
Modifies autogen code to match ruff rules
DrPaulSharp Nov 17, 2025
b900ac3
added rpms and ran to rebuild tables
paulneves77 Nov 17, 2025
3bf3e50
ran ruff fixes
paulneves77 Nov 17, 2025
9da10de
added 3D datatype and added Qz generalizations where obvious
paulneves77 Nov 13, 2025
503f38c
added first attempt at ND binner which can take in I(x,y,z,u,v,...) a…
paulneves77 Nov 13, 2025
552871f
added rebin and sketch of inplied qz for postprocessing
paulneves77 Nov 14, 2025
52d0dc3
updated rebin, added rpm to units, and working on testing readers
paulneves77 Nov 15, 2025
1f68c85
the ND xubpixel binning appears to be working, and made some updates …
paulneves77 Nov 15, 2025
9c9833f
corrected errors in qz calculator, cleaned up test_hdf5_reader, impro…
paulneves77 Nov 16, 2025
a97897e
corrected errors in qz calculator, cleaned up test_hdf5_reader, impro…
paulneves77 Nov 16, 2025
ed6874a
brought over NDrebin from refactor_24_3D branch
paulneves77 Nov 16, 2025
e17c696
started cleaning up for pull request
paulneves77 Nov 17, 2025
9b332f1
updated NDrebin a bunch and also added NDrebin testing
paulneves77 Nov 17, 2025
c709739
fixed temp_hdf5_reader to be slightly more compliant with NXcanSAS st…
paulneves77 Nov 17, 2025
797fd85
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Nov 17, 2025
702176c
fixed apertures and run from none to empty list if missing, and fixed…
paulneves77 Nov 17, 2025
e341551
added note on using NDrebin for M dimensional integration
paulneves77 Nov 17, 2025
a882a77
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Nov 17, 2025
e7405ce
first pass at rebasing NDrebin to a class
paulneves77 Nov 18, 2025
203ca63
cleaned up code based on Jeff Kryzwon's suggestions and added test ca…
paulneves77 Nov 17, 2025
3ca9238
second pass at cleaning up NDrebin class
paulneves77 Nov 18, 2025
2118b8a
removed NDrebin from this branch.
paulneves77 Nov 17, 2025
4a21c32
NDrebin class ready for testing
paulneves77 Nov 18, 2025
91b01d4
implemented minor cleanups to code
paulneves77 Nov 18, 2025
3335ca6
added unit testing for NDrebin
paulneves77 Nov 18, 2025
07c715a
fixed a few bugs and cleaned up more
paulneves77 Nov 18, 2025
176b879
removed temporary testing from NDrebin.py
paulneves77 Nov 18, 2025
b3593ee
added raw back to metadata
paulneves77 Dec 1, 2025
c1c1249
cleaned up NDrebin, removed old function, added documentation
paulneves77 Nov 18, 2025
19efaca
fixed some bugs with importing sasdata/test/sasdataloader/data/simple…
paulneves77 Dec 2, 2025
30456c9
refactor NDRebin._build_limits to pass codescene review. vectorized a…
paulneves77 Dec 1, 2025
7ddb260
fixed the collimation cansas_class attribute in the nxcansas_1Dand2D_…
paulneves77 Dec 2, 2025
2376446
fixed bug in _build_limits
paulneves77 Dec 1, 2025
5046e64
removed local path references, removed spurious units.py
paulneves77 Dec 3, 2025
43cd3f4
indented code block, clarified non-vector comment, fixed typo, remove…
paulneves77 Dec 3, 2025
288b912
moved duplicate code in parse_quantity to a call of parse_float, chan…
paulneves77 Dec 3, 2025
d5baa24
Basic test harness for names
rprospero Jan 20, 2026
0c51d65
indented code block, clarified non-vector comment, fixed typo, remove…
paulneves77 Dec 3, 2025
7ad9e2d
fixed minor error in reference output for nxcansas_1Dand2D_multisasda…
paulneves77 Dec 3, 2025
06a344e
Base 62 encode the hash for shorter names
rprospero Jan 20, 2026
53ced51
Merge pull request #178 from SasView/refactor_24_NDrebin
krzywon Dec 11, 2025
17e24f8
Name info in unique id for NamedQuantity
rprospero Jan 20, 2026
e887e54
Update date format in refactor roadmap
DrPaulSharp Dec 15, 2025
0eff531
Ruff formatting
rprospero Jan 20, 2026
379e915
Properly attach run title and number to quantity information
rprospero Jan 20, 2026
7446f85
Make the name a part of all quantities
rprospero Jan 21, 2026
211d778
Ensure that xml imports also include a proper name unique id
rprospero Jan 21, 2026
6674efc
Ensure ASCII reader generates unique_id for data quantities
rprospero Jan 21, 2026
3104697
Refactor our id_header
rprospero Jan 21, 2026
279804f
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Jan 21, 2026
ebadfc1
Minor formatting fixes
rprospero Jan 21, 2026
a6bbee3
Remove debugging print statements
rprospero Jan 23, 2026
ada30a7
Merge pull request #183 from SasView/full-name-for-quantity-97
rprospero Jan 23, 2026
51de517
Refactor operations (#184)
DrPaulSharp Jan 23, 2026
aa367e6
Update refactor roadmap
DrPaulSharp Feb 6, 2026
ee6af02
Adds trig and exp operations (#186)
DrPaulSharp Feb 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ venv
tests.log
/.pytest_cache

# Unit test / coverage reports
htmlcov/
.coverage
.cache/

# Installer files
/installers/build
/installers/dist
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ default_install_hook_types: [pre-commit, pre-push]

repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.14.1
rev: v0.12.9
hooks:
# Run the linter, applying any available fixes
- id: ruff-check
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ html5lib

# Other stuff
matplotlib
pre-commit
pre-commit
2 changes: 1 addition & 1 deletion sasdata/ascii_reader_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
T = TypeVar('T')

# TODO: There may be a better place for this.
pairings = {'I': 'dI', 'Q': 'dQ', 'Qx': 'dQx', 'Qy': 'dQy'}
pairings = {'I': 'dI', 'Q': 'dQ', 'Qx': 'dQx', 'Qy': 'dQy', 'Qz': 'dQz'}
pairing_error = {value: key for key, value in pairings.items()}
# Allows this to be bidirectional.
bidirectional_pairings = pairings | pairing_error
Expand Down
3 changes: 3 additions & 0 deletions sasdata/checklist.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Things to check once everything is in place:

1) Do any centigrade fields read in incorrectly?
2 changes: 1 addition & 1 deletion sasdata/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def abscissae(self) -> Quantity:
# TODO: Won't work when there's errors involved. On reflection, we
# probably want to avoid creating a new Quantity but at the moment I
# can't see a way around it.
return Quantity(data_contents, reference_data_content.units)
return Quantity(data_contents, reference_data_content.units, name=self._data_contents["Qx"].name, id_header=self._data_contents["Qx"]._id_header)
case dataset_types.sesans:
return self._data_contents["SpinEchoLength"]
case _:
Expand Down
2 changes: 1 addition & 1 deletion sasdata/data_backing.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def summary(self, indent_amount: int = 0, indent: str = " ") -> str:
s += f"{indent*(indent_amount+1)}{shorten_string(str(self.data))}\n"
for key in self.attributes:
value = self.attributes[key]
if isinstance(value, (Group | Dataset)):
if isinstance(value, (Group, Dataset)):
value_string = value.summary(indent_amount+1, indent)
else:
value_string = f"{indent * (indent_amount+1)}{key}: {shorten_string(repr(value))}\n"
Expand Down
18 changes: 9 additions & 9 deletions sasdata/data_util/nxsunit.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@
__all__ = ['Converter', 'standardize_units']
T = TypeVar('T')
ConversionType = float | tuple[float, float]
DIMENSIONS = {} # type: Dict[str, Dict[str, ConversionType]]
AMBIGUITIES = {} # type: Dict[str, str]
DIMENSIONS: dict[str, dict[str, ConversionType]] = {}
AMBIGUITIES: dict[str, str] = {}
PREFIX = dict(peta=1e15, tera=1e12, giga=1e9, mega=1e6, kilo=1e3, deci=1e-1, centi=1e-2, milli=1e-3, mili=1e-3,
micro=1e-6, nano=1e-9, pico=1e-12, femto=1e-15)
SHORT_PREFIX = dict(P=1e15, T=1e12, G=1e9, M=1e6, k=1e3, d=1e-1, c=1e-2, m=1e-3, u=1e-6, n=1e-9, p=1e-12, f=1e-15)
Expand Down Expand Up @@ -258,7 +258,7 @@ def _build_all_units():
# APS files may be using 'a.u.' for 'arbitrary units'. Other
# facilities are leaving the units blank, using ??? or not even
# writing the units attributes.
unknown = {} # type: Dict[str, ConversionType]
unknown: dict[str, ConversionType] = {}
unknown.update(
{'None': 1, '???': 1, '': 1, 'A.U.': 1, 'a.u.': 1, 'arbitrary': 1, 'arbitrary units': 1,
'Counts': 1, 'counts': 1, 'Cts': 1, 'cts': 1, 'unitless': 1, 'unknown': 1, 'Unknown': 1, 'Unk': 1}
Expand Down Expand Up @@ -356,15 +356,15 @@ class Converter:
value name.
"""
#: Name of the source units (km, Ang, us, ...)
_units = None # type: List[str]
_units: list[str] = None
#: Type of the source units (distance, time, frequency, ...)
dimension = None # type: List[str]
dimension: list[str] = None
#: Scale converter, mapping unit name to scale factor or (scale, offset)
#: for temperature units.
scalemap = None # type: List[Dict[str, ConversionType]]
scalemap: list[dict[str, ConversionType]] = None
#: Scale base for the source units
scalebase = None # type: float
scaleoffset = None # type: float
scalebase: float = None
scaleoffset: float = None

@property
def units(self) -> str:
Expand All @@ -375,7 +375,7 @@ def units(self, unit: str):
self._units = standardize_units(unit)

def __init__(self, units: str | None = None, dimension: list[str] | None = None):
self.units = units if units is not None else 'a.u.' # type: str
self.units: str = units if units is not None else 'a.u.'

# Lookup dimension if not given
if dimension:
Expand Down
2 changes: 1 addition & 1 deletion sasdata/dataloader/data_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,7 @@ def is_slit_smeared(self):
:return: True is slit smearing info is present, False otherwise
"""
def _check(v):
return (isinstance(v.__class__ == list | np.ndarray)
return (isinstance(v.__class__, list | np.ndarray)
and len(v) > 0 and min(v) > 0)
return _check(self.dxl) or _check(self.dxw)

Expand Down
1 change: 0 additions & 1 deletion sasdata/dataloader/readers/red2d_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ def get_file_contents(self):

wavelength = None
distance = None
transmission = None

pixel_x = None
pixel_y = None
Expand Down
11 changes: 10 additions & 1 deletion sasdata/dataset_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,21 @@ class DatasetType:
two_dim = DatasetType(
name="2D I vs Q",
required=["Qx", "Qy", "I"],
optional=["dQx", "dQy", "dI", "Qz", "ShadowFactor", "mask"],
optional=["dQx", "dQy", "dQz", "dI", "Qz", "ShadowFactor", "mask"],
expected_orders=[
["Qx", "Qy", "I"],
["Qx", "Qy", "I", "dI"],
["Qx", "Qy", "dQx", "dQy", "I", "dI"]])

three_dim = DatasetType(
name="3D I vs Q",
required=["Qx", "Qy", "Qz", "I"],
optional=["dQx", "dQy", "dQz", "dI", "ShadowFactor", "mask"],
expected_orders=[
["Qx", "Qy", "Qz", "I"],
["Qx", "Qy", "Qz", "I", "dI"],
["Qx", "Qy", "Qz", "dQx", "dQy", "dQz", "I", "dI"]])

sesans = DatasetType(
name="SESANS",
required=["SpinEchoLength", "Depolarisation", "Wavelength"],
Expand Down
11 changes: 11 additions & 0 deletions sasdata/distributions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@


class DistributionModel:


@property
def is_density(self) -> bool:
return False

def standard_deviation(self) -> Quantity:
return NotImplementedError("Variance not implemented yet")
Empty file.
43 changes: 43 additions & 0 deletions sasdata/manual_tests/interpolation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import matplotlib.pyplot as plt
import numpy as np

from sasdata.quantities import units
from sasdata.quantities.plotting import quantity_plot
from sasdata.quantities.quantity import NamedQuantity
from sasdata.transforms.rebinning import InterpolationOptions, calculate_interpolation_matrix_1d


def linear_interpolation_check():

for from_bins in [(-10, 10, 10),
(-10, 10, 1000),
(-15, 5, 10),
(15,5, 10)]:
for to_bins in [
(-15, 0, 10),
(-15, 15, 10),
(0, 20, 100)]:

plt.figure()

x = NamedQuantity("x", np.linspace(*from_bins), units=units.meters)
y = x**2

quantity_plot(x, y)

new_x = NamedQuantity("x_new", np.linspace(*to_bins), units=units.meters)

rebin_mat = calculate_interpolation_matrix_1d(x, new_x, order=InterpolationOptions.LINEAR)

new_y = y @ rebin_mat

quantity_plot(new_x, new_y)

print(new_y.history.summary())

plt.show()




linear_interpolation_check()
10 changes: 9 additions & 1 deletion sasdata/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ class Metadata:
process: list[Process]
sample: Sample | None
instrument: Instrument | None
raw: MetaNode
raw: MetaNode | None

def summary(self):
run_string = str(self.run[0] if len(self.run) == 1 else self.run)
Expand Down Expand Up @@ -567,6 +567,14 @@ def from_json(obj):
raw=MetaNode.from_json(obj["raw"]),
)

@property
def id_header(self):
"""Generate a header for used in the unique_id for datasets"""
title = ""
if self.title is not None:
title = self.title
return f"{title}:{",".join(self.run)}"

def as_h5(self, f: h5py.Group):
"""Export data onto an HDF5 group"""
for idx, run in enumerate(self.run):
Expand Down
57 changes: 57 additions & 0 deletions sasdata/postprocess.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
"""

Post processing for loaded files

"""

import numpy as np

from sasdata.data import SasData


def fix_mantid_units_error(data: SasData) -> SasData:
pass



def apply_fixes(data: SasData, mantid_unit_error=True):
if mantid_unit_error:
data = fix_mantid_units_error(data)

return data


def deduce_qz(data: SasData):
"""Calculates and appends Qz to SasData if Qx, Qy, and wavelength are all present"""
# if Qz is not already in the dataset, but Qx and Qy are
if 'Qz' not in data._data_contents and 'Qx' in data._data_contents and 'Qy' in data._data_contents:
# we start by making the approximation that qz=0
data._data_contents['Qz'] = 0*data._data_contents['Qx']

# now check if metadata has wavelength information
wavelength = getattr(
getattr(
getattr(
getattr(data, "metadata", None),
"instrument",
None
),
"source",
None
),
"wavelength",
None
)

if wavelength is not None:
# we can deduce the value of qz from qx and qy
# if we have the wavelength
qx = data._data_contents['Qx']
qy = data._data_contents['Qy']

# this is how you convert qx, qy, and wavelength to qz
k0 = 2*np.pi/wavelength
qz = k0-(k0**2-qx**2-qy**2)**(0.5)

data._data_contents['Qz'] = qz

Loading