Is there any easy way to copy higher order CTF parameters from one refinement to another?
This would be useful when one class refines to high resolution and allows precise estimation of beam tilt, trefoil etc, but another class refines to more moderate resolution and therefore CTF refinement is not as accurate.
I thought maybe this could be accomplished by playing around with the lower level results, but it seems all the CTF params, including both per particle ones like defocus and per dataset (or per micrograph) ones like beam tilt are in
Dear @olibclarke ,
We currently don’t explicitly distinguish in the
cs file itself which ctf parameters are per-group and per-particle, which means it’s a bit complicated to do this generally.
For the odd terms (residual shift
ctf/trefoil_A), these are always constant per group; they can just be copied over to the other dataset.
Some of the even terms are constant per dataset (
ctf/cs_mm and tetrafoil
ctf/tetra_A), but not all of them (phase shift, defoci) unfortunately, and we don’t store the per-group modifications that were fit during the CTF refinement job aside from printing them to the streamlog. Further, since some of the even terms are coupled to each other, it might not be correct to just copy the spherical aberration and tetrafoil values without also changing the defoci…
Unfortunately I think the only safe way to do this is just to copy over the odd aberrations, i.e. only modify the beam tilt, trefoil, and residual shift. This is an interesting use case though, and definitely speaks to the benefits of separating the group values!
Edit: Actually even for the odd terms, the only way to “copy” them and then use them later in cryoSPARC would involve loading the dataset into a python environment using, modifying the dataset values, and then re-writing the cs file. So it would involve the kind of manipulation like in this tutorial.
Actually I think it is copying the higher order CTF parameters - because when I use them as inputs to a global CTF refinement (supplied using the low level results interface), they show as the previous parameters:
Ah, I think I misunderstood your use case. I think this workflow of overriding the low-level CTF group from one CTF refinement, to a particle stack with a different box size, should work, since they are all in physical units thus the box size doesn’t matter. I think you should also be able to do this by fitting CTF at the low box size, and then using extract from micrographs to re-extract, and then you wouldn’t have to override the low-level result anymore since it would just passthrough. This is separate from the original case about copying CTF values across two different classes though, right?
Hi Michael - yes that’s right, and yes it is a different use case from the original post, apologies for the confusion!
@mmclean one related thing that would be useful would be to allow the specification of higher order CTF parameters at particle import time. I frequently go back and forth between cryoSPARC and relion - e.g. to perform multiple rounds of Bayesian polishing. In this case, higher order CTF parameters are lost, but I know what they are from previous refinements - it would be useful to be able to specify beam tilt x/y etc at import, in the same way one can specify other parameters such as spherical aberration. Currently, I have to run a reconstruction job, followed by a global CTF job, to re-estimate these parameters prior to further refinement.
We’ve added this to our issue tracker. Ideally we would have a way to match particles’ uids with a previously existing particle dataset in cryoSPARC (so that previous
ctf result groups can be used to override those of the imported particles), or to just directly convert RELION optics groups to cryoSPARC’s conventions, but either of those would be more complex than just inputting the tilt/trefoil/tetrafoil/etc values.