Parsers
Data parsing utilities for molecular structure formats.
Supported Formats
PDB Format
Protein Data Bank format
MOL2 Format
Tripos MOL2 format
Parser Configuration
interface ParserConfig {
format: string; // File format
options?: { // Parser options
loadHetero?: boolean; // Load hetero atoms
loadWater?: boolean; // Load water molecules
loadHydrogen?: boolean; // Load hydrogen atoms
loadBonds?: boolean; // Load bond information
};
callbacks?: { // Event callbacks
onAtom?: (atom: Atom) => void;
onBond?: (bond: Bond) => void;
onComplete?: (model: Model) => void;
};
}
Parser Methods
parse
Parse molecular data
async function parse(data: string | File): Promise<Model> {
const lines = await readLines(data);
const model = new Model();
for (const line of lines) {
if (line.startsWith('ATOM')) {
const atom = parseAtom(line);
model.addAtom(atom);
this.callbacks?.onAtom?.(atom);
} else if (line.startsWith('CONECT')) {
const bond = parseBond(line);
model.addBond(bond);
this.callbacks?.onBond?.(bond);
}
}
this.callbacks?.onComplete?.(model);
return model;
}
parseAtom
Parse atom record
function parseAtom(line: string): Atom {
return {
serial: parseInt(line.substr(6, 5)),
name: line.substr(12, 4).trim(),
element: line.substr(76, 2).trim(),
position: {
x: parseFloat(line.substr(30, 8)),
y: parseFloat(line.substr(38, 8)),
z: parseFloat(line.substr(46, 8))
},
occupancy: parseFloat(line.substr(54, 6)),
bfactor: parseFloat(line.substr(60, 6))
};
}
parseBond
Parse bond record
function parseBond(line: string): Bond {
return {
atom1: parseInt(line.substr(6, 5)),
atom2: parseInt(line.substr(11, 5)),
type: parseInt(line.substr(16, 2)) || 1
};
}
Example
// Create parser
const parser = new Parser({
format: 'pdb',
options: {
loadHetero: true,
loadWater: false,
loadHydrogen: false,
loadBonds: true
},
callbacks: {
onAtom: (atom) => {
console.log('Parsed atom:', atom);
},
onBond: (bond) => {
console.log('Parsed bond:', bond);
},
onComplete: (model) => {
console.log('Parsing complete');
viewer.load(model);
}
}
});
// Parse file
try {
const model = await parser.parse('protein.pdb');
// Process parsed model
} catch (error) {
// Handle error
}
Autoload
Next