Usage¶
To access a Relion project folder you first need to create a relion.Project
object (c.f. API for more information):
import relion
proj = relion.Project("/path/to/relion/project/directory")
proj = relion.Project(pathlib.Path("/project/directory")) # path objects are supported
The directory structure inside a Relion directory is built up of stages and jobs.
Each stage folder will contain one or more job folders.
The job folder(s) contain files related to the stage, including the *.star
files from which values can be read:
project_root
│
├── MotionCorr
│ └── job002
│ └── corrected_micrographs.star
│ └── ...
├── CTFFind
│ └── job003
│ └── micrographs_ctf.star
│ └── ...
├── Class2D
│ ├── job008
│ │ └── run_it025_data.star
│ │ └── run_it025_model.star
│ │ └── ...
│ └── job013
│ └── run_it_025_data.star
│ └── run_it_025_model.star
│ └── ...
└── Class3D
└── job016
└── run_it_025_data.star
└── run_it_025_model.star
└── ...
The desired EM values are extracted from *.star files.
For example, a snippet from MotionCorr/job002/corrected_micrographs.star
is shown below:
...
loop_
_rlnCtfPowerSpectrum #1
_rlnMicrographName #2
_rlnMicrographMetadata #3
_rlnOpticsGroup #4
_rlnAccumMotionTotal #5
_rlnAccumMotionEarly #6
_rlnAccumMotionLate #7
MotionCorr/job002/Movies/20170629_00021_frameImage_PS.mrc MotionCorr/job002/Movies/20170629_00021_frameImage.mrc MotionCorr/job002/Movies/20170629_00021_frameImage.star 1 16.420495 2.506308 13.914187
MotionCorr/job002/Movies/20170629_00022_frameImage_PS.mrc MotionCorr/job002/Movies/20170629_00022_frameImage.mrc MotionCorr/job002/Movies/20170629_00022_frameImage.star 1 19.551677 2.478968 17.072709
MotionCorr/job002/Movies/20170629_00023_frameImage_PS.mrc MotionCorr/job002/Movies/20170629_00023_frameImage.mrc MotionCorr/job002/Movies/20170629_00023_frameImage.star 1 17.547827 1.941103 15.606724
MotionCorr/job002/Movies/20170629_00024_frameImage_PS.mrc MotionCorr/job002/Movies/20170629_00024_frameImage.mrc MotionCorr/job002/Movies/20170629_00024_frameImage.star 1 18.100817 1.722567 16.378250
...
To access the _rlnAccumMotionTotal
column in this file you can use:
>>> [micrograph.total_motion for micrograph in proj.motioncorrection["job002"]]
['16.420495', '19.551677', '17.547827', '18.100817', ...]
Stages are dictionary-like objects, so can discover the list of all known jobs by:
>>> list(proj.class2D)
['job008', 'job013']
and use the other standard dictionary accessors (.values()
, .keys()
, .items()
), too.
You can also convert the stages into normal dictionaries:
>>> dict(p.ctffind)
{'job003': [CTFMicrograph(...), ...]}
For a list of supported stages and a list of supported values per stage please have a look at the API page.