{"id":5634,"date":"2020-04-07T16:02:22","date_gmt":"2020-04-07T15:02:22","guid":{"rendered":"https:\/\/www.blopig.com\/blog\/?p=5634"},"modified":"2020-04-24T18:18:52","modified_gmt":"2020-04-24T17:18:52","slug":"gemmi-a-python-cookbook","status":"publish","type":"post","link":"https:\/\/www.blopig.com\/blog\/2020\/04\/gemmi-a-python-cookbook\/","title":{"rendered":"GEMMI: A Python Cookbook"},"content":{"rendered":"\n<p><strong>Ge<\/strong>neral <strong>M<\/strong>acro<strong>M<\/strong>ocelecular <strong>I<\/strong>\/<strong>O<\/strong>, or GEMMI, is a C++ 11 header only library for low level crystalographic .<\/p>\n\n\n\n<p>Because its header only it is certainly the easiest to access and use low level crystalographic C++ library, however GEMMI comes with python binding via Pybind11, making it arguably the easiest low level crystalographic library to access and use in python as well!<\/p>\n\n\n\n<p>What follows is a cookbook of useful Python code that uses GEMMI to accomplish macromolecular crystalographic tasks.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Installation<\/strong><\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install gemmi<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Importing GEMMI<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import gemmi<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Loading models<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">structure: gemmmi.Structure = gemmi.read_pdb(pdb_path)  # PDB file\nstructure: gemmmi.Structure = gemmi.cif.read(cif_path)  # mmCIF file<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Loading reflection data<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mtz = gemmi.read_mtz_file('..\/tests\/5e5z.mtz')<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Loading crystalographic maps<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">xmap = gemmi.read_ccp4_map(xmap_path)<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Write models<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">structure.write_pdb(path)  # Write to a pdb\nstructure.make_mmcif_document().write_file(path)  # Write to a mmCIF<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Write reflections<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mtz.write_to_file(path)<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Write crystalographic maps<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ccp4 = gemmi.Ccp4Map()\nccp4.grid = xmap\nccp4.update_ccp4_header(2, True)\nccp4.write_ccp4_map(path)<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Transforming reflection data to grids<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">xmap = mtz.transform_f_phi_to_map(\"FWT\", \"PHWT\", sample_rate=4)<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Subsampling grids (single point)<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">position = gemmi.Position((2, 3, 4))\ngrid.interpolate_value(position)  <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Subsampling grids (orhtogonal grid of points)<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">arr = numpy.zeros([32, 32, 32], dtype=numpy.float32)\ntr = gemmi.Transform()\ntr.mat.fromlist([[0.1, 0, 0], [0, 0.1, 0], [0, 0, 0.1]])\ntr.vec.fromlist([1, 2, 3])\ngrid.interpolate_values(arr, tr)\n<\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>General MacroMocelecular I\/O, or GEMMI, is a C++ 11 header only library for low level crystalographic . Because its header only it is certainly the easiest to access and use low level crystalographic C++ library, however GEMMI comes with python binding via Pybind11, making it arguably the easiest low level crystalographic library to access and [&hellip;]<\/p>\n","protected":false},"author":56,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","wikipediapreview_detectlinks":true,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[226,29,227,265],"tags":[307,308,306,304,309,305,152],"ppma_author":[497],"class_list":["post-5634","post","type-post","status-publish","format-standard","hentry","category-cpp","category-code","category-python-code","category-x-ray-crystallography","tag-c11","tag-cookbook","tag-crystalography","tag-gemmi","tag-guide","tag-macromolecular_crystalography","tag-python"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"authors":[{"term_id":497,"user_id":56,"is_guest":0,"slug":"conor","display_name":"Conor Wild","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/aae97a248f2eacf487f0938ce418327373299c8222379446dc7bde572e63271d?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/5634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/users\/56"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/comments?post=5634"}],"version-history":[{"count":2,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/5634\/revisions"}],"predecessor-version":[{"id":5665,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/5634\/revisions\/5665"}],"wp:attachment":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/media?parent=5634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/categories?post=5634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/tags?post=5634"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=5634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}