Project

General

Profile

Actions

Feature #5339

open

Implement 'Final Image-Beam Shift' for JEOL microscopes

Added by Neil Voss about 7 years ago. Updated about 7 years ago.

Status:
Assigned
Priority:
Normal
Assignee:
Category:
-
Target version:
-
Start date:
11/30/2017
Due date:
% Done:

0%

Estimated time:
Deliverable:

Description

We cannot get good enough accuracy using only stage position in the navigator.

We want to improve the targeting accuracy with a combination of stage movement and final image shift. However, this requires specific relationship between the acquiring presets and parent image presets.

Not sure how this works on FEI scopes, but on the JEOL scopes, image shift does not work unless the beam is shifted as well.

So, I want to implement a 'Final Image-Beam Shift' method for the JEOL scope. Most of the code comes down to navigator.py and presets.py, specifically the lines associated with 'keep image shift':

if ievent['keep image shift']:
    dx = 0.0
    dy = 0.0
    # figure out image shift offset from current preset
    temname = self.currentpreset['tem']['name']
    if 'Jeol' not in temname:
        scope_ishift = self.instrument.tem.ImageShift
        if self.currentpreset is None:
            dx = scope_ishift['x']
            dy = scope_ishift['y']
        else:
            dx = scope_ishift['x'] - self.currentpreset['image shift']['x']
            dy = scope_ishift['y'] - self.currentpreset['image shift']['y']
    else:
        # Avoid unknown bug with JEOL scopes:
        #can not read pre-existing image shift offset at this point
        self.logger.info('Jeol hack: pre-existing image shift offset dy=0,0')

for the JEOL, I implemented the change:

if ievent['keep image-beam shift']:
    self.logger.info('Keeping pre-existing image-beam shift offset')
    # send image shift offset to scope
    scope_ishift = self.instrument.tem.ImageShift
    scope_bshift = self.instrument.tem.BeamShift
    ix = scope_ishift['x'] + idx
    iy = scope_ishift['y'] + idy
    self.logger.info('Neil: Applying image shift of (%.2e,%.2e) to (%.2e,%.2e)'%(idx, idy, ix, iy))
    bx = scope_bshift['x'] + bdx
    by = scope_bshift['y'] + bdy
    self.logger.info('Neil: Applying beam shift of (%.2e,%.2e) to (%.2e,%.2e)'%(bdx, bdy, bx, by))
    self.instrument.tem.ImageShift = {'x': ix, 'y': iy}
    self.instrument.tem.BeamShift = {'x': bx, 'y': by}

But the problem is that the direction of the beam shift changes with the magnification and we are moving the beam in the wrong direction.

I now plan to implement a rotation matrix to move the beam in the correct direction at the corresponding magnification. In the short term, I thought about hard-coding it for our scope and then making it more general in the future, but

I have a question for Anchi: "are the beam x-y axis directions information stored in the database?"


Related issues 1 (0 open1 closed)

Related to Leginon - Bug #3944: jeolcom image shift scale is mag dependent if PLA is used to shiftClosedAnchi Cheng02/11/2016

Actions
Actions #1

Updated by Anchi Cheng about 7 years ago

See Issue #3909 and its related commit. It was made originally for JEOL scope when we had one. See if that works.

On FEI scopes, user applied image shift is automatically compensated with a beam shift at a lower level so that we don't have to specify it.

keep image shift is for aligning the presets properly. It may cause problem down the line if you use that to pass this event for applying extra image-beam
shift after a stage move.

There exists an implementation of what you want called "final image shift". You will find that settings in AcquisitionSettingsData and the moveToTarget function in navigator.py NavigatorClient class. You can trace from there.

It was made for tomography and was crude because it does not have proper pause. We found that in SP operation, the call for image shift causes drift. Looking at the code, it should be made better. It can resolve your problem in a more consistent way if it is tidy up there. Want to try that ?

Actions #2

Updated by Anchi Cheng almost 7 years ago

  • Related to Bug #3944: jeolcom image shift scale is mag dependent if PLA is used to shift added
Actions

Also available in: Atom PDF