If I perform 3D-VA on a symmetry-expanded version of a downsampled particle set, and then use 3D-VA display to select a subset of particles from a particular mode, is there any way to obtain the equivalent selection of a (separately created) symmetry-expanded set of the unbinned particles (to use for local refinement)?

So far the only way I can come up with is if I symmetry expand the unbinned particles first, and then downsample the symmetry expanded set and perform 3D-VA on that, but this takes up an unnecessarily large amount of disk space and scratch space, depending on the degree of downsampling and the degree of symmetry.

Are there identifying, corresponding fields in the two particle or respective passthrough files that can be used to subset the unbinned particles with cryosparc.dataset.Dataset.query()? Only recently started playing with cryosparc-tools, so I unfortunately don’t have a surefire strategy for this particular use case.

Is another alternative future strategy to generate the down-sampled images, symmetry expand the unbinned metadata, and then swap the .blob lower level input? Or, do the uids not get maintained properly this way?

I’ve tried using the lower level inputs approach without success, but haven’t tried cryosparc-tools, that might work, thanks!

For now I am just using 3D-flex data prep on a symmetry-expanded full-scale input, and using the resulting cropped and downsampled particles for 3D-VA - then I can get reconstructions of subsets of the full scale particles by swapping the lower-level inputs. This works, but isn’t terribly space efficient, especially for higher symmetries.

Hi @olibclarke! As you discovered, the low-level interface won’t work here because symmetry expansion assigns new UIDs to the particles. However, their original particle UID is still there, so we can do what you want using cryosparc-tools. Below is a gist to do it.

A few notes:

It is easiest (and what this gist expects) to symmetry expand both the full-size and downsampled particles. This is quick and doesn’t use much disk space, so that’s the approach we recommend.

This gist keeps all particle information from the full-size, symmetry-expanded stack. In other words, it is just used to select particles that you have filtered in another pipeline. If you need poses from that second pipeline you will need to add a bit more code. I’m happy to help if that’s the case