Skip to content

unusable in NPM #1

@omaraltayyan

Description

@omaraltayyan

the whole goal of making an NPM package is to use it in bundlers like webpack, the code published on NPM doesn't support this, can we modify the prot param file to accept bundling in npm?

this is the content of protparam.js that support ES6 modules

// A part of the code below fetched from https://github.com/biopython/biopython

let protein_weights = {
    "A": 89.0932,
    "C": 121.1582,
    "D": 133.1027,
    "E": 147.1293,
    "F": 165.1891,
    "G": 75.0666,
    "H": 155.1546,
    "I": 131.1729,
    "K": 146.1876,
    "L": 131.1729,
    "M": 149.2113,
    "N": 132.1179,
    "O": 255.3134,
    "P": 115.1305,
    "Q": 146.1445,
    "R": 174.201,
    "S": 105.0926,
    "T": 119.1192,
    "U": 168.0532,
    "V": 117.1463,
    "W": 204.2252,
    "Y": 181.1885
}

let monoisotopic_protein_weights = {
    "A": 89.047678,
    "C": 121.019749,
    "D": 133.037508,
    "E": 147.053158,
    "F": 165.078979,
    "G": 75.032028,
    "H": 155.069477,
    "I": 131.094629,
    "K": 146.105528,
    "L": 131.094629,
    "M": 149.051049,
    "N": 132.053492,
    "O": 255.158292,
    "P": 115.063329,
    "Q": 146.069142,
    "R": 174.111676,
    "S": 105.042593,
    "T": 119.058243,
    "U": 168.964203,
    "V": 117.078979,
    "W": 204.089878,
    "Y": 181.073893
}


// Copyright 2003 Yair Benita.  All rights reserved.
// This file is part of the Biopython distribution and governed by your
// choice of the "Biopython License Agreement" or the "BSD 3-Clause License".
// Please see the LICENSE file that should have been included as part of this
// package.
// Indices to be used with ProtParam.


// Kyte & Doolittle index of hydrophobicity
// J. Mol. Biol. 157:105-132(1982).
let kd = {
    'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5,
    'Q': -3.5, 'E': -3.5, 'G': -0.4, 'H': -3.2, 'I': 4.5,
    'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6,
    'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, 'V': 4.2
}

// Flexibility
// Normalized flexibility parameters (B-values), average
// Vihinen M., Torkkila E., Riikonen P. Proteins. 19(2):141-9(1994).
let Flex = {
    'A': 0.984, 'C': 0.906, 'E': 1.094, 'D': 1.068,
    'G': 1.031, 'F': 0.915, 'I': 0.927, 'H': 0.950,
    'K': 1.102, 'M': 0.952, 'L': 0.935, 'N': 1.048,
    'Q': 1.037, 'P': 1.049, 'S': 1.046, 'R': 1.008,
    'T': 0.997, 'W': 0.904, 'V': 0.931, 'Y': 0.929
}

// Hydrophilicity
// 1 Hopp & Wood
// Proc. Natl. Acad. Sci. U.S.A. 78:3824-3828(1981).
let hw = {
    'A': -0.5, 'R': 3.0, 'N': 0.2, 'D': 3.0, 'C': -1.0,
    'Q': 0.2, 'E': 3.0, 'G': 0.0, 'H': -0.5, 'I': -1.8,
    'L': -1.8, 'K': 3.0, 'M': -1.3, 'F': -2.5, 'P': 0.0,
    'S': 0.3, 'T': -0.4, 'W': -3.4, 'Y': -2.3, 'V': -1.5
}

// Surface accessibility
// Vergoten G & Theophanides T, Biomolecular Structure and Dynamics,
// pg.138 (1997).
// 1 Emini Surface fractional probability
let em = {
    'A': 0.815, 'R': 1.475, 'N': 1.296, 'D': 1.283, 'C': 0.394,
    'Q': 1.348, 'E': 1.445, 'G': 0.714, 'H': 1.180, 'I': 0.603,
    'L': 0.603, 'K': 1.545, 'M': 0.714, 'F': 0.695, 'P': 1.236,
    'S': 1.115, 'T': 1.184, 'W': 0.808, 'Y': 1.089, 'V': 0.606
}

// 2 Janin Interior to surface transfer energy scale
let ja = {
    'A': 0.28, 'R': -1.14, 'N': -0.55, 'D': -0.52, 'C': 0.97,
    'Q': -0.69, 'E': -1.01, 'G': 0.43, 'H': -0.31, 'I': 0.60,
    'L': 0.60, 'K': -1.62, 'M': 0.43, 'F': 0.46, 'P': -0.42,
    'S': -0.19, 'T': -0.32, 'W': 0.29, 'Y': -0.15, 'V': 0.60
}


// A two dimensional dictionary for calculating the instability index.
// Guruprasad K., Reddy B.V.B., Pandit M.W. Protein Engineering 4:155-161(1990).
// It is based on dipeptide values; therefore, the value for the dipeptide DG
// is DIWV['D']['G'].
let DIWV = {
    'A': {
        'A': 1.0, 'C': 44.94, 'E': 1.0, 'D': -7.49,
        'G': 1.0, 'F': 1.0, 'I': 1.0, 'H': -7.49,
        'K': 1.0, 'M': 1.0, 'L': 1.0, 'N': 1.0,
        'Q': 1.0, 'P': 20.26, 'S': 1.0, 'R': 1.0,
        'T': 1.0, 'W': 1.0, 'V': 1.0, 'Y': 1.0
    },
    'C': {
        'A': 1.0, 'C': 1.0, 'E': 1.0, 'D': 20.26,
        'G': 1.0, 'F': 1.0, 'I': 1.0, 'H': 33.60,
        'K': 1.0, 'M': 33.60, 'L': 20.26, 'N': 1.0,
        'Q': -6.54, 'P': 20.26, 'S': 1.0, 'R': 1.0,
        'T': 33.60, 'W': 24.68, 'V': -6.54, 'Y': 1.0
    },
    'E': {
        'A': 1.0, 'C': 44.94, 'E': 33.60, 'D': 20.26,
        'G': 1.0, 'F': 1.0, 'I': 20.26, 'H': -6.54,
        'K': 1.0, 'M': 1.0, 'L': 1.0, 'N': 1.0,
        'Q': 20.26, 'P': 20.26, 'S': 20.26, 'R': 1.0,
        'T': 1.0, 'W': -14.03, 'V': 1.0, 'Y': 1.0
    },
    'D': {
        'A': 1.0, 'C': 1.0, 'E': 1.0, 'D': 1.0,
        'G': 1.0, 'F': -6.54, 'I': 1.0, 'H': 1.0,
        'K': -7.49, 'M': 1.0, 'L': 1.0, 'N': 1.0,
        'Q': 1.0, 'P': 1.0, 'S': 20.26, 'R': -6.54,
        'T': -14.03, 'W': 1.0, 'V': 1.0, 'Y': 1.0
    },
    'G': {
        'A': -7.49, 'C': 1.0, 'E': -6.54, 'D': 1.0,
        'G': 13.34, 'F': 1.0, 'I': -7.49, 'H': 1.0,
        'K': -7.49, 'M': 1.0, 'L': 1.0, 'N': -7.49,
        'Q': 1.0, 'P': 1.0, 'S': 1.0, 'R': 1.0,
        'T': -7.49, 'W': 13.34, 'V': 1.0, 'Y': -7.49
    },
    'F': {
        'A': 1.0, 'C': 1.0, 'E': 1.0, 'D': 13.34,
        'G': 1.0, 'F': 1.0, 'I': 1.0, 'H': 1.0,
        'K': -14.03, 'M': 1.0, 'L': 1.0, 'N': 1.0,
        'Q': 1.0, 'P': 20.26, 'S': 1.0, 'R': 1.0,
        'T': 1.0, 'W': 1.0, 'V': 1.0, 'Y': 33.601
    },
    'I': {
        'A': 1.0, 'C': 1.0, 'E': 44.94, 'D': 1.0,
        'G': 1.0, 'F': 1.0, 'I': 1.0, 'H': 13.34,
        'K': -7.49, 'M': 1.0, 'L': 20.26, 'N': 1.0,
        'Q': 1.0, 'P': -1.88, 'S': 1.0, 'R': 1.0,
        'T': 1.0, 'W': 1.0, 'V': -7.49, 'Y': 1.0
    },
    'H': {
        'A': 1.0, 'C': 1.0, 'E': 1.0, 'D': 1.0,
        'G': -9.37, 'F': -9.37, 'I': 44.94, 'H': 1.0,
        'K': 24.68, 'M': 1.0, 'L': 1.0, 'N': 24.68,
        'Q': 1.0, 'P': -1.88, 'S': 1.0, 'R': 1.0,
        'T': -6.54, 'W': -1.88, 'V': 1.0, 'Y': 44.94
    },
    'K': {
        'A': 1.0, 'C': 1.0, 'E': 1.0, 'D': 1.0,
        'G': -7.49, 'F': 1.0, 'I': -7.49, 'H': 1.0,
        'K': 1.0, 'M': 33.60, 'L': -7.49, 'N': 1.0,
        'Q': 24.64, 'P': -6.54, 'S': 1.0, 'R': 33.60,
        'T': 1.0, 'W': 1.0, 'V': -7.49, 'Y': 1.0
    },
    'M': {
        'A': 13.34, 'C': 1.0, 'E': 1.0, 'D': 1.0,
        'G': 1.0, 'F': 1.0, 'I': 1.0, 'H': 58.28,
        'K': 1.0, 'M': -1.88, 'L': 1.0, 'N': 1.0,
        'Q': -6.54, 'P': 44.94, 'S': 44.94, 'R': -6.54,
        'T': -1.88, 'W': 1.0, 'V': 1.0, 'Y': 24.68
    },
    'L': {
        'A': 1.0, 'C': 1.0, 'E': 1.0, 'D': 1.0,
        'G': 1.0, 'F': 1.0, 'I': 1.0, 'H': 1.0,
        'K': -7.49, 'M': 1.0, 'L': 1.0, 'N': 1.0,
        'Q': 33.60, 'P': 20.26, 'S': 1.0, 'R': 20.26,
        'T': 1.0, 'W': 24.68, 'V': 1.0, 'Y': 1.0
    },
    'N': {
        'A': 1.0, 'C': -1.88, 'E': 1.0, 'D': 1.0,
        'G': -14.03, 'F': -14.03, 'I': 44.94, 'H': 1.0,
        'K': 24.68, 'M': 1.0, 'L': 1.0, 'N': 1.0,
        'Q': -6.54, 'P': -1.88, 'S': 1.0, 'R': 1.0,
        'T': -7.49, 'W': -9.37, 'V': 1.0, 'Y': 1.0
    },
    'Q': {
        'A': 1.0, 'C': -6.54, 'E': 20.26, 'D': 20.26,
        'G': 1.0, 'F': -6.54, 'I': 1.0, 'H': 1.0,
        'K': 1.0, 'M': 1.0, 'L': 1.0, 'N': 1.0,
        'Q': 20.26, 'P': 20.26, 'S': 44.94, 'R': 1.0,
        'T': 1.0, 'W': 1.0, 'V': -6.54, 'Y': -6.54
    },
    'P': {
        'A': 20.26, 'C': -6.54, 'E': 18.38, 'D': -6.54,
        'G': 1.0, 'F': 20.26, 'I': 1.0, 'H': 1.0,
        'K': 1.0, 'M': -6.54, 'L': 1.0, 'N': 1.0,
        'Q': 20.26, 'P': 20.26, 'S': 20.26, 'R': -6.54,
        'T': 1.0, 'W': -1.88, 'V': 20.26, 'Y': 1.0
    },
    'S': {
        'A': 1.0, 'C': 33.60, 'E': 20.26, 'D': 1.0,
        'G': 1.0, 'F': 1.0, 'I': 1.0, 'H': 1.0,
        'K': 1.0, 'M': 1.0, 'L': 1.0, 'N': 1.0,
        'Q': 20.26, 'P': 44.94, 'S': 20.26, 'R': 20.26,
        'T': 1.0, 'W': 1.0, 'V': 1.0, 'Y': 1.0
    },
    'R': {
        'A': 1.0, 'C': 1.0, 'E': 1.0, 'D': 1.0,
        'G': -7.49, 'F': 1.0, 'I': 1.0, 'H': 20.26,
        'K': 1.0, 'M': 1.0, 'L': 1.0, 'N': 13.34,
        'Q': 20.26, 'P': 20.26, 'S': 44.94, 'R': 58.28,
        'T': 1.0, 'W': 58.28, 'V': 1.0, 'Y': -6.54
    },
    'T': {
        'A': 1.0, 'C': 1.0, 'E': 20.26, 'D': 1.0,
        'G': -7.49, 'F': 13.34, 'I': 1.0, 'H': 1.0,
        'K': 1.0, 'M': 1.0, 'L': 1.0, 'N': -14.03,
        'Q': -6.54, 'P': 1.0, 'S': 1.0, 'R': 1.0,
        'T': 1.0, 'W': -14.03, 'V': 1.0, 'Y': 1.0
    },
    'W': {
        'A': -14.03, 'C': 1.0, 'E': 1.0, 'D': 1.0,
        'G': -9.37, 'F': 1.0, 'I': 1.0, 'H': 24.68,
        'K': 1.0, 'M': 24.68, 'L': 13.34, 'N': 13.34,
        'Q': 1.0, 'P': 1.0, 'S': 1.0, 'R': 1.0,
        'T': -14.03, 'W': 1.0, 'V': -7.49, 'Y': 1.0
    },
    'V': {
        'A': 1.0, 'C': 1.0, 'E': 1.0, 'D': -14.03,
        'G': -7.49, 'F': 1.0, 'I': 1.0, 'H': 1.0,
        'K': -1.88, 'M': 1.0, 'L': 1.0, 'N': 1.0,
        'Q': 1.0, 'P': 20.26, 'S': 1.0, 'R': 1.0,
        'T': -7.49, 'W': 1.0, 'V': 1.0, 'Y': -6.54
    },
    'Y': {
        'A': 24.68, 'C': 1.0, 'E': -6.54, 'D': 24.68,
        'G': -7.49, 'F': 1.0, 'I': 1.0, 'H': 13.34,
        'K': 1.0, 'M': 44.94, 'L': 1.0, 'N': 1.0,
        'Q': 1.0, 'P': 13.34, 'S': 1.0, 'R': -15.91,
        'T': -7.49, 'W': -9.37, 'V': 1.0, 'Y': 13.34
    },
}

let protein_letters = "ACDEFGHIKLMNPQRSTVWY"

let sum = function (arr) {
    return arr.reduce(function (prev, current, i, arr) {
        return prev + current;
    });
};

export default class ProtParam {
    constructor(protein, id = '', description = '') {
        this.protein = protein.toUpperCase();
        this.amino_acids = Array.from(this.protein)
        this.id = id
        this.description = description
    }

    count_amino_acids() {
        let count_dict = {}
        for (let i in this.protein) {
            let aa = this.protein[i]
            if (count_dict[aa]) {
                count_dict[aa] += 1
            } else {
                count_dict[aa] = 1
            }
        }
        for (let i in protein_letters) {
            let aa = protein_letters[i]
            if (!count_dict[aa]) {
                count_dict[aa] = 0
            }
        }
        return count_dict
    }

    get_amino_acids_percent() {
        let count_dict = this.count_amino_acids()
        for (let aa in count_dict) {
            if (this.protein.length !== 0) {
                count_dict[aa] = count_dict[aa] / this.protein.length
            }
        }
        return count_dict
    }

    molecular_weight(circular = false, monoisotopic = false) {
        if (this.protein.length === 0) {
            return null
        }
        // circular: Is the molecule circular (has no ends)?
        // monoisotopic: Use the monoisotopic mass tables?
        if (monoisotopic) {
            let water = 18.010565
            let weight_table = monoisotopic_protein_weights
        } else {
            let water = 18.0153
            let weight_table = protein_weights
        }
        let weight = sum(this.amino_acids.map(function (aa) {
            return weight_table[aa];
        }))
        weight -= (this.protein.length - 1) * water
        if (circular) {
            weight -= water
        }
        return weight
    }

    gravy() {
        if (this.protein.length === 0) {
            return null
        }
        let total_gravy = sum(this.kd_hydrophobicity())
        return total_gravy / this.protein.length
    }

    absorbance() {
        if (this.protein.length === 0) {
            return null
        }
        // Tyr Y , Thr T, Trp W, Cys C
        let ext_Y = 1490
        let ext_W = 5500
        let ext_C = 125
        let count_dict = this.count_amino_acids()
        let extinction_coefficients = count_dict["Y"] * ext_Y + count_dict["W"] * ext_W + count_dict["C"] * ext_C
        return extinction_coefficients / this.molecular_weight()
    }

    instability_index() {
        if (this.protein.length === 0) {
            return null
        }
        let score = 0.0
        for (let i in this.amino_acids) {
            i = parseInt(i)
            if (i >= this.protein.length - 1) {
                return (10.0 / this.protein.length) * score
            }
            let this_aa = this.protein[i]
            let next_aa = this.protein[i + 1]
            let dipeptide_value = DIWV[this_aa][next_aa]
            score += dipeptide_value
        }
    }

    kd_hydrophobicity() {
        return this.amino_acids.map(function (aa) {
            return kd[aa]
        })
    }

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions