Thanks David and Tsjerk for the kind reply and suggestion.

I Figured a solution by combining both of your suggestions

def center(selection, com=True):

    model = cmd.get_model(selection)

    xyz = np.array(model.get_coord_list())

    mass = [i.get_mass() for i in model.atom]

    xyz_m = xyz * np.array([mass]).T

    if com:

        return tuple(np.sum(xyz_m, 0)/model.get_mass())

    else:

        return tuple(np.average(xyz, 0))


with open("./out") as f:

    for line in f:

        in_pdb_file = line.strip()

        print in_pdb_file

        cmd.load(in_pdb_file, 'tmp')

        COM = center('resn UNK')

        cmd.pseudoatom('ligCOM', pos=COM)

        cmd.save(in_pdb_file[:-4] + "_dummy.pdb", "all")

        cmd.delete('ligCOM')

        cmd.delete('tmp')


@Tsjerk: Don't know why I got an error: Selector-Error: Invalid selection
name "pseudo".
pseudo<--

Thanks again for the support.

Best Regards,
Subha





On Wed, Oct 12, 2016 at 12:53 PM, Tsjerk Wassenaar <tsje...@gmail.com>
wrote:

>
> Hi Subha,
>
> Probably this will get close:
>
> for pdb in open('./out').readlines():
>     pdb = pdb.strip()
>     cmd.load(pdb,'tmp')
>     cmd.pseudoatom('tmp',name='pseudo')
>     cmd.save(pdb[:-4]+'-pseudo.pdb','pseudo')
>     cmd.delete('tmp')
>     cmd.delete('pseudo')
>
> ... Just a bit too much for a oneliner ;)
>
> Hope it helps,
>
> Tsjerk
>
>
> On Wed, Oct 12, 2016 at 8:16 PM, Subha K <subhal...@gmail.com> wrote:
>
>> Hi There,
>>
>> I am looking to automate the calculation of centre of mass and placing a
>> pseudo atom on the COM and save it as a pdb file . Going through the forum [
>> https://sourceforge.net/p/pymol/mailman/message/34458943/] , I found
>> some useful scripts for this, but, I am having trouble getting it done for
>> all files in a directory. My script does what I need for the first file
>> alone. Some looping or other is not correct. Or there could be an easy and
>> better way to do it. I couldn't figure that out.  So, could some one please
>> help me solve this?
>>
>> I have 100 files F01, F02, F100 ... in the directory dockout. I would
>> like to calculate the COM and place a pseudo atom on the COM and save it as
>> a pdb for all the 100 files.
>> 'out' in the script corresponds to the list of all the 100 files.
>>
>> import pymol
>>
>> from pymol import cmd
>>
>> pymol.finish_launching()
>>
>> import numpy as np
>>
>> import glob
>>
>> import fileinput
>>
>> def center(selection, com=True):
>>
>>     model = cmd.get_model(selection)
>>
>>     xyz = np.array(model.get_coord_list())
>>
>>     mass = [i.get_mass() for i in model.atom]
>>
>>     xyz_m = xyz * np.array([mass]).T
>>
>>     if com:
>>
>>         return tuple(np.sum(xyz_m, 0)/model.get_mass())
>>
>>     else:
>>
>>         return tuple(np.average(xyz, 0))
>>
>>
>> def GetListOfFiles (filename):
>>
>>     l = []
>>
>>     for line in fileinput.input( filename ):
>>
>>         tokens = line.split( )
>>
>>         l.append(tokens)
>>
>>     return l
>>
>>
>> def Calculate_COM (list):
>>
>>     for i in range (len(list)):
>>
>>         print list[i][0]
>>
>>         X=1
>>
>>         if (X<101):
>>
>>             os.system("cp ./dockout/F"+ str(X).zfill(2)+ " ./lig.pdb")
>>
>>             for pdb in glob.glob("lig.pdb"):
>>
>>                 cmd.load(pdb)
>>
>>                 COM = center('resn UNK')
>>
>>                 cmd.pseudoatom('ligCOM', pos=COM)
>>
>>                 cmd.save("complex_dummy.pdb", "all")
>>
>>                 os.system("mv complex_dummy.pdb complex_" + str(X).zfill(
>> 2) + "_dummy.pdb")
>>
>>                 os.system("rm lig.pdb")
>>
>>                 X=X+1
>>
>>         else:
>>
>>             break
>>
>> listofFiles = GetListOfFiles ("./out")
>>
>> print listofFiles
>>
>> Calculate_COM(listofFiles)
>>
>>
>>
>> Thanks,
>> Subha
>>
>>
>> ------------------------------------------------------------
>> ------------------
>> Check out the vibrant tech community on one of the world's most
>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
>> _______________________________________________
>> PyMOL-users mailing list (PyMOL-users@lists.sourceforge.net)
>> Info Page: https://lists.sourceforge.net/lists/listinfo/pymol-users
>> Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
>>
>
>
>
> --
> Tsjerk A. Wassenaar, Ph.D.
>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
PyMOL-users mailing list (PyMOL-users@lists.sourceforge.net)
Info Page: https://lists.sourceforge.net/lists/listinfo/pymol-users
Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net

Reply via email to