Feature #5339
openImplement 'Final Image-Beam Shift' for JEOL microscopes
0%
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?"