On 15May2017 13:29, qasimp...@gmail.com <qasimp...@gmail.com> wrote:
I need to get the center of mass (COM) of each half of the ligand shown in the figure (https://i.stack.imgur.com/dtdul.png). I get the main COM all the ligand, lets say it is close to C1 atom. In addition to the main COM of all the ligand, I need to find the COM of each half of the ligand. The atoms of the first part/half according to the main COM of the ligand are C2, C7, C8 and C9. As for the second part they are C3, C4, C5 and C6 atoms. The question is how can I divide the ligand in two parts according to the main COM and calculate the COM of each divided part (except for the atom closest to the main COM, C1)? By the way I have multiple ligands. The code should be user firendly.

Leaving aside that you are using numpy arrays, if sources like you need to partition an existing array into 2 parts around the dividing element (C1).

Figure out how to find the position of C1 in the array. If your atoms are unique in the sense that C1 != C2 even if they are both carbon atoms) you could use the .index method of a list (hoping numpy array support that). But otherwise, loop over the array until you find the element C1 and return the index. Write a short function for this purpose, eg (incomplete):

 def find_atom(atom, atoms):
   for i, a  in enumerate(atoms):
     if a is the target atom "atom":
       return i
   raise IndexError("no such atom")

Then all you need to do is:

 - figure out _which_ atom is your "C1"
 - locate it in the main array of atoms
 - extract the left and half subarrays

For the last part, remember that to get a sublist you can write L[a:b] to get all the elements of L from a up to but excluding b. And that omitting "a" implies index 0 and omitting "b" implies len(L).

The homework suggestion that the "code should be user firendly" I would take to imply that the last step should itself be a function, eg:

 def partition_atoms(atom, atoms):

which takes your target atom (C1) and the original array, calls find_atom to locate C1, and returns the left and right sublists.

Cheers,
Cameron Simpson <c...@zip.com.au>
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to