schrodinger / pymol-open-source

Open-source foundation of the user-sponsored PyMOL molecular visualization system.
https://pymol.org/
Other
1.15k stars 275 forks source link

Doubt about selection algebra #275

Closed pslacerda closed 1 year ago

pslacerda commented 1 year ago

Dear Pymol developers, the 3AVZ structure contains a peptide which we cannot select. We tried "bymolecule chain B and resi 1" however it keeps expanding for the hole protein plus peptide. It is a non standard one with ATOMs and HEATMs. What can we do to select only the peptide?

Valdes-Tresanco-MS commented 1 year ago

I think it would be like this to select the residue: select single_res, chain B and resi 1 and like this to select the whole chain: select chain_B, bychain chain B and resi 1 or select chain_B, chain B

pslacerda commented 1 year ago

It would be, but we need something that also works for other 700 structures.

Some peptides are assigned the same chain as the protein, so it wouldn't work.

Em ter., 31 de jan. de 2023 17:20, Mario Sergio Valdés Tresanco < @.***> escreveu:

I think it would be like this to select the residue: select single_res, chain B and resi 1 and like this to select the whole chain: select chain_B, bychain chain B and resi 1

— Reply to this email directly, view it on GitHub https://github.com/schrodinger/pymol-open-source/issues/275#issuecomment-1411011086, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABEO3UTND6HFDHGEK6LQ43WVFXZZANCNFSM6AAAAAAUM3CWSU . You are receiving this because you authored the thread.Message ID: @.***>

Valdes-Tresanco-MS commented 1 year ago

I don't think there is a command that allows selecting a peptide in the same chain as the protein through entity expansion. An option could be an iteration from the selected residue:


from pymol import cmd

# create the selection with at least one residue
cmd.select("bbb", "resi 301")

# Exapand the selection
for x in range(cmd.count_atoms()):
    cmd.select("bbb", "byres bound_to bbb")
    if cmd.count_atoms() == cmd.count_atoms("bbb"):
        break

This will allow you to select the peptide only. However, in some cases, it may fail, for example in the posted PDB. For some reason, PyMOL interprets that the residue A/CYS145 is bound to B/HSV6 (distance B/HSV6/C and A/CYS145/SG = 2.2 A). HTH!

pslacerda commented 1 year ago

There is, bymolecule works just fine for most cases.

Em ter., 31 de jan. de 2023 20:21, Mario Sergio Valdés Tresanco < @.***> escreveu:

I don't think there is a command that allows selecting a peptide in the same chain as the protein through entity expansion. An option could be an iteration from the selected residue:

from pymol import cmd

create the selection with at least one residuecmd.select("bbb", "resi 301")

Exapand the selectionfor x in range(cmd.count_atoms()):

cmd.select("bbb", "byres bound_to bbb")
if cmd.count_atoms() == cmd.count_atoms("bbb"):
    break

This will allow you to select the peptide only. However, in some cases, it may fail, for example in the posted PDB. For some reason, PyMOL interprets that the residue A/CYS145 is bound to B/HSV6 (distance B/HSV6/C and A/CYS145/SG = 2.2 A). HTH!

— Reply to this email directly, view it on GitHub https://github.com/schrodinger/pymol-open-source/issues/275#issuecomment-1411209347, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABEO3SY6UUQYBKGVG7HN43WVGNBDANCNFSM6AAAAAAUM3CWSU . You are receiving this because you authored the thread.Message ID: @.***>

pslacerda commented 1 year ago

I'll check the distances and let you know. Anyway, any idea how the www.pdb.org interpret them as different molecules?

Em ter., 31 de jan. de 2023 21:23, Pedro Lacerda @.***> escreveu:

There is, bymolecule works just fine for most cases.

Em ter., 31 de jan. de 2023 20:21, Mario Sergio Valdés Tresanco < @.***> escreveu:

I don't think there is a command that allows selecting a peptide in the same chain as the protein through entity expansion. An option could be an iteration from the selected residue:

from pymol import cmd

create the selection with at least one residuecmd.select("bbb", "resi 301")

Exapand the selectionfor x in range(cmd.count_atoms()):

cmd.select("bbb", "byres bound_to bbb")
if cmd.count_atoms() == cmd.count_atoms("bbb"):
    break

This will allow you to select the peptide only. However, in some cases, it may fail, for example in the posted PDB. For some reason, PyMOL interprets that the residue A/CYS145 is bound to B/HSV6 (distance B/HSV6/C and A/CYS145/SG = 2.2 A). HTH!

— Reply to this email directly, view it on GitHub https://github.com/schrodinger/pymol-open-source/issues/275#issuecomment-1411209347, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABEO3SY6UUQYBKGVG7HN43WVGNBDANCNFSM6AAAAAAUM3CWSU . You are receiving this because you authored the thread.Message ID: @.***>

pslacerda commented 1 year ago

I didn't understand your code and also don't know what bbb means.

Valdes-Tresanco-MS commented 1 year ago

Reviewing the documentation, I believe the code is a rudimentary version of bymolecule. "bbb" is a random name for the selection. I think the problem here is that pymol is interpreting the atoms I mentioned above as bonded.

pslacerda commented 1 year ago

Yes, C and S seems to bond in the 1.81~2.55 Å range. This render bymolecule identification harderas you observed 2.2 Å between B/HSV6/C and A/CYS145/SG.

As we here identified this single case so far (3AVZ) from 700, we'll do it manually.

Em ter., 31 de jan. de 2023 22:19, Mario Sergio Valdés Tresanco < @.***> escreveu:

Reviewing the documentation, I believe the code is a rudimentary version of bymolecule. "bbb" is a random name for the selection. I think the problem here is that pymol is interpreting the atoms I mentioned above as bonded.

— Reply to this email directly, view it on GitHub https://github.com/schrodinger/pymol-open-source/issues/275#issuecomment-1411308482, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABEO3SETBLNYDNHDMFIGQ3WVG23PANCNFSM6AAAAAAUM3CWSU . You are receiving this because you authored the thread.Message ID: @.***>

speleo3 commented 1 year ago

There are two ways to avoid the distance-based bonding: 1) Use set connect_mode, 4 https://pymolwiki.org/index.php/connect_mode 2) Load mmtf instead of cif files, e.g. fetch 3AVZ, type=mmtf

pslacerda commented 1 year ago

I tried all connect_modes (including 1, that was supposedto respect the CONNECT records on the PDB file) but only load mmtf worked.