Temporary fix for visualisation (Michelanglo)

The XChem team has been working hard to allow uploading of SDF files and proper integration into Fragalysis, their fragment analysis site.
In the meanwhile, I have been throwing together interactive views in Michelanglo, which is a site that allows biochemists to make a page with an interactive 3D protein (using NGL like Fragalysis) and a user written narrative about the protein with links that alter its orientation and representations —so not really ideal for this.
Here is an example:

I have added the code to make the totally-off-specs interactive pages with tables to the client-side Python API code, just in case it helps:

Here is code specific for MPro with a XChem-ready SDF file. A few things to note:
  • “Basic” users cannot do this to prevent client side exploits. Only approved users can (message me and I’ll approve you).

  • the data needs to be stored on GitHub for retrieval: it gets split into mol files (getting a user to download 20 MB on a webpage is not okay, especially as 50% of users are on mobile devices).

  • A JSON table is made and automatically placed in the same folder

  • template.pdb or whatever your column name has (see below) has to be in the same folder (manually placed).

  • inspiration hits need to be manually placed in the same folder

  • Under T&Cs the content is your responsibility, so if the data is not yours explicitly pass blame/credit to the author.

    from michelanglo_api import MikeAPI, MikePage
    mike = MikeAPI('username','password') # use your username and password
    assert mike.verify_user()['rank'] != 'basic', 'Only privileged users can add JS'

Make a page via the GUI and copy the uuid part of the URL (the gibberish part).

  page = MikePage(mike, 'uuid').retrieve()

Alternatively make one via python (less pretty, especially since the autoView does not change view angle)

  page = mike.convert_pdb('6LU7').retrieve()

Then, with appropriate changes run:

  folder = 'folder_name_within_repo'
  page.description = 'Hello world. '
  page.loadfun = ''
  page.columns_viewport = 6
  page.columns_text = 6

                 skip_first=True) # first row is metadata in a SDF for XChem
                 keys=('∆∆G', 'comRMSD', 'N_constrained_atoms', 'runtime', 'disregarded', 'smiles'),
                 key_defaults=(999., 999., 0, 999., 'NA', 'NA'), #what to set stuff that is null
                   protein_sele='145:A', # show this on protein. NGL selection
                   sort_col=2, #sort by column index 2.
                   sort_dir='asc', #asc or desc
                   template_row=-1, # is the template a file called `template.pdb` (-1) or a filename in the row n?
                   fragment_row=1, # the inspiration fragments (-1 for none). The names must match with or without a .mol.
  # if in a Jupyter notebook

The files with need to be Git-pushed first.

1 Like