Как сбросить или удалить группы тегов и списки тегов в скрипте DM?

Как сбросить или удалить группы тегов и списки тегов в скрипте DM?

Немного фона:

Я готовлю сценарий для анализа серии спектров EELS в GMS 2. Я подгоняю фон к модели степенного закона и получаю параметры подгонки, как значение, так и сигму, из тегов в фоновом спектре. Однако, если попытаться проанализировать различные ребра в одном скрипте, я обнаружу, что значения сигмы подходящих параметров зависят от порядка вычисления. Чтобы проверить это, я показываю скрипт. Если я определяю подходящую область только один раз, все работает нормально, но если я делаю это дважды (только для тестирования, я знаю, что это ерунда), значения сигмы уменьшаются. Результат тот же, если подходящие области различны. Я хотел бы сбросить или удалить группу тегов, чтобы проверить, решена ли проблема, но я не могу этого сделать.

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

person Angel Larrea    schedule 30.06.2017    source источник


Ответы (1)


Я думаю, что вам нужно немного более полное описание тегов в DigitalMicrograph:


Быть в курсе, что

Существуют упрощенные команды-оболочки для простых скриптов.

такие как

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

Однако базовым объектом является объект TagGroup с множеством конкретных команд. Конечно, вы всегда можете достичь простых вещей с помощью объекта complete.


Далее важно знать, что

Есть разница между TagGroup и TagList.

Оба являются TagGroup объектами на поверхности, но некоторые команды будут работать только с любым из них. В списках тегов есть проиндексированные записи, а в группах тегов есть помеченные записи.

TagGroup vs TagList

Разница между ними становится важной, когда вы начинаете вставлять в группу/список или хотите удалить из них, а также становится важной, когда вы пересекаете структуру.

Также обратите внимание, что записи TagGroup сортируются по алфавиту, а записи TagList сортируются по индексу.

Некоторые примеры:

  • команды вида TagGroupInsertTagAs... TagGroupGetIndexedTagAs... работают только на TagLists

  • команды вида TagGroupSetTagAs... TagGroupGetTagAs... работают только на TagGroups

  • Чтобы удалить тег из TagList, вам нужно использовать TagGroupDeleteTagWithIndex

  • Чтобы удалить тег из TagGroup, вам нужно использовать TagGroupDeleteTagWithLabel

Иногда эту проблему можно обойти, используя индекс в TagList в качестве метки, поместив его между [ и ] в качестве пути к тегу. Но есть также некоторые обстоятельства, когда вам нужна разница между «TagGroup» и «TagList».


Существуют различные варианты удаления тегов

  • TagGroupDeleteAllTags() удаляет "все" вложенные теги TagGroup или TagList, но не сам элемент группы/списка.

  • TagGroupDeleteTagWithLabel() удаляет указанный тег в пределах TagGroup, указанной меткой.

  • TagGroupDeleteTagWithIndex() удаляет указанный тег в TagList, заданном индексом. Обратите внимание, что это изменяет индексы других записей!


Пример

Код ниже создает tagGroup из изображения выше:

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 )

Чтобы удалить тег Name: Hello (который является третьим тегом в отсортированной группе), мы будем использовать любой из трех:

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

Чтобы удалить третью запись в TagList, мы будем использовать любой из трех:

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

Чтобы удалить весь список тегов, мы использовали бы

rootTg.TagGroupDeleteTagWithLabel( "TagList" )
person BmyGuest    schedule 30.06.2017