<div dir="ltr">Hi Josh, from a very superficial look, your code to write the RMF files seems fine - do you get an output RMF file? Could you load it in Chimera?</div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Tue, Jul 1, 2014 at 2:40 AM, Josh Bullock <span dir="ltr">&lt;<a href="mailto:jma.bullock@gmail.com" target="_blank">jma.bullock@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr"><div style="font-family:arial,sans-serif;font-size:13px">Hello,</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">I&#39;m relatively new to all this so please let me know if i&#39;m making any obvious errors ...</div>


<div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Essentially all i&#39;m trying to do is generate an ensemble of models made from four subunits - constrained by MS connectivity restraints. The models get scored but nothing seems to write to the pymol file. Ideally i&#39;d like to write to an .rmf but i haven&#39;t worked that one out either ...</div>


<div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Is this a reasonable way to go about my problem ?</div><div style="font-family:arial,sans-serif;font-size:13px">


<br></div><div style="font-family:arial,sans-serif;font-size:13px">Many thanks,</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Josh</div><div style="font-family:arial,sans-serif;font-size:13px">


<br></div><div><div><font face="arial, sans-serif">-------------------------------------------</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">import IMP</font></div>
<div><font face="arial, sans-serif">import IMP.atom</font></div><div><font face="arial, sans-serif">import IMP.rmf</font></div><div><font face="arial, sans-serif">import inspect</font></div><div><font face="arial, sans-serif">import IMP.container</font></div>


<div><font face="arial, sans-serif">import IMP.display</font></div><div><font face="arial, sans-serif">import IMP.statistics</font></div><div><font face="arial, sans-serif">#import IMP.example</font></div>
<div><font face="arial, sans-serif">import sys, math, os, optparse</font></div><div><font face="arial, sans-serif">import RMF</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">from optparse import OptionParser</font></div>


<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"># Convert the arguments into strings and number</font></div><div>
<font face="arial, sans-serif">Firstpdb = str(sys.argv[1])</font></div><div><font face="arial, sans-serif">Secondpdb = str(sys.argv[2])</font></div><div><font face="arial, sans-serif">Thirdpdb = str(sys.argv[3])</font></div>


<div><font face="arial, sans-serif">Fourthpdb = str(sys.argv[4])</font></div><div><font face="arial, sans-serif">models = float(sys.argv[5])</font></div><div><font face="arial, sans-serif"><br></font></div>
<div><font face="arial, sans-serif">#***************************************** </font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"># the spring constant to use, it doesnt really matter</font></div>


<div><font face="arial, sans-serif">k=100</font></div><div><font face="arial, sans-serif"># the target resolution for the representation, this is used to specify how detailed</font></div><div><font face="arial, sans-serif"># the representation used should be</font></div>


<div><font face="arial, sans-serif">resolution=300</font></div><div><font face="arial, sans-serif"># the box to perform everything </font></div><div><font face="arial, sans-serif">bb=IMP.algebra.BoundingBox3D(IMP.algebra.Vector3D(0,0,0),</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â IMP.algebra.Vector3D(300, 300, 300))</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><br>
</font></div><div><font face="arial, sans-serif"># this function creates the molecular hierarchies for the various involved proteins</font></div><div><font face="arial, sans-serif">def create_representation():</font></div>


<div><font face="arial, sans-serif">  Â  m= IMP.Model()</font></div><div><font face="arial, sans-serif">  Â  all=IMP.atom.Hierarchy.setup_particle(IMP.Particle(m))</font></div><div><font face="arial, sans-serif">  Â  all.set_name(&quot;the universe&quot;)</font></div>


<div><font face="arial, sans-serif">  Â  # create a protein, represented as a set of connected balls of appropriate</font></div><div><font face="arial, sans-serif">  Â  # radii and number, chose by the resolution parameter and the number of</font></div>


<div><font face="arial, sans-serif">  Â  # amino acids.</font></div><div><font face="arial, sans-serif">  Â Â </font></div><div><font face="arial, sans-serif">  Â  def create_protein_from_pdbs(name, files):</font></div>
<div><font face="arial, sans-serif">  Â  Â  Â Â </font></div><div><font face="arial, sans-serif">  Â  Â  Â  def create_from_pdb(file):</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  sls=IMP.SetLogState(IMP.NONE)</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  datadir = os.getcwd()</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  print datadir</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span> Â  Â t=IMP.atom.read_pdb( datadir+&#39;/&#39; + file, m,</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â IMP.atom.ATOMPDBSelector())</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  del sls</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  #IMP.atom.show_molecular_hierarchy(t)</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  c=IMP.atom.Chain(IMP.atom.get_by_type(t, IMP.atom.CHAIN_TYPE)[0])</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  if c.get_number_of_children()==0:</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  Â  Â  IMP.atom.show_molecular_hierarchy(t)</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  # there is no reason to use all atoms, just approximate the pdb shape instead</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  s=IMP.atom.create_simplified_along_backbone(c,</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  resolution/300.0)</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  IMP.atom.destroy(t)</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  # make the simplified structure rigid</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  rb=IMP.atom.create_rigid_body(s)</font></div>


<div><font face="arial, sans-serif"># Â  Â  Â  Â  Â  Â rb=IMP.atom.create_rigid_body(c)</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  rb.set_coordinates_are_optimized(True)</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  return s</font></div>


<div><font face="arial, sans-serif"># Â  Â  Â  Â  Â  Â return c Â  Â  Â  Â  Â  Â </font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">  Â  Â  Â  h= create_from_pdb(files[0])</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  h.set_name(name)</font></div><div><font face="arial, sans-serif">  Â  Â  Â  all.add_child(h)</font></div><div><font face="arial, sans-serif"><br></font></div><div>
<font face="arial, sans-serif">  Â  create_protein_from_pdbs(&quot;A&quot;, [Firstpdb])</font></div><div><font face="arial, sans-serif">  Â  create_protein_from_pdbs(&quot;B&quot;, [Secondpdb])</font></div><div>
<font face="arial, sans-serif">  Â  create_protein_from_pdbs(&quot;C&quot;, [Thirdpdb])</font></div><div><font face="arial, sans-serif">  Â  create_protein_from_pdbs(&quot;D&quot;, [Fourthpdb])</font></div><div>
<font face="arial, sans-serif">  Â  #create_protein_from_pdbs(&quot;C&quot;, [&quot;rpt3_imp.pdb&quot;])</font></div><div><font face="arial, sans-serif">  Â  return (m, all)</font></div><div><font face="arial, sans-serif"><br>


</font></div><div><font face="arial, sans-serif"># create the needed restraints and add them to the model</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">def create_restraints(m, all):</font></div>


<div><font face="arial, sans-serif">  Â  def add_connectivity_restraint(s):</font></div><div><font face="arial, sans-serif"> </font></div><div><font face="arial, sans-serif">  Â  Â  Â  tr= IMP.core.TableRefiner()</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  rps=[]</font></div><div><font face="arial, sans-serif">  Â  Â  Â  for sc in s:</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  ps= sc.get_selected_particles() Â  Â  Â  Â  Â Â </font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  rps.append(ps[0])</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  tr.add_particle(ps[0], ps)</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â Â </font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  # duplicate the IMP.atom.create_connectivity_restraint functionality</font></div><div><font face="arial, sans-serif">  Â  Â  Â Â </font></div><div><font face="arial, sans-serif">  Â  Â  Â  score= IMP.core.KClosePairsPairScore(IMP.core.HarmonicSphereDistancePairScore(0,1),tr)</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â Â </font></div><div><font face="arial, sans-serif">  Â  Â  Â  r= IMP.core.MSConnectivityRestraint(m,score)</font></div><div><font face="arial, sans-serif">  Â  Â  Â Â </font></div>
<div><font face="arial, sans-serif">  Â  Â  Â  iA = r.add_type([rps[0]])</font></div><div><font face="arial, sans-serif">  Â  Â  Â  iB = r.add_type([rps[1]])</font></div><div><font face="arial, sans-serif">  Â  Â  Â  iC = r.add_type([rps[2]])</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  iD = r.add_type([rps[3]])</font></div><div><font face="arial, sans-serif">  Â  Â  Â  n1 = r.add_composite([iA, iB, iC, iD])</font></div><div><font face="arial, sans-serif">  Â  Â  Â  n2 = r.add_composite([iA, iB], n1)</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  n3 = r.add_composite([iC, iD], n1)</font></div><div><font face="arial, sans-serif">  Â  Â  Â  n4 = r.add_composite([iB, iC, iD], n1)</font></div><div><font face="arial, sans-serif"><br>


</font></div><div><font face="arial, sans-serif">  Â  Â  Â  m.add_restraint(r)</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">  Â  evr=IMP.atom.create_excluded_volume_restraint([all])</font></div>


<div><font face="arial, sans-serif">  Â  m.add_restraint(evr)</font></div><div><font face="arial, sans-serif">  Â  # a Selection allows for natural specification of what the restraints act on</font></div><div>
<font face="arial, sans-serif">  Â  S= IMP.atom.Selection</font></div><div><font face="arial, sans-serif">  Â  sA=S(hierarchy=all, molecule=&quot;A&quot;)</font></div><div><font face="arial, sans-serif">  Â  sB=S(hierarchy=all, molecule=&quot;B&quot;)</font></div>


<div><font face="arial, sans-serif">  Â  sC=S(hierarchy=all, molecule=&quot;C&quot;)</font></div><div><font face="arial, sans-serif">  Â  sD=S(hierarchy=all, molecule=&quot;D&quot;)</font></div><div><font face="arial, sans-serif">  Â  add_connectivity_restraint([sA, sB, sC, sD])</font></div>


<div><font face="arial, sans-serif">  Â Â </font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"># find acceptable conformations of the model</font></div><div>
<font face="arial, sans-serif">def get_conformations(m):</font></div><div><font face="arial, sans-serif">  Â  sampler= IMP.core.MCCGSampler(m)</font></div><div><font face="arial, sans-serif">  Â  sampler.set_bounding_box(bb)</font></div>


<div><font face="arial, sans-serif">  Â  # magic numbers, experiment with them and make them large enough for things to work</font></div><div><font face="arial, sans-serif">  Â  sampler.set_number_of_conjugate_gradient_steps(100)</font></div>


<div><font face="arial, sans-serif">  Â  sampler.set_number_of_monte_carlo_steps(20)</font></div><div><font face="arial, sans-serif">  Â  sampler.set_number_of_attempts(models)</font></div><div><font face="arial, sans-serif">  Â  # We don&#39;t care to see the output from the sampler</font></div>


<div><font face="arial, sans-serif">  Â  sampler.set_log_level(IMP.SILENT)</font></div><div><font face="arial, sans-serif">  Â  # return the IMP.ConfigurationSet storing all the found configurations that</font></div>
<div><font face="arial, sans-serif">  Â  # meet the various restraint maximum scores.</font></div><div><font face="arial, sans-serif">  Â  cs= sampler.create_sample()</font></div><div><font face="arial, sans-serif">  Â  return cs</font></div>


<div><font face="arial, sans-serif">  Â Â </font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"># cluster the conformations and write them to a file</font></div>
<div><font face="arial, sans-serif">def analyze_conformations(cs, all, gs):</font></div><div><font face="arial, sans-serif">  Â  # we want to cluster the configurations to make them easier to understand</font></div>
<div><font face="arial, sans-serif">  Â  # in the case, the clustering is pretty meaningless</font></div><div><font face="arial, sans-serif">  Â  embed= IMP.statistics.ConfigurationSetXYZEmbedding(cs,</font></div>
<div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  Â  Â  Â IMP.container.ListSingletonContainer(IMP.atom.get_leaves(all)), True)</font></div><div><font face="arial, sans-serif">  Â  cluster= IMP.statistics.create_lloyds_kmeans(embed, 10, 10000)</font></div>


<div><font face="arial, sans-serif">  Â  # dump each cluster center to a file so it can be viewed.</font></div><div><font face="arial, sans-serif">  Â  for i in range(cluster.get_number_of_clusters()):</font></div>
<div><font face="arial, sans-serif">  Â  Â  Â  center= cluster.get_cluster_center(i)</font></div><div><font face="arial, sans-serif">  Â  Â  Â  cs.load_configuration(i)</font></div><div><font face="arial, sans-serif">  Â  Â  Â  w= IMP.display.PymolWriter(&quot;cluster.%d.pym&quot;%i)</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  for g in gs:</font></div><div><font face="arial, sans-serif">  Â  Â  Â  Â  Â  w.add_geometry(g)</font></div><div><font face="arial, sans-serif"><br></font></div><div>
<font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">#******************************************************************************************</font></div><div><font face="arial, sans-serif"># now do the actual work</font></div>


<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">(m,all)= create_representation()</font></div><div><font face="arial, sans-serif">IMP.atom.show_molecular_hierarchy(all)</font></div>


<div><font face="arial, sans-serif">create_restraints(m, all)</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"># in order to display the results, we need something that maps the particles onto</font></div>


<div><font face="arial, sans-serif"># geometric objets. The IMP.display.Geometry objects do this mapping.</font></div><div><font face="arial, sans-serif"># IMP.display.XYZRGeometry map an IMP.core.XYZR particle onto a sphere</font></div>


<div><font face="arial, sans-serif">gs=[]</font></div><div><font face="arial, sans-serif">for i in range(all.get_number_of_children()):</font></div><div><font face="arial, sans-serif">  Â  color= IMP.display.get_display_color(i)</font></div>


<div><font face="arial, sans-serif">  Â  n= all.get_child(i)</font></div><div><font face="arial, sans-serif">  Â  name= n.get_name()</font></div><div><font face="arial, sans-serif">  Â  g= IMP.atom.HierarchyGeometry(n)</font></div>


<div><font face="arial, sans-serif">  Â  g.set_color(color)</font></div><div><font face="arial, sans-serif">  Â  gs.append(g)</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">cs= get_conformations(m)</font></div>


<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">print &quot;found&quot;, cs.get_number_of_configurations(), &quot;solutions&quot;</font></div><div><font face="arial, sans-serif"><br>


</font></div><div><font face="arial, sans-serif">ListScores = []</font></div><div><font face="arial, sans-serif">for i in range(0, cs.get_number_of_configurations()):</font></div><div><font face="arial, sans-serif">  Â  Â  Â  cs.load_configuration(i)</font></div>


<div><font face="arial, sans-serif">  Â  Â  Â  # print the configuration</font></div><div><font face="arial, sans-serif">  Â  Â  Â  print &quot;solution number: &quot;,i,&quot;scored :&quot;, m.evaluate(False)</font></div>
<div><font face="arial, sans-serif">  Â  Â  Â  ListScores.append(m.evaluate(False))</font></div><div><font face="arial, sans-serif">  Â  Â  Â Â </font></div><div><font face="arial, sans-serif">f1 = open(&quot;out_scores.csv&quot;, &quot;w&quot;)</font></div>


<div><font face="arial, sans-serif">f1.write(&quot;\n&quot;.join(map(lambda x: str(x), ListScores)))</font></div><div><font face="arial, sans-serif">f1.close()</font></div><div><font face="arial, sans-serif"><br>
</font></div><div><font face="arial, sans-serif"># for each of the configuration, dump it to a file to view in pymol</font></div><div><font face="arial, sans-serif">for i in range(0, cs.get_number_of_configurations()):</font></div>


<div><font face="arial, sans-serif">  Â  JOSH = cs.load_configuration(i)</font></div><div><font face="arial, sans-serif">  Â  S= IMP.atom.Selection</font></div><div><font face="arial, sans-serif">  Â  h= IMP.atom.Hierarchy.get_children(cs)</font></div>


<div><font face="arial, sans-serif">  Â  tfn = IMP.create_temporary_file_name(&quot;josh%d&quot;%i, &quot;.rmf&quot;)</font></div><div><font face="arial, sans-serif">  Â  rh = RMF.create_rmf_file(tfn)</font></div>
<div><font face="arial, sans-serif">  Â </font></div><div><font face="arial, sans-serif">  Â  # add the hierarchy to the file</font></div><div><font face="arial, sans-serif">  Â  IMP.rmf.add_hierarchies(rh, h)</font></div>
<div><font face="arial, sans-serif">  Â Â </font></div><div><font face="arial, sans-serif">  Â  # add the current configuration to the file as frame 0</font></div><div><font face="arial, sans-serif">  Â  IMP.rmf.save_frame(rh)</font></div>


<div><font face="arial, sans-serif">  Â Â </font></div><div><font face="arial, sans-serif">  Â  for g in gs:</font></div><div><font face="arial, sans-serif">  Â  Â  Â  w.add_geometry(g)</font></div><div>
<font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">analyze_conformations(cs, all, gs)</font></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div></div></div>
<br>_______________________________________________<br>
IMP-users mailing list<br>
<a href="mailto:IMP-users@salilab.org">IMP-users@salilab.org</a><br>
<a href="https://salilab.org/mailman/listinfo/imp-users" target="_blank">https://salilab.org/mailman/listinfo/imp-users</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Barak
</div>