UNPKG

@peterspackman/occjs

Version:

JavaScript/WebAssembly bindings for OCC - a quantum chemistry and crystallography library

106 lines (95 loc) 3.14 kB
/** * SimpleBasisLoader - Minimal utility for loading custom basis sets * Now that we have preloaded data, this just provides a simple interface * for adding custom JSON basis sets to the virtual filesystem if needed */ /** * Load a basis set for a molecule using the built-in preloaded data * @param {Object} module - OCC module * @param {Object} molecule - Molecule object * @param {string} basisName - Name of basis set * @returns {Object} AOBasis object */ export function loadBasisSet(module, molecule, basisName) { return module.AOBasis.load(molecule.atoms(), basisName); } /** * Create AOBasis from custom JSON data * @param {Object} module - OCC module * @param {Object} molecule - Molecule object * @param {Object|string} basisData - JSON basis data * @returns {Object} AOBasis object */ export function loadBasisFromJSON(module, molecule, basisData) { const jsonString = typeof basisData === 'string' ? basisData : JSON.stringify(basisData); return module.AOBasis.fromJson(molecule.atoms(), jsonString); } /** * Add a custom basis set to the virtual filesystem * This allows the built-in AOBasis.load() to find it later * @param {Object} module - OCC module * @param {string} basisName - Name for the basis set * @param {Object} basisData - JSON basis data */ export function addCustomBasisSet(module, basisName, basisData) { if (!module.FS) { console.warn('Virtual filesystem not available - cannot add custom basis set'); return false; } try { // Ensure basis directory exists try { module.FS.stat('/basis'); } catch (e) { module.FS.mkdir('/basis'); } // Write the basis data as a JSON file const jsonString = typeof basisData === 'string' ? basisData : JSON.stringify(basisData, null, 2); const filename = `/basis/${basisName.toLowerCase()}.json`; module.FS.writeFile(filename, jsonString); console.log(`Added custom basis set: ${basisName} -> ${filename}`); return true; } catch (error) { console.error(`Failed to add custom basis set ${basisName}:`, error.message); return false; } } /** * List available basis sets from the virtual filesystem * @param {Object} module - OCC module * @returns {string[]} Array of basis set names */ export function listAvailableBasisSets(module) { if (!module.FS) { console.warn('Virtual filesystem not available'); return []; } try { const files = module.FS.readdir('/basis'); return files .filter(name => name.endsWith('.json')) .map(name => name.replace('.json', '')) .sort(); } catch (error) { console.warn('Failed to list basis sets:', error.message); return []; } } /** * Check if a basis set is available * @param {Object} module - OCC module * @param {string} basisName - Name of basis set * @returns {boolean} True if available */ export function hasBasisSet(module, basisName) { if (!module.FS) { return false; } try { const filename = `/basis/${basisName.toLowerCase()}.json`; module.FS.stat(filename); return true; } catch (error) { return false; } }