I am planning on docking a ligand in a cavity with a heme and a constrained oxygen. Whereas I can make params of ligands and non-canonical residues, I cannot for molecular oxygen (OXY). It is not in the database either. Molfile_to_params.py gives the following
$ python molfile_to_params.py oxy.sdf -n OXY Centering ligands at ( 0.000, 0.000, 0.000) Atom names contain duplications -- renaming all atoms. WARNING: structure contains double bonds but no aromatic bonds Aromatic bonds must be identified explicitly -- alternating single/double bonds (Kekule structure) won't cut it. This warning does not apply to you if your molecule really isn't aromatic. Total naive charge -1.520, desired charge 0.000, offsetting all atoms by 0.760 Fragment 1: [' O1 ', ' O2 '] Traceback (most recent call last): File "molfile_to_params.py", line 1323, in <module> sys.exit(main(sys.argv[1:])) File "molfile_to_params.py", line 1295, in main num_frags = fragment_ligand(m) File "molfile_to_params.py", line 535, in fragment_ligand raise ValueError("Fragment %i has %i atoms; merge with another fragment or add virtual atoms to make 3 total" % (frag_id, num_atoms)) ValueError: Fragment 1 has 2 atoms; merge with another fragment or add virtual atoms to make 3 total
The molecular oxygen is from https://pubchem.ncbi.nlm.nih.gov/compound/977#section=3D-Conformer although there is a structure of oxy-myoglobin in the PDB, but the latter has only a single CONECT bonding*.
What is a `virtual atom` that the py-script is requesting?
* I know that molecular oxygen actually resonates between O=O and O.-O. making it blue and paramagnetic. But for now, I am happy with a sloppy double bonded oxygen.
EDIT. I forgot to mention that running `relax` crashes due to the `OXY` so its not handled implicitly. Running the same on a structure with `OXY` removed but with other ligands (`-extra_res_fa HEM.params -extra_res_fa LG.params`) works fine.