Skip to content

Aqueous Iron Chloride Oxidation States#360

Open
PKourtis wants to merge 21 commits intoddmms:mainfrom
PKourtis:oxidation_states_clean
Open

Aqueous Iron Chloride Oxidation States#360
PKourtis wants to merge 21 commits intoddmms:mainfrom
PKourtis:oxidation_states_clean

Conversation

@PKourtis
Copy link
Copy Markdown

Pre-review checklist for PR author

PR author must check the checkboxes below when creating the PR.

Summary

Benchmarks how well models capture the different oxidation states of Iron.

Main tests compares the O-Fe RDFs of Fe+2 and Fe+3 by running 20ps NVT MD for Fe 2Cl and Fe 3Cl ions in water.

Linked issue

Resolves #264

Progress

  • Calculations
  • Analysis
  • Application
  • Documentation

Testing

Tested on mp0-b3, currently running omol-0 MD.

New decorators/callbacks

Added new option to the plot_scatter decorator to remove markers from the plots.

@alinelena alinelena added lr new benchmark Proposals and suggestions for new benchmarks labels Feb 11, 2026
Copy link
Copy Markdown
Collaborator

@ElliottKasoar ElliottKasoar left a comment

Choose a reason for hiding this comment

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

Thanks for this! I need to test is properly, but from a first pass of the code it looks great!

I know they're relatively small, but are you happy for me to upload the data start files to the S3 bucket, just to slim things down?

Comment thread ml_peg/calcs/physicality/oxidation_states/calc_oxidation_states.py Outdated
Comment thread ml_peg/calcs/physicality/oxidation_states/calc_oxidation_states.py
Comment thread ml_peg/calcs/physicality/oxidation_states/calc_oxidation_states.py
Comment thread ml_peg/analysis/physicality/oxidation_states/analyse_oxidation_states.py Outdated
Comment thread ml_peg/analysis/physicality/oxidation_states/metrics.yml Outdated
Comment thread ml_peg/analysis/physicality/oxidation_states/metrics.yml
Comment thread ml_peg/analysis/utils/decorators.py Outdated
Comment thread ml_peg/models/models.yml
Comment thread pyproject.toml Outdated
Comment thread uv.lock
Comment thread ml_peg/calcs/physicality/oxidation_states/data/Fe2Cl_start.xyz Outdated
Comment thread ml_peg/calcs/physicality/oxidation_states/calc_oxidation_states.py Outdated
@ElliottKasoar
Copy link
Copy Markdown
Collaborator

I think the plot titles/axes aren't quite working.

Since the plots are unique to each model, it would also be nice to include the model name somewhere in the title, if possible.

image

@PKourtis PKourtis force-pushed the oxidation_states_clean branch from 9bba7fa to fb343dc Compare February 19, 2026 13:25
@ElliottKasoar ElliottKasoar force-pushed the oxidation_states_clean branch from 642ad10 to b8e9dc4 Compare March 12, 2026 18:25
Copy link
Copy Markdown
Collaborator

@ElliottKasoar ElliottKasoar left a comment

Choose a reason for hiding this comment

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

Thanks again for this, @PKourtis!

I've rebased and tidied up a little, plus less a couple of suggestions, mainly

for salt in IRON_SALTS:
struct_path = data_path / f"{salt}_start.xyz"
struct = read(struct_path, "0")
struct.calc = calc
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.

Suggested change
struct.calc = calc
struct.calc = calc
struct.info["charge"] = int(struct.info["charge"])
struct.info["spin"] = int(struct.info["spin"])

Unfortunately when these are read in, ASE seems to set them to numpy.int64, which causes Orb-omol to raise errors

Comment thread ml_peg/calcs/physicality/oxidation_states/calc_oxidation_states.py
npt.run()


@pytest.mark.parametrize("mlip", MODELS.items())
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.

I think you can just do "model_name", MODELS if you just want the names

Comment thread uv.lock
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.

This has some conflicts due to other dependency changes since, could you rebase/resolve this please, @PKourtis?

Copy link
Copy Markdown
Collaborator

@ElliottKasoar ElliottKasoar left a comment

Choose a reason for hiding this comment

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

Just wanted to flag that I get warning:

NPT: Setting the center-of-mass momentum to zero (was 8.8567 -10.9324 6.12114)

I think this is unavoidable with the standard ASE NPT (now known as MelchionnaNPT in ASE, although still referred to just as NPT in janus-core).

This seems to have been around for a while (since at least ASE 3.22), so I don't think the behaviour should be too unexpected, just wanted to check in case there's a reason the input has a non-zero momentum before this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lr new benchmark Proposals and suggestions for new benchmarks

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Aqueous Iron Chloride Oxidation States Benchmark

3 participants