Oh yes, I am not familiar with the pymol options yet. So, couldn't figure
that out.
Thanks anyways for the quick help.
Cheers,
Subha
On Wed, Oct 12, 2016 at 2:02 PM, Tsjerk Wassenaar <tsje...@gmail.com> wrote:
> Hi Subha,
>
> Sorry, my bad. It should've been object='pseudo' and not name='pseudo'.
> Should've tested it first.
>
> Cheers,
>
> Tsjerk
>
> On Wed, Oct 12, 2016 at 9:56 PM, Subha K <subhal...@gmail.com> wrote:
>
>> 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.
>>>
>>>
>>
>
>
> --
> 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