Energy & Advanced Calculation Macros

These macros perform energy calculations, geometry optimizations, and advanced molecular computations.

Calculate Energy

OpenBabel.@calculate_energyMacro
@calculate_energy(expr, forcefield="MMFF94")

Calculate the energy of molecules using a specified forcefield.

Arguments

  • expr: The expression to chain with
  • forcefield: Forcefield to use for energy calculation. Available: "MMFF94" (default), "MMFF94s", "UFF", "GAFF", "Ghemical"

Example

@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("fast")
    @calculate_energy("MMFF94")
    @output_as("energies.sdf", "sdf")
    @execute
end
source

Usage Examples

Calculate energy using different force fields:

# MMFF94 forcefield (default)
@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("fast")
    @calculate_energy("MMFF94")
    @output_as("energies.sdf", "sdf")
    @execute
end

# UFF forcefield
@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("med")
    @calculate_energy("UFF")
    @output_as("uff_energies.sdf", "sdf")
    @execute
end

Energy ranking workflow:

@chain begin
    @read_file("conformers.sdf", "sdf")
    @calculate_energy("MMFF94")
    @sort_by("Energy")  # Sort by ascending energy (most stable first)
    @output_as("energy_ranked.sdf", "sdf")
    @execute
end

Minimize Energy

OpenBabel.@minimize_energyMacro
@minimize_energy(expr, forcefield="MMFF94")

Minimize the energy of molecules using a specified forcefield.

Arguments

  • expr: The expression to chain with
  • forcefield: Forcefield to use for energy minimization. Available: "MMFF94" (default), "MMFF94s", "UFF", "GAFF", "Ghemical"

Example

@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("fast")
    @minimize_energy("MMFF94")
    @output_as("minimized.sdf", "sdf")
    @execute
end
source

Usage Examples

# MMFF94 forcefield (default)
@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("fast")
    @minimize_energy("MMFF94")
    @output_as("optimized.sdf", "sdf")
    @execute
end

# UFF forcefield
@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("med")
    @minimize_energy("UFF")
    @output_as("uff_optimized.sdf", "sdf")
    @execute
end

Complete energy minimization workflow:

@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("fast")
    @minimize_energy("MMFF94")
    @calculate_energy("MMFF94")
    @output_as("optimized.sdf", "sdf")
    @execute
end

Add Partial Charges

OpenBabel.@add_partial_chargesMacro
@add_partial_charges(expr, method="gasteiger")

Add partial charges to molecules using specified method.

Arguments

  • expr: The expression to chain with
  • method: Charge calculation method. Available: "gasteiger" (default), "mmff94", "qeq", "eqeq", "eem"

Example

@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("fast")
    @add_partial_charges("gasteiger")
    @output_as("charged.sdf", "sdf")
    @execute
end
source

Usage Examples

# Gasteiger charges (default)
@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("fast")
    @add_partial_charges("gasteiger")
    @output_as("charged_molecules.sdf", "sdf")
    @execute
end

# MMFF94 charges
@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("fast")
    @add_partial_charges("mmff94")
    @output_as("mmff_charges.sdf", "sdf")
    @execute
end

Available charge methods:

MethodDescriptionAccuracySpeed
gasteigerGasteiger-MarsiliMediumFast
mmff94MMFF94 chargesHighMedium
qeqQEq chargesMediumFast
eqeqEQEq chargesMediumFast
eemElectronegativity EqualizationMediumMedium

Canonicalize

OpenBabel.@canonicalizeMacro
@canonicalize(expr)

Canonicalize the atom order in molecules.

Example

@chain begin
    @read_file("molecules.sdf", "sdf")
    @canonicalize()
    @output_as("canonical.sdf", "sdf")
    @execute
end
source

Usage Examples

Standardize molecular representation:

@chain begin
    @read_file("compounds.smi", "smi")
    @canonicalize()
    @output_as("canonical_structures.smi", "smi")
    @execute
end

Generate Conformers

OpenBabel.@generate_conformersMacro
@generate_conformers(expr)

Generate conformers for molecules.

Example

@chain begin
    @read_file("molecules.smi", "smi")
    @gen_3D_coords("fast")
    @generate_conformers()
    @output_as("conformers.sdf", "sdf")
    @execute
end
source

Usage Examples

Generate multiple conformations:

@chain begin
    @read_file("flexible_molecules.smi", "smi")
    @gen_3D_coords("med")
    @generate_conformers()
    @minimize_energy("MMFF94")
    @output_as("conformers.sdf", "sdf")
    @execute
end

Available Forcefields

ForcefieldDescriptionBest for
MMFF94Merck Molecular Force FieldGeneral organic molecules
MMFF94sMMFF94 staticStatic conformations
UFFUniversal Force FieldBroad chemical space
GAFFGeneral AMBER Force FieldDrug-like molecules
GhemicalGhemical Force FieldQuick calculations

Complete Workflows

Comprehensive Energy Calculation Pipeline

@chain begin
    @read_file("compounds.smi", "smi")
    @gen_3D_coords("slow")           # High-quality 3D structures
    @canonicalize()                  # Standardize representation
    @minimize_energy("MMFF94")       # Optimize geometry
    @add_partial_charges("mmff94")   # Add partial charges
    @calculate_energy("MMFF94")      # Calculate final energy
    @add_properties(["MW", "logP"])  # Add additional properties
    @sort_by("Energy")               # Sort by energy
    @output_as("energy_ranked.sdf", "sdf")
    @execute
end

Drug Discovery Pipeline

@chain begin
    @read_file("drug_candidates.smi", "smi")
    @ignore_bad_molecules()          # Skip invalid structures
    @gen_3D_coords("med")            # Generate 3D coordinates
    @minimize_energy("MMFF94")       # Energy minimization
    @add_partial_charges("gasteiger") # Add charges
    @add_properties(["MW", "logP", "TPSA", "HBD", "HBA", "rotors"])
    @match_smarts_string("[!Pb;!Hg;!As]")  # Remove toxic elements
    @sort_by_reverse("logP")         # Rank by lipophilicity
    @output_as("optimized_candidates.sdf", "sdf")
    @execute
end