OpenFreeEnergy / openfe

The Open Free Energy toolkit
https://docs.openfree.energy
MIT License
135 stars 18 forks source link

'raw' gather report should output all PU repeats #884

Open frannerin opened 3 months ago

frannerin commented 3 months ago

Function _parse_raw_units in openfecli/commands/gather.py only processed first ProtocolUnit repeat and then _write_raw did not distinguish between repeats if there were any. _write_dg_raw is left unchanged because it seems to be unused.

Example output (openfe gather --report raw ) before fix for a RBFE protocol with 3 PU repeats for the solvent legs, and 1 repeat for the complex legs:

leg ligand_i ligand_j DG(i->j) (kcal/mol) MBAR uncertainty (kcal/mol)
complex lig_ejm_31 lig_ejm_42 -14.47 0.04
solvent lig_ejm_31 lig_ejm_42 -14.89 0.03
complex lig_ejm_31 lig_ejm_46 -33.90 0.05
solvent lig_ejm_31 lig_ejm_46 -32.75 0.04
complex lig_ejm_31 lig_ejm_47 -20.77 0.07
solvent lig_ejm_31 lig_ejm_47 -20.72 0.05
complex lig_ejm_31 lig_ejm_48 -14.19 0.07
solvent lig_ejm_31 lig_ejm_48 -14.48 0.06
complex lig_ejm_31 lig_ejm_50 -49.55 0.04
solvent lig_ejm_31 lig_ejm_50 -50.07 0.04
complex lig_ejm_42 lig_ejm_43 -11.47 0.05
solvent lig_ejm_42 lig_ejm_43 -12.95 0.03
complex lig_ejm_46 lig_jmc_23 8.96 0.02
solvent lig_ejm_46 lig_jmc_23 9.37 0.02
complex lig_ejm_46 lig_jmc_27 10.54 0.03
solvent lig_ejm_46 lig_jmc_27 11.03 0.03
complex lig_ejm_46 lig_jmc_28 16.03 0.03
solvent lig_ejm_46 lig_jmc_28 16.16 0.03

Example output after fix:

leg repeat ligand_i ligand_j DG(i->j) (kcal/mol) MBAR uncertainty (kcal/mol)
complex 1 lig_ejm_31 lig_ejm_42 -14.47 0.04
solvent 1 lig_ejm_31 lig_ejm_42 -14.89 0.03
solvent 2 lig_ejm_31 lig_ejm_42 -14.91 0.03
solvent 3 lig_ejm_31 lig_ejm_42 -14.90 0.03
complex 1 lig_ejm_31 lig_ejm_46 -33.90 0.05
solvent 1 lig_ejm_31 lig_ejm_46 -32.75 0.04
solvent 2 lig_ejm_31 lig_ejm_46 -32.75 0.05
solvent 3 lig_ejm_31 lig_ejm_46 -32.78 0.04
complex 1 lig_ejm_31 lig_ejm_47 -20.77 0.07
solvent 1 lig_ejm_31 lig_ejm_47 -20.72 0.05
solvent 2 lig_ejm_31 lig_ejm_47 -20.78 0.05
solvent 3 lig_ejm_31 lig_ejm_47 -20.75 0.05
complex 1 lig_ejm_31 lig_ejm_48 -14.19 0.07
solvent 1 lig_ejm_31 lig_ejm_48 -14.48 0.06
solvent 2 lig_ejm_31 lig_ejm_48 -14.51 0.06
solvent 3 lig_ejm_31 lig_ejm_48 -14.50 0.06
complex 1 lig_ejm_31 lig_ejm_50 -49.55 0.04
solvent 1 lig_ejm_31 lig_ejm_50 -50.07 0.04
solvent 2 lig_ejm_31 lig_ejm_50 -49.97 0.04
solvent 3 lig_ejm_31 lig_ejm_50 -50.08 0.04
complex 1 lig_ejm_42 lig_ejm_43 -11.47 0.05
solvent 1 lig_ejm_42 lig_ejm_43 -12.95 0.03
solvent 2 lig_ejm_42 lig_ejm_43 -13.03 0.03
solvent 3 lig_ejm_42 lig_ejm_43 -13.01 0.03
complex 1 lig_ejm_46 lig_jmc_23 8.96 0.02
solvent 1 lig_ejm_46 lig_jmc_23 9.37 0.02
solvent 2 lig_ejm_46 lig_jmc_23 9.35 0.02
solvent 3 lig_ejm_46 lig_jmc_23 9.37 0.02
complex 1 lig_ejm_46 lig_jmc_27 10.54 0.03
solvent 1 lig_ejm_46 lig_jmc_27 11.03 0.03
solvent 2 lig_ejm_46 lig_jmc_27 11.09 0.03
solvent 3 lig_ejm_46 lig_jmc_27 11.08 0.03
complex 1 lig_ejm_46 lig_jmc_28 16.03 0.03
solvent 1 lig_ejm_46 lig_jmc_28 16.16 0.03
solvent 2 lig_ejm_46 lig_jmc_28 16.17 0.04
solvent 3 lig_ejm_46 lig_jmc_28 16.20 0.03

Checklist

Developers certificate of origin

frannerin commented 3 months ago

I did the zero-indexed repeats thing and updated the test_gather.py. I ran pytest -k test_gather and got: 23 passed, 3 skipped, 840 deselected, 1 xfailed, 2 xpassed, 25 warnings