Кристалл собирается в отложенном черновике: начните его, заполните сеттерами, и Commit() всё проверит, построит кристалл и применит его как текущий за один шаг (обновляются GUI и все открытые симуляторы, как при загрузке CIF-файла). Неудачный Commit() сообщает все ошибки проверки разом, ничего не меняет и сохраняет черновик, так что его можно исправить и закоммитить снова.
Функция
Описание
Crystal.BeginCreate(name)
Начать черновик нового кристалла
Crystal.BeginEdit()
Начать черновик от текущего кристалла (ячейка, пространственная группа, атомы и ориентация переносятся)
Crystal.LoadCifText(cifText)
Начать черновик из текста CIF (содержимое файла .cif, а не путь)
Crystal.SetName(name)
Переименовать черновик
Crystal.SetCellInAng(a, b, c, alpha, beta, gamma)
Параметры ячейки в Å и градусах. Каждый вызов заменяет ячейку целиком; опущенные аргументы выводятся из ограничений пространственной группы (для кубического кристалла достаточно a), а явные значения, противоречащие им, вызывают ошибку
Crystal.SetSpaceGroup(symbol)
Пространственная группа по символу (HM краткий/полный или Холла; пробелы и _ игнорируются). При нескольких установках добавьте установку ('Fd-3m:2', 'R-3c:H', 'P21/c:b1') — неоднозначный символ вызывает ошибку со списком кандидатов
Crystal.SetSpaceGroupByNumber(itNumber, setting)
Пространственная группа по номеру IT (1–230); setting ('1', '2', 'H', 'R', 'b1', …) выбирает среди нескольких установок
Crystal.AddAtom(label, element, x, y, z, occ, bIso)
Добавить атом асимметричной единицы: символ элемента, дробные координаты, заселённость (0 < occ ≤ 1, по умолчанию 1) и изотропный B в Ų (по умолчанию 0). Эквивалентные позиции, буквы Уайкоффа и кратности выводятся автоматически
После успешного Commit() следующий BeginEdit() начинается с обновлённого кристалла, поэтому изменения накапливаются — для абсолютных сканов считайте базовые значения перед циклом, как выше. Чтобы занести кристалл в список кристаллов, вызовите CrystalList.Add().
Поворот вокруг нормали к плоскости (hkl) (радианы)
Dir.RotateAroundPlaneInDeg(h, k, l, angle)
Поворот вокруг нормали к плоскости (hkl) (градусы)
Dir.ProjectAlongPlane(h, k, l)
Установить нормаль к плоскости перпендикулярно экрану
Dir.ProjectAlongAxis(u, v, w)
Установить ось зоны перпендикулярно экрану
Dir.GetEuler()
Получить текущую ориентацию как углы Эйлера Z-X-Z [phi, theta, psi] (радианы)
Dir.GetEulerInDeg()
Получить текущую ориентацию как углы Эйлера Z-X-Z [phi, theta, psi] (градусы)
Dir.GetRotationMatrix()
Получить текущую матрицу поворота как массив из девяти элементов [R11, R12, R13, R21, R22, R23, R31, R32, R33] — то же соглашение, что и в SpotID.CandidateList()
Задать ориентацию по девяти элементам матрицы поворота (перед применением проверяются и реортонормируются)
Углы Эйлера неоднозначны в вырожденных положениях (θ = 0 или 180°): GetEuler() после Euler() воспроизводит ту же ориентацию, но не обязательно те же числа. Для точного сохранения и восстановления ориентации используйте Dir.GetRotationMatrix() / Dir.SetRotationMatrix(). Полное соглашение описано в разделе Геометрия вращения.
Управляет Spot ID v2 из макроса: загрузить изображение или список рефлексов, обнаружить рефлексы, найти ориентации и получить кандидатов — не трогая окно. FindSpots() и Identify() возвращают управление только по завершении работы, поэтому их можно вызывать подряд.
Загрузить файл так же, как File > Load: .csv читается как список рефлексов (изображение должно быть загружено заранее), любое другое расширение — как изображение дифракционной картины (dm3, dm4, mrc, ipa, tif и другие поддерживаемые форматы). Без filename откроется диалог выбора файла
SpotID.FindSpots()
Обнаружить рефлексы на загруженном изображении и подогнать их, как это делает кнопка Find spots
SpotID.Identify()
Найти ориентации, объясняющие обнаруженные рефлексы, как это делает кнопка Identify spots, и вернуть число кандидатов. Проверяются кристаллы, выбранные в списке кристаллов главного окна
SpotID.CandidateList()
Вернуть список ориентаций-кандидатов в виде текста CSV
SpotID.SpotList()
Вернуть наблюдённые рефлексы в виде текста CSV с теми же столбцами, что и File > Save. Вместе с File.SaveText() получается файл, который LoadFile() умеет читать обратно
CandidateList() даёт для каждого кандидата: название кристалла, углы Эйлера Z-X-Z (град.), девять элементов матрицы поворота R11–R33 (из системы кристалла в лабораторную, применяется к столбцовым векторам), среднеквадратичную невязку (nm⁻²) и сопоставление наблюдённых рефлексов индексам hkl. Кандидаты упорядочены по числу сопоставленных рефлексов (по убыванию), затем по невязке (по возрастанию). Числа записываются в инвариантной культуре, поэтому десятичный разделитель — всегда точка.
Управляет просмотрщиком структуры из макроса. SaveImage() и Export3DModel() при необходимости сначала открывают окно, так как 3D-модель строится при его показе.
Функция
Описание
StructureViewer.Open()
Открыть окно просмотрщика структуры
StructureViewer.Close()
Закрыть окно просмотрщика структуры
StructureViewer.SaveImage(filename)
Сохранить отрисованный главный вид как PNG в пиксельном размере из поля Size (W×H); без filename откроется диалог
Экспортировать отображаемую структуру для 3D-печати, как Export 3D Model (3MF/STL) в меню File. Расширение задаёт формат (.stl одноцветный / .3mf с окраской по элементам); обязателен только filename — остальные значения по умолчанию совпадают с диалогом (наибольший размер 80 mm, рёбра ячейки ⌀2,4 mm, утолщение связей до ⌀1,2 mm). При fixedScaleInMMperNm > 0 несколько моделей получают общий масштаб
Эти три класса симуляции изображений имеют много общих членов. Чтобы избежать повторений, в таблицах ниже используются заполнители:
# : общие для HRTEM, STEM и Potential. Замените # на HRTEM, STEM или Potential (например, STEM.Simulate(), Potential.AccVol).
$ : общие только для HRTEM и STEM. Замените $ на HRTEM или STEM.
Члены, записанные с явным именем класса (STEM.… / HRTEM.…), принадлежат только этому классу. Класс Potential не добавляет собственных членов; он использует только члены #.