Your entry point¤
cryojax.simulator.make_image_model
¤
make_image_model(volume_parametrization: cryojax.simulator.AbstractVolumeParametrization, image_config: cryojax.simulator.AbstractImageConfig, pose: cryojax.simulator.AbstractPose, transfer_theory: cryojax.simulator.ContrastTransferTheory | None = None, volume_integrator: cryojax.simulator.AbstractVolumeIntegrator = cryojax.simulator.AutoVolumeProjection(), detector: cryojax.simulator.AbstractDetector | None = None, *, transform: cryojax.ndimage.AbstractImageTransform | None = None, normalizes_signal: bool = False, signal_region: Bool[NDArrayLike, '_ _'] | None = None, signal_centering: Literal['bg', 'mean'] = 'mean', translate_mode: Literal['fft', 'atom', 'none'] = 'fft', quantity_mode: Literal['contrast', 'intensity', 'counts'] | None = None) -> cryojax.simulator.AbstractImageModel
Construct an cryojax.simulator.AbstractImageModel for
most common use-cases.
Simulate an image
import cryojax.simulator as cxs
# Load modeling components
volume, image_config, pose, transfer_theory = ...
# Build image formation model
image_model = cxs.make_image_model(volume, image_config, pose, transfer_theory)
# Simulate!
image = image_model.simulate()
Arguments:
volume_parametrization: The volume for imaging. To get started building volumes, see thecryojax.simulator.load_tabulated_volumeandcryojax.simulator.render_voxel_volumeutilities, or explore cryoJAX'scryojax.simulator.AbstractVolumeRepresentationclasses. Advanced users may be interested in implementingcryojax.simulator.AbstractVolumeParametrizationclasses.image_config: The configuration for the image and imaging instrument. Unless using a model that uses the electron dose as a parameter, choose thecryojax.simulator.BasicImageConfig. Otherwise, choose thecryojax.simulator.DoseImageConfig.pose: The pose in a particular parameterization convention. Common options are thecryojax.simulator.EulerAnglePose,cryojax.simulator.QuaternionPose, orcryojax.simulator.AxisAnglePose.transfer_theory: The contrast transfer function and its theory for how it is applied to the image. Seecryojax.simulator.ContrastTransferTheory.volume_integrator: Optionally, pass the method for integrating the electrostatic potential onto the plane (e.g. projection via fourier slice extraction). If not provided, a default option is chosen using thecryojax.simulator.AutoVolumeProjectionclass.detector: Ifquantity_mode = 'counts'is chosen, then ancryojax.simulator.AbstractDetectorclass must be chosen to simulate electron counts.transform: Acryojax.ndimage.AbstractImageTransformapplied to the the output ofimage_model.simulate()as a postprocessing step.normalizes_signal: Whether or not to normalize the output ofimage_model.simulate(). IfTrue, seesignal_centeringfor options.signal_region: A boolean array that is 1 where there is signal, and 0 otherwise used to normalize the image. Must have shape equal toimage_config.shape.signal_centering: How to calculate the offset for normalization whennormalizes_signal = True(and ignored ifnormalizes_signal = False). Options are- 'mean':
Normalize the image to be mean 0
within
signal_region. This normalizes the image to be a z-score. - 'bg':
Subtract mean value at the image edges.
This makes the image fade to a background with values
equal to zero. Requires that
image_config.padded_shapeis large enough so that the signal sufficiently decays.
- 'mean':
Normalize the image to be mean 0
within
translate_mode: How to apply in-plane translation to the volume. Options are- 'fft': Apply phase shifts in the Fourier domain.
- 'atom':
Apply translation to atom positions before
projection. For this method, the
volume_parametrizationargument must be or yield acryojax.simulator.AbstractAtomVolume. - 'none': Do not apply the translation.
quantity_mode: The physical observable to simulate. IfNone, simulate without scaling to physical units using thecryojax.simulator.LinearImageModel. Options are- 'contrast':
Uses the
cryojax.simulator.ContrastImageModelto simulate contrast. - 'intensity':
Uses the
cryojax.simulator.IntensityImageModelto simulate intensity. - 'counts':
Uses the
cryojax.simulator.ElectronCountsImageModelto simulate electron counts. If this is passed, adetectormust also be passed.
- 'contrast':
Uses the
Warning
The pose given to make_image_model always represents a
rotation of the object, not of the frame. Some volume
projection methods (e.g. cryojax.simulator.FourierSliceExtraction)
instead image
a rotation of the frame, so if volume_parametrization is
such a representation, the pose is transposed under the hood.
Rotations will still differ by a transpose if:
- The
volume_parametrizationis a custom subclass ofcryojax.simulator.AbstractVolumeRepresentationthat implements a frame rotation. - The user instantiates an
cryojax.simulator.AbstractImageModeldirectly, rather than throughmake_image_model.
In these cases, it is necessary to manually transpose the pose by
calling pose.to_inverse_rotation().
Returns:
A cryojax.simulator.AbstractImageModel with type
cryojax.simulator.ProjectionImageModelif notransfer_theoryis specified.cryojax.simulator.LinearImageModelif atransfer_theoryis specified andquantity_mode = None.cryojax.simulator.ContrastImageModel,cryojax.simulator.IntensityImageModel, orcryojax.simulator.ElectronCountsImageModeldepending on the value ofquantity_mode.
cryojax.simulator.load_tabulated_volume
¤
load_tabulated_volume(path_or_mmdf: str | pathlib.Path | pandas.DataFrame, *, output_type: type[cryojax.simulator.IndependentAtomVolume | cryojax.simulator.GaussianMixtureVolume] = cryojax.simulator.IndependentAtomVolume, tabulation: Literal['peng', 'lobato'] = 'peng', include_b_factors: bool = False, b_factor_fn: Callable[[cryojax.jax_util.NDArrayLike, cryojax.jax_util.NDArrayLike], cryojax.jax_util.NDArrayLike] = identity_fn, selection_string: str = 'all', pdb_options: dict[str, Any] = {}) -> cryojax.simulator.IndependentAtomVolume | cryojax.simulator.GaussianMixtureVolume
Load an atomistic representation of a volume from tabulated electron scattering factors.
Warning
This function cannot be used with JIT compilation. Rather, its output should be passed to JIT-compiled functions. For example:
import cryojax.simulator as cxs
import equinox as eqx
path_to_pdb = ...
volume = cxs.load_tabulated_volume(path_to_pdb)
@eqx.filter_jit
def simulate_fn(volume, ...):
image_model = cxs.make_image_model(volume, ...)
return image_model.simulate()
image = simulate_fn(volume, ...)
Arguments:
path_or_mmdf: The path to the PDB/PDBx file or apandas.DataFrameloaded frommmdf.read.output_type: Either acryojax.simulator.GaussianMixtureVolumeorcryojax.simulator.IndependentAtomVolumeclass.tabulation: Specifies which electron scattering factor tabulation to use. Supported values aretabulation = 'peng'ortabulation = 'lobato'. Seecryojax.constants.PengScatteringFactorParametersandcryojax.constants.LobatoScatteringFactorParametersfor more information.include_b_factors: IfTrue, include PDB B-factors in the volume.b_factor_fn: A function that modulates PDB B-factors before passing to the volume. Has signaturenew_b_factor = b_factor_fn(b_factor, atomic_number). Ifoutput_type = IndependentAtomVolume,b_factoris the mean B-factor for a given atom type.selection_string: A string formdtrajatom selection. Seecryojax.io.read_atoms_from_pdbfor documentation.pdb_options: Additional keyword options passed tocryojax.io.read_atoms_from_pdb, not includingselection_string.
Returns:
A cryojax.simulator.AbstractVoxelVolume with exact type
equal to output_type.
cryojax.simulator.render_voxel_volume
¤
render_voxel_volume(atom_volume: cryojax.simulator.AbstractAtomVolume, render_fn: cryojax.simulator.AbstractVolumeRenderFn, *, output_type: type[cryojax.simulator.FourierVoxelGridVolume | cryojax.simulator.FourierVoxelSplineVolume | cryojax.simulator.RealVoxelGridVolume] = cryojax.simulator.FourierVoxelGridVolume) -> cryojax.simulator.FourierVoxelGridVolume | cryojax.simulator.FourierVoxelSplineVolume | cryojax.simulator.RealVoxelGridVolume
Render a voxel volume representation from an atomistic one.
Simulate an image with Fourier slice extraction
import cryojax.simulator as cxs
# Simulate an image with Fourier slice extraction
voxel_volume = cxs.render_voxel_volume(
atom_volume=cxs.load_tabulated_volume("example.pdb"),
render_fn=cxs.AutoVolumeRenderFn(shape=(100, 100, 100), voxel_size=1.0),
output_type=cxs.FourierVoxelGridVolume,
)
image_model = cxs.make_image_model(voxel_volume, ...)
image = image_model.simulate()
Arguments:
atom_volume: An atomistic volume representation, such as acryojax.simulator.GaussianMixtureVolumeor acryojax.simulator.IndependentAtomVolume.render_fn: Acryojax.simulator.AbstractVolumeRenderFnthat acceptsatom_volumeas input. Choosecryojax.simulator.AutoVolumeRenderFnto auto-select a method from existing cryoJAX implementations.output_type: Thecryojax.simulator.AbstractVoxelVolumeimplementation to output. Eithercryojax.simulator.FourierVoxelGridVolume/cryojax.simulator.FourierVoxelSplineVolumefor fourier-space representations, orcryojax.simulator.RealVoxelGridVolumefor real-space.
Returns:
A cryojax.simulator.AbstractVoxelVolume with exact type
equal to output_type.