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
}

Related Topics

Learn more about utilities:

Autoload
Next