Source code for moreaubroto

# -*- coding: utf-8 -*-
#  Copyright (c) 2016-2017, Zhijiang Yao, Jie Dong and Dongsheng Cao
#  All rights reserved.
#  This file is part of the PyBioMed.
#  The contents are covered by the terms of the BSD license
#  which is included in the file license.txt, found at the root
#  of the PyBioMed source tree.
"""
##############################################################################

The calculation of Moreau-Broto autocorrelation descriptors. You can get 32

molecular decriptors. You can freely use and distribute it. If you hava  

any problem, you could contact with us timely!

Authors: Zhijiang Yao and Dongsheng Cao.

Date: 2016.06.04

Email: gadsby@163.com and oriental-cds@163.com

##############################################################################
"""


from rdkit import Chem
from AtomProperty import GetRelativeAtomicProperty

import numpy


Version=1.0
################################################################

def _CalculateMoreauBrotoAutocorrelation(mol,lag=1,propertylabel='m'):
    """
    #################################################################
    **Internal used only**
    
    Calculation of Moreau-Broto autocorrelation descriptors based on 
    
    different property weights.
    
    Usage:
    
    res=_CalculateMoreauBrotoAutocorrelation(mol, lag=1,propertylabel='m')
    
    Input: mol is a molecule object.
    
    lag is the topological distance between atom i and atom j.
    
    propertylabel is the weighted property.
    
    Output: res is a numeric value.
    #################################################################
    """

    Natom=mol.GetNumAtoms()
    
    GetDistanceMatrix=Chem.GetDistanceMatrix(mol)
    res=0.0
    for i in range(Natom):
        for j in range(Natom):  
            if GetDistanceMatrix[i,j]==lag:
                atom1=mol.GetAtomWithIdx(i)
                atom2=mol.GetAtomWithIdx(j)
                temp1=GetRelativeAtomicProperty(element=atom1.GetSymbol(),propertyname=propertylabel)
                temp2=GetRelativeAtomicProperty(element=atom2.GetSymbol(),propertyname=propertylabel)
                res=res+temp1*temp2
            else:
                res=res+0.0
                
    return round(numpy.log(res/2+1),3)


[docs]def CalculateMoreauBrotoAutoMass(mol): """ ################################################################# Calculation of Moreau-Broto autocorrelation descriptors based on carbon-scaled atomic mass. Usage: res=CalculateMoreauBrotoAutoMass(mol) Input: mol is a molecule object. Output: res is a dict form containing eight moreau broto autocorrealtion descriptors. ################################################################# """ res={} for i in range(8): res['ATSm'+str(i+1)]=_CalculateMoreauBrotoAutocorrelation(mol,lag=i+1,propertylabel='m') return res
[docs]def CalculateMoreauBrotoAutoVolume(mol): """ ################################################################# Calculation of Moreau-Broto autocorrelation descriptors based on carbon-scaled atomic van der Waals volume. Usage: res=CalculateMoreauBrotoAutoVolume(mol) Input: mol is a molcule object. Output: res is a dict form containing eight moreau broto autocorrealtion descriptors. ################################################################# """ res={} for i in range(8): res['ATSv'+str(i+1)]=_CalculateMoreauBrotoAutocorrelation(mol,lag=i+1,propertylabel='V') return res
[docs]def CalculateMoreauBrotoAutoElectronegativity(mol): """ ################################################################# Calculation of Moreau-Broto autocorrelation descriptors based on carbon-scaled atomic Sanderson electronegativity. Usage: res=CalculateMoreauBrotoAutoElectronegativity(mol) Input: mol is a molcule object. Output: res is a dict form containing eight moreau broto autocorrealtion descriptors. ################################################################# """ res={} for i in range(8): res['ATSe'+str(i+1)]=_CalculateMoreauBrotoAutocorrelation(mol,lag=i+1,propertylabel='En') return res
[docs]def CalculateMoreauBrotoAutoPolarizability(mol): """ ################################################################# Calculation of Moreau-Broto autocorrelation descriptors based on carbon-scaled atomic polarizability. res=CalculateMoreauBrotoAutoPolarizability(mol) Input: mol is a molcule object. Output: res is a dict form containing eight moreau broto autocorrealtion descriptors. ################################################################# """ res={} for i in range(8): res['ATSp'+str(i+1)]=_CalculateMoreauBrotoAutocorrelation(mol,lag=i+1,propertylabel='alapha') return res
[docs]def GetMoreauBrotoAuto(mol): """ ################################################################# Calcualate all Moreau-Broto autocorrelation descriptors. (carbon-scaled atomic mass, carbon-scaled atomic van der Waals volume, carbon-scaled atomic Sanderson electronegativity, carbon-scaled atomic polarizability) Usage: res=GetMoreauBrotoAuto(mol) Input: mol is a molecule object. Output: res is a dict form containing all moreau broto autocorrelation descriptors. ################################################################# """ res={} res.update(CalculateMoreauBrotoAutoMass(mol)) res.update(CalculateMoreauBrotoAutoVolume(mol)) res.update(CalculateMoreauBrotoAutoElectronegativity(mol)) res.update(CalculateMoreauBrotoAutoPolarizability(mol)) return res
########################################################################### if __name__=='__main__': smi5=['COCCCC','CCC(C)CC','CC(C)CCC','CC(C)C(C)C','CCOCCN','c1ccccc1N'] smis = ['CCCC','CCCCC','CCCCCC','CC(N)C(=O)O','CC(N)C(=O)[O-].[Na+]'] for index, smi in enumerate(smis): m = Chem.MolFromSmiles(smi) print index+1 print smi ## print '\t',CalculateEstateFingerprint(m) ## print '\t',CalculateEstateValue(m) ## print '\t',CalculateMaxAtomTypeEState(m) ## print '\t', CalculateMinAtomTypeEState(m) print len(GetMoreauBrotoAuto(m))