Source code for relion

"""
Relion Python API
https://github.com/DiamondLightSource/python-relion
"""

import functools
import pathlib
from relion._parser.ctffind import CTFFind
from relion._parser.motioncorrection import MotionCorr
from relion._parser.class2D import Class2D
from relion._parser.class3D import Class3D

__all__ = []
__author__ = "Diamond Light Source - Scientific Software"
__email__ = "scientificsoftware@diamond.ac.uk"
__version__ = "0.1.0"
__version_tuple__ = tuple(int(x) for x in __version__.split("."))


[docs]class Project: """ Reads information from a Relion project directory and makes it available in a structured, object-oriented, and pythonic fashion. """ def __init__(self, path): """ Create an object representing a Relion project. :param path: A string or file system path object pointing to the root directory of an existing Relion project. """ self.basepath = pathlib.Path(path) if not self.basepath.is_dir(): raise ValueError(f"path {self.basepath} is not a directory") def __eq__(self, other): if isinstance(other, Project): return self.basepath == other.basepath return False def __hash__(self): return hash(("relion.Project", self.basepath)) def __repr__(self): return f"relion.Project({repr(str(self.basepath))})" def __str__(self): return f"<relion.Project at {self.basepath}>" @property @functools.lru_cache(maxsize=1) def ctffind(self): """access the CTFFind stage of the project. Returns a dictionary-like object with job names as keys, and lists of CTFMicrograph namedtuples as values.""" return CTFFind(self.basepath / "CtfFind") @property @functools.lru_cache(maxsize=1) def motioncorrection(self): """access the motion correction stage of the project. Returns a dictionary-like object with job names as keys, and lists of MCMicrograph namedtuples as values.""" return MotionCorr(self.basepath / "MotionCorr") @property @functools.lru_cache(maxsize=1) def class2D(self): """access the 2D classification stage of the project. Returns a dictionary-like object with job names as keys, and lists of Class2DParticleClass namedtuples as values.""" return Class2D(self.basepath / "Class2D") @property @functools.lru_cache(maxsize=1) def class3D(self): """access the 3D classification stage of the project. Returns a dictionary-like object with job names as keys, and lists of Class3DParticleClass namedtuples as values.""" return Class3D(self.basepath / "Class3D")