2D classification without alignment?

Hi,

2D classification without alignments can be useful after a consensus refinement to remove junk (gold particles, carbon/graphene edges, overlapping particles, etc).

See here (https://www.nature.com/articles/s41594-021-00682-7/figures/8) and associated paper for an example of a workflow where this was useful.

Would it be possible to add an option to 2D classification to switch off alignments and just perform classification (assuming that the input particles have an alignments.3d slot?

Cheers
Oli

10 Likes

Hi @olibclarke,

Thanks for the interesting feature request. We checked out the linked article and we have one question.

Are you referring to the process of taking already 3D aligned particles, binning them into different groups by their viewing direction, and then doing 2D Classification on these binned groups of particles? If so – what would the benefit of this approach be over standard 3D Classification?

Or, do you mean just regular 2D Classification, where the alignments are fixed after a certain iteration?

Best,
Michael

I can think of two possibilities:

  • Speed
  • No symmetry imposition

I’ve occasionally had (higher symmetry) datasets with lower quality particles that are next to impossible to remove by 3D classification, where bouncing from 2D-3D-2D-3D-2D-3D has finally managed to sift them out. Admittedly, they’re highly specific cases, but I was experimenting with “can this actually be done automatically or do I really need to go through the particle stack manually…?”

2 Likes

Hi Michael,

Are you referring to the process of taking already 3D aligned particles, binning them into different groups by their viewing direction, and then doing 2D Classification on these binned groups of particles? If so – what would the benefit of this approach be over standard 3D Classification ?

This - just skipping alignments and using alignments from 3D (no binning required). Same principle as classification without alignments in 3D - one can get good results with a larger number of classes, and smaller groups, if you don’t need to search over orientations/offsets. The main application is for removing junk/damaged particles, as described in the article. E.g. let’s say you have carbon edges or small gold particles in your dataset, overlapping with good particles. This is an inherently 2D problem, but regular 2D classification will often force these junk particles to align with good particles. Classification without alignments in 2D can be helpful to address this, as described in the linked article.

The idea of fixing alignments after a certain iteration and sub-classifying each class could be interesting too though - this is akin to the “Deep 2D” classification approaches implemented in ROME etc.

Cheers
Oli

1 Like

Hi @olibclarke,

Thanks for the clarification, this makes sense and I see its potential value as an additional method of junk removal by prohibiting the 2D class algorithm from “absorbing” junk into other classes via overfitting the alignments. We’ve recorded it!

Best,
Michael

4 Likes

To piggy back on top of this, if this gets implemented, it’d be amazing if we could provide the templates for classification, similar to how 3D class can work.

3 Likes

Just thought I’d see if any of the team had any further updates/thoughts on this? Ran face-first into trouble cleaning a new dataset this week and thought of this again.

2 Likes

Bumping to add to the request of implementing 2D classification without alignment.

3 Likes

Just to add - this would also be useful when cleaning subparticles after extraction, in cases where one part of the whole particle is usable, but some of the subparticles are not (e.g. due to aggregation, particle overlap, contamination, graphene edges, etc)

3 Likes

Just wondering if there is any updates on this request? I have a good 3D class which unfortunately still contains junk particles. Further 3D classification is time-consuming and does not do a good job separating the junks. 2D classification without alignment would be very valuable in my case. Currently my only solution is to resort to relion, but switching data back and forth is such a pain

3 Likes

Same. In more than one of our difficult cases, we are looking for needles in haystacks. We need several rounds of 2D+3D classifications and heterogeneous refinements (from several mi ptcls) to get the map, and still we can see it is contaminated with the predominant particles. (I use 3DVA and 3DFlex a lot). 2D classification without alignment would help identifying and eliminating the contaminants, I believe - at least I’d like to try it.

Adding to this and wondering if there is any current plans to bring 2D classification without alignment into CryoSparc?

2 Likes

Wanted to add - if this is implemented (and I hope it is!) it would be useful to be able to provide prior alignments from either 3D or 2D.

The latter would (I think?) facilitate the “deep 2D” classification approach which has been used in a number of recent papers, allowing one to quickly sub-classify individual 2D classes from an initial round of 2D classification.

3 Likes

Want to bring this back up as I’ve got another case where this would be extremely useful to have - both as a diagnostic for particle quality, and as an intermediate step in analysis.

Right now I’m seeing something that makes sense, but how dramatic the impact is, is a little surprising. As such, I’d like to be able to check 2D alignments as they are (direct from symmetry expansion vs. one round of local refinement)!

Two local CTF plots, same particle stack. Global CTF parameters not refined yet. The maximum CTF fit resolution was the same for both runs (manually set to make sure).

Local CTF after symmetry expansion and homogeneous reconstruction (so no angle changes from the symmetry operators):

Local CTF after local refinement (with 3 sigma angular priors set):

Hi,

Many thanks @mmclean for implementing this!!

As currently implemented though, 2D classification without alignments specifically requires 3D alignments. Would it be possible to allow the alignments to come from a preceding round of 2D, and also (optionally) allow a local search around the initial alignments?

The use case would be the following:

  • For difficult membrane proteins in small nanodiscs, often one of the key difficulties is identifying clearly defined populations of empy nanodiscs and those with well-defined embedded protein.
  • Searching over all orientations for e.g. side views can smear out signal, as the nanodisc dominates alignment
  • Pre-aligning all side views (or top views) in a single class, then classifying without alignments with many classes (perhaps with local search of in-plane rotations/shifts) may help separate out well-defined classes, which is essential to get a set of particles that will converge in ab initio.

The local search would also be helpful as it would allow one to effectively continue a class2d run (at least if it has completed one full iteration) by taking the final orientations & searching locally while re-starting classification. Local search + an option to initialize from reconstructed 2d classes would allow one to truly continue a run.

As a simple demonstration of this, I made a CS tools script to convert 2D alignments to 3D alignments (to get around the current limitation), then took a stack of 57k ankyrin complex particles and ran 2D with a single class:

Converted these 2d alignments to 3D (to get around the error), then ran 2D classification without alignments:

Given the heterogeneity of the micelle, this is not too bad, and I suspect a local search in rotation/shift would give improved results.

2 Likes

Thanks Oli for the feature request, this makes sense. We’ll record these both!
Michael

1 Like

Hi everyone,

also interested in this. The thread implies that this has been implemented, but I can’t find exactly how and where. Could someone please point me to how to run 2D without alignment?

Thanks a lot :folded_hands:

Matthias

It is in the regular 2D job (in v5 & late 4.x), there is a checkbox somewhere to switch on/off using input orientations. Currently it only accepts 3D alignments as input, but you can write a little script to get around that pretty easily if needed

Thanks Oli! Turns out its only available from v5 and we are still running 4.7.1.

Cheers!

1 Like