Difference between revisions of "Getting a Structure from Multiple Tomograms of HIV Capsids (walkthrough)"

From Dynamo
Jump to navigation Jump to search
Line 1: Line 1:
In this walkthrough you will get familiar with managing multiple tomograms through the Dynamo catalogue and developing strategies for alignment projects to reach a reasonable structure from a set of tomograms. You will make use of the knowledge that you acquired during the workshop and apply it to a more realistic case. It is recommended to get familiar with at the [[Advanced_starters_guide | advanced starters guide]] and the [[Walkthrough_for_lattices_on_vesicles | walkthrough for lattices on vesicles]] before starting this walkthrough.
+
In this walkthrough you will get familiar with managing multiple tomograms through the ''Dynamo'' catalogue and developing strategies for alignment projects to reach a reasonable structure from a set of tomograms. You will make use of the knowledge that you acquired during the workshop and apply it to a more realistic case. It is recommended to get familiar with at the [[Advanced_starters_guide | advanced starters guide]] and the [[Walkthrough_for_lattices_on_vesicles | walkthrough for lattices on vesicles]] before starting this walkthrough.
  
 
== Data ==
 
== Data ==
We prepared a set of 6 tomograms, each containing one Immature HIV-1 virus like particle (VLP) with a layer formed by a lattice of capsid proteins. The capsid proteins have a C6 symmetry and have a diameter of roughly 15nm and a molecular weight of about 150kDa. The pixelsize of the tomograms is 2.7 angstrom. You can find the tomograms in:
+
We prepared a set of 6 tomograms, each containing one Immature HIV-1 virus like particle (VLP) with a layer formed by a lattice of capsid proteins. The capsid proteins have a C6 symmetry, a diameter of roughly 15nm and a molecular weight of about 150kDa. The pixelsize of the tomograms is 2.7 angstrom. You can find the tomograms in:
 
  <tt>~/data/tutorial_VLPs</tt>
 
  <tt>~/data/tutorial_VLPs</tt>
  
Line 24: Line 24:
 
vlp_6.mrc</nowiki>
 
vlp_6.mrc</nowiki>
  
In case you imported the tomograms using a volume file you have to click the button ''list volumes'' to refresh the tomogram list in the catalogue manager. Now you should see the 6 tomograms in the catalogue manager. [[Prebinned_tomograms|Prebin]] the tomograms once (1x) under ''Catalogue -> Create binned versions -> with factor 1''. You can now look at single tomograms in [[dtmslice|tomoslice]] by selecting a tomogram of choice in the catalogue manager and then go under ''View volume -> Load full prebinned Volume [if available] -> open in tomoslice''. If needed, adjust the lowpass level and contrast to improve the depiction.
+
In case you imported the tomograms using a volume file you have to click the button ''list volumes'' to refresh the tomogram list in the catalogue manager. Now you should see the 6 tomograms in the catalogue manager. [[Prebinned_tomograms|Prebin]] the tomograms once (1x) under ''Catalogue -> Create binned versions -> with factor 1''. You can now look at single tomograms in [[dtmslice|tomoslice]] by selecting a tomogram of choice in the catalogue manager and then go under ''View volume -> Load full prebinned Volume [if available] -> open in tomoslice''. If needed, adjust the lowpass level and contrast in tomoslice to improve the depiction.
  
 
=== Annotate tomograms ===
 
=== Annotate tomograms ===
Line 57: Line 57:
 
In the '''standalone version''' you need to proceed as follows:
 
In the '''standalone version''' you need to proceed as follows:
  
1.) Open a text file named ''commands.m'' and copy the following into the file (avoid commenting with % or #):
+
1.) Open a text file named <code>commands.m</code> and copy the following into the file (avoid commenting with % or #):
  
 
  <nowiki>o =dcmodels('catVLP','type','dipoleSet','gm',1);
 
  <nowiki>o =dcmodels('catVLP','type','dipoleSet','gm',1);
Line 80: Line 80:
 
dwrite(tv,'cellOfTables.mat');</nowiki>
 
dwrite(tv,'cellOfTables.mat');</nowiki>
  
2.) Execute the text file named <code>commands.m</code> in a system shell or in the ''Dynamo''console:
+
2.) Execute the text file in a system shell or in the ''Dynamo'' console:
 
   
 
   
 
  <tt>dynamo commands.m</tt>
 
  <tt>dynamo commands.m</tt>
  
3.) When you are back in the ''Dynamo''console, you can read the results from the script with
+
3.) When you are back in the ''Dynamo'' console, you can load the results from the script into the workspace with
 
  <tt>tv = dread('cellOfTables.mat'); </tt>
 
  <tt>tv = dread('cellOfTables.mat'); </tt>
 +
 +
Type ''whos'' to display the actual matlab workspace and to check if the variable ''tv'' was loaded correctly.
  
 
=== Write table with crop points ===
 
=== Write table with crop points ===
  
Merge all tables into one with the command
+
The tables beloning to each dipole model are stored in the cell array ''tv''. To create one table containing all points we merge all tables into one with the command
  
 
  <tt>tAll = dynamo_table_merge(tv,'linear_tags',1); </tt>
 
  <tt>tAll = dynamo_table_merge(tv,'linear_tags',1); </tt>
Line 103: Line 105:
 
=== Extract subvolumes ===
 
=== Extract subvolumes ===
  
Before extracting the subvolumes (cropping particles) using the previously generated table we have to define a so called [[Tomogram-table map file|tomogram table map file]] which links the tomogram ID in the table to an actual tomogram on the disk. Create a file named <code>VLPtomograms.doc</code> and copy the paths and IDs of all tomograms into it:
+
Before extracting the subvolumes (cropping particles) using the previously generated table we have to define a so called [[Tomogram-table map file|tomogram table map file]] which links the tomogram identification number in column 20 of the previously created table to an actual tomogram on the disk. Create a file named <code>VLPtomograms.doc</code> and copy the tomogram numbers and full paths of the tomograms into it:
 
  <nowiki>1 vlp_1.mrc
 
  <nowiki>1 vlp_1.mrc
 
2 vlp_2.mrc
 
2 vlp_2.mrc
Line 111: Line 113:
 
6 vlp_6.mrc</nowiki>
 
6 vlp_6.mrc</nowiki>
  
Define a destination for the cropped particles
+
Define a destination for the cropped particles:
 
  <tt>targetFolder = './particlesSize128';</tt>
 
  <tt>targetFolder = './particlesSize128';</tt>
  
Line 117: Line 119:
 
  <tt>dtcrop('VLPtomograms.doc',tAll,targetFolder,128);</tt>
 
  <tt>dtcrop('VLPtomograms.doc',tAll,targetFolder,128);</tt>
  
You can look at the cropped particles with
+
The cropping on one core should not take longer than 5 minutes. Once done, you can look at the cropped particles with
  
  <tt>dslices(targetFolder,'projy','*','t',finalTable,'align',1,'tag',1:10:588,'labels','on');</tt>
+
  <tt>dslices(targetFolder,'projy','*','t',finalTable,'align',1,'tag',1:10:500,'labels','on');</tt>
  
  
Line 129: Line 131:
 
  <tt>oa = daverage(targetFolder,'t',finalTable,'fc',1);</tt>
 
  <tt>oa = daverage(targetFolder,'t',finalTable,'fc',1);</tt>
  
We can inspect the average with
+
and inspect the average with
 
  <tt>dview(oa.average)</tt>
 
  <tt>dview(oa.average)</tt>
  
And save it with
+
You should see a faint and noisy curvature of a thick membrane-like structure in the x and y direction. Save it with
 
  <tt>dwrite(oa.average,[targetFolder '/template.em']);</tt>
 
  <tt>dwrite(oa.average,[targetFolder '/template.em']);</tt>
  
  
 
=== First alignment project ===
 
=== First alignment project ===
We create our first alignment project through the command line in a similar way as described in detail in the [[Walkthrough_for_lattices_on_vesicles | walkthrough for lattices on vesicles]]. First we define a project name
+
Now we create our first [[alignment project | alignment project]] through the command line in a similar way as described in detail in the [[Walkthrough_for_lattices_on_vesicles | walkthrough for lattices on vesicles]]. First we define a project name
 
  <tt>pr = 'aliVLP';</tt>
 
  <tt>pr = 'aliVLP';</tt>
Then we create an [[alignment project | alignment project]] with the particles, template and table that we defined before. The masks are set to default.
+
 
 +
Then we create the alignment project with the particles, template and table that we defined before. The masks are set to default.
  
 
  <tt>dcp.new(pr,'d',targetFolder,'t',[targetFolder '/crop.tbl'],'template',[targetFolder '/template.em'],'masks','default','show',0);</tt>
 
  <tt>dcp.new(pr,'d',targetFolder,'t',[targetFolder '/crop.tbl'],'template',[targetFolder '/template.em'],'masks','default','show',0);</tt>
  
Next we set up the numerical parameters for the project (type 'dvhelp' in the console for an overview of all parameters):
+
Next we set up the numerical parameters for the project (type ''dvhelp'in the console for an overview of all parameters):
  
 
  <nowiki>dvput(pr,'ite_r1',4);
 
  <nowiki>dvput(pr,'ite_r1',4);
Line 157: Line 160:
 
dvput(pr,'dst','standalone_gpu','cores',1,'mwa',2);</nowiki>
 
dvput(pr,'dst','standalone_gpu','cores',1,'mwa',2);</nowiki>
  
These can of course also be set up through the alignment project GUI and would correspond to:
+
Everything can of course also be set up through the alignment project GUI. The numerical parameters would correspond to:
  
 
  [[File:VLP_first_parameters.png|thumb|center|400px| Alignment parameters for first alignment project.]]
 
  [[File:VLP_first_parameters.png|thumb|center|400px| Alignment parameters for first alignment project.]]
  
  
Check, unfold and run the project:
+
Check, unfold and run the project through the alignment project GUI or through the command line:
  
 
  <nowiki>dvcheck aliVLP
 
  <nowiki>dvcheck aliVLP
Line 168: Line 171:
 
dvrun aliVLP</nowiki>
 
dvrun aliVLP</nowiki>
  
 +
On one GPU and 2 cores the alignment project should not take longer than half an hour. Check the status of the alignment project with
 +
 +
<tt>dvstatus aliVLP</tt>
 +
 +
You can also see the average of the last computed iteration in ''dmapview'' with the command. If needed, adjust the lowpass and contrast to improve the depiction.
 +
 +
<tt>ddb aliVLP:a -m</tt>
  
 
=== Recenter and recrop ===
 
=== Recenter and recrop ===
Let us look at the last computed average  
+
After the alignment project finished successfully we can inspect the last computed average with the same command introduced before:
  
 
  <tt>ddb aliVLP:a -m</tt>
 
  <tt>ddb aliVLP:a -m</tt>
  
you should already start seeing a C6 symmetry. However, the symmetry axis is most probably not centered yet. We now want to recenter and realign the average such that the symmetry axis coincides with the Z axis. We also want to make sure that the particles are nicely centered. We do all this in three steps. First we subbox, then we recrop and finally we align the average. Both procedures have been introduced in detail in the [[Advanced_starters_guide | advanced starters guide]] and are now applied here.
+
The command can be extended to see the averages of all iterations including the starting reference. Once in ''dmapview'', press the button ''norm'' to properly compare the averages.
  
1.) Subboxing:
+
<tt>ddb aliVLP:a:ite=0:last -m</tt>
  
In 'dmapview' using the 'center/north' tool find the coordinates of the center of one subunit of the lattice. Use the found coordinates to compute the vector from the center of the subvolume to the center of a subunit.
+
In the last average, you should already start to see a C6 symmetry. However, the symmetry axis is most probably not centered yet. We now want to realign the particles such that their symmetry axis is parallel to the Z axis. We also want to make sure that the particles are centered in the middle of the subvolumes. We do all this in two steps. First we subbox the particles using a newly defined center and recrop the particles with a smaller boxsize. Second we align the axis of symmetry using a synthetic template. Both procedures are described in detail in the [[Advanced_starters_guide | advanced starters guide]] in the section ''Aligning the axis of symmetry'' and ''Subboxing '' and are now applied here.
  
 +
====Step 1: Subboxing====
  
<tt>rSubunitFromCenter = [88,75,72] - [64,64,64];</tt>
+
Open the last computed average in ''dmapview'' as previously described. Under ''Clicks'' activated the radio buttons for the ''center/north'' tool. Find the coordinates of the center of one subunit of the lattice. In our case we found the center of a subunit at [88,75,72]. For you these coordinates might be different. The center of a subvolume with a sidelength of 128 pixels is defined as [65,65,65]. We use the found coordinates to compute the vector from the center of the subvolume to the center of a subunit.
  
Read the last computed table of the alignment project:
+
<tt>rSubunitFromCenter = [88,75,72] - [65,65,65];</tt>
 +
 
 +
This shift will now be applied to all particles in the table. Read the last computed table of the alignment project:
  
 
  <tt>ddb aliVLP:rt -ws t</tt>
 
  <tt>ddb aliVLP:rt -ws t</tt>
  
 +
Apply the new center to the table
  
Apply new center to table
+
<tt>ts = dynamo_subboxing_table(t,rSubunitFromCenter);</tt>
  
<tt>ts = dynamo_subboxing_table(t,rSubunitFromCenter);</tt>
+
The table now contains the coordinates of the recentered particles. We use this new table to recrop the particles. We first define a new target folder:
  
 +
<tt>targetFolder = './particlesSize96r';</tt>
  
Recrop particles. Define new target folder:
+
Then we recrop the new particles. Since the particles are centered now, we can also choose a smaller boxsize of 96 pixels. This will save space and speed up the processes.
  
  <tt>targetFolder = './particlesSize96r';</tt>
+
  <tt>dtcrop('VLPtomograms.doc',ts,targetFolder,96);</tt>
  
Then crop, average and visualize results:
+
Again we average and visualize the cropping results:
  
  <nowiki>dtcrop('VLPtomograms.doc',ts,targetFolder,96);
+
  <nowiki>finalTable = dread([targetFolder,'/crop.tbl']);
finalTable = dread([targetFolder,'/crop.tbl']);
 
 
oa = daverage(targetFolder,'t',finalTable,'fc',1);
 
oa = daverage(targetFolder,'t',finalTable,'fc',1);
 
dwrite(oa.average,[targetFolder '/template.em']);</nowiki>
 
dwrite(oa.average,[targetFolder '/template.em']);</nowiki>
  
 +
==== Step 2: Align symmetry axis ====
 +
We see that the new average is niceley centered (there is one subunit of the lattice in the center of the volume). However, the symmetry axis is not aligned with the Z axis (the whole average looks a bit 'tilted'). We can fix that by aligning the last computed average to a synthetic template and then apply the found transformation to the table, resulting in a new and correct orientation for all particles.
  
We see the average is a bit tilted. So we align to reference
 
 
 
2.) align reference
 
  
 
% create membrane with hole in middle. This will be the mask to align previous average to.
 
% create membrane with hole in middle. This will be the mask to align previous average to.

Revision as of 10:37, 4 September 2018

In this walkthrough you will get familiar with managing multiple tomograms through the Dynamo catalogue and developing strategies for alignment projects to reach a reasonable structure from a set of tomograms. You will make use of the knowledge that you acquired during the workshop and apply it to a more realistic case. It is recommended to get familiar with at the advanced starters guide and the walkthrough for lattices on vesicles before starting this walkthrough.

Data

We prepared a set of 6 tomograms, each containing one Immature HIV-1 virus like particle (VLP) with a layer formed by a lattice of capsid proteins. The capsid proteins have a C6 symmetry, a diameter of roughly 15nm and a molecular weight of about 150kDa. The pixelsize of the tomograms is 2.7 angstrom. You can find the tomograms in:

~/data/tutorial_VLPs

The tomograms are part of the data that was used in the publication An atomic model of HIV-1 capsid-SP1 reveals structures regulating assembly and maturation by Schur FK, Obr M, Hagen WJ, Wan W, Jakobi AJ, Kirkpatrick JM, Sachse C, Kräusslich HG and Briggs JA. (2016). The full dataset can be found on the Electron Microscopy Public Image Archive (EMPIAR) under EMPIAR-10164. The 6 tomograms were extracted from the tilt series TS_03 and TS_43.

Goal

From the data given you should be able to get a final average in which you start seeing hints of alpha helices, i.e., it should be possible to reach a resolution close to roughly 10 angstroms.

Walkthrough

Set up a catalogue

Create a new catalogue

dcm -create catVLP

and open it in the catalogue manager

dcm catVLP

You can add each volume manually to the catalogue under Catalogue -> Browse for new volume or you can make use of a volume file and add all tomograms at once under Catalogue -> Input list of tomograms -> Browse for text file (.vll file). The volume file should be created beforehand by opening a blank text file named for example VLPtomograms.vll and copy the paths of all tomograms into it:

vlp_1.mrc
vlp_2.mrc
vlp_3.mrc
vlp_4.mrc
vlp_5.mrc
vlp_6.mrc

In case you imported the tomograms using a volume file you have to click the button list volumes to refresh the tomogram list in the catalogue manager. Now you should see the 6 tomograms in the catalogue manager. Prebin the tomograms once (1x) under Catalogue -> Create binned versions -> with factor 1. You can now look at single tomograms in tomoslice by selecting a tomogram of choice in the catalogue manager and then go under View volume -> Load full prebinned Volume [if available] -> open in tomoslice. If needed, adjust the lowpass level and contrast in tomoslice to improve the depiction.

Annotate tomograms

To know where we want to later extract the subvolumes we have to first annotate the surfaces of the VLPs inside the tomograms. We do this by opening a tomogram inside tomoslice where a so called dipole Set model is defined. How to do that is described in detail in the section DipoleSet models, Corrections during picking and Corrections after picking of the walkthrough for lattices on vesicles. A new dipole set model has to be made for each tomogram. Save each model before closing tomoslice and when opening a new tomogram in tomoslice select Delete from memory if asked. In case you see markers of the previously defined dipole set inside the newly opened tomogram make sure the model pool is empty and click on reset scene before defining the new dipole set. Once you went through all tomograms click on the button list volumes inside the catalogue manager to refresh the list of tomograms. In the column model files of the tomogram list of the catalogue manager you should now see that you have one defined model per tomogram.

Define crop points

To extract subvolumes (crop particles) we need to first define the crop points on the surface of the VLPs using the previously defined models. The crop points are then stored in a table. This is all done with the following script which is an extended version of the one found in the walkthrough for lattices on vesicles.

% read dipole from catalogue into workspace
dcmodels catVLP -tc dipoleSet -ws o -gm 1

c=1; % counter for table
for tomo = 1:6 % loop over tomograms
    ds = o.models{tomo};                  % read models
    NDipoles = length(ds.dipoles);
    for i=1:NDipoles                      % loop over models (in our case just one per tomogram)
        v = dmodels.vesicle();            % create empty vesicle model
        v.center = ds.dipoles{i}.center;  % add center from dipole to vesicle model
        v.radius = norm( ds.dipoles{i}.north - ds.dipoles{i}.center); % add radius
        v.separation = 60;                % separation of crop points (in px)
        v.crop_distance_from_surface =0;
        v.updateCrop();                   % update vesicle model

        tv{c} = v.grepTable(); % create crop table from using vesicle model
        tv{c}(:,22) = i;       % add model number to table
        tv{c}(:,20) = tomo;    % add tomogram number to table
        c=c+1;
    end
end


In the standalone version you need to proceed as follows:

1.) Open a text file named commands.m and copy the following into the file (avoid commenting with % or #):

o =dcmodels('catVLP','type','dipoleSet','gm',1);
c=1;
for tomo = 1:6 % loop over tomograms
    ds = o.models{tomo};
    NDipoles = length(ds.dipoles);
    for i=1:NDipoles
        v = dmodels.vesicle();
        v.center = ds.dipoles{i}.center;
        v.radius = norm( ds.dipoles{i}.north - ds.dipoles{i}.center);
        v.separation = 60;
        v.crop_distance_from_surface =0;
        v.updateCrop();
        tv{c} = v.grepTable();
        tv{c}(:,22) = i;
        tv{c}(:,20) = tomo;
        c=c+1;
        disp(sprintf('Dipole %d will provide %d crop points',i,size(v.crop_points,2)));
    end
end
dwrite(tv,'cellOfTables.mat');

2.) Execute the text file in a system shell or in the Dynamo console:

dynamo commands.m

3.) When you are back in the Dynamo console, you can load the results from the script into the workspace with

tv = dread('cellOfTables.mat'); 

Type whos to display the actual matlab workspace and to check if the variable tv was loaded correctly.

Write table with crop points

The tables beloning to each dipole model are stored in the cell array tv. To create one table containing all points we merge all tables into one with the command

tAll = dynamo_table_merge(tv,'linear_tags',1); 

and visualize the table to see the crop points and their orientations

dtplot(tAll,'pf','oriented_positions'); axis equal

You should get something like:

Crop points in table.


Extract subvolumes

Before extracting the subvolumes (cropping particles) using the previously generated table we have to define a so called tomogram table map file which links the tomogram identification number in column 20 of the previously created table to an actual tomogram on the disk. Create a file named VLPtomograms.doc and copy the tomogram numbers and full paths of the tomograms into it:

1 vlp_1.mrc
2 vlp_2.mrc
3 vlp_3.mrc
4 vlp_4.mrc
5 vlp_5.mrc
6 vlp_6.mrc

Define a destination for the cropped particles:

targetFolder = './particlesSize128';

Now we can crop the particles with sidelength 128 pixels from the tomograms using the table previously defined.

dtcrop('VLPtomograms.doc',tAll,targetFolder,128);

The cropping on one core should not take longer than 5 minutes. Once done, you can look at the cropped particles with

dslices(targetFolder,'projy','*','t',finalTable,'align',1,'tag',1:10:500,'labels','on');


We create a plain average of all cropped particles which will be used later in the alignment project and can help us to asses the quality of the cropped particles. First we read the table of the cropped particles:

finalTable = dread([targetFolder '/crop.tbl']);

Then we form the average

oa = daverage(targetFolder,'t',finalTable,'fc',1);

and inspect the average with

dview(oa.average)

You should see a faint and noisy curvature of a thick membrane-like structure in the x and y direction. Save it with

dwrite(oa.average,[targetFolder '/template.em']);


First alignment project

Now we create our first alignment project through the command line in a similar way as described in detail in the walkthrough for lattices on vesicles. First we define a project name

pr = 'aliVLP';

Then we create the alignment project with the particles, template and table that we defined before. The masks are set to default.

dcp.new(pr,'d',targetFolder,'t',[targetFolder '/crop.tbl'],'template',[targetFolder '/template.em'],'masks','default','show',0);

Next we set up the numerical parameters for the project (type dvhelp in the console for an overview of all parameters):

dvput(pr,'ite_r1',4);
dvput(pr,'dim_r1',32);
dvput(pr,'cr_r1',40);
dvput(pr,'cs_r1',20);
dvput(pr,'ir_r1',360);
dvput(pr,'is_r1',40);
dvput(pr,'rf_r1',4);
dvput(pr,'rff_r1',2);
dvput(pr,'lim_r1',[40,40,40]);
dvput(pr,'limm_r1',1);
dvput(pr,'dst','standalone_gpu','cores',1,'mwa',2);

Everything can of course also be set up through the alignment project GUI. The numerical parameters would correspond to:

Alignment parameters for first alignment project.


Check, unfold and run the project through the alignment project GUI or through the command line:

dvcheck aliVLP
dvunfold aliVLP
dvrun aliVLP

On one GPU and 2 cores the alignment project should not take longer than half an hour. Check the status of the alignment project with

dvstatus aliVLP

You can also see the average of the last computed iteration in dmapview with the command. If needed, adjust the lowpass and contrast to improve the depiction.

ddb aliVLP:a -m

Recenter and recrop

After the alignment project finished successfully we can inspect the last computed average with the same command introduced before:

ddb aliVLP:a -m

The command can be extended to see the averages of all iterations including the starting reference. Once in dmapview, press the button norm to properly compare the averages.

ddb aliVLP:a:ite=0:last -m

In the last average, you should already start to see a C6 symmetry. However, the symmetry axis is most probably not centered yet. We now want to realign the particles such that their symmetry axis is parallel to the Z axis. We also want to make sure that the particles are centered in the middle of the subvolumes. We do all this in two steps. First we subbox the particles using a newly defined center and recrop the particles with a smaller boxsize. Second we align the axis of symmetry using a synthetic template. Both procedures are described in detail in the advanced starters guide in the section Aligning the axis of symmetry and Subboxing and are now applied here.

Step 1: Subboxing

Open the last computed average in dmapview as previously described. Under Clicks activated the radio buttons for the center/north tool. Find the coordinates of the center of one subunit of the lattice. In our case we found the center of a subunit at [88,75,72]. For you these coordinates might be different. The center of a subvolume with a sidelength of 128 pixels is defined as [65,65,65]. We use the found coordinates to compute the vector from the center of the subvolume to the center of a subunit.

rSubunitFromCenter = [88,75,72] - [65,65,65];

This shift will now be applied to all particles in the table. Read the last computed table of the alignment project:

ddb aliVLP:rt -ws t

Apply the new center to the table

ts = dynamo_subboxing_table(t,rSubunitFromCenter);

The table now contains the coordinates of the recentered particles. We use this new table to recrop the particles. We first define a new target folder:

targetFolder = './particlesSize96r';

Then we recrop the new particles. Since the particles are centered now, we can also choose a smaller boxsize of 96 pixels. This will save space and speed up the processes.

dtcrop('VLPtomograms.doc',ts,targetFolder,96);

Again we average and visualize the cropping results:

finalTable = dread([targetFolder,'/crop.tbl']);
oa = daverage(targetFolder,'t',finalTable,'fc',1);
dwrite(oa.average,[targetFolder '/template.em']);

Step 2: Align symmetry axis

We see that the new average is niceley centered (there is one subunit of the lattice in the center of the volume). However, the symmetry axis is not aligned with the Z axis (the whole average looks a bit 'tilted'). We can fix that by aligning the last computed average to a synthetic template and then apply the found transformation to the table, resulting in a new and correct orientation for all particles.


% create membrane with hole in middle. This will be the mask to align previous average to. mr = dpktomo.examples.motiveTypes.Membrane(); mr.thickness = 22; mr.sidelength = 96; mr.getMask(); mem = (mr.mask)*(-1)+1; % rod cyl=dynamo_cylinder(7,96,[48,48,48]);

% membrane minus rod templateSum = mem+cyl; template=templateSum; template(template>0)=1;

% align previous average to new mask sal = dalign(oa.average,template,'cr',30,'cs',5,'ir',0,'dim',96/2,'limm',1,'lim',[15,15,15]); dmapview(sal.aligned_particle);

% apply found transformation to table tr = dynamo_table_rigid(finalTable,sal.Tp);


% before cropping again we can use volume filter

% volume filter: trEx = dpktbl.exclusionPerVolume(tr,20);

% recrop again

targetFolder = './particlesSize96rR';

dtcrop('VLPtomograms.doc',trEx,targetFolder,96); finalTable = dread([targetFolder,'/crop.tbl']); oa = daverage(targetFolder,'t',finalTable,'fc',1); dmapview(oa.average) dwrite(oa.average,[targetFolder '/template.em']);


Second aligment project

Use C6 symmetriy in the alignment projects finer parameters tighter mask

% create a tighter mask using a thick membrane mr = dpktomo.examples.motiveTypes.Membrane(); mr.thickness = 55; mr.sidelength = 96; mr.getMask(); mem_mask = mr.mask;

dwrite(mem_mask,'mem_mask_thick.em')

check in dmapview that mask is good

dmapview(oa.average)

and then in mask put path of mask and click layer.



Result

After the second alignment and without any postprocessing or elaborate refinement your final average may look similar to this one. If not it may need one more round with finer parameters, tighter mask or one more step of recentering and recropping. This representation was lowpass filtered to ~8 angstroms.

Possible outcome of the exercise.