-
Notifications
You must be signed in to change notification settings - Fork 21
compute mu #278
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
compute mu #278
Changes from 13 commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
5180eeb
initial commit
yucongalicechen 5ff2c23
[pre-commit.ci] auto fixes from pre-commit hooks
pre-commit-ci[bot] 1826221
add packing fraction, add more tests
yucongalicechen e54f9bb
reformat
yucongalicechen be7c275
[pre-commit.ci] auto fixes from pre-commit hooks
pre-commit-ci[bot] 9e4bc0d
refine docstring and test comments
yucongalicechen 1879f44
Merge branch 'mucalc' of github.com:yucongalicechen/diffpy.utils into…
yucongalicechen a108205
merge from main and add tests for unknown materials
yucongalicechen 0bdbbb4
enforce requirement to specify either density or packing fraction
yucongalicechen 00f36ad
add notimplementederror
yucongalicechen 255c603
refactor: rearrange error msg and docstring, update condition in func…
yucongalicechen 5492ad8
test: remove test for the correct mu, improve test comment for invali…
yucongalicechen a4a217d
test: reformat tests
yucongalicechen 953e187
fix: merge from main and fix conflicts
yucongalicechen dd52ad9
docs: improve docstring
yucongalicechen File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
**Added:** | ||
|
||
* function to compute x-ray attenuation coefficient (mu) using XrayDB | ||
|
||
**Changed:** | ||
|
||
* <news item> | ||
|
||
**Deprecated:** | ||
|
||
* <news item> | ||
|
||
**Removed:** | ||
|
||
* <news item> | ||
|
||
**Fixed:** | ||
|
||
* <news item> | ||
|
||
**Security:** | ||
|
||
* <news item> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
numpy | ||
xraydb |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
numpy | ||
xraydb |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,6 +3,8 @@ | |
from copy import copy | ||
from pathlib import Path | ||
|
||
from xraydb import material_mu | ||
|
||
|
||
def clean_dict(obj): | ||
"""Remove keys from the dictionary where the corresponding value is None. | ||
|
@@ -206,3 +208,53 @@ def get_package_info(package_names, metadata=None): | |
pkg_info.update({package: importlib.metadata.version(package)}) | ||
metadata["package_info"] = pkg_info | ||
return metadata | ||
|
||
|
||
def get_density_from_cloud(sample_composition, mp_token=""): | ||
"""Function to get material density from the MP or COD database. | ||
|
||
It is not implemented yet. | ||
""" | ||
raise NotImplementedError( | ||
sbillinge marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"So sorry, density computation from composition is not implemented right now. " | ||
"We hope to have this implemented in the next release. " | ||
"Please rerun specifying a sample mass density." | ||
) | ||
|
||
|
||
def compute_mu_using_xraydb(sample_composition, energy, sample_mass_density=None, packing_fraction=None): | ||
sbillinge marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"""Compute the attenuation coefficient (mu) using the XrayDB database. | ||
|
||
Computes mu based on the sample composition and energy. | ||
User should provide a sample mass density or a packing fraction. | ||
If neither density nor packing fraction is specified, or if both are specified, a ValueError will be raised. | ||
sbillinge marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Reference: https://xraypy.github.io/XrayDB/python.html#xraydb.material_mu. | ||
|
||
Parameters | ||
---------- | ||
sample_composition : str | ||
The chemical formula or the name of the material. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. not the name, just chemical formula. |
||
energy : float | ||
The energy of the incident x-rays in keV. | ||
sample_mass_density : float, optional, Default is None | ||
The mass density of the packed powder/sample in gr/cm^3. | ||
sbillinge marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. g/cm*3, not gr/cm^3 |
||
packing_fraction : float, optional, Default is None | ||
The fraction of sample in the capillary (between 0 and 1). | ||
sbillinge marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Returns | ||
------- | ||
mu : float | ||
The attenuation coefficient mu in mm^{-1}. | ||
""" | ||
if (sample_mass_density is None and packing_fraction is None) or ( | ||
sample_mass_density is not None and packing_fraction is not None | ||
): | ||
raise ValueError( | ||
"You must specify either sample_mass_density or packing_fraction, but not both. " | ||
"Please rerun specifying only one." | ||
sbillinge marked this conversation as resolved.
Show resolved
Hide resolved
|
||
) | ||
if packing_fraction is not None: | ||
sample_mass_density = get_density_from_cloud(sample_composition) * packing_fraction | ||
sbillinge marked this conversation as resolved.
Show resolved
Hide resolved
|
||
energy_eV = energy * 1000 | ||
mu = material_mu(sample_composition, energy_eV, density=sample_mass_density, kind="total") / 10 | ||
return mu |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.