# First Zagreb index with JChem or Excel Plugin

User 954f1b2ec2

22-08-2014 07:55:05

Dear all,

A newbie question:

How do I calculate the First Zagreb index (the sum of vertex degrees' squares over all vertices of a molecular graph) for a collection of molecules in JChem or in Excel plugin? In fact, a simple function would be enough, which returns the degree of the i-th atom in a given molecule. Is there a standard API function (calculation) for this?

Regards,

Mike

ChemAxon 5fc3e8d7d0

27-08-2014 13:50:57

Dear Mike,

Yes, there is: Molecule.getLigandCount(MolAtom)
Could you share with us why you would like to calculate the Zagreb index?

BR,
Laszlo

User 954f1b2ec2

02-09-2014 13:33:04

Dear Laszlo,

Thanks a lot for the advice, I'll try.

I used a simple custom code in Excel Addin as a workaround to calculate the second Zagreb Index and the ABC index. I post the code below, if someone's interested. It works rather solwly, but it solved my problem.

I use degree-based indices as a branchieness metric in my regressions for boiling points and chromatography retention indices.

Public Function JCDegree(Mol As Range, Atom As Integer)

n = JCHeavyAtomCount(Mol)

If Atom < n Then

d = 0

For i = 0 To n - 1

l = JCShortestPath(Mol, Atom, i)

If l = 1 Then

d = d + 1

End If

Next

JCDegree = d

Else

JCDegree = 0

End If

End Function

Public Function JCSecondZagreb(Mol As Range)

n = JCHeavyAtomCount(Mol)

JCSecondZagreb = 0

Dim i As Integer

Dim j As Integer

For i = 0 To n - 1

For j = 0 To n - 1

l = JCShortestPath(Mol, i, j)

If l = 1 Then

JCSecondZagreb = JCSecondZagreb + JCDegree(Mol, i) * JCDegree(Mol, j)

End If

Next

Next

End Function

Public Function JCABCIndex(Mol As Range)

n = JCHeavyAtomCount(Mol)

JCABCIndex = 0

Dim i As Integer

Dim j As Integer

For i = 0 To n - 1

For j = 0 To n - 1

l = JCShortestPath(Mol, i, j)

If l = 1 Then

d1 = JCDegree(Mol, i)

d2 = JCDegree(Mol, j)

JCABCIndex = JCABCIndex + Sqr((d1 + d2 - 2) / (d1 * d2))

End If

Next

Next

End Function

User 954f1b2ec2

02-09-2014 15:33:45

Laszlo,

calculated field with code

def d=0

for (atom in Mol.getNative().getAtomIterator()) {

d=d+Mol.getNative().getLigandCount(atom)**2;

}

return d;

works fine in ChemAxon,

Thnx,

Mike