Project

General

Profile

Actions

Feature #5339

open

Implement 'Final Image-Beam Shift' for JEOL microscopes

Added by Neil Voss almost 7 years ago. Updated almost 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

Also available in: Atom PDF