What is the best strategy to select an optimal set of particles in CryoSPARC?

Hi all, curious if anyone has any suggestions on appropriate parameters to use in ab initio reconstruction and/or multi-reference refinement to select an optimal set of particles.

I am thinking about a simple case where one is concerned with separating out “shiny” particles of a single conformation from high contrast junk, damaged particles, noise particles, and particles with poor SNR, bad motion correction or inaccurate defocus etc.

I have had some success with this using a two-class ab initio run with a expected similarity of zero, followed by refining the “good” class while varying the class probability threshold, but I’m curious as to whether anyone has any ideas that have proved more successful, as I’m still not convinced that the results I’m getting are as good as they could be.


Hi Oli,

A good question! From my experience, I would agree that the best strategy with the current cSPARC is to use 2 classes for ab-initio reconstructions to weed out the bad particles. However, this haven’t given me anything close what could be achieved with Relion 3D-classification (with/without particle alignment). It would be good to have reference-based 3D classification and particle sorting (no particle alignment) implemented in cSPARC. Otherwise, 2D/3D classification in Relion is still necessary for datasets which are not clean.



Hi Simonas,

Agreed - 2D/3D classification in relion is my current approach too.

There is an experimental “multi-refine” mode in cryosparc (which can be enabled by adding export CRYOSPARC_EXPERIMENTAL=true to the cryosparc config.sh) which I believe is akin to multi-reference classification, and I’m having a play with that at the moment, but I’m not exactly sure of how that works under the hood.


1 Like

Hi Oli,

thanks for sharing this! I was wondering why I couldn’t see such option…



It’s also possible to provide a 3D reference for the ‘ab initio’, but you should also adjust the filtering so that it isn’t low pass filtered too aggressively. This approach is probably more similar to what Relion’s reference-based 3D classification is doing. Multri-refine can branche-and-bounds its way to high-resolution.

Hi John,

how do you provide a 3D reference and define how many classes you want for an “ab initio” 3D classification? - by selecting 4 structures like this:

How do you modify low pass filtering for references during ab initio run? The only thing i found was for random initial structures, 3D ab initio classification:

On this general topic, I think it would be great if cryoSPARC allowed preservation of class assignments from relion, so that one could import the overall data.star after 3D classification, for example, and then refine each selected class or combination of classes in cryoSPARC.


Hi Simonas,

  • Select your dataset
  • Go to the experiments tab
  • Import Volume/Mask (upload the file and launch this)
  • Go back to the experiments tab
  • Click on the word “structure” beneath the image of your imported structure N times for N classes
  • Click ‘new experiment’
  • Click ‘Ab initio’ (and give it a name)
  • Under ‘setup’ adjust ‘initial resolution’
1 Like

@olibclarke Interesting idea. It could work. Niko Grigorieff showed for TRPV1 data that both Relion and Frealign could identify 3D classes that could be refined to high resolution but the population of particles that went into the Relion class and the Frealign class did not overlap much. It could be (is likely I think) that Relion and cryoSPARC class populations would overlap much more because the figure of merit used to say when an image looks like a projection is the same in cryoSPARC and Relion, but different in Frealign.

In the meantime, you could use a script from here:
to save a standalone stack from a starfile the corresponds to an individual Relion class.

Hi John - thanks! I’m actually already doing this, using the subset selection tool in relion to save star files corresponding to each class or class combination, and then importing each one as a new dataset into cryosparc, which works just fine - but it would ultimately be more efficient for testing purposes I think to import the entire dataset as a single star file, with class assignments preserved.

This would also allow 2D classification in relion, and direct selection and refinement of subsets of the 2D classes in cryosparc - allowing one to quickly test whether the inclusion or exclusion of specific views helps the refinement, e.g. in cases where one view is particularly abundant.

Very interesting re the Frealign/Relion classification results… but are both mostly nonoverlapping classes able to be refined to high resolution in both programs? And what does the refinement of the combination of the frealign and relion classes look like I wonder? I.e. is it purely an issue of class identification, or does it also affect how the two programs treat the particles during refinement?

In any case, in my experience so far, 3D classification in relion and refinement in cryosparc seem broadly compatible - high resolution classes from relion refine to high resolution in cryosparc.

I have been less successful going the other way - taking the final csv (converted to star), map and mask from cryosparc and attempting to continue the refinement in relion (for the purposes of masked refinement) - that hasn’t worked at all, which makes me suspect that relion and cryosparc use different conventions for some aspect of the process, though I can’t figure out exactly what the impediment is.


Hi Simonas,

I’m also running and ab-initio job with an initial reference model, and I wanted to low-pass filter it to 60 angstrom.
Do you know how to convert the fourier radius to angstrom?
And what does a fourier radius of 7 translate to in terms of Angstroms?

Any help would be much appreciated.


Long delay since this was posted, but for completeness here are some Fourier transform basics:

resolution (in Å) = boxsize (in pixels) * pixel size (in Å) / radius (in pixels)

Hi, has anybody tried to do an Ab-initio with two classes and similarity zero, providing a reference volume and all particles from a Relion extract job? Would this work or do you see any possible problem?

Thank you for your help!

Hi, I tried as John suggested, and unfortunately I get this error:
Traceback (most recent call last):
File “/gpfs/data/marino_j/cryosparc/merlin-g-02/cryosparc-compute/sparcjob.py”, line 533, in
cuda_devs = current_experiment_params[‘cuda_devs’])
File “/gpfs/data/marino_j/cryosparc/merlin-g-02/cryosparc-compute/abinit_fast.py”, line 113, in abinit
assert len(initrefs) == 0, “Cannot specify multiple starting models and ab-initio classes together.”
AssertionError: Cannot specify multiple starting models and ab-initio classes together.

Any suggestion`?

Hi - you should leave the number of ab initio classes as “null” if providing reference models for ab initio


Hi Oliver, yes I tried that too and did not work. Maybe I can try to provide one “good” volume and one “bad” volume, and leave the number of classes as “null”. I hope I can try again.
Best wishes and thanks for your help,

It works well by selecting twice the filtered imported volume twice, and selecting a set of particles.
Thank you,