Splitting particles for half maps : how does cryoSPARC proceed?

Dear cryoSPARC developers, I would like to know how cryoSPARC splits particles for half map calculation ?
I successfully imported particles from a data.star produced by Relion, and could run 3D refinement, but artifacts in FSC curve indicates that the splitting is not done as I would like (the issue is that I have overlapping particles which should not end up being included in two different halves).
Does it take even/odd lines from this star file, does it read the rlnRandomSubset field, does it proceed differently ?
Can I do anything to control which particles will be included in each half map ?
Thanks much in advance,

Dear all, would anyone have a quick answer to this question? To summarise : how does cryoSPARC split particles for half-map generation and is it possible to choose myself which particle goes into which half ?
Thanks very much

  • If you extract in cryoSPARC, or import particles without rlnRandomSubset, it’s random.
  • If you import particles with rlnRandomSubset defined, the split is preserved.

Therefore, you can set it yourself if you use csparc2star.py to make a .star file and then change rlnRandomSubset as you like. One reason to do this is to prevent FSC artifacts (such as failure to decay to and oscillate around zero) caused by duplicate particles. Such artifacts do not arise if all duplicates are within the same half set.

Dear Daniel, thanks for your reply. I imported particles with rlnRandomSubset defined, out of a Relion refinement (which did not give any artifacts since the overlapping particles were grouped in the same half map -Relion does by default per-micrograph splitting). There were no artifacts in FSC from Relion refinement, so I assume that somehow the rlnRandomSubset was not taken into account. This is maybe a bug ?

Hi @adesfosses, which version of cryoSPARC were you using to do the .star file import?

Dear Ali,
we just updated cryoSPARC (version v2.11.0), I re-imported the particles from a data.star containing _rlnRandomSubset, and ran into the same problem (FSC not dropping to 0, not even to 0.143, masked or unmasked behave the same).
I verified that overlapping segments are always assigned to the same half, which is the case. From the same data.star, Relion refinement does output a “normal” FSC curve.
Would there be a way to check how cryoSPARC divides the particles to see if _rlnRandomSubset was somehow not taken into account ?
Thanks for your help

Hi @adesfosses,

In v2.11 the value of _rlnRandomSubset is imported when you import particles from a .star file. However, standard homogeneous refinement does not actually use these values - it generates a new random split each time and unfortunately there is no parameter to stop this. Local refinement, on the other hand, respects the split that is defined at import time. So you should be able to import the particles and then perform refinement using the local refinement job, and you can set the angular/shift search range as needed. Please be sure to use a generous mask during local refinement to ensure resolution estimates are sound.

Hi Ali,
thanks for your reply. Using local refinement indeed now solved the problem of splitting according to _rlnRandomSubset.
There will be a number of cases where users will be willing to control the splitting of particles, even for standard homogeneous refinements. If this can’t come from Relion’s label, one option would be to allow the user to do one separate particle import for each half (which is already possible to do), and then add an option in refinement job to split particles according to the import job…
All the best