Project

General

Profile

Stage seems not to always return to zero degrees upon completion of a tilt series

Added by Morgan Beeby almost 10 years ago

Hi Anchi,

I've been having great success with overnight data collection recently with our automated LN2 refilling node.

On two occasions, however, in the middle of the night the stage seems not to have returned to zero degrees at the end of a tilt series. Finding the next target proceeds at a small tilt (seemingly 10 or 15 degrees), and then before the next tilt series the stage seems to return to zero degree tilt. It is hard for me to really troubleshoot this, but the result is that auto-refilling doesn't always work because the stage is tilted.

Is this something that sounds familiar? I know I am not providing much information for you to troubleshoot with... can you think of a good way that I might be able to troubleshoot this myself?

many thanks,

Morgan


Replies (6)

RE: Stage seems not to always return to zero degrees upon completion of a tilt series - Added by Anchi Cheng almost 10 years ago

No, this is not known.

Try inserting these lines at the beginning of your autorefill function and then check the result

all_positions = self.instrument.tem.StagePosition
alpha_tilt_in_radians = all_positions['a']

If this can sense that the stage did not tilt back, then you will be able to use the following command to bring it back.

update_positions = {'a':0.0}
self.instrument.tem.StagePosition = update_positions

Note: ami server that hosts everything Leginon/Appion is going down in an hour or two for our move and won't be up until after New Year. You will need to use e-mail to me in the mean time.

RE: Stage seems not to always return to zero degrees upon completion of a tilt series - Added by Wim Hagen about 8 years ago

Keep in mind that there is no feedback loop for stage tilt after a tilt change, FEI software does not act on e.g. tracking errors but it does see the actual position once things get stuck. One way to deal with this is to check tilt after a tilt change: did it really get there? The stage software and scripting adapter do not do this.
Had to do this in a SerialEM macro after FEI service messed something up during repairs.
Wim

RE: Stage seems not to always return to zero degrees upon completion of a tilt series - Added by Anchi Cheng about 8 years ago

Thanks Wim, I will add this call back to the next version.

RE: Stage seems not to always return to zero degrees upon completion of a tilt series - Added by Morgan Beeby about 8 years ago

Hi Anchi,

We've been having a repeat of this problem recently (i.e., Issue #2561). It's not clear to me whether this has been fixed in the latest Leginon release?

thanks,

Morgan

RE: Stage seems not to always return to zero degrees upon completion of a tilt series - Added by Anchi Cheng about 8 years ago

HI, Morgan,

I have not put in Wim's suggestion since I don't have a scope with this problem to test. Here is the change required. Maybe you can give it a try. My worry is that it will go into an infinite loop.

The change is in pyscope/tecnai.py on the scope pc. Look for "def _setStagePosition". There are codes commented out for waiting, we will make it repeat the stage alpha (key = 'a') if outside the tolerance.
The unit should be radians. You can change the tolerance.

Here is the difference for 3.2 version.

===================================================================
@@ -731,8 +731,8 @@
         return value

     def _setStagePosition(self, position, relative = 'absolute'):
-#        tolerance = 1.0e-4
-#        polltime = 0.01
+        tolerance = 1.8e-3 # about 0.1 degrees
+        polltime = 0.01

         if relative == 'relative':
             for key in position:
@@ -766,10 +766,12 @@
                 else:
                     raise RuntimeError(text)

-#        for key in position:
-#            while abs(getattr(self.tecnai.Stage.Position, key.upper())
-#                                - getattr(pos, key.upper())) > tolerance:
-#                time.sleep(polltime)
+        for key in position:
+            if key.upper() == 'A':
+                while abs(getattr(self.tecnai.Stage.Position, key.upper())
+                                    - getattr(pos, key.upper())) > tolerance:
+                    time.sleep(polltime)
+                    self.tecnai.Stage.Goto(pos, axes)

     def getLowDoseStates(self):
         return ['on', 'off', 'disabled']

You can do a direct testing on scope pc with python IDLE or equivalent.

from pyscope import tecnai
import math
t = tecnai.Tecnai()
alpha_degrees = 5
alpha_radians = math.radians(alpha_degrees)

t.setStagePosition({'a':alpha_radians)
t.getStagePosition()

    (1-6/6)