[3dem] Dose-symmetric tilt scheme for electron cryo tomography

Ben Engel bdengel at gmail.com
Mon May 22 02:27:09 PDT 2017


Hi Davide,

Yes, we've expanded Wim's script to use target counts (but did not
implement 1/cos), which will give you longer exposures at the higher tilt
angles.  Our script also allows you to start the tomogram at a pre-tilt
(say, 10 degrees).  This is useful for tomography of FIB lamellas, which
are inclined (and thus 0 degrees isn't the least tilted projection).  You
can just set this parameter to 0 degrees though.

One improvement that is still needed is a check for the stage tilt angle
before acquiring a record image.  Our stage sometimes gets stuck before
reaching the desired tilt and will then take an image at this incorrect
tilt.  I guess this should be fairly easy to implement.

I am attaching the script, and also notes from Philipp Stawski, who did
most of the work.

Also, if you find the Hagen Scheme (TM) as useful as we do, please tell
David Mastronarde.  If enough of us bug him, perhaps this feature will find
its way into standard tilt-series acquisition in a future release of
SerialEM.

Good luck,
Ben

------

*Hi Everyone, *

as promised here is a version of the Hagen tilt scheme that I modified so
that it can be started at any starting angle.

For lamellae, the pre tilt is 7 º, i.e. if you’re milling at 18º, 11º stage
tilt should be your actual ‘0º’. I routinely use a starting angle of 10º,

and this results in virtually the same number of counts when tilting +xº
and -xº from your actual zero.


*The procedure to use the script is as follows:*

0) Set up your SerialEM session as usual.

1) Copy the contents of the file to an empty macro slot and change
parameters as needed. (Once you save your settings the script will be there
permanently)

2) Check and adjust AngleOffset (your starting angle), CountTarget (the
number of counts you’re asking for each image), step (the angle increment)

    and tilttimes (how many times the script will do +step -> -step ->
-2*step -> +2*step, e.g. for step = 2, tilt times = 15 you will get ±60º
around your actual ‘zero’)

    Make sure you’re not exceeding the stage limits!!!

3) Do rough and fine eucentric height.

4) Tilt to your actual zero (i.e. ~11º for 18º milling angle).

5) Select record and focus area and run autofocus.

6) Run the script from the dop-down menu.

7) After taking the first record, the script will ask for a name for the
tomogram stack file (you can open a new file before running the script,
too).

8) When done, the script will tilt back to your actual zero and the log
will read ‘Tomogram done!'



A few remarks:

• The script can be paused at any time by pressing ‘STOP’ and resumed by
pressing ‘RESUME’. However, there is a chance that it can get stuck in a
loop.

  I therefore suggest you currently don’t stop it while it is waiting to
take the record (i.e. Log should not say ‘Record settling!’).

• If you run another script or change a script while paused, *you will not
be able to resume*! There is currently no option to continue an already
started

  tomogram acquisition, but I’m working on that and will let you know once
it is done.

• When setting up your tomogram, adjust your record exposure so that you’re
roughly getting the set number of counts. Otherwise your first image

  will be off in counts (under/overexposed).

• If you don’t want to use counts, just comment out the lines that say
‘SetExposureForMean $CountTarget'. We can have a look how to implement

  a 1/cos approach for increasing the exposure timing.


If you have any questions on how to run the script or on our experience
with it so far, don’t hesitate to ask.


Best,

Philipp.


On Mon, May 22, 2017 at 9:34 AM, Davide Floris <dafloris at biophys.mpg.de>
wrote:

> Dear all,
> I’m wondering if any of you involved in electron cryo tomography has
> implemented the dose-symmetric tilt scheme from
> “Implementation of a cryo-electron tomography tilt-scheme optimized for
> high resolution subtomogram averaging” (Hagen WJ, Wan W, Briggs JA; JSB,
> 197(2):191-198; Feb 2017)
> to use longer exposure times as the tilt angle increases. In latitude it’s
> possible to do this by selecting the option “1/cosine^n” in the exposure
> time parameters, but of course it is not possible to use a symmetric
> acquisition.
> Has anybody tried to modify the SerialEM macro in this sense?
> Thanks a lot for the kind attention.
> Best regards,
>
> Davide Floris
> _________________________________________________
>
> Davide Floris
> PhD student
> Max Planck Institute of Biophysics
> Structural Biology Department
> Max-von-Laue Straße 3
> 60438 Frankfurt am Main
> Germany
>
> (L2.090): +49-69-6303-3037 <+49%2069%2063033037>
> (B2.205): +49-69-6303-3049 <+49%2069%2063033049>
>
>
> _______________________________________________
> 3dem mailing list
> 3dem at ncmir.ucsd.edu
> https://mail.ncmir.ucsd.edu/mailman/listinfo/3dem
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.ncmir.ucsd.edu/pipermail/3dem/attachments/20170522/a365b081/attachment-0001.html>
-------------- next part --------------
MacroName DoseSymmetricTomo_Starting_At_Offset

# EMBL Heidelberg 2015 Wim J. H. Hagen

#

# Edited: B. Engel, P. Stawski 2017

# using fixed counts and starting at an angle offset (for lamellae)

# attempts to fix issues where stage can get stuck (tracking error) on plus2 tilt (from small negative values, e.g. -30 to + 50)

# this should be split in even more steps ... 

#

# Roll Buffers A-> H.

# Uses LowDose

# Run eucentric rough and fine

# Track plus	K

# Track min 	L

# Record plus 	M

# Record min 	N



########## SETTINGS #############



step		= 2	# stage tilt step in degrees

tilttimes	= 15	# multiply by 4 images + 1 image - check that you're not exceeding the stage limits!

Tiltbacklash	= -2	# negative tilts will be backlashed, must be negative value!



Driftcrit	= 3	# Angstrom/second

Driftinterval	= 10	# wait time between drift measurements in seconds

Drifttimes	= 10	# maximum number of drift measurements before moving on and taking images anyway





RecordAreaWaitTime = 20 # waiting time in s before taking the record image (fixes issues with blurry images)



CountTarget = 100 # set target counts for tomogram



AngleOffset = 10 # starting angle



######## internal variables ######



LoopCount = 1





########## END SETTINGS ########## 



tiltangle = $AngleOffset



# start at AngleOffset, i.e. "Zero"



Echo

Echo Taking image at $tiltangle degrees:

CallFunction DoseSymmetricTomo_Starting_At_Offset::TiltZero_OFF



# prevent runaway focus

AbsoluteFocusLimits -10 10

FocusChangeLimits -2 2



Loop $tilttimes



	# tilt plus1

	tiltangle = $AngleOffset + $step * $LoopCount

	Echo

	Echo Taking image at $tiltangle degrees:

	CallFunction DoseSymmetricTomo_Starting_At_Offset::TiltPlus_OFF



	# tilt min1

	tiltangle = $AngleOffset - $step * $LoopCount

	Echo

	Echo Taking image at $tiltangle degrees:

	CallFunction DoseSymmetricTomo_Starting_At_Offset::TiltMinus_OFF



	# tilt min2

	tiltangle = $AngleOffset - $step * ($LoopCount + 1)

	Echo

	Echo Taking image at $tiltangle degrees:

	CallFunction DoseSymmetricTomo_Starting_At_Offset::TiltMinus_OFF

	

	# how to fix the stage tracking issues upon tilting back up...

	tmp = ($tiltangle + $AngleOffset) * 0.5



	TiltTo $tmp # see if this works ...

	TiltTo $AngleOffset # stupid at low tilts but necessary at high tilts with the current stage





	# tilt plus2

	tiltangle = $AngleOffset + $step * ($LoopCount + 1)

	Echo

	Echo Taking image at $tiltangle degrees:

	CallFunction DoseSymmetricTomo_Starting_At_Offset::TiltPlus_OFF





LoopCount = $LoopCount + 2

EndLoop



# when done



TiltTo $AngleOffset

ResetImageShift

T

SetDefocus 0



CloseFile # added this so you don't need to remember ;-)

Echo Tomogram done!

Exit



# individual functions called during the script main loop



function TiltZero_OFF

	# store stage position

	ReportStageXYZ	

	StageX = $ReportedValue1

	StageY = $ReportedValue2



	# drift and tracking

	T

	Copy A K

	Copy A L

	Delay $driftinterval

	Loop $drifttimes index

		T

		AlignTo K

		ReportAlignShift

		dx = $reportedValue3

		dy = $reportedValue4

		dist = sqrt $dx * $dx + $dy * $dy

		rate = $dist / $driftinterval * 10

		echo Rate = $rate A/sec

		If $rate < $driftcrit

			echo Drift is low enough after shot $index      

			break

		Elseif  $index < $drifttimes

			Delay $driftinterval 

		Else

			echo Drift never got below $driftcrit: Skipping ...

			break  

		Endif

	EndLoop



	# autofocus

              G

              G

              G



	# store defocus

	ReportDefocus

	focusplus = $RepVal1

	focusmin = $RepVal1



	# acquire tilt image

	GoToLowDoseArea R

	Echo Record settling!

	Delay $RecordAreaWaitTime 

	R

	S

	ReportMeanCounts A



	# target counts for tomogram (leave uncommented)

	SetExposureForMean $CountTarget 



	Copy A M

	Copy A N



	# store image shifts

	ReportImageShift

	ISxplus = $RepVal1

	ISyplus = $RepVal2

	ISxminus = $RepVal1

	ISyminus = $RepVal2



	# tracking after just to be sure                     

	T

	Copy A K

	Copy A L

endfunction



function TiltPlus_OFF

	# tilt stage

	TiltTo $tiltangle



	# reset stage XY

	MoveStageTo $StageX $StageY



	# set defocus and image shift

	GoToLowDoseArea R

	SetDefocus $focusplus

	SetImageShift $ISxplus $ISyplus



	# drift and tracking             

	T

	AlignTo K

	Delay $driftinterval

	Loop $drifttimes index

		T

		AlignTo K

		ReportAlignShift

		dx = $reportedValue3

		dy = $reportedValue4

		dist = sqrt $dx * $dx + $dy * $dy

		rate = $dist / $driftinterval  * 10	

		echo Rate = $rate A/sec

		If $rate < $driftcrit

			echo Drift is low enough after shot $index      

			break

		Elseif  $index < $drifttimes

			Delay $driftinterval 

		Else

			echo Drift never got below $driftcrit: Skipping ...

			break  

		Endif

	EndLoop



	# autofocus. Two rounds. Remove one G for single focus round.

              G

              G



	# store defocus

	ReportDefocus

	focusplus =  $RepVal1



	# acquire tilt image

	GoToLowDoseArea R
	Echo Record settling!

	Delay $RecordAreaWaitTime 

	R

	S

	ReportMeanCounts A



	# target counts (comment out if plus is higher tilt)

	SetExposureForMean $CountTarget 



	# tracking after

	AlignTo M

	Copy A M



	# store image shifts

	ReportImageShift

	ISxplus = $RepVal1

	ISyplus = $RepVal2



	# new track reference

	T

	Copy A K

endfunction



Function TiltMinus_OFF

	# tilt stage with backlash

	TiltTo $tiltangle

	TiltBy $Tiltbacklash

	TiltTo $tiltangle



	# reset stage XY

	MoveStageTo $StageX $StageY

	

	# set defocus and image shift

	GoToLowDoseArea R

	SetDefocus $focusmin

	SetImageShift  $ISxminus $ISyminus



	# drift and tracking 

	T

	AlignTo L

	Delay $driftinterval

	Loop $drifttimes index

		T

		AlignTo L

		ReportAlignShift

		dx = $reportedValue3

		dy = $reportedValue4

		dist = sqrt $dx * $dx + $dy * $dy

		rate = $dist / $driftinterval  * 10

		echo Rate = $rate A/sec

		If $rate < $driftcrit

			echo Drift is low enough after shot $index      

			break

		Elseif  $index < $drifttimes

			Delay $driftinterval 

		Else

			echo Drift never got below $driftcrit: Skipping ...

			break  

		Endif

	EndLoop



	# autofocus. Two rounds. Remove one G for single focus round.

              G

              G



	# store defocus        

	ReportDefocus

	focusmin =  $RepVal1



	# acquire tilt image

	GoToLowDoseArea R
	Echo Record settling!

	Delay $RecordAreaWaitTime 

	R

	S

	ReportMeanCounts A



	# target counts (comment out if minus is higher tilt)

	# SetExposureForMean $CountTarget 



	# tracking after

	AlignTo N

	Copy A N



	# store image shifts

	ReportImageShift

	ISxminus = $RepVal1

	ISyminus = $RepVal2



	# new track reference

	T

	Copy A L

endfunction


More information about the 3dem mailing list