如何自动进行多次SI采集?
How to carry out multiple SI acquisition automatically?
我想编写一个 Gatan DigitalMicrograph 脚本来连续获取多个 EELS 光谱图像。如果有获取Spectrum Image (SI) 数据的命令,并将三维图像存储到数组中,我将实现我的计划。但是,我无法从参考手册中找到适用于 SI 成像模式的命令。在这种情况下我应该使用什么命令?您对我的目的有帮助吗?如果您分享一些智慧,我们将不胜感激。
如果您安装了光谱成像插件,那么 F1 帮助文件将在此处包含有关 STEM SI 脚本命令的部分...
但是,那里描述的命令将允许一个接一个地获取 SI。每个都将以与通过 UI.
重复启动 SI 采集时相同的开销重新开始
我的印象是您想获得 "faster" 重复 SI。
不幸的是,不存在可以轻松为您提供该功能的命令。
但是,您可以通过以下想法(未经测试)创建 "work-arround" 解决方案:
- Set up a STEM SI with multiple-frames
(Each frame pass will be summed into the same container)
- Use the "SI HookUP Scripts" on a per-pixel basis (Pixel end) to catch the "last" acquired SI point (before the new frame starts). Use this to copy the existing data into a new container and set the orignal back to zero.
Alternative:
- You might also be able to use the "Correction start" HookUp script point, if you set spatial drift-correction to perform at end of frame...
以上仅适用于软件同步 SI。对于硬件同步,它变得更加棘手,但您可以使用 "ImageUpdate" 事件侦听器执行类似的操作。
关于如何使用 SIAcquisition 命令多次迭代 SI 采集和"renaming"采集的数据集的简短演示脚本。
// Assumptions:
// - GMS 2.3 used
// - Valid survey image and ROI already assigned
// - SI array size already defined
// - Signals and other SI settings made
number SIx, SIy
SIGetFieldValue( "2D Array, X samples", SIx )
SIGetFieldValue( "2D Array, Y samples", SIy )
Result("\n SI size:"+ SIx + "x" + SIy )
// Start SI
number nSI = 3
for (number i=0; i<nSI; i++ )
{
SIInvokeButton( "Start/Stop", 1 )
while(SIIsAcquisitionActive()) yield()
sleep(0.5) // Small delay needed to allow DM finish SI acquisition clean-up
// Find (and rename) SI DataSets
number nImgDoc = CountImageDocuments()
string findStr = "Spectrum Image"
for (number d=0; d<nImgDoc; d++ )
{
string docName = GetImageDocument(d).ImageDocumentGetName()
if ( find(docName,findStr) == (len(docName)-len(findStr)) )
{
GetImageDocument(d).ImageDocumentSetName( docName + "#"+(d+1) )
}
}
}
OKDialog( "Done" )
我想编写一个 Gatan DigitalMicrograph 脚本来连续获取多个 EELS 光谱图像。如果有获取Spectrum Image (SI) 数据的命令,并将三维图像存储到数组中,我将实现我的计划。但是,我无法从参考手册中找到适用于 SI 成像模式的命令。在这种情况下我应该使用什么命令?您对我的目的有帮助吗?如果您分享一些智慧,我们将不胜感激。
如果您安装了光谱成像插件,那么 F1 帮助文件将在此处包含有关 STEM SI 脚本命令的部分...
但是,那里描述的命令将允许一个接一个地获取 SI。每个都将以与通过 UI.
我的印象是您想获得 "faster" 重复 SI。 不幸的是,不存在可以轻松为您提供该功能的命令。
但是,您可以通过以下想法(未经测试)创建 "work-arround" 解决方案:
- Set up a STEM SI with multiple-frames
(Each frame pass will be summed into the same container)- Use the "SI HookUP Scripts" on a per-pixel basis (Pixel end) to catch the "last" acquired SI point (before the new frame starts). Use this to copy the existing data into a new container and set the orignal back to zero.
Alternative:- You might also be able to use the "Correction start" HookUp script point, if you set spatial drift-correction to perform at end of frame...
以上仅适用于软件同步 SI。对于硬件同步,它变得更加棘手,但您可以使用 "ImageUpdate" 事件侦听器执行类似的操作。
关于如何使用 SIAcquisition 命令多次迭代 SI 采集和"renaming"采集的数据集的简短演示脚本。
// Assumptions:
// - GMS 2.3 used
// - Valid survey image and ROI already assigned
// - SI array size already defined
// - Signals and other SI settings made
number SIx, SIy
SIGetFieldValue( "2D Array, X samples", SIx )
SIGetFieldValue( "2D Array, Y samples", SIy )
Result("\n SI size:"+ SIx + "x" + SIy )
// Start SI
number nSI = 3
for (number i=0; i<nSI; i++ )
{
SIInvokeButton( "Start/Stop", 1 )
while(SIIsAcquisitionActive()) yield()
sleep(0.5) // Small delay needed to allow DM finish SI acquisition clean-up
// Find (and rename) SI DataSets
number nImgDoc = CountImageDocuments()
string findStr = "Spectrum Image"
for (number d=0; d<nImgDoc; d++ )
{
string docName = GetImageDocument(d).ImageDocumentGetName()
if ( find(docName,findStr) == (len(docName)-len(findStr)) )
{
GetImageDocument(d).ImageDocumentSetName( docName + "#"+(d+1) )
}
}
}
OKDialog( "Done" )