Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
478 commits
Select commit Hold shift + click to select a range
a2681d5
Add type hint to load_data filename
rprospero Apr 14, 2025
a35c570
More concise source parsing
rprospero Apr 24, 2025
afefd33
Whitespace fix
rprospero Apr 24, 2025
5e95370
Typehint on load_data
rprospero Apr 24, 2025
2fb0009
Fix up Source parser
rprospero Apr 24, 2025
0f12742
Add raw data to xml metadata
rprospero Apr 15, 2025
e6940aa
Add raw handling to reader
rprospero Apr 15, 2025
12208ab
Enable raw data filter
rprospero Apr 15, 2025
6cd7508
Start testing data filter
rprospero Apr 15, 2025
16bf1cb
Run through code formatter
rprospero Apr 15, 2025
60179cf
Simplify metadata filtering
rprospero Apr 24, 2025
68a252d
Raise KeyError instead of ValueError
rprospero May 7, 2025
2ceaaca
Fix up ascii reader tests
rprospero May 8, 2025
0ca3cbf
Update creation of SasData in trend
rprospero May 8, 2025
5646166
Properly compare named units with unnamed units
rprospero May 8, 2025
95a4eac
Enforce loading test reference files in UTF-8
rprospero May 8, 2025
48d43aa
Skeleton framework for SESANS data
rprospero May 6, 2025
0f05e1d
Start parsing sesans header
rprospero May 6, 2025
8994584
Start parsing SESANS sample metadata
rprospero May 6, 2025
53b3575
Include SESANS angle metadata
rprospero May 6, 2025
e97f2b7
Multiple SESANS files in reader test
rprospero May 6, 2025
b12c568
Parse actual data from SES files
rprospero May 6, 2025
ab39c74
Add Raw SESANS Node Data
rprospero May 7, 2025
c2dd80c
Update XML test references to include apertures
rprospero May 7, 2025
b549108
SESANS metadata as a process, not an aperture
rprospero May 7, 2025
86ca70e
Fixup lint
rprospero May 7, 2025
2dd54f8
Make changes suggested in PR review
rprospero May 19, 2025
f2a61f0
Fix simple typos from rebase
rprospero Jun 3, 2025
54b1bbf
Add equality testing for quantities
rprospero Jun 10, 2025
d34f96e
More tests for quantities
rprospero Jun 10, 2025
0a66df1
Fix meshmerge calculation
rprospero Jun 17, 2025
9316ec4
Ruff format.
jamescrake-merani Jun 23, 2025
6c8fbf1
This comment was repetitive.
jamescrake-merani Jun 23, 2025
41a7236
Ruff format.
jamescrake-merani Jun 24, 2025
1f0e1f1
Function to guess the dataset type.
jamescrake-merani Jun 24, 2025
e504e25
Function for loading a file with default params.
jamescrake-merani Jun 24, 2025
60ea98e
Ruff format.
jamescrake-merani Jun 24, 2025
1e4d118
Remove imports ruff is complaining aren't used.
jamescrake-merani Jun 24, 2025
51c98a4
Added a test to make sure 2d data gets read right.
jamescrake-merani Jun 24, 2025
7db953c
Makes sure the dataset type gets guessed.
jamescrake-merani Jun 24, 2025
5ab1711
Use basename for sasdata ascii name.
jamescrake-merani Jun 25, 2025
b65a24e
Be consistent with how basename is called.
jamescrake-merani Jul 4, 2025
98e8582
Move comment to avoid odd Ruff format.
jamescrake-merani Jul 4, 2025
4fcfa8c
Move comment again.
jamescrake-merani Jul 4, 2025
af6e809
Fixed test.
jamescrake-merani Jul 4, 2025
952c177
Created an import metadata function.
jamescrake-merani Jul 7, 2025
bcea74b
Remove the old function.
jamescrake-merani Jul 7, 2025
75d631b
Use the new import function.
jamescrake-merani Jul 7, 2025
8cd101a
Remove these imports.
jamescrake-merani Jul 7, 2025
bf9b510
Need to use keywords for this dataclass.
jamescrake-merani Jul 7, 2025
bafab62
Import the mumag data for testing.
jamescrake-merani Jul 7, 2025
ba4b3d3
Added a case for mumag data.
jamescrake-merani Jul 7, 2025
c761be0
Added test for loading ascii data with metadata.
jamescrake-merani Jul 7, 2025
f714892
Use params filenames not just filenames.
jamescrake-merani Jul 7, 2025
11b51f8
Fixed column parameters.
jamescrake-merani Jul 7, 2025
f8aed8d
Doh. Missing commas on filename list.
jamescrake-merani Jul 7, 2025
d404ab6
Roll the raw metadata into the metadata object.
jamescrake-merani Jul 7, 2025
11b5c69
Need to fill in all the parameters.
jamescrake-merani Jul 7, 2025
11d3380
Forgot process :P
jamescrake-merani Jul 7, 2025
36e024f
Consider both of these.
jamescrake-merani Jul 7, 2025
3ad7b53
Combine both metadata so we go through all of them
jamescrake-merani Jul 7, 2025
627b259
Raw metadata is in lists.
jamescrake-merani Jul 7, 2025
ecb5d67
I don't know what these decimals were.
jamescrake-merani Jul 7, 2025
ea45f06
Start implementing ModellingRequirements
rprospero Jun 18, 2025
87794be
Start testing modelling requirements
rprospero Jun 18, 2025
042208c
Start adding better tests for ModellingRequirements
rprospero Jun 18, 2025
3005405
Flip order of parameters on compose
rprospero Jun 18, 2025
82e967b
Don't assume that Sesans includes smear
rprospero Jun 18, 2025
b45d9e2
Enable left composition by null model
rprospero Jun 18, 2025
02418f9
support right addition of NullModel
rprospero Jun 18, 2025
e86a0d5
Allow preprocess and postprocess steps
rprospero Jun 18, 2025
380fe2f
Start performing Hankel transform for SESANS
rprospero Jun 18, 2025
b00eca5
Ignore slit smearing before SESANS
rprospero Jun 20, 2025
fdb0285
Pull sesans metadata from file
rprospero Jun 20, 2025
ec5957c
Add unit test for Hankel transform
rprospero Jun 20, 2025
a708231
Fix units with error calculation
rprospero Jun 20, 2025
e4338f5
χ² squared based test
rprospero Jun 20, 2025
43abb7a
Code Review Suggestions
rprospero Jun 20, 2025
cc2df3a
Fix up rename in compose
rprospero Jun 20, 2025
a21b162
Fix uncertainty in SESANS parser
rprospero Jul 1, 2025
c991570
Update SESANS units in unit_kinds
rprospero Jul 14, 2025
b3b9bed
Applies auto fixes for ruff rule F401
DrPaulSharp Jul 17, 2025
ff4d127
Applies auto fixes for ruff rule E714
DrPaulSharp Jul 17, 2025
970fc96
Applies auto fixes for ruff rule F541
DrPaulSharp Jul 17, 2025
5d79b1f
Test should fail when there's no data.
Jul 18, 2025
e3c5026
Added a get default unit function.
Jul 18, 2025
8e6f9c6
Use the new get default unit function.
Jul 18, 2025
0ded3d1
Pass in the unit group as well.
Jul 18, 2025
b2b7a96
Return value if it isn't None.
Jul 18, 2025
99826cb
Set the dataset type properly.
Jul 18, 2025
63d2bbf
Expect 2D test to fail.
Jul 18, 2025
7c96b71
Use Quantity in models
rprospero Jul 14, 2025
438c2e0
Don't use a quantity for model post processing
rprospero Jul 14, 2025
70dcd59
Basic Pinhole model
rprospero Jul 14, 2025
8237477
Refactor pinhole tests
rprospero Jul 15, 2025
dff0655
Fix radius bug in smearing
rprospero Jul 17, 2025
0ddfe0e
More realisting δq
rprospero Jul 18, 2025
fc75b71
Combine Smearing and Sesans tests
rprospero Jul 17, 2025
df66338
Define model metadata in constructor
rprospero Jul 18, 2025
dab367c
Better testing range for pinhole
rprospero Jul 18, 2025
fc8f154
Add slit smearing
rprospero Jul 18, 2025
7d70145
Remove old commented code
rprospero Jul 18, 2025
bb0a40a
Vectorise slit calculation
rprospero Jul 21, 2025
dd41247
Check combination of slit models
rprospero Jul 21, 2025
fd0d940
Decrease logical depth of linear_extrapolation
rprospero Jul 31, 2025
d72dcb7
Decrease logical depth of slit_resolution
rprospero Jul 31, 2025
76dbdf5
Decrease logical depth of geometric_extrapolation
rprospero Jul 31, 2025
7d165bf
Apply PR changes
rprospero Jul 31, 2025
c736ce2
Fixes ruff linting errors (#140)
DrPaulSharp Aug 1, 2025
eed22fe
Adds Pyupgrade (UP) ruleset and rules SIM118 & SIM300 to ruff linter …
DrPaulSharp Aug 6, 2025
0c8eb9c
Applies fixes for isort (I) ruff ruleset (#146)
DrPaulSharp Aug 7, 2025
618f004
Fixes whitespace errors
DrPaulSharp Aug 6, 2025
ffd0ed8
Fix hours, days, and years
rprospero Aug 1, 2025
056170e
Add command for explicitly formatting quantity units
rprospero Aug 1, 2025
55e3415
Add test harness for serialisation
rprospero Jun 3, 2025
59b0362
Add first real json property
rprospero Aug 1, 2025
19392f1
Export data type
rprospero Aug 1, 2025
b9fb5e9
Add mask and model requirements
rprospero Aug 1, 2025
44bd2ed
Start exporting metadata
rprospero Aug 1, 2025
501f7a8
Start adding sample details
rprospero Aug 1, 2025
84932ff
Export process metadata
rprospero Aug 1, 2025
c876739
Export Instrument and Raw metadata
rprospero Aug 1, 2025
c3d2eac
Support exporting Quantities
rprospero Aug 1, 2025
1647cca
Remove unneeded default calls
rprospero Aug 1, 2025
d3cae13
Start writing decoder
rprospero Aug 1, 2025
6192b4d
Correctly export sample temperature
rprospero Aug 1, 2025
25f8c0c
Fix notes nodes type
rprospero Aug 1, 2025
5374bd9
Decode metadata from json
rprospero Aug 1, 2025
93769cf
Use proper bytes for numpy serialisation
rprospero Aug 11, 2025
8c7ba6b
Fix historical unit errors
rprospero Aug 1, 2025
cbb151c
Parse MetaNode
rprospero Aug 1, 2025
368f5f2
Use .json extension for JSON files
rprospero Aug 11, 2025
0f55766
Establish settings for ruff and pycodestyle
rprospero Aug 12, 2025
277d44b
Fix formatting
rprospero Aug 12, 2025
6f3dcca
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Aug 12, 2025
b999324
Adds main check to "transforms.py"
DrPaulSharp Aug 13, 2025
62ea352
Start descending
rprospero Aug 12, 2025
0c3a389
Convert tail call recursion to loop
rprospero Aug 13, 2025
e10fef9
Enumerate keys for access
rprospero Aug 13, 2025
2aa2f67
Descend into dicts
rprospero Aug 13, 2025
c349205
Fix access to dict items
rprospero Aug 13, 2025
03898fa
Fix formatting and doctstrings
rprospero Aug 13, 2025
a31ca00
Enable tag collection
rprospero Aug 13, 2025
be27524
Fix PR Comments
rprospero Aug 13, 2025
a90f011
Formatting fixes
rprospero Aug 14, 2025
3df0431
Start encoding
rprospero Aug 15, 2025
b92d16a
Test saving with XML files
rprospero Sep 8, 2025
19142f4
More tests for sample metadata
rprospero Sep 8, 2025
a677e90
Switch to safe asserts
rprospero Sep 8, 2025
c403286
Start serialising process
rprospero Sep 9, 2025
4219a9a
Start serialising process
rprospero Sep 9, 2025
196a24c
Write instrument tests
rprospero Sep 9, 2025
8c147ce
Start testing g5 round trip
rprospero Sep 10, 2025
68f3adb
Fix *most* of the round trip issues
rprospero Sep 10, 2025
a3c861f
Everything passes if we ignore raw
rprospero Sep 10, 2025
2872822
Start trying to serialise raw data
rprospero Sep 10, 2025
93de06e
Simplify test setup
rprospero Sep 10, 2025
e4cca06
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Sep 12, 2025
d8886af
Attach metadata to every entry
rprospero Sep 11, 2025
f92a6d7
Add comments to as_h5
rprospero Sep 11, 2025
5d3cba0
Fix up file handling of test
rprospero Sep 11, 2025
6808c7b
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Sep 12, 2025
9aaa56d
Remove debugging print
rprospero Sep 12, 2025
d7d6cbc
Respond to PR suggestions
rprospero Sep 24, 2025
18c2e9a
Adds local pre-commit hook for ruff linting auto fixes
DrPaulSharp Sep 29, 2025
acb0f7d
Handle bytes type object in units parser
rprospero Sep 24, 2025
246b90d
Fix underline length in metadata export
rprospero Sep 24, 2025
deb5a8b
Fix import of actual sasdata
rprospero Sep 24, 2025
5d9548c
Tweak json handling
rprospero Sep 24, 2025
a3b2a64
Fix most of HDF file loading
rprospero Sep 24, 2025
b95e0b7
Properly save multidimensional data
rprospero Sep 26, 2025
523c274
Fix parsing of exception in test
rprospero Sep 26, 2025
dd56062
Perform serialisation test on ALL example data
rprospero Sep 26, 2025
dbb7ea7
Export json
rprospero Sep 26, 2025
cde7581
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Sep 26, 2025
d351970
Fix json export of data objects
rprospero Sep 26, 2025
271cba9
Fixes to json export
rprospero Sep 26, 2025
07fcda4
Respond to PR suggestions
rprospero Oct 7, 2025
c999f32
Use file name as file id
rprospero Oct 7, 2025
1102de8
157 refactor design documentation (#158)
lucas-wilkins Oct 21, 2025
e1ee6ba
Redesign tests (#155)
jamescrake-merani Oct 22, 2025
091027e
Mark dataload test for faster turnaround
rprospero Oct 22, 2025
77dea8f
Ruff code formatting
rprospero Oct 22, 2025
1eeb65a
Fix up HDF Test case
rprospero Oct 22, 2025
cb6593e
Start moving HDF tests into James test framework
rprospero Oct 22, 2025
606930e
Start moving XML into James test framework
rprospero Oct 22, 2025
d61d194
Move round trip testing into main framework
rprospero Oct 22, 2025
7130b81
Move json testing into test framework
rprospero Oct 22, 2025
01b48e8
Eliminate old testing detritus
rprospero Oct 22, 2025
e822fe3
Start on Sesans testing
rprospero Oct 22, 2025
bd46c0d
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Oct 22, 2025
92f9a9b
Modifies autogen code to match ruff rules
DrPaulSharp Nov 17, 2025
e6174e5
added rpms and ran to rebuild tables
paulneves77 Nov 17, 2025
2351221
ran ruff fixes
paulneves77 Nov 17, 2025
99cc369
added 3D datatype and added Qz generalizations where obvious
paulneves77 Nov 13, 2025
7eb65e3
added first attempt at ND binner which can take in I(x,y,z,u,v,...) a…
paulneves77 Nov 13, 2025
b9c023e
added rebin and sketch of inplied qz for postprocessing
paulneves77 Nov 14, 2025
511abf0
updated rebin, added rpm to units, and working on testing readers
paulneves77 Nov 15, 2025
fd518d3
the ND xubpixel binning appears to be working, and made some updates …
paulneves77 Nov 15, 2025
c1db42f
corrected errors in qz calculator, cleaned up test_hdf5_reader, impro…
paulneves77 Nov 16, 2025
d54650f
corrected errors in qz calculator, cleaned up test_hdf5_reader, impro…
paulneves77 Nov 16, 2025
0385e46
started cleaning up for pull request
paulneves77 Nov 17, 2025
95da6bb
fixed temp_hdf5_reader to be slightly more compliant with NXcanSAS st…
paulneves77 Nov 17, 2025
c0cfb69
fixed apertures and run from none to empty list if missing, and fixed…
paulneves77 Nov 17, 2025
c906902
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Nov 17, 2025
58a03da
cleaned up code based on Jeff Kryzwon's suggestions and added test ca…
paulneves77 Nov 17, 2025
6125859
removed NDrebin from this branch.
paulneves77 Nov 17, 2025
fb4db3d
implemented minor cleanups to code
paulneves77 Nov 18, 2025
c95a60d
fixed a few bugs and cleaned up more
paulneves77 Nov 18, 2025
7ae3a53
added raw back to metadata
paulneves77 Dec 1, 2025
b866a8d
fixed some bugs with importing sasdata/test/sasdataloader/data/simple…
paulneves77 Dec 2, 2025
b4a0fac
fixed the collimation cansas_class attribute in the nxcansas_1Dand2D_…
paulneves77 Dec 2, 2025
a3da0d3
removed local path references, removed spurious units.py
paulneves77 Dec 3, 2025
0b196ae
moved duplicate code in parse_quantity to a call of parse_float, chan…
paulneves77 Dec 3, 2025
d36dcca
fixed minor error in reference output for nxcansas_1Dand2D_multisasda…
paulneves77 Dec 3, 2025
0eef81a
brought over NDrebin from refactor_24_3D branch
paulneves77 Nov 16, 2025
49e4281
updated NDrebin a bunch and also added NDrebin testing
paulneves77 Nov 17, 2025
7277eeb
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Nov 17, 2025
4b654c1
added note on using NDrebin for M dimensional integration
paulneves77 Nov 17, 2025
82b0be9
first pass at rebasing NDrebin to a class
paulneves77 Nov 18, 2025
fbc45ba
second pass at cleaning up NDrebin class
paulneves77 Nov 18, 2025
fe6acd3
NDrebin class ready for testing
paulneves77 Nov 18, 2025
42b1c76
added unit testing for NDrebin
paulneves77 Nov 18, 2025
9aaf1ad
removed temporary testing from NDrebin.py
paulneves77 Nov 18, 2025
e7a17d7
cleaned up NDrebin, removed old function, added documentation
paulneves77 Nov 18, 2025
4adb6db
refactor NDRebin._build_limits to pass codescene review. vectorized a…
paulneves77 Dec 1, 2025
b5bc80a
fixed bug in _build_limits
paulneves77 Dec 1, 2025
03fc3c1
indented code block, clarified non-vector comment, fixed typo, remove…
paulneves77 Dec 3, 2025
b973c9d
indented code block, clarified non-vector comment, fixed typo, remove…
paulneves77 Dec 3, 2025
b062df6
Update date format in refactor roadmap
DrPaulSharp Dec 15, 2025
ffdbc5d
Basic test harness for names
rprospero Jan 20, 2026
16f0c05
Base 62 encode the hash for shorter names
rprospero Jan 20, 2026
2f6cb0a
Name info in unique id for NamedQuantity
rprospero Jan 20, 2026
b74b925
Ruff formatting
rprospero Jan 20, 2026
bd1b97a
Properly attach run title and number to quantity information
rprospero Jan 20, 2026
05bb481
Make the name a part of all quantities
rprospero Jan 21, 2026
506ecae
Ensure that xml imports also include a proper name unique id
rprospero Jan 21, 2026
c4af257
Ensure ASCII reader generates unique_id for data quantities
rprospero Jan 21, 2026
f26144c
Refactor our id_header
rprospero Jan 21, 2026
efe74cb
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Jan 21, 2026
03f88eb
Minor formatting fixes
rprospero Jan 21, 2026
6a79a45
Remove debugging print statements
rprospero Jan 23, 2026
30678b4
Refactor operations (#184)
DrPaulSharp Jan 23, 2026
2813fca
Update refactor roadmap
DrPaulSharp Feb 6, 2026
15acac0
Adds trig and exp operations (#186)
DrPaulSharp Feb 17, 2026
d2bd866
Fix typos. One-sigma FWHM Gaussian is confusing, as the Gaussian widt…
gonzalezma Mar 16, 2026
4322834
Fix get_metadatum_from_path function as _raw_metadata and .children.g…
gonzalezma Mar 16, 2026
20c9131
Fix method to_string() to handle correctly Quantity objects
gonzalezma Mar 17, 2026
6112d6a
Refactor Trend to allow more than one axis and manual axis creation. …
gonzalezma Mar 20, 2026
967085a
[pre-commit.ci lite] apply automatic fixes for ruff linting errors
pre-commit-ci-lite[bot] Mar 20, 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 docs/source/user/data/data_formats_help.rst
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ separated by whitespaces or commas or semicolons, in the following order:

where *Q* is assumed to have units of 1/Angstrom, *I(Q)* is assumed to have
units of 1/cm, *dI(Q)* is the uncertainty on the intensity value (also as 1/cm),
and *dQ(Q)* **is the one-sigma FWHM Gaussian instrumental resolution in** *Q*,
and *dQ(Q)* **is the one-sigma Gaussian instrumental resolution in** *Q*,
Comment thread
krzywon marked this conversation as resolved.
**assumed to have arisen from pinhole geometry**. If the data are slit-smeared,
see `Slit-Smeared Data`_.

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
2 changes: 1 addition & 1 deletion sasdata/data_util/err1d.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# This program is public domain
"""
Error propogation algorithms for simple arithmetic
Error propagation algorithms for simple arithmetic

Warning: like the underlying numpy library, the inplace operations
may return values of the wrong type if some of the arguments are
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()
27 changes: 20 additions & 7 deletions sasdata/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -458,14 +458,19 @@ def to_string(self, header=""):
)
else:
attributes = ""
if self.contents:
if type(self.contents) is str:
match self.contents:
case str():
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The string, Quantity and ndarray cases are exactly the same as the default case. Maybe just remove all but the default?

children = f"\n{header} {self.contents}"
else:
case list() | tuple():
children = "".join([n.to_string(header + " ") for n in self.contents])
else:
children = ""

case Quantity():
children = f"\n{header} {self.contents}"
case ndarray():
children = f"\n{header} {self.contents}"
case None:
children = ""
case _:
children = f"\n{header} {self.contents}"
return f"\n{header}{self.name}:{attributes}{children}"

def filter(self, name: str) -> list[ndarray | Quantity | str]:
Expand Down Expand Up @@ -538,7 +543,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 +572,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
Loading