如何重置或删除 DM 脚本中的标签组和标签列表?

How to reset or remove tag groups and tag lists in a DM script?

如何重置或删除 DM 脚本中的标签组和标签列表?

一些背景:

我正在准备一个脚本,用于分析 GMS 2 中的一系列 EELS 光谱。我将背景拟合到幂律模型,并从背景光谱中的标签中获取拟合参数,包括值和西格玛。但是,如果尝试在单个脚本中分析各种边缘,我发现拟合参数的西格玛值取决于计算顺序。为了检查这一点,我展示了一个脚本。如果我只定义一次拟合区域,它就可以正常工作,但如果我这样做两次(仅用于测试,我知道那是无稽之谈),则西格玛值会降低。如果拟合区域不同,结果是相同的。我想重置或删除 TagGroup 以检查问题是否已解决,但我无法这样做。

TagGroup Tg
Number a0, sa0, a1, sa1
taggroup bandsTgs = NewTagList()
taggroup bandTg = NewTagGroup()

image spec := GetFrontImage()

// ...............First Time.....................................

bandTg.TagGroupSetTagAsFloat( "start", 600 ) // calibrated value!
bandTg.TagGroupSetTagAsFloat( "end", 800 )   // calibrated value!
bandsTgs.TagGroupInsertTagAsTagGroup( Infinity(), bandTg )

image bkg1 := EELSFitPowerLawBackground( spec, bandsTgs )
bkg1.ShowImage()

tg = bkg1.ImageGetTagGroup() // Fit parameters(in eV) from the BKG spectrum Tags

tg.TagGroupGetTagAsNumber( "Processing:[0]:Parameters:Fit Parameters:a0:value", a0 )
tg.TagGroupGetTagAsNumber( "Processing:[0]:Parameters:Fit Parameters:a0:sigma", sa0 )
tg.TagGroupGetTagAsNumber( "Processing:[0]:Parameters:Fit Parameters:a1:value", a1 )
tg.TagGroupGetTagAsNumber( "Processing:[0]:Parameters:Fit Parameters:a1:sigma", sa1 )

Result("\n Fitting BKG parameters. First time ") 
Result("\n    a0 : " + a0)
Result("\n   sa0 : " + sa0)
Result("\n    a1 : " + a1)
Result("\n   sa1 : " + sa1)

// Second Time........I get a differetn result if a repeat the fit-region definition

bandTg.TagGroupSetTagAsFloat( "start", 600 ) // calibrated value! 
bandTg.TagGroupSetTagAsFloat( "end", 800 )   // calibrated value!
bandsTgs.TagGroupInsertTagAsTagGroup( Infinity(), bandTg )

image bkg2 := EELSFitPowerLawBackground( spec, bandsTgs )
bkg2.ShowImage()

tg = bkg2.ImageGetTagGroup() // Fit parameters(in eV) from the BKG spectrum Tags

tg.TagGroupGetTagAsNumber( "Processing:[0]:Parameters:Fit Parameters:a0:value", a0 )
tg.TagGroupGetTagAsNumber( "Processing:[0]:Parameters:Fit Parameters:a0:sigma", sa0 )
tg.TagGroupGetTagAsNumber( "Processing:[0]:Parameters:Fit Parameters:a1:value", a1 )
tg.TagGroupGetTagAsNumber( "Processing:[0]:Parameters:Fit Parameters:a1:sigma", sa1 )

Result("\n")
Result("\n Fitting BKG parameters. Second time ")
Result("\n    a0 : " + a0)
Result("\n   sa0 : " + sa0)
Result("\n    a1 : " + a1)
Result("\n   sa1 : " + sa1)

bandsTgs.TagGroupOpenBrowserWindow( "BandTags", 0 ) // To show the Tag structure

我认为您需要的是对 DigitalMicrograph 中的 tags 更全面的描述:


请注意

There exist simplified wrapper commands for simple scripts

比如

image img := RealImage( "", 4, 10 )
SetNumberNote( img, "TagPath:With:SubTag:TagName", 12.2 )
DeleteNote( img, "TagPath:With:SubTag:TagName")

然而,底层对象是TagGroup对象,有很多特定的命令。当然,您总是可以使用 complete 对象实现 simple 的东西。


接下来,重要的是要知道

There is a difference between TagGroup and TagList.

两者都是表面上的 TagGroup 个对象,但某些命令只对其中一个有效。 TagLists 有索引条目,TagGroups 有标签条目。

当您开始向组/列表中插入或要从它们中删除时,两者的区别变得很重要,当您遍历结构时,它也变得很重要。

另请注意,TagGroup 条目按字母数字排序,而 TagList 条目按索引排序。

一些例子:

  • 格式为 TagGroupInsertTagAs... TagGroupGetIndexedTagAs... 的命令仅适用于 TagLists

  • 格式为 TagGroupSetTagAs... TagGroupGetTagAs... 的命令仅适用于 TagGroups

  • 要从 TagList 中删除标签,您需要使用 TagGroupDeleteTagWithIndex

  • 要从 TagGroup 中删除标签,您需要使用 TagGroupDeleteTagWithLabel

有时您可以通过将 TagList 中的 index 用作 label 来解决此问题,方法是将其放入在 [] 之间作为标记路径。但也有一些情况需要'TagGroup'和'TagList'

的区别

There are different options to delete tags

  • TagGroupDeleteAllTags() 删除 TagGroupTagList 的 'all' 个子标签 -但不是 group/list 条目本身。

  • TagGroupDeleteTagWithLabel() 删除标签指定的 TagGroup 中的特定标签。

  • TagGroupDeleteTagWithIndex() 删除索引指定的 TagList 中的特定标签。请注意,这会更改其他条目的索引!


例子

下面的代码从上图中创建标签组:

tagGroup rootTg = NewTagGroup()
tagGroup tg = NewTagGroup()
tagGroup tl = NewTagList()

tg.TagGroupSetTagAsString( "value", "I am a string tag")
tg.TagGroupSetTagAsString( "2", "My tag at #2")
tg.TagGroupSetTagAsString( "Name", "Hello")
tg.TagGroupSetTagAsString( "1", "My tag at #1")

tl.TagGroupInsertTagAsString( 0, "String tag #1" )
tl.TagGroupInsertTagAsString( 1, "String tag #2" )
tl.TagGroupInsertTagAsString( 2, "String tag #3" )
tl.TagGroupInsertTagAsString( 1, "String tag #4" )

rootTg.TagGroupSetTagAsTagGroup( "TagGroup", tg )
rootTg.TagGroupSetTagAsTagGroup( "TagList", tl )

rootTg.TagGroupOpenBrowserWindow( "TagGroup example", 0 )

要删除“姓名:你好”标签(已排序组中的第 3 个标签),我们将使用以下三种之一:

rootTg.TagGroupDeleteTagWithLabel( "TagGroup:Name" )
tg.TagGroupDeleteTagWithLabel( "Name" )
tg.TagGroupDeleteTagWithIndex( 2 )

要删除 TagList 中的第 3 个条目,我们将使用以下三种之一:

rootTg.TagGroupDeleteTagWithLabel( "TagList:[2]" )
tl.TagGroupDeleteTagWithLabel( "[2]" )
tl.TagGroupDeleteTagWithIndex( 2 )

要删除整个 TagList,我们将使用

rootTg.TagGroupDeleteTagWithLabel( "TagList" )