Incomplete particle subtraction


I am trying to locally refine a domain of my protein after NU refinement but suspect that particle subtraction is incomplete.

The protein has two domains and I created a mask for subtraction of one domain using Segger in Chimera with the Extract Densities from Regions tool to create .mrc files. The .mrc files for each domain at the thresholds shown below were imported to cryosparc and masks created for subtraction using these thresholds, lowpass 8A, dilation 0, soft padding 12 and fill holes enabled.

Mask created for domain 1:

Mask created for domain 2:

My settings for subtraction were:

  1. Input particles and volume from consensus NU refine
  2. Mask from above (included density for single domain)
  3. Window same as for NU refine
  4. Default settings except lowpass filter input 8A (my particle is small and difficult to see so I thought this may improve subtraction - was this correct?)

Subtraction didn’t give any error but I can’t see my particle so don’t know if it worked.

I tried to do local refine of each domain individually using a mask containing a single domain plus its glycans (created using local-filter map and Segger) with a soft edge of 12. It ended up giving artifacts at the linker between the domains. Thinking that the flexibility at this linker may have caused suboptimal subtraction of some particles, I now performed local refine using the consensus mask around the subtracted particles. It looks like the subtraction was indeed incomplete (top domain below):

Any idea how I can improve the subtraction?

1 Like

Hi, Here are a few things I would try:
1- Check how well subtraction worked with 2D classification
2- Add some dilation to the mask used for subtraction, perhaps 6A. Additionally, I always use the lowpass filtered map to decide on the threshold for mask generation
3- Exclude the linker region from your subtraction mask

How does local refinement of the subtracted particles look when you use a mask around the non-subtracted domain?

Hi @user123
Thanks for the reply. Local refinement does improve the protein features so it looks like a worthwhile strategy. I am just concerned about the artifacts that appear at the boundary and have tried to adjust the static refinement mask but haven’t been able to get rid of them. The two domains are unfortunately very close so I can’t manage to exclude the linker from the subtraction mask without losing protein density of the refined domain.
I will give your first 2 suggestions a try, thanks!

Hi @lizellelubbe,

You could also try with no lowpass filter – the particle subtraction will already use the FSC curve to apply an ad-hoc lowpass filter to the volume, ensuring that at resolutions where the half-maps don’t agree well, the subtracted Fourier coefficients will be downweighted. With a manually specified lowpass filter, it will mean that all the Fourier coefficients above 8A will be unaffected – so you may still have some residual moderate to high resolution information in the subtracted particles, which could still be adding together coherently to create the partial density in the top region.

As well, did the particles and volume both have the same box size? I think this should be the case if they both came from a New NU refine job.


Hi @mmclean,
Thanks for the reply. That actually makes a lot of sense!
I have created new subtraction masks and they look better after further dilation and lowpass filtering. Will try that with subtraction without lowpass of the input NU refine volume. Yes, the particles and volume both have the same box size.
Do you think that it is necessary to include the glycans in the subtraction masks? I only see them in the local-filtered map at lower thresholds. My current subtraction mask has a soft padding of 10 and shaped according to the protein-only parts

I think if the glycans only show up at low thresholds, it likely won’t make a big difference in the result. It could be worth a try, but if the mask you use for refinement excludes them anyway, then the only difference they make is adding a bit of noise to the images.


Hi @mmclean and @user123 ,

I am still having the same problem with incomplete particle subtraction and don’t know what else to try. If I ignore the fact that some densities remain (even using the suggestions you gave above), the one domain refines well but for the other, the remaining densities cause mask edge artifacts that I cannot get rid of. With less dilation the mask is too tight for the desired domain (its glycans are cut) and with more dilation it touches the remaining densities of the partially subtracted domain. I have tried many different threshold, dilation, static/dynamic parameters but cannot get this to work. 2D classes look like single domains since the desired domain has higher density than the partially subtracted one, which is averaged out I assume.

This is the volume_map.mrc after local refine with the consensus mask where the top domain is still partially present:

I didn’t use a lowpass filter during subtraction and the mask containing volume to be subtracted was created with lowpass 15A, dilate 10 and pad 10.

I saw on twitter ( that @olibclarke mentioned better subtraction in Relion with amplitude contrast set to 0.0 instead of 0.1. Does this apply to Cryosparc also?

If I want to set amplitude contrast to 0.0 for the NU consensus refine and particle subtraction and then switch back to 0.1 for local refine, how would I go about it?

Could the following work?

-> export particles from the current NU consensus refine with AC=0.1
-> import that particle stack with override of AC to 0.0
-> re-run NU refine
-> use that volume and particles for signal subtraction
-> export subtracted particles
-> import subtracted particle stack with AC=0.1
-> run local refinement

Hi @lizellelubbe,

If you want to try, you can just perform subtraction in relion, and then re-import the subtracted stack - this works fine generally. And yes, in quite a few cases I have seen better results with subtraction when setting AC=0 during subtraction, I still don’t really understand why


Thanks for the reply @olibclarke
As far as I understand, you mentioned that the consensus refinement should also be done using AC=0.0 - is this correct? In my case, the consensus was done with AC=0.1 and I can’t find a way to set it to 0.0 in CS (re-importing the exported .cs particles has just failed). Relion is really poor at refining my structure due to the glycan densities surrounding it. Could I do the following:

  1. Convert the current NU output’s star file AC to 0.0
  2. Use that to run Class3D w/o align in Relion using K=1, T=20, number of iterations=1 and a mask covering both domains to avoid losing the alignments from CS
  3. Use from Class3D for subtraction in Relion using mask around single domain

Should force-redo split then be enabled for local refine in CS since the particles won’t be split into half-sets anymore?

no you don’t need to refine with AC=0 - just reconstruct. So you can take your particles from csparc and then plug into relion_reconstruct after changing AC to 0 - then just perform subtraction using relion_project, change AC back to 0.1, and re-import into csparc

Thanks @olibclarke,

I ran the subtraction using relion_reconstruct and relion_project as you suggested on the two domains and tried with both 0.1 and 0.0 amplitude contrast. The same subtraction mask with padding of 12 was used during relion_project. I then imported the particle stacks into CS (after resetting AC to 0.1 in .star) and ran the first iteration of local refine using the consensus refine’s mask.

There is still some residual density in the AC 0 stacks but the density seems more negative at the interdomain linker. Do you know why this happens? It’s maybe a straightforward explanation but I am still new to EM. Would this theoretically be less likely to cause mask edge artifacts and overfitting when it cuts the linker area?

Here are the slices for 1st iter of alignment after subtraction in Relion

domain 1 local refine with consensus mask


domain 2 local refine with consensus mask



Hmmm I’m not sure - the other thing you might try is to perform a round of 3D classification in relion without alignments after particle subtraction, with a mask including both domains - in this way you might be able to separate out the particles that have been under subtracted

Also what parameters are you using for particle subtraction? Lowpass filter etc?

Hi @olibclarke,
Sorry for the late reply.
I previously used these commands in Relion:
relion_reconstruct --angpix 1.06 --i --ctf --o from_csparc_P7J258_reconstruct.mrc
relion_project --i from_csparc_P7J258_reconstruct.mrc --mask cryosparc_P7_J456_Cdommask.mrc --subtract_exp --angpix 1.06 --ctf --ang --o Ndom_tightmask_AC00

When you mentioned lowpass filter, I realized that the mask used for subtraction was created by taking the localfilter map, erasing the unwanted domain, lowpass filtering to 10A and binarizing in cryosparc.
I now used the volume from NU-refine with Segger to delete the unwanted domain and created a mask without lowpass filtering. This seemed to improve signal subtraction in cryosparc and I have done local refinement using those particles.

Could I please check the following procedure for local refine with you? I am working remotely from home and am unsure if my method, maps and FSC curves are correct.

I have a consensus map from NU refine at 4.4A res

After signal subtraction, I performed local refinement in CS which improved both domains (5A initial lowpass of first domain, 7A initial lowpass of second domain (otherwise alignment plots were empty), dynamic masking with 6-18 width, 10deg 10A search domain 1, 25deg 10A search domain 2, gaussian prior enabled):

domain 1
domain 2

I then ran those particles and volumes through Relion 3D classification w/o align (T=20, K=4) with single-domain masks and separated out a few remaining junk particles and lower res classes. These were again imported to CS and local resolution performed (force-redo split enabled, ini lowpass 5A for both domains, 5deg and 2A search with gaussian prior, dynamic masking 0.2 threshold 6-18 width)

domain 1
domain 2

Does anything look wrong in the method I followed? At 0.2 threshold the glycans are not included in the dynamic mask and using a lower threshold leads to poorer resolution, as expected. How can you tell if overfitting to noise is present?

This is domain 1 with volume_map and volume_mask_refine from local refine which shows the glycans being cut by the refinement mask. Is that alright to do? It does have a soft edge which covers them at the lowest threshold.

When I look at volume_map (left) vs volume_map_sharp (right) from local refine, the helices at the top in this image look stretched after sharpening. How can I improve this? Does it mean that they are of lower resolution than the rest and now over-sharpened?

Hi @lizellelubbe,

It is often worth lowpass filtering the volume you are going to use for subtraction (in this case I would probably filter to ~4.5Å. You will also want to put a soft edge on the masks you are using for both subtraction and refinement - are you doing that?

I notice that you are using dynamic masking in local refinement - in my experience with the new local refinement one gets better results with a user supplied static mask with a very soft edge, have you tried that?

Also I typically use smaller searches with a gaussian prior - it depends on the situation, but for small particles I often find that searching 3deg/1A with priors of 9deg/3A is a good starting point.

I agree that your volumes do look a bit oversharpened and overrefined - you might find refining with a static mask helps with that.


Hi @olibclarke,

Thanks for those suggestions - I really appreciate it. I knew something was wrong but ran out of things to try.

Do you mind explaining what the reasoning would be behind using a 4.5A lowpass of the input volume for subtraction? After the advice from Michael further up in this thread I switched to no lowpass.

My mask for subtraction had no lowpass applied (this was recommended in a video tutorial but I’m not sure if that was correct), dilation of 5 and padding of 10

Thinking about the subtraction mask again, I only based the mask on the protein density and am now wondering whether using such a mask could’ve caused overfitting by causing correlations on the protein surface where the glycans are cut?

I always use a soft edge of 10-12A for my refinement mask but again, don’t know whether cutting the glycans could cause artifacts so have used a low threshold of 0.06. Is it alright to use an initial lowpass just above the consensus resolution for the local refinement input volume?

I have tried static masking with a 10A edge but saw no improvement. Perhaps the problem is still with signal subtraction and I should optimize refinement after repeating that.

I haven’t played around with the gaussian prior settings but will give it a try!

Hi @lizellelubbe,

What Michael said is true in cryoSPARC, but not to my knowledge true in RELION - if you want to apply a lowpass filter to the volume you want to use for subtraction, you will need to do that yourself. I would usually filter to approx the resolution of the region you are subtracting, it generally gives cleaner results. To be clear, I am talking about applying a lowpass filter to the volume you want to project and subtract, not the mask.


Hi @lizellelubbe,

Just another thought - I wonder if the flexibility between the two domains is leading to incomplete particle subtraction (because the orientation of each domain with respect to the reference that you are projecting and subtracting varies from image to image).

Perhaps you might try the following:

  1. After NU-refine, perform local refinements of each domain (let’s call them domain A and domain B).

  2. Perform particle subtraction for domain A, using the particle set from local refinement. Hopefully, subtraction will be more complete, because you are aligning on the region you are going to subtract. However, the domain you now want to refine is now blurred out, with fairly bad starting angles, so let’s fix that:

  3. Perform local refinement using the particles from step 2, but the orientations from NU refine, with a mask around the domain you have not subtracted. You can supply the orientations by replacing the low level results group alignments3D with the one from NU-refine, using the low level results interface (see: Basically drag the alignments3D result group in the output section of the NU-refine job onto the corresponding slot in the job builder for your local refinement job (you will neeed to expand the particles group to see it by clicking the little down arrow):


Hi @olibclarke,
This is a great idea thank you so much :slightly_smiling_face:
I was really struggling this week and was almost ready to give up on local refinement! Based on my 3dva results it definitely could be that the hinging is causing incomplete subtraction. I will try your method of local refine before subtraction tomorrow morning. Hopefully that does the trick!

1 Like

Let me know how it goes! :slight_smile:

Also for checking on the results of subtraction, don’t forget there is now a Homogeneous Reconstruction job - so you can directly perform a reconstruction of the subtracted particles (with orientations supplied as described above from the NU-refine job), without having to refine them. The result of this may also be useful as an initial model for your subsequent local refinement.



Oh yes, I completely forgot about the homogenous reconstruction job type. Will definitely use that. Thank you!