0.5.0 • Published 5 years ago

nmr-auto-assignment v0.5.0

Weekly downloads
5
License
MIT
Repository
github
Last release
5 years ago

nmr-auto-assignment

Pure JavaScript NMR automatic assignment. Detail of the algorithm are described in the paper: Fully automatic assignment of small molecules' NMR spectra without relying on chemical shift predictions

This program can use as input the list of peaks given by the automatic peak picking routines from the spectra-data project: spectra-data

#Example

'use strict';

const SD = require('spectra-data');
const FS = require('fs');
const OCLE = require("openchemlib-extended-minimal");
const autoassigner = require('../src/index');
const predictor = require("nmr-predictor");

function createSpectraData(filename, label, data) {
    var spectrum = SD.NMR.fromJcamp(
        FS.readFileSync(__dirname + filename).toString()
    );
    return spectrum;
};

function createSpectraData2D(filename, label, data) {
    var spectrum = SD.NMR2D.fromJcamp(
        FS.readFileSync(__dirname + filename).toString()
    );
    return spectrum;
};

var molecule = OCLE.Molecule.fromSmiles("CCc1ccccc1");
molecule.addImplicitHydrogens();
var nH = molecule.getMolecularFormula().formula.replace(/.*H([0-9]+).*/,"$1")*1;

const db = JSON.parse(loadFile("/../src/h1_database.json"));
predictor.setDb(db, 'proton', 'proton');

var spectrum = createSpectraData("/../../../data-test/ethylbenzene/h1_0.jdx");
var cosy = createSpectraData2D("/../../../data-test/ethylbenzene/cosy_0.jdx");

var peakPicking = spectrum.getRanges({
    "nH": nH,
    realTop: true,
    thresholdFactor: 1,
    clean: 0.5,
    compile: true,
    idPrefix: "1H",
    format:"new"
});

var cosyZones = cosy.getZones({thresholdFactor:1.5});
//The input structure should fit the ELN JSON format.

var result = autoassigner({general: {molfile: molecule.toMolfileV3()},
        spectra: {nmr: [{nucleus: "H", experiment: "1d", range: peakPicking, solvent: spectrum.getParamString(".SOLVENT NAME", "unknown")},
                       {nucleus: ["H", "H"],  experiment: "cosy", region: cosyZones, solvent: cosy.getParamString(".SOLVENT NAME", "unknown")}]}},
    {minScore: 0.8, maxSolutions: 3000, errorCS: 1, predictor: predictor, condensed: true, OCLE: OCLE}
);

console.log(result.getAssignments().length);
console.log(result.getAssignments()[0]);
console.log(result.getAssignments()[1]);
result.setAssignmentOnRanges(peakPicking, 0);