> generally if I integrate a pymol silent script inside my > bash script, I do not need to use cmd.* syntax, right?
Correct. The -d argument takes PyMOL commands, like a .pml script. Python syntax is optional. Python syntax (cmd.*) is necessary and most useful if you write a Python script (.py extension) and run that with PyMOL. You could write your multi-chains loop as a Python script: ################ example.py ########## from pymol import cmd pdb = "my.pdb" chains_arrays = ["A", "B", "C", "D", "E", "F", "G"] for chain in chains_array: cmd.load(pdb) cmd.alter('chain ' + chain, 'chain=""') cmd.save('output_' + chain + '.pdb') cmd.delete('*') ###################################### Then run it with PyMOL: pymol -ckqr example.py See also: https://pymolwiki.org/index.php/Launching_From_a_Script https://pymolwiki.org/index.php/Python_Integration Cheers, Thomas > On Jun 25, 2019, at 3:08 PM, James Starlight <jmsstarli...@gmail.com> wrote: > > one extra programming question: > > imagine now in my pdb I have severals chain which I would like to > rename to blank chain. > > I can do it simply like this > # a case for 3 chains to be renamed > > #!/bin/bash > pdb="my.pdb" > output=$(pwd) > pymol -c -d " > cmd.load('${pdb}') > cmd.alter('(chain A)', 'chain=\"\"') > cmd.alter('(chain B)', 'chain=\"\"') > cmd.alter('(chain C)', 'chain=\"\"') > cmd.save('${output}/output.pdb','all') > " > > or for multi-chain protein I can alternatively create external loop, > thus running pymol 3 times iteratively (which is not good realization) > providin array info from external shell session > > # this example save 7 different pdbs renaming one chain in each of them > #!/bin/bash > pdb="my.pdb" > output=$(pwd) > chains_arrays=( A B C D E F G ) > > for i in "$chains_array[@]}"; do > pymol -c -d " > cmd.load('${pdb}') > cmd.alter('(chain $i)', 'chain=\"\"') > cmd.save('${output}/output_$i.pdb','all') > " > done > > would it be possible rather to make an array and loop inside the pymol > to rename all chains into the blank chain during one execution of > pymol? > > Thanks in advance! > > вт, 25 июн. 2019 г. в 14:50, James Starlight <jmsstarli...@gmail.com>: >> >> I have got the idea! >> thank you so much Thomas! >> One question: generally if I integrate a pymol silent script inside my >> bash script, I do not need to use cmd.* syntax, right? In what cases >> cmd.* sytax might be usefull? >> >> Thank you again! >> >> вт, 25 июн. 2019 г. в 12:05, Thomas Holder <thomas.hol...@schrodinger.com>: >>> >>> >>>> On Jun 25, 2019, at 11:48 AM, James Starlight <jmsstarli...@gmail.com> >>>> wrote: >>>> >>>> so what I need is just to update my pymol, keep using the same command? >>> >>> Yes >>> >>>> P.S.would the following integration of the code into bash script be >>>> usefull to remove chains in no gui mode? >>>> >>>> pymol -cQkd " >>>> from pymol import cmd >>>> fetch $pdb, type=pdb, tmp >>>> cmd.alter('(chain A)',chain='') >>>> " >>>> I am not sure whether I used here cmd.alter in correct way .. >>> >>> >>> With fetch, use "async=0" or use Python syntax. And keyword arguments >>> (type=) must be after positional arguments (tmp). >>> >>> It's easier if you don't use Python syntax for alter, otherwise you'll need >>> three levels of nested quotes, which gets ugly: >>> >>> pymol -cQkd " >>> fetch $pdb, tmp, type=pdb, async=0 >>> alter (chain A), chain='' >>> " >>> >>> With Python syntax (note the ugly escaping of quotes): >>> >>> pymol -cQkd " >>> cmd.fetch('$pdb', 'tmp', type='pdb') >>> cmd.alter('(chain A)', 'chain=\"\"') >>> " >>> >>> Cheers, >>> Thomas >>> >>> -- >>> Thomas Holder >>> PyMOL Principal Developer >>> Schrödinger, Inc. >>> -- Thomas Holder PyMOL Principal Developer Schrödinger, Inc. _______________________________________________ PyMOL-users mailing list Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net Unsubscribe: https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe