Hello, I am trying to export a helical refinement job from Cryosparc using csparc2star, but running relion_reconstruct on the resulting star file results in a blob. Doing the identical steps on a different project (non-helical) gives me the correct density. Is there something additional that needs to be applied to the angles/shifts when coming from a helical refinement?
Additional info:
Running Cryosparc 4.2.1
My particles are imported from a Relion extract job
Things I’ve tried:
Using the export .cs or using the job .cs (and therefore providing the passthrough)
Re-extracting in Relion after converting to .star
Re-extracting in Cryosparc before converting to .star (therefore using --inverty)
Apologies for the delayed reply. This is interesting – When you ran relion_reconstruct, did you impose any helical symmetry? I wonder if the issue is a difference in helical symmetry conventions between RELION and CryoSPARC.
Other than that, if you reconstruct without imposing symmetry then the helical symmetry convention shouldn’t matter. @DanielAsarnow Does csparc2star treat the alignments3D/poses differently for helical filaments?
Hm, actually there is a potential issue. It first populates the Euler angle fields with the Rodrigues vectors, and then later converts those values to actual Euler angles, but before that happens if a ‘filament/filament_pose’ exists it is overwriting rlnAnglePsi. That can’t be right and would ruin the angles downstream…
Where does filament/filament_pose come from? I do want to write out that value but maybe only if alignments3D doesn’t exist?
Ah interesting, thanks for clarifying the behaviour @DanielAsarnow. filament/filament_pose is only written to while picking particles, and gives a (very) crude estimate of the angle of the filament axis in the micrograph. It’s not used in any of the refinement/classification jobs, and it shouldn’t be used to overwrite rlnAnglePsi because it doesn’t actually correspond to the correct in-plane pose for 2D/3D alignment purposes – these should still come from converting the alignments3D/pose to Euler angles.
I don’t know if RELION has an analogous field that’s only used during particle picking to indicate the in-plane pose, so it’s probably okay to drop the filament/filament_pose when converting to star files. Does rlnAnglePsi get populated during particle picking?
EDIT: During CryoSPARC’s import particles job, we copy over rlnAnglePsiPrior into filament/filament_pose, which I believe is the most analogous field. I think in csparc2star it would make most sense to do the reverse and copy filament/filament_pose to rlnAnglePsiPrior. For reference, the conversion is done by: filament_pose = - n.deg2rad(rlnAnglePsiPrior), so csparc2star could undo this.
The only caveat is that I believe rlnAnglePsiPrior defines the center over a prior on the Psi angle, and there is an ambiguity in what this should be (e.g. if i have a filament lying at a 45º angle in the micrograph, should the Psi prior be centered at 45º, or should it be at (180+45)º?) I believe RELION uses a bimodal prior over Psi so this shouldn’t matter (see Fig. 4 from He and Scheres) – hopefully this is up-to-date information…
Great, thanks. I updated csparc2star.py to write the filament_pose into AnglePsiPrior instead and leave the real 3D pose untouched. Someone told me the correct value was actually -filament_pose + pi/2 so I’ve left that in for now. If having the PsiPrior written out is a problem for anyone, you can just change the field name to something Relion doesn’t know about like rlnCryosparcPsiPrior or whatever, and it’ll ignore it.
--bimodal_psi is an option in Relion, I think it’s the default for filaments but not sure.
Just want to let you know that the current version of pyem works for me for exporting helical particles from cryosparc to relion. Thank you! @DanielAsarnow@mmclean