def test_fw_posterior_quad(ref_method, data_fw_cctbx, data_fw_mcmc): """ Test the _french_wilson_posterior_quad function directly against cctbx output. The cctbx implementations can be found - `acentric <https://github.com/cctbx/cctbx_project/blob/8db5aedd7d0897bcea82b9c8dc2d21976437435f/cctbx/french_wilson.py#L92>`_ - `centric <https://github.com/cctbx/cctbx_project/blob/8db5aedd7d0897bcea82b9c8dc2d21976437435f/cctbx/french_wilson.py#L128>`_ """ if ref_method == 'cctbx': I, SigI, Sigma, J, SigJ, F, SigF, Centric = data_fw_cctbx.to_numpy( np.float64).T Centric = Centric.astype(np.bool) rtol = 0.06 rs_J, rs_SigJ, rs_F, rs_SigF = _french_wilson_posterior_quad( I, SigI, Sigma, Centric) elif ref_method == 'mcmc': I, SigI, Sigma, J, SigJ, F, SigF, Centric = data_fw_mcmc.to_numpy( np.float64).T Centric = Centric.astype(np.bool) rtol = 0.025 rs_J, rs_SigJ, rs_F, rs_SigF = _french_wilson_posterior_quad( I, SigI, Sigma, Centric) elif ref_method == 'mcmc vs cctbx': I, SigI, Sigma, J, SigJ, F, SigF, Centric = data_fw_mcmc.to_numpy( np.float64).T Centric = Centric.astype(np.bool) _, _, _, rs_J, rs_SigJ, rs_F, rs_SigF, _ = data_fw_cctbx.to_numpy( np.float64).T rtol = 0.06 assert np.allclose(rs_J, J, rtol=rtol) assert np.allclose(rs_SigJ, SigJ, rtol=rtol) assert np.allclose(rs_F, F, rtol=rtol) assert np.allclose(rs_SigF, SigF, rtol=rtol)
from reciprocalspaceship.algorithms.scale_merged_intensities import _french_wilson_posterior_quad from matplotlib import pyplot as plt import numpy as np import pandas as pd data_fw_mcmc = pd.read_csv("fw_mcmc_data.csv") I,SigI,Sigma,J,SigJ,F,SigF,Centric = data_fw_mcmc.to_numpy(np.float64).T Centric = Centric.astype(np.bool) rs_J,rs_SigJ,rs_F,rs_SigF = _french_wilson_posterior_quad(I, SigI, Sigma, Centric) #All the plots plt.plot(J, rs_J, 'k.', label='Acentric') plt.plot(J[Centric], rs_J[Centric], 'r.', label='Centric') plt.xlabel("MCMC J") plt.ylabel("rs J") plt.legend() plt.savefig("J.png") plt.figure() plt.plot(F, rs_F, 'k.', label='Acentric') plt.plot(F[Centric], rs_F[Centric], 'r.', label='Centric') plt.xlabel("MCMC F") plt.ylabel("rs F") plt.legend() plt.savefig("F.png") plt.figure() plt.plot(I/SigI, 100.*(rs_F - F)/F, 'k.', alpha=0.1, label='Acentric') plt.plot((I/SigI)[Centric], (100.*(rs_F - F)/F)[Centric], 'r.', alpha=0.1, label='Centric') plt.legend()
def _centric_posterior(Iobs, SigIobs, Sigma, npoints=200): return _french_wilson_posterior_quad(Iobs, SigIobs, Sigma, True, npoints)