Exporting particles from Cryosparc to relion for re-extraction


I am trying to export some particles from CryoSPARC to RELION for further calssification and refinement. I am using the follwing command -

“csparc2star.py --inverty --micrograph-path MotionCorr/job002/Frames/ …/CS-20scp-og/J23/J23_006_particles.cs …/CS-20scp-og/J23/J23_passthrough_particles.cs J23_CS_particles.star”

J23 is my homogenous refinement job from CryoSPARC.

When I extract htese particles on RELION and runa 2D classificaion, only 5% of the particels are good. Everything else is just noise. I am not sure what I am doing wrong.

Has anybody faced this issue before? Any idea how to fix this?


there are a few flags that can affect the converted particle coordinates, and I have not been able to find a definitive way to know up front which ones will be correct.

My current solution is to perform an “inspect particle picks” in CryoSPARC and compare the particle positions with those displayed in Relion when performing manual picking with the pyem .star file as an input. By comparing a single micrograph it is easy to see which operations are needed to output the correct coordinates.

If you have thousands of micrographs it can be challenging to find the same micrograph in both CryoSPARC and Relion so you can perform a trail on a subset of ~5 micrographs .


If you have coordinates from cryoSPARC which are to be used in Relion, the coordinates need to be flipped in Y. This is the default for csparc2star.py, because cryoSPARC flips the coordinates when it imports them, and back before all the different job types were available we were always importing drift corrected micrographs and particle coordinates into cryoSPARC. Further, if you only import coordinates then you can also use --copy-micrograph-coordinates and just keep the original ones, which are guaranteed to work.

--inverty flips the coordinates a second time (and as an optimization becomes a no-op). That allows import/export cycles to keep the same numeric coordinates throughout. That’s important if you are just using external programs like Relion for 3D classification and need to maintain the coordinates to re-use in cryoSPARC. This is common nowadays, as cryoSPARC itself does motion correction, particle picking, etc. and most folks use those features.

There is an additional point of confusion introduced by motion correction software, such as MotionCor2 and Relion, that also physically flip the movie frames when writing out sums. If you have coordinates from cryoSPARC, using cryoSPARC Patch Motion, and you want to use them to extract in Relion using Relion MotionCorr or MC2, then you actually need --inverty too.

I should mention that --invertx and --no-swapxy are never needed in a normal pipeline, but they are there if for some reason you need to use transposed images with old coordinates.

You can use the disparticle.py program from pyem to test coordinates using the same conversion arguments/semantics as in csparc2star.py.

1 Like