ccsb-scripps / AutoDock-Vina

AutoDock Vina
http://vina.scripps.edu
Apache License 2.0
596 stars 209 forks source link

How to set vina score to dock complex with metals? #243

Open Dadiao-shuai opened 1 year ago

Dadiao-shuai commented 1 year ago

I heard that there is some sf than can be used in metal ions(Mg,Se,Zn...) docking in AutoDock Vina, But I couldn't find it in manual. Is there anything to do with v = Vina(sf_name='vina')?

diogomart commented 1 year ago

The vina scoring function, which is the default (e.g., v = Vina()), handles metals. There's zinc specific potentials but that is for the autodock4 scoring function.

Kerro-junior commented 1 year ago

Though the default scoring function can deal with metals, the protein.pdb cannot be converted into pdbqt file if they have Zn,Mg...

for example, _1ew9pocket.pdb consists of Zn and Mg, and the Error is like:

/ADFRsuite_x86_64Linux_1.0/bin/prepare_receptor -r 1ew9_pocket.pdb -A hydrogens -o 1ew9_pocket.pdbqt
'  ' apparently composed of not std residues. Deleting 
Traceback (most recent call last):
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/Utilities24/prepare_receptor4.py", line 216, in <module>
    dict=dictionary)    
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/MoleculePreparation.py", line 558, in __init__
    version=version, delete_single_nonstd_residues=delete_single_nonstd_residues)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/MoleculePreparation.py", line 124, in __init__
    self.repairMol(mol, self.repair_type_list)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/MoleculePreparation.py", line 174, in repairMol
    self.newHs = self.addHydrogens(mol)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/MoleculePreparation.py", line 187, in addHydrogens
    HB.addHydrogens(mol)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/MolKit/hydrogenBuilder.py", line 61, in addHydrogens
    babel.assignHybridization(mol.allAtoms)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/PyBabel/atomTypes.py", line 136, in assignHybridization
    self.valence_three()
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/PyBabel/atomTypes.py", line 236, in valence_three
    elif self.count_free_ox(a) >= 2: a.babel_type="Cac"
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/PyBabel/atomTypes.py", line 167, in count_free_ox
    self.count_heavy_atoms(bonded_atom) == 1:
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/PyBabel/atomTypes.py", line 157, in count_heavy_atoms
    if bonded_atom.babel_type[0] == 'H': count = count + 1
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/MolKit/molecule.py", line 409, in __getattr__
    raise AttributeError('member %s not found'%member)
AttributeError: member babel_type not found
Dadiao-shuai commented 1 year ago

Though the default scoring function can deal with metals, the protein.pdb cannot be converted into pdbqt file if they have Zn,Mg...

for example, _1ew9pocket.pdb consists of Zn and Mg, and the Error is like:

/ADFRsuite_x86_64Linux_1.0/bin/prepare_receptor -r 1ew9_pocket.pdb -A hydrogens -o 1ew9_pocket.pdbqt
'  ' apparently composed of not std residues. Deleting 
Traceback (most recent call last):
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/Utilities24/prepare_receptor4.py", line 216, in <module>
    dict=dictionary)    
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/MoleculePreparation.py", line 558, in __init__
    version=version, delete_single_nonstd_residues=delete_single_nonstd_residues)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/MoleculePreparation.py", line 124, in __init__
    self.repairMol(mol, self.repair_type_list)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/MoleculePreparation.py", line 174, in repairMol
    self.newHs = self.addHydrogens(mol)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/AutoDockTools/MoleculePreparation.py", line 187, in addHydrogens
    HB.addHydrogens(mol)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/MolKit/hydrogenBuilder.py", line 61, in addHydrogens
    babel.assignHybridization(mol.allAtoms)
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/PyBabel/atomTypes.py", line 136, in assignHybridization
    self.valence_three()
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/PyBabel/atomTypes.py", line 236, in valence_three
    elif self.count_free_ox(a) >= 2: a.babel_type="Cac"
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/PyBabel/atomTypes.py", line 167, in count_free_ox
    self.count_heavy_atoms(bonded_atom) == 1:
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/PyBabel/atomTypes.py", line 157, in count_heavy_atoms
    if bonded_atom.babel_type[0] == 'H': count = count + 1
  File "/data2/rjli/ADFRsuite-1.0/ADFRsuite_x86_64Linux_1.0/CCSBpckgs/MolKit/molecule.py", line 409, in __getattr__
    raise AttributeError('member %s not found'%member)
AttributeError: member babel_type not found

If so, how can we use vina to dock protein with metals? We even cannot get their pdbqt files!

RJ-Li commented 1 year ago

@diogomart Dear developer, I met the same questions. When there is metal ions such as Mg, the ADFR can't convert it into pdbqt file. So it is impossible to use vina to dock complex with metal.

rwxayheee commented 1 year ago

Hi @Kerro-junior and @Dadiao-shuai, You should be able to get passed the issue if you are not adding hydrogens in prepare_receptor. I am not entirely sure how hydrogens are added, but the coordinate covalent bonds in your system may cause issues in a lot of modeling programs that were initially developed for standard, metal-free proteins. How to model metalloproteins is more of a scientific problem than just a technical problem.

As a walkaround, please see an example here: https://github.com/ccsb-scripps/AutoDock-Vina/issues/241#issuecomment-1734266302 If you think your problem is structure-specific, it would be really helpful if you could share your files so others can reproduce the error.

Edits: One possible issue you might encounter with the unprocessed PDB 1EW9 is overlapping Zn and Mg. You will have to either remove Mg or Zn to be able to get a valid structure and generate a PDBQT file for it.

1ew9H_A_with_Mg.pdb.txt 1ew9H_A.pdbqt.txt