import iotbx.pdb
import mmtbx.model
from mmtbx.hydrogens import reduce_hydrogen
from cctbx import crystal

def run():
  pdb_inp = iotbx.pdb.input(file_name="2gim.cif")
  model = mmtbx.model.manager(model_input=pdb_inp)
  keep_selection = model.selection("not (element H or element D or water)")
  model = model.select(keep_selection)
  model_h = reduce_hydrogen.place_hydrogens(
    model                 = model,
    use_neutron_distances = True,
    n_terminal_charge     = "residue_one",
    print_time            = False).get_model()
  p1_hierarchy = model_h.get_hierarchy().expand_to_p1(
    crystal_symmetry = model_h.crystal_symmetry())
  cs = crystal.symmetry(model_h.crystal_symmetry().unit_cell(), "P1")
  p1_hierarchy.write_pdb_file(
    file_name        = "trimmed_H_P1expanded.pdb",
    crystal_symmetry = cs)

if(__name__ == "__main__"):
  run()
