Vibrational Spectrum Library turns a conformer ensemble into a library of IR spectra on one wavenumber grid. Each conformer gets a GFN2-xTB Hessian: harmonic frequencies from the second derivatives of the energy and IR intensities from the dipole derivatives. The sticks are broadened onto the grid. Conformers of the same molecule are then combined into a Boltzmann-weighted ensemble spectrum. Because every column shares one grid, the library can be compared directly with a measured spectrum or used to fit conformer populations to one.
How a run works
- Each SDF record (or mol block) is one conformer, read by RDKit with its hydrogens and 3D coordinates. Records without 3D coordinates are rejected; this tool does not generate geometries.
- By default xtb optimizes each conformer at the tight or very tight level and then computes the Hessian at the minimum. With the input geometry option the Hessian runs on the coordinates as given.
- The modes are broadened onto the grid. Conformers are grouped into molecules by canonical SMILES and weighted by the Boltzmann populations of their xTB free energies at the chosen temperature.
- A conformer that fails gets a row with its error, and the rest of the ensemble continues.
Choosing the geometry
- Optimize with xTB first gives a true GFN2-xTB minimum, so all frequencies are real. Conformers that sit close together on the force-field surface can relax to the same xTB minimum and give the same spectrum.
- Use input geometry keeps each conformer exactly as supplied, for example DFT-optimized structures. A structure that is not an xTB minimum can show imaginary modes; they are counted for each conformer and left out of the spectra. Include explicit hydrogens for this option.
Solvation uses the ALPB implicit solvent model. Leave the charge at 0 to use each molecule's formal charge.
Reusing xTB / CREST frequencies
If you have already run the frequencies mode of xTB / CREST, upload its vibrations.csv and use its structures.sdf as the conformers. The Hessian is skipped, and records are matched to the table by their molecule_index and structure_index tags. In this case conformers are weighted by their electronic energies, because the structures file carries no free energies.
Reading the results
library.csv: one IR column per conformer (conformer_<index>_ir) on the wavenumber grid.ensemble.csv: one Boltzmann-weighted IR column per molecule (molecule_<index>_ir).conformers.csv: one row per conformer, with its molecule, SMILES, status, energies, free energy, relative energy in kcal/mol, Boltzmann population, number of modes, imaginary-mode count, and lowest frequency.sticks.csv: every mode, with its wavenumber, reduced mass, and IR intensity in km/mol.structures.sdf: the geometries the Hessian used, tagged with the same energies and populations.logs/: the xtb output for each conformer.
Every line shape is area-normalized, so the integral of a peak equals the mode's intensity in km/mol whatever its shape or width. Broadened spectra are therefore in km/mol per cm⁻¹.
Limits and not covered
Frequencies are harmonic and unscaled. GFN2-xTB fundamentals can be several percent off experiment, so apply a scaling factor or compare peak patterns rather than absolute positions. Raman activities, anharmonic corrections, VCD, and overtones and combination bands are not part of this tool. Each xtb run stops after an hour. If a large ensemble runs out of the job's time budget, the conformers that were not started are reported as skipped, and the finished ones are still returned.
Related tools
Generate the ensemble with Conformer Ensemble Generator or with the CREST conformer search in xTB / CREST. In a workflow, the structures output carries relative energy and population metrics, so a filter step can keep the low-energy conformers.