2

I'm writing a DigitalMicrograph script to acquire a mapping data of scattered electron intensities obtained from such as an ADF STEM detector, under various incident-beam conditions being controlled by a handmade script. But, unfortunately I don't know a command to obtain STEM detector signals under non-STEM mode (controlled by DigiScan). What command should I use in this case?

It will be appreciated if you share some wisdom. Thank you very much in advance. .

BmyGuest
  • 6,331
  • 1
  • 21
  • 35
kachigusa
  • 219
  • 1
  • 9

1 Answers1

1

As the STEM detector signal is processed by the DigiScan unit, there is no way to read the detector 'signal' independently of it.

Also: You do not get the signal as a "stream" in time, but clocked by the DigiScan. That is, you have to start an acquisition with the DigiScan and can not only "listen" to the detector without one.

However, the DigiScan acquisition is not tied to being in STEM mode. You can start a DigiScan acquisition while being in TEM mode. You can choose the parameters such that acquiring an 'image' is scanning the beam only within a very small area, so that the beam becomes quasi-stationary. Maybe this can help you out?


Here is an example of what I mean: However, I have not tested this on hardware:

// Create "Scan" parameters for an overview
// This image will stay as survey. Its content is not important
// as you're in TEM mode, but we need it as reference
number paramID
number width    = 1024 // pixel
number height   = 1024 // pixel
number rotation = 0   // degree
number pixelTime= 2   // microseconds
number lSynch   = 0   // no-linesync 
paramID = DSCreateParameters( width, height, rotation, pixelTime, lSynch )

number signalIndex, dataDepth, selected, imageID
signalIndex = 0 // HAADF (most likely) ?
dataDepth    = 4 // 4 byte data
selected    = 1 // acquire this signal
imageID     = 0 // create new image
DSSetParametersSignal( paramID, signalIndex, dataDepth, selected, imageID )

number continuous  = 0 // 0 = single frame, 1 = continuous
number synchronous = 1 // 0 = return immediately, 1 = return when finished

// Capture the "survey" image
DSStartAcquisition( paramID, continuous, synchronous )
image survey := DSGetLastAcquiredImage( signalIndex )
survey.SetName("Survey")
if ( !DSIsValidDSImage( survey ) ) Throw( "Something wrong..")
DSDeleteParameters( paramID ) // remove parameters from memory

// Now we create a "subscan" image for a quasi-stationary beam...
// The size has a minimum size (16x16?) but as we keep the beam 
// "stationary" this will rather define your "time-resolution" of 
// data. Scan 'speed' is taken from our reference...
number sizeX = 1024     
number sizeY = 1024
image Static := IntegerImage( "Static", dataDepth, 0, sizeX, sizeY )
Static.ShowImage()
// defeine "ROI" on the survey. Just the center pixel!
number t,l,b,r
t = height/2
l = width/2
b = t + 1
r = l + 1
DSScanSubRegion( survey, Static, t, l, b, r )
BmyGuest
  • 6,331
  • 1
  • 21
  • 35
  • Thank you very much for your helpful advice, and I'm terribly sorry for my delayed respnce. According to your advice, I could write a script I desired. – kachigusa Apr 01 '16 at 14:04