Analysis Results

Orbitron keeps calculation results in program-neutral scene and task records. The desktop, TUI, CLI, and Python bridge read those same records, so a value does not acquire a different meaning when you change frontends. Availability still depends on what the source program printed.

Result Parsed sources Desktop TUI CLI Python
Permanent dipole Gaussian, NWChem, ORCA, Molcas/OpenMolcas, Molpro, DIRAC Analysis → Overview Analysis inspect scene.dipole_moment()
Method, basis, and task kind Gaussian, NWChem, ORCA, Molcas/OpenMolcas, Molpro, DIRAC, QE Analysis → Tasks Analysis info / inspect task_summaries(path)
Implicit solvation Gaussian, NWChem, ORCA, Molcas/OpenMolcas, DIRAC Analysis → Tasks Analysis info / inspect task_summaries(path)
SCF convergence Gaussian, NWChem, ORCA, Molcas/OpenMolcas, Molpro, DIRAC, QE, where the output reports iterations or status Analysis → Tasks Analysis info / inspect task_summaries(path)
Computed bond orders Gaussian Wiberg, NWChem Mayer, ORCA Mayer, Molcas/OpenMolcas natural, standalone NBO Wiberg Analysis → Populations Analysis analyze bond-orders analyze_bond_orders(scene)
Excited-state contributions Gaussian, NWChem, ORCA, Molcas/OpenMolcas, Molpro, DIRAC, depending on method Analysis → Excited States Analysis when available inspect scene.excited_states()
Bands, DOS, and first Brillouin zone VASP and Quantum ESPRESSO when the calculation carries the required arrays and cell Analysis → Bands & DOS Analysis inspect, pack periodic periodic_electronic_structure(), brillouin_zone()

The table names data families rather than promising identical depth. For example, one SCF output may contain every iteration energy while another only states an iteration count and whether it converged. Orbitron preserves that difference instead of inventing points for a plot.

Molecular properties

Intended charge and multiplicity

MolecularElectronicState records the total charge and spin multiplicity intended for the current editable molecular structure. It is distinct from parsed electronic-structure evidence and from the sum of per-atom formal charges. The desktop Edit rail, TUI Properties pane, orbitron info, and Scene.molecular_electronic_state() report the same state and consistency checks.

Orbitron checks electron count and spin parity, but it does not decide which spin state is physically lowest. A warning that the atomic formal charges do not sum to the molecular charge is also diagnostic, not an automatic rewrite. Periodic scenes do not carry a molecular charge/multiplicity state.

Permanent dipole

The dipole is stored in Debye as a vector in the source coordinate system. Orbitron also reports its magnitude. Rotating the camera does not rotate or redefine the stored components.

In Python:

import orbitron

scene = orbitron.Orbitron().load("calculation.out")
dipole = scene.dipole_moment()
if dipole:
    print(dipole["vector_debye"])
    print(dipole["magnitude_debye"])

For scripts that should work without Python, orbitron inspect run.out --json places the same object under scene.electronic_structure.dipole_moment.

Computed bond orders

Computed bond orders are analysis results. They do not replace the scene’s connection table and do not silently change single, double, aromatic, or dative bonds used for rendering and editing.

orbitron analyze bond-orders run.out
orbitron analyze bond-orders run.out --json

The report names the method and uses 1-based atom numbers. A source may print a thresholded list rather than a complete matrix. In that case an omitted pair is unknown, not zero. Reports from complete Wiberg matrices set complete_pair_matrix: true; exact zeroes may then be omitted without losing meaning. Three-center orders are retained separately from pair orders.

The desktop’s Analysis → Populations table can highlight the atoms in a reported pair or three-center term. In Python, use Orbitron.analyze_bond_orders(scene).

Calculation provenance and convergence

Open Analysis → Tasks in the desktop, or the Analysis pane in the TUI, to see calculation stages in file order. Each task can carry:

  • program and task kind;
  • method and orbital basis;
  • implicit-solvent model, solvent name, and dielectric constant;
  • final energy;
  • SCF cycles, iteration counts, convergence status, and iteration energies;
  • program-specific diagnostics such as active-space details or optimisation profiles.

An optimisation contains multiple electronic SCF cycles. Orbitron keeps those cycles separate, so a convergence plot does not draw a false line between the last electronic iteration at one geometry and the first at the next.

orbitron inspect run.out
orbitron inspect run.out --json | jq '.program_tasks'

The Python equivalent parses the output document rather than only the active geometry:

orb = orbitron.Orbitron()
for task in orb.task_summaries("run.out"):
    print(task["program"], task["kind"], task.get("method"))
    print(task.get("basis"), task.get("solvation"))
    print(task.get("scf_convergence", []))

Method, basis, and solvation are provenance. Orbitron reports the labels the program supplied and does not treat them as a basis-set registry or a cross-program method equivalence.

Orbitals and multireference states

The Orbitals panel lists energies, occupations, symmetry labels, and the largest atomic-orbital coefficients when full coefficients are available. ORCA coefficients require the sibling .molden.input produced by orca_2mkl; NWChem coefficients require .movecs. See Data Support for the companion-file rules.

The Excited States panel retains method-specific contributions instead of flattening every state into a single transition:

  • single-excitation methods retain occupied-to-virtual contributions and signed amplitudes where printed;
  • ORCA CASSCF and MRCI retain configuration occupation patterns and weights;
  • MRCI also retains each state’s reference-space weight;
  • Molcas/OpenMolcas and DIRAC retain the state data their program summaries provide.

Python exposes the same records through scene.excited_states().

Periodic electronic structure

For a periodic run, Analysis → Bands & DOS shows the dispersion, density of states, band gap, and projections present in the source. Open 3D k-space view… adds the exact first Brillouin zone of the calculation cell, folds the sampled k-points into it, and splits a path where it crosses a zone boundary. The view can be saved as SVG or PNG.

The k-space view does not guess a standard path. It displays the samples and labels supplied by the calculation. A uniform SCF mesh is shown as points and must not be read as a band path.

periodic = scene.periodic_electronic_structure(include_projections=True)
zone = scene.brillouin_zone()

if zone:
    print(zone["zone"]["reciprocal_basis_inv_angstrom"])
    print(len(zone["zone"]["faces"]), "faces")

Reciprocal Cartesian coordinates use the physical convention and units of Å⁻¹. Array indices returned by brillouin_zone() are zero-based so they can index periodic_electronic_structure() directly.

Geometry and results remain distinct

When you edit a loaded calculation, the desktop keeps Orig and Edited views. Dipoles, orbitals, charges, bond orders, excited states, and energies belong to the geometry on which they were computed. Orbitron therefore shows them on Orig and does not imply that an edited geometry has been recalculated.

Trajectory cells belong to frames

Trajectory frames are complete scene snapshots. Quantum ESPRESSO relaxations and extended XYZ trajectories can therefore change lattice vectors from one frame to the next, or explicitly contain an aperiodic frame among periodic ones. The desktop camera and cell overlay update while stepping; the TUI Sequence pane reports the current cell; inspect --json places unit_cell on each frame; and Trajectory.frame(index).unit_cell() exposes it in Python.

XDATCAR is a separate constraint: Orbitron’s XDATCAR reader supports the constant-cell form and applies its header cell to every frame. Repeated-header variable-cell NPT output is not parsed yet.