Туториал¶
Этот туториал покажет, как использовать библиотеку ORCA Descriptors как через Python, так и через командную строку.
Использование как Python библиотека¶
Базовое использование¶
Сначала импортируйте необходимые классы:
from orca_descriptors import Orca
from rdkit.Chem import MolFromSmiles, AddHs
Инициализируйте калькулятор ORCA с нужными настройками:
orca = Orca(
script_path="orca",
functional="PBE0",
basis_set="def2-SVP",
method_type="Opt",
dispersion_correction="D3BJ",
solvation_model="COSMO(Water)",
n_processors=8,
pre_optimize=True, # Включить предоптимизацию геометрии с MMFF94
)
Создайте молекулу из SMILES строки:
mol = AddHs(MolFromSmiles("C1=CC=CC=C1")) # Бензол
Рассчитайте дескрипторы:
# Энергетические дескрипторы
homo = orca.homo_energy(mol)
lumo = orca.lumo_energy(mol)
gap = orca.gap_energy(mol)
# DFT дескрипторы
mu = orca.ch_potential(mol)
chi = orca.electronegativity(mol)
eta = orca.abs_hardness(mol)
# Термодинамические дескрипторы
energy = orca.total_energy(mol)
gibbs = orca.gibbs_free_energy(mol)
# Дескрипторы молекулярных орбиталей
homo_minus_1 = orca.mo_energy(mol, index=-2) # Энергия HOMO-1
# Дескрипторы зарядов
min_h_charge = orca.get_min_h_charge(mol, method="ESP") # Минимальный заряд водорода
# Геометрические дескрипторы
xy_area = orca.xy_shadow(mol) # Площадь проекции на плоскость XY
# Дескрипторы реакционной способности
meric = orca.meric(mol) # Индекс электрофильности для углерода
# Топологические дескрипторы
t_oo = orca.topological_distance(mol, 'O', 'O') # Сумма расстояний O-O
nrot = orca.num_rotatable_bonds(mol) # Количество вращающихся связей
wiener = orca.wiener_index(mol) # Индекс Винера
# Физико-химические дескрипторы
logp = orca.m_log_p(mol) # Коэффициент распределения октанол/вода
sasa = orca.solvent_accessible_surface_area(mol) # SASA
# Дескрипторы автокорреляции
mats2v = orca.moran_autocorrelation(mol, lag=2, weight='vdw_volume')
hats4u = orca.autocorrelation_hats(mol, lag=4, unweighted=True)
Кеширование¶
Библиотека автоматически кеширует результаты расчетов. Если вы рассчитываете дескрипторы для той же молекулы с теми же параметрами, будет использован кешированный результат:
# Первый расчет - запускает ORCA
homo1 = orca.homo_energy(mol) # Занимает время
# Второй расчет - использует кеш
homo2 = orca.homo_energy(mol) # Мгновенно
Выбор функционалов и методов¶
Библиотека поддерживает как DFT методы, так и полуэмпирические методы:
DFT методы¶
Для расчетов с высокой точностью используйте DFT функционалы с базисными наборами:
# Высокоточный DFT расчет
orca_dft = Orca(
functional="PBE0", # Гибридный функционал
basis_set="def2-TZVP", # Тройной дзета базисный набор
method_type="Opt", # Оптимизация геометрии
dispersion_correction="D3BJ", # Дисперсионная коррекция
n_processors=8,
)
Распространенные DFT функционалы:
PBE0- Гибридный GGA функционал, хороший баланс точности и скоростиB3LYP- Популярный гибридный функционалM06-2X- Meta-GGA функционал, хорош для термохимииωB97X-D- Range-separated гибрид с дисперсией
Распространенные базисные наборы:
def2-SVP- Маленький, быстрый (по умолчанию)def2-TZVP- Тройной дзета, более точныйdef2-QZVP- Четверной дзета, очень точный, но медленный
Полуэмпирические методы¶
Для быстрых расчетов больших молекул используйте полуэмпирические методы:
# Быстрый полуэмпирический расчет
orca_semi = Orca(
functional="AM1", # Полуэмпирический метод
method_type="SP", # Одноточечный расчет (без оптимизации)
n_processors=1,
pre_optimize=True, # Предоптимизировать с MMFF94
)
Поддерживаемые полуэмпирические методы:
AM1- Austin Model 1, хорош для органических молекулPM3- Parametric Method 3, улучшенная версия AM1PM6- Parametric Method 6, лучше для переходных металловPM7- Parametric Method 7, улучшенная точностьRM1- Recife Model 1, оптимизирован для органических соединений
Примечание: Для полуэмпирических методов параметры basis_set и dispersion_correction автоматически игнорируются.
Предоптимизация геометрии¶
По умолчанию библиотека выполняет предоптимизацию геометрии с использованием силового поля MMFF94 из RDKit перед отправкой молекулы в ORCA. Это может значительно ускорить расчеты ORCA, особенно для оптимизации геометрии:
# С предоптимизацией (по умолчанию)
orca = Orca(
functional="PBE0",
method_type="Opt",
pre_optimize=True, # По умолчанию: True
)
# Без предоптимизации
orca = Orca(
functional="PBE0",
method_type="Opt",
pre_optimize=False,
)
Преимущества предоптимизации:
Быстрее сходимость ORCA (требуется меньше шагов оптимизации)
Более стабильные расчеты (лучшая стартовая геометрия)
Снижение вычислительных затрат
Предоптимизация использует MMFF94, который требует явных атомов водорода. Библиотека автоматически добавляет водород, если необходимо, и генерирует 3D координаты, если они отсутствуют.
Типы расчетов¶
Выберите подходящий тип расчета в зависимости от ваших потребностей:
# Одноточечный расчет энергии (самый быстрый)
orca_sp = Orca(
functional="PBE0",
method_type="SP", # Одноточечный расчет
)
# Оптимизация геометрии (медленнее, но дает оптимизированную геометрию)
orca_opt = Orca(
functional="PBE0",
method_type="Opt", # Оптимизация
)
Примечание: Некоторые дескрипторы (например, molecular_volume, polar_surface_area, solvent_accessible_surface_area) требуют оптимизированной геометрии и могут работать некорректно с method_type="SP".
Использование как консольная утилита¶
Библиотеку также можно использовать как консольную утилиту после установки.
Запуск бенчмарка¶
Перед оценкой времени расчетов запустите бенчмарк:
orca_descriptors run_benchmark --working_dir ./calculations
Оценка времени расчета¶
Оцените, сколько времени займет расчет:
orca_descriptors approximate_time --molecule CCO --method_type Opt
Все параметры ORCA доступны как аргументы CLI. Например:
orca_descriptors approximate_time \\
--molecule CCO \\
--functional PBE0 \\
--basis_set def2-TZVP \\
--n_processors 4 \\
--method_type Opt
Пример рабочего процесса¶
Вот полный пример расчета дескрипторов для нескольких молекул:
from orca_descriptors import Orca
from rdkit.Chem import MolFromSmiles, AddHs
# Инициализация калькулятора
orca = Orca(
working_dir="./calculations",
functional="PBE0",
basis_set="def2-SVP",
method_type="Opt",
n_processors=4,
)
# Список молекул для обработки
smiles_list = [
"C1=CC=CC=C1", # Бензол
"CCO", # Этанол
"CC(=O)C", # Ацетон
]
results = []
for smiles in smiles_list:
mol = AddHs(MolFromSmiles(smiles))
results.append({
"smiles": smiles,
"homo": orca.homo_energy(mol),
"lumo": orca.lumo_energy(mol),
"gap": orca.gap_energy(mol),
"dipole": orca.dipole_moment(mol),
})
# Обработка результатов
for r in results:
print(f"{r['smiles']}: Gap = {r['gap']:.2f} eV")
Доступные дескрипторы¶
Библиотека предоставляет комплексный набор дескрипторов для QSAR анализа:
Энергетические дескрипторы¶
homo_energy(mol)- Энергия HOMO (эВ)lumo_energy(mol)- Энергия LUMO (эВ)gap_energy(mol)- Разрыв HOMO-LUMO (эВ)mo_energy(mol, index)- Энергия молекулярной орбитали по индексу (эВ)total_energy(mol)- Полная энергия (Хартри)
DFT дескрипторы¶
ch_potential(mol)- Химический потенциал (эВ)electronegativity(mol)- Электроотрицательность (эВ)abs_hardness(mol)- Абсолютная жесткость (эВ)abs_softness(mol)- Абсолютная мягкость (1/эВ)frontier_electron_density(mol)- Плотность фронтирных электронов
Дескрипторы зарядов¶
get_atom_charges(mol)- Атомные заряды Малликенаget_min_h_charge(mol, method="ESP")- Минимальный заряд водорода
Геометрические дескрипторы¶
xy_shadow(mol)- Площадь проекции на плоскость XY (Ų)molecular_volume(mol)- Молекулярный объем (ų)get_bond_lengths(mol, atom1, atom2)- Длины связей (Å)
Дескрипторы реакционной способности¶
meric(mol)- Минимальный индекс электрофильности для углерода (эВ)dipole_moment(mol)- Дипольный момент (Дебай)
Топологические дескрипторы¶
topological_distance(mol, atom1, atom2)- Сумма топологических расстоянийnum_rotatable_bonds(mol)- Количество вращающихся связейwiener_index(mol)- Индекс Винера
Физико-химические дескрипторы¶
m_log_p(mol)- Коэффициент распределения Моригучи (октанол/вода)polar_surface_area(mol)- Полярная площадь поверхности (Ų)solvent_accessible_surface_area(mol)- Доступная площадь поверхности растворителя (Ų)
Термодинамические дескрипторы¶
gibbs_free_energy(mol)- Энергия Гиббса (Хартри)entropy(mol)- Энтропия (Дж/(моль·К))enthalpy(mol)- Энтальпия (Хартри)
Дескрипторы автокорреляции¶
moran_autocorrelation(mol, lag, weight)- Автокорреляция Моранautocorrelation_hats(mol, lag, unweighted)- Автокорреляция HATS