haddocking / pdb-tools

A dependency-free cross-platform swiss army knife for PDB files.
https://haddocking.github.io/pdb-tools/
Apache License 2.0
384 stars 113 forks source link

pdb_selatlloc fails on single locs #90

Closed joaomcteixeira closed 3 years ago

joaomcteixeira commented 3 years ago

When using pdb_selatlloc to select a loc that is unique, for example, select A where there is nothing else than A, pdb_selaltloc fails.

to reproduce:

pdb_fetch 3u7t | pdb_keepcoord | pdb_selatom -CA,C,N,O | pdb_delresname -HOH | pdb_selaltloc -A | pdb_delinsertion | pdb_reatom -1 | pdb_tidy > 3u7tBB.pdb

On the other hand, this works:

pdb_fetch 3u7t | pdb_keepcoord | pdb_selatom -CA,C,N,O | pdb_delresname -HOH | pdb_selaltloc | pdb_delinsertion | pdb_reatom -1 | pdb_tidy > 3u7tBB.pdb

The problem is in these lines:

   ATOM     85  N  ASER A  22     -14.282  -3.023 -15.571  0.53  4.57           N·· 
   ATOM     86  CA ASER A  22     -13.829  -3.816 -14.436  0.53  5.30           C·· 
   ATOM     87  C  ASER A  22     -12.365  -3.540 -14.113  0.53  4.77           C·· 
   ATOM     88  O  ASER A  22     -11.531  -3.326 -15.003  0.53  5.44           O·· 
   ATOM     89  N  BPRO A  23     -14.305  -3.040 -15.563  0.47  5.18           N·· 
   ATOM     90  CA BPRO A  23     -13.801  -3.851 -14.452  0.47  5.29           C·· 
   ATOM     91  C  BPRO A  23     -12.344  -3.583 -14.119  0.47  4.84           C·· 
   ATOM     92  O  BPRO A  23     -11.499  -3.414 -15.007  0.47  5.37           O·· 
JoaoRodrigues commented 3 years ago

To add more info to the report:

(piptest) λ python pdb_fetch.py 3u7t | python pdb_keepcoord.py | python pdb_delresname.py -HOH | python pdb_selaltloc.py -A | python pdb_tidy.py > out.pdb
Traceback (most recent call last):
  File "C:\Users\joaor\Software\pdb-tools\pdbtools\pdb_selaltloc.py", line 205, in <module>
    main()
  File "C:\Users\joaor\Software\pdb-tools\pdbtools\pdb_selaltloc.py", line 184, in main
    for lineno, line in enumerate(new_pdb):
  File "C:\Users\joaor\Software\pdb-tools\pdbtools\pdb_selaltloc.py", line 160, in select_occupancy
    selected = sel_prop(prop_list)
  File "C:\Users\joaor\Software\pdb-tools\pdbtools\pdb_selaltloc.py", line 135, in <lambda>
    sel_prop = lambda d: [ln for ln in d if ln[1] in option_set][0]
IndexError: list index out of range