Re: [IMP-users] Sampling and writing to pym/rmf
Conceptually I do ( i think ... ) but not practically. I'm hoping to view each of the models i created - with MSrestraints - separately as an .rmf in chimera, just so i can see what i'm making !
so i have created my models using:
cs= get_conformations(m)
do i have to assign each model to a particle before i can write it to an .rmf ? Or is each model already a particle with hierarchy ?
-------------------------------------------
for i in range(0, cs.get_number_of_configurations()): cs.load_configuration(i) h = IMP.atom.Hierarchy(m) # <------- how do i call the hierarchy of the current loaded configuration ? c = p.get_children(h) tfn = IMP.create_temporary_file_name("josh%d"%i, ".rmf") rh = RMF.create_rmf_file(tfn)
# add the hierarchy to the file IMP.rmf.add_hierarchies(rh, h)
# add the current configuration to the file as frame 0 IMP.rmf.save_frame(rh)
On 2 July 2014 23:03, imp-users-request@salilab.org wrote:
> Send IMP-users mailing list submissions to > imp-users@salilab.org > > To subscribe or unsubscribe via the World Wide Web, visit > https://salilab.org/mailman/listinfo/imp-users > or, via email, send a message with subject or body 'help' to > imp-users-request@salilab.org > > You can reach the person managing the list at > imp-users-owner@salilab.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of IMP-users digest..." > > > Today's Topics: > > 1. Re: Sampling and writing to pym/rmf (Barak Raveh) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Wed, 2 Jul 2014 15:03:19 -0700 > From: Barak Raveh barak.raveh@gmail.com > To: Help and discussion for users of IMP imp-users@salilab.org > Subject: Re: [IMP-users] Sampling and writing to pym/rmf > Message-ID: > <CAHp+_UqO8rXRMsUSndbg-c0jyDxnswDe9aFKvW889gGMU= > 4MMQ@mail.gmail.com> > Content-Type: text/plain; charset="utf-8" > > * I meant > > h = IMP.atom.Hierarchy(p) > c = p.get_children(h) > > this assumes that particle p was already decorated as Hierarchy (let me > know if you are not familiar with decorators, Hierarchy, or Particle). > > > > On Wed, Jul 2, 2014 at 3:02 PM, Barak Raveh barak.raveh@gmail.com wrote: > > > Hi Josh, > > > > I think get_children() is only a member function of Hierarchy, so you > > should do something like > > > > IMP.atom.Hierarchy(p) > > c = p.get_children() > > > > 'cs' seems to be a ConfigurationSet object - are you sure that you expect > > it to have children? > > > > What do you want to do? > > > > Cheers, > > Barak > > > > On Wed, Jul 2, 2014 at 1:42 PM, Josh Bullock jma.bullock@gmail.com > > wrote: > > > >> ah sorry ! this line gives me the error > >> > >> h= IMP.atom.Hierarchy.get_children(cs) > >> > >> thanks > >> > >> josh > >> > >> On 2 July 2014 17:45, imp-users-request@salilab.org wrote: > >> > >>> Send IMP-users mailing list submissions to > >>> imp-users@salilab.org > >>> > >>> To subscribe or unsubscribe via the World Wide Web, visit > >>> https://salilab.org/mailman/listinfo/imp-users > >>> or, via email, send a message with subject or body 'help' to > >>> imp-users-request@salilab.org > >>> > >>> You can reach the person managing the list at > >>> imp-users-owner@salilab.org > >>> > >>> When replying, please edit your Subject line so it is more specific > >>> than "Re: Contents of IMP-users digest..." > >>> > >>> > >>> Today's Topics: > >>> > >>> 1. Re: Sampling and writing to pym/rmf (Barak Raveh) (Barak Raveh) > >>> > >>> > >>> ---------------------------------------------------------------------- > >>> > >>> Message: 1 > >>> Date: Wed, 2 Jul 2014 09:45:30 -0700 > >>> From: Barak Raveh barak.raveh@gmail.com > >>> To: Help and discussion for users of IMP imp-users@salilab.org > >>> Subject: Re: [IMP-users] Sampling and writing to pym/rmf (Barak Raveh) > >>> Message-ID: > >>> <CAHp+_Uo19VasJDJYi+2CoUUu= > >>> u_6duKCraVetU4dW45+oDhTAw@mail.gmail.com> > >>> Content-Type: text/plain; charset="utf-8" > >>> > >>> Which lines throws the error? > >>> > >>> > >>> On Wed, Jul 2, 2014 at 4:56 AM, Josh Bullock jma.bullock@gmail.com > >>> wrote: > >>> > >>> > Hi Barek, > >>> > > >>> > So I'm not giving hierarchy.get_children the correct input: > >>> > > >>> > TypeError: unbound method get_children() must be called with > Hierarchy > >>> > instance as first argument (got ConfigurationSet instance instead) > >>> > > >>> > I'm not sure which argument is the hierarchy instance. > >>> > > >>> > Thanks, > >>> > > >>> > Josh > >>> > > >>> > ------------------------------------------------- > >>> > > >>> > cs= get_conformations(m) > >>> > >>> > > >>> > for i in range(0, cs.get_number_of_configurations()): > >>> > JOSH = cs.load_configuration(i) > >>> > S= IMP.atom.Selection > >>> > h= IMP.atom.Hierarchy.get_children(cs) > >>> > tfn = IMP.create_temporary_file_name("josh%d"%i, ".rmf") > >>> > rh = RMF.create_rmf_file(tfn) > >>> > > >>> > On 1 July 2014 17:31, imp-users-request@salilab.org wrote: > >>> > > >>> >> Send IMP-users mailing list submissions to > >>> >> imp-users@salilab.org > >>> >> > >>> >> To subscribe or unsubscribe via the World Wide Web, visit > >>> >> https://salilab.org/mailman/listinfo/imp-users > >>> >> or, via email, send a message with subject or body 'help' to > >>> >> imp-users-request@salilab.org > >>> >> > >>> >> You can reach the person managing the list at > >>> >> imp-users-owner@salilab.org > >>> >> > >>> >> When replying, please edit your Subject line so it is more specific > >>> >> than "Re: Contents of IMP-users digest..." > >>> >> > >>> >> > >>> >> Today's Topics: > >>> >> > >>> >> 1. Re: Sampling and writing to pym/rmf (Barak Raveh) > >>> >> > >>> >> > >>> >> > ---------------------------------------------------------------------- > >>> >> > >>> >> Message: 1 > >>> >> Date: Tue, 1 Jul 2014 09:31:33 -0700 > >>> >> From: Barak Raveh barak.raveh@gmail.com > >>> >> To: Help and discussion for users of IMP imp-users@salilab.org > >>> >> Subject: Re: [IMP-users] Sampling and writing to pym/rmf > >>> >> Message-ID: > >>> >> <CAHp+_UowiBwJozbwOfi8yFEVt7Z8o2tEZ= > >>> >> LvYPnJh-LjpC2cSA@mail.gmail.com> > >>> >> Content-Type: text/plain; charset="utf-8" > >>> > >>> >> > >>> >> 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? > >>> >> > >>> >> > >>> >> On Tue, Jul 1, 2014 at 2:40 AM, Josh Bullock <jma.bullock@gmail.com > > > >>> >> wrote: > >>> >> > >>> >> > Hello, > >>> >> > > >>> >> > I'm relatively new to all this so please let me know if i'm making > >>> any > >>> >> > obvious errors ... > >>> >> > > >>> >> > Essentially all i'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'd > >>> >> like > >>> >> > to write to an .rmf but i haven't worked that one out either ... > >>> >> > > >>> >> > Is this a reasonable way to go about my problem ? > >>> >> > > >>> >> > Many thanks, > >>> >> > > >>> >> > Josh > >>> >> > > >>> >> > ------------------------------------------- > >>> >> > > >>> >> > import IMP > >>> >> > import IMP.atom > >>> >> > import IMP.rmf > >>> >> > import inspect > >>> >> > import IMP.container > >>> >> > import IMP.display > >>> >> > import IMP.statistics > >>> >> > #import IMP.example > >>> >> > import sys, math, os, optparse > >>> >> > import RMF > >>> >> > > >>> >> > from optparse import OptionParser > >>> >> > > >>> >> > > >>> >> > # Convert the arguments into strings and number > >>> >> > Firstpdb = str(sys.argv[1]) > >>> >> > Secondpdb = str(sys.argv[2]) > >>> >> > Thirdpdb = str(sys.argv[3]) > >>> >> > Fourthpdb = str(sys.argv[4]) > >>> >> > models = float(sys.argv[5]) > >>> >> > > >>> >> > #***************************************** > >>> >> > > >>> >> > # the spring constant to use, it doesnt really matter > >>> >> > k=100 > >>> >> > # the target resolution for the representation, this is used to > >>> specify > >>> >> > how detailed > >>> >> > # the representation used should be > >>> >> > resolution=300 > >>> >> > # the box to perform everything > >>> >> > bb=IMP.algebra.BoundingBox3D(IMP.algebra.Vector3D(0,0,0), > >>> >> > IMP.algebra.Vector3D(300, 300, 300)) > >>> >> > > >>> >> > > >>> >> > # this function creates the molecular hierarchies for the various > >>> >> involved > >>> >> > proteins > >>> >> > def create_representation(): > >>> >> > m= IMP.Model() > >>> >> > all=IMP.atom.Hierarchy.setup_particle(IMP.Particle(m)) > >>> >> > all.set_name("the universe") > >>> >> > # create a protein, represented as a set of connected balls of > >>> >> > appropriate > >>> >> > # radii and number, chose by the resolution parameter and the > >>> >> number of > >>> >> > # amino acids. > >>> >> > > >>> >> > def create_protein_from_pdbs(name, files): > >>> >> > > >>> >> > def create_from_pdb(file): > >>> >> > sls=IMP.SetLogState(IMP.NONE) > >>> >> > datadir = os.getcwd() > >>> >> > print datadir > >>> >> > t=IMP.atom.read_pdb( datadir+'/' + file, m, > >>> >> > IMP.atom.ATOMPDBSelector()) > >>> >> > del sls > >>> >> > #IMP.atom.show_molecular_hierarchy(t) > >>> >> > c=IMP.atom.Chain(IMP.atom.get_by_type(t, > >>> >> > IMP.atom.CHAIN_TYPE)[0]) > >>> >> > if c.get_number_of_children()==0: > >>> >> > IMP.atom.show_molecular_hierarchy(t) > >>> >> > # there is no reason to use all atoms, just > approximate > >>> the > >>> >> > pdb shape instead > >>> >> > s=IMP.atom.create_simplified_along_backbone(c, > >>> >> > > >>> >> resolution/300.0) > >>> >> > IMP.atom.destroy(t) > >>> >> > # make the simplified structure rigid > >>> >> > rb=IMP.atom.create_rigid_body(s) > >>> >> > # rb=IMP.atom.create_rigid_body(c) > >>> >> > rb.set_coordinates_are_optimized(True) > >>> >> > return s > >>> >> > # return c > >>> >> > > >>> >> > h= create_from_pdb(files[0]) > >>> >> > h.set_name(name) > >>> >> > all.add_child(h) > >>> >> > > >>> >> > create_protein_from_pdbs("A", [Firstpdb]) > >>> >> > create_protein_from_pdbs("B", [Secondpdb]) > >>> >> > create_protein_from_pdbs("C", [Thirdpdb]) > >>> >> > create_protein_from_pdbs("D", [Fourthpdb]) > >>> >> > #create_protein_from_pdbs("C", ["rpt3_imp.pdb"]) > >>> >> > return (m, all) > >>> >> > > >>> >> > # create the needed restraints and add them to the model > >>> >> > > >>> >> > def create_restraints(m, all): > >>> >> > def add_connectivity_restraint(s): > >>> >> > > >>> >> > tr= IMP.core.TableRefiner() > >>> >> > rps=[] > >>> >> > for sc in s: > >>> >> > ps= sc.get_selected_particles() > >>> >> > rps.append(ps[0]) > >>> >> > tr.add_particle(ps[0], ps) > >>> >> > > >>> >> > # duplicate the IMP.atom.create_connectivity_restraint > >>> >> > functionality > >>> >> > > >>> >> > score= > >>> >> > > >>> >> > >>> > IMP.core.KClosePairsPairScore(IMP.core.HarmonicSphereDistancePairScore(0,1),tr) > >>> >> > > >>> >> > r= IMP.core.MSConnectivityRestraint(m,score) > >>> >> > > >>> >> > iA = r.add_type([rps[0]]) > >>> >> > iB = r.add_type([rps[1]]) > >>> >> > iC = r.add_type([rps[2]]) > >>> >> > iD = r.add_type([rps[3]]) > >>> >> > n1 = r.add_composite([iA, iB, iC, iD]) > >>> >> > n2 = r.add_composite([iA, iB], n1) > >>> >> > n3 = r.add_composite([iC, iD], n1) > >>> >> > n4 = r.add_composite([iB, iC, iD], n1) > >>> >> > > >>> >> > m.add_restraint(r) > >>> >> > > >>> >> > evr=IMP.atom.create_excluded_volume_restraint([all]) > >>> >> > m.add_restraint(evr) > >>> >> > # a Selection allows for natural specification of what the > >>> >> restraints > >>> >> > act on > >>> >> > S= IMP.atom.Selection > >>> >> > sA=S(hierarchy=all, molecule="A") > >>> >> > sB=S(hierarchy=all, molecule="B") > >>> >> > sC=S(hierarchy=all, molecule="C") > >>> >> > sD=S(hierarchy=all, molecule="D") > >>> >> > add_connectivity_restraint([sA, sB, sC, sD]) > >>> >> > > >>> >> > > >>> >> > # find acceptable conformations of the model > >>> >> > def get_conformations(m): > >>> >> > sampler= IMP.core.MCCGSampler(m) > >>> >> > sampler.set_bounding_box(bb) > >>> >> > # magic numbers, experiment with them and make them large > >>> enough for > >>> >> > things to work > >>> >> > sampler.set_number_of_conjugate_gradient_steps(100) > >>> >> > sampler.set_number_of_monte_carlo_steps(20) > >>> >> > sampler.set_number_of_attempts(models) > >>> >> > # We don't care to see the output from the sampler > >>> >> > sampler.set_log_level(IMP.SILENT) > >>> >> > # return the IMP.ConfigurationSet storing all the found > >>> >> configurations > >>> >> > that > >>> >> > # meet the various restraint maximum scores. > >>> >> > cs= sampler.create_sample() > >>> >> > return cs > >>> >> > > >>> >> > > >>> >> > # cluster the conformations and write them to a file > >>> >> > def analyze_conformations(cs, all, gs): > >>> >> > # we want to cluster the configurations to make them easier to > >>> >> > understand > >>> >> > # in the case, the clustering is pretty meaningless > >>> >> > embed= IMP.statistics.ConfigurationSetXYZEmbedding(cs, > >>> >> > > >>> >> > IMP.container.ListSingletonContainer(IMP.atom.get_leaves(all)), > >>> True) > >>> >> > cluster= IMP.statistics.create_lloyds_kmeans(embed, 10, 10000) > >>> >> > # dump each cluster center to a file so it can be viewed. > >>> >> > for i in range(cluster.get_number_of_clusters()): > >>> >> > center= cluster.get_cluster_center(i) > >>> >> > cs.load_configuration(i) > >>> >> > w= IMP.display.PymolWriter("cluster.%d.pym"%i) > >>> >> > for g in gs: > >>> >> > w.add_geometry(g) > >>> >> > > >>> >> > > >>> >> > > >>> >> > > >>> >> > >>> > #****************************************************************************************** > >>> >> > # now do the actual work > >>> >> > > >>> >> > (m,all)= create_representation() > >>> >> > IMP.atom.show_molecular_hierarchy(all) > >>> >> > create_restraints(m, all) > >>> >> > > >>> >> > # in order to display the results, we need something that maps the > >>> >> > particles onto > >>> >> > # geometric objets. The IMP.display.Geometry objects do this > >>> mapping. > >>> >> > # IMP.display.XYZRGeometry map an IMP.core.XYZR particle onto a > >>> sphere > >>> >> > gs=[] > >>> >> > for i in range(all.get_number_of_children()): > >>> >> > color= IMP.display.get_display_color(i) > >>> >> > n= all.get_child(i) > >>> >> > name= n.get_name() > >>> >> > g= IMP.atom.HierarchyGeometry(n) > >>> >> > g.set_color(color) > >>> >> > gs.append(g) > >>> >> > > >>> >> > cs= get_conformations(m) > >>> >> > > >>> >> > print "found", cs.get_number_of_configurations(), "solutions" > >>> >> > > >>> >> > ListScores = [] > >>> >> > for i in range(0, cs.get_number_of_configurations()): > >>> >> > cs.load_configuration(i) > >>> >> > # print the configuration > >>> >> > print "solution number: ",i,"scored :", m.evaluate(False) > >>> >> > ListScores.append(m.evaluate(False)) > >>> >> > > >>> >> > f1 = open("out_scores.csv", "w") > >>> >> > f1.write("\n".join(map(lambda x: str(x), ListScores))) > >>> >> > f1.close() > >>> >> > > >>> >> > # for each of the configuration, dump it to a file to view in > pymol > >>> >> > for i in range(0, cs.get_number_of_configurations()): > >>> >> > JOSH = cs.load_configuration(i) > >>> >> > S= IMP.atom.Selection > >>> >> > h= IMP.atom.Hierarchy.get_children(cs) > >>> >> > tfn = IMP.create_temporary_file_name("josh%d"%i, ".rmf") > >>> >> > rh = RMF.create_rmf_file(tfn) > >>> >> > > >>> >> > # add the hierarchy to the file > >>> >> > IMP.rmf.add_hierarchies(rh, h) > >>> >> > > >>> >> > # add the current configuration to the file as frame 0 > >>> >> > IMP.rmf.save_frame(rh) > >>> >> > > >>> >> > for g in gs: > >>> >> > w.add_geometry(g) > >>> >> > > >>> >> > analyze_conformations(cs, all, gs) > >>> >> > > >>> >> > > >>> >> > _______________________________________________ > >>> >> > IMP-users mailing list > >>> >> > IMP-users@salilab.org > >>> >> > https://salilab.org/mailman/listinfo/imp-users > >>> >> > > >>> >> > > >>> >> > >>> >> > >>> >> -- > >>> >> Barak > >>> >>
Hi Josh,
An IMP model contains a list of particles that are tightly associated with it (a particle does not exist outside the context of a model). Given the disclaimer that I have never used ConfigurationSet, my understanding from its documentation is that when you load a configuration, the values of the particles within the model are updated accordingly. If I understand your code correctly, 'all' is the root of the hierarchy in your model, so it is 'all' that you should add to the rmf. The values of 'all' and all of its children are supposed to update when you load a configuration, automatically.
All that being said said - use this advice at own risk, perhaps someone could advise you better. Let me know if you have more questions.
Barak
On Wed, Jul 2, 2014 at 3:42 PM, Josh Bullock jma.bullock@gmail.com wrote:
> > > Conceptually I do ( i think ... ) but not practically. I'm hoping to view > each of the models i created - with MSrestraints - separately as an .rmf in > chimera, just so i can see what i'm making ! > > so i have created my models using: > > cs= get_conformations(m) > > do i have to assign each model to a particle before i can write it to an > .rmf ? Or is each model already a particle with hierarchy ? > > ------------------------------------------- > > for i in range(0, cs.get_number_of_configurations()): > cs.load_configuration(i) > h = IMP.atom.Hierarchy(m) # <------- how do i call the hierarchy of > the current loaded configuration ? > c = p.get_children(h) > tfn = IMP.create_temporary_file_name("josh%d"%i, ".rmf") > rh = RMF.create_rmf_file(tfn) > > # add the hierarchy to the file > IMP.rmf.add_hierarchies(rh, h) > > # add the current configuration to the file as frame 0 > IMP.rmf.save_frame(rh) > > On 2 July 2014 23:03, imp-users-request@salilab.org wrote: > >> Send IMP-users mailing list submissions to >> imp-users@salilab.org >> >> To subscribe or unsubscribe via the World Wide Web, visit >> https://salilab.org/mailman/listinfo/imp-users >> or, via email, send a message with subject or body 'help' to >> imp-users-request@salilab.org >> >> You can reach the person managing the list at >> imp-users-owner@salilab.org >> >> When replying, please edit your Subject line so it is more specific >> than "Re: Contents of IMP-users digest..." >> >> >> Today's Topics: >> >> 1. Re: Sampling and writing to pym/rmf (Barak Raveh) >> >> >> ---------------------------------------------------------------------- >> >> Message: 1 >> Date: Wed, 2 Jul 2014 15:03:19 -0700 >> >> From: Barak Raveh barak.raveh@gmail.com >> To: Help and discussion for users of IMP imp-users@salilab.org >> Subject: Re: [IMP-users] Sampling and writing to pym/rmf >> Message-ID: >> <CAHp+_UqO8rXRMsUSndbg-c0jyDxnswDe9aFKvW889gGMU= >> 4MMQ@mail.gmail.com> >> Content-Type: text/plain; charset="utf-8" >> >> >> * I meant >> >> h = IMP.atom.Hierarchy(p) >> c = p.get_children(h) >> >> this assumes that particle p was already decorated as Hierarchy (let me >> know if you are not familiar with decorators, Hierarchy, or Particle). >> >> >> >> On Wed, Jul 2, 2014 at 3:02 PM, Barak Raveh barak.raveh@gmail.com >> wrote: >> >> > Hi Josh, >> > >> > I think get_children() is only a member function of Hierarchy, so you >> > should do something like >> > >> > IMP.atom.Hierarchy(p) >> > c = p.get_children() >> > >> > 'cs' seems to be a ConfigurationSet object - are you sure that you >> expect >> > it to have children? >> > >> > What do you want to do? >> > >> > Cheers, >> > Barak >> > >> > On Wed, Jul 2, 2014 at 1:42 PM, Josh Bullock jma.bullock@gmail.com >> > wrote: >> > >> >> ah sorry ! this line gives me the error >> >> >> >> h= IMP.atom.Hierarchy.get_children(cs) >> >> >> >> thanks >> >> >> >> josh >> >> >> >> On 2 July 2014 17:45, imp-users-request@salilab.org wrote: >> >> >> >>> Send IMP-users mailing list submissions to >> >>> imp-users@salilab.org >> >>> >> >>> To subscribe or unsubscribe via the World Wide Web, visit >> >>> https://salilab.org/mailman/listinfo/imp-users >> >>> or, via email, send a message with subject or body 'help' to >> >>> imp-users-request@salilab.org >> >>> >> >>> You can reach the person managing the list at >> >>> imp-users-owner@salilab.org >> >>> >> >>> When replying, please edit your Subject line so it is more specific >> >>> than "Re: Contents of IMP-users digest..." >> >>> >> >>> >> >>> Today's Topics: >> >>> >> >>> 1. Re: Sampling and writing to pym/rmf (Barak Raveh) (Barak Raveh) >> >>> >> >>> >> >>> ---------------------------------------------------------------------- >> >>> >> >>> Message: 1 >> >>> Date: Wed, 2 Jul 2014 09:45:30 -0700 >> >>> From: Barak Raveh barak.raveh@gmail.com >> >>> To: Help and discussion for users of IMP imp-users@salilab.org >> >>> Subject: Re: [IMP-users] Sampling and writing to pym/rmf (Barak Raveh) >> >>> Message-ID: >> >>> <CAHp+_Uo19VasJDJYi+2CoUUu= >> >>> u_6duKCraVetU4dW45+oDhTAw@mail.gmail.com> >> >>> Content-Type: text/plain; charset="utf-8" >> >>> >> >>> Which lines throws the error? >> >>> >> >>> >> >>> On Wed, Jul 2, 2014 at 4:56 AM, Josh Bullock jma.bullock@gmail.com >> >>> wrote: >> >>> >> >>> > Hi Barek, >> >>> > >> >>> > So I'm not giving hierarchy.get_children the correct input: >> >>> > >> >>> > TypeError: unbound method get_children() must be called with >> Hierarchy >> >>> > instance as first argument (got ConfigurationSet instance instead) >> >>> > >> >>> > I'm not sure which argument is the hierarchy instance. >> >>> > >> >>> > Thanks, >> >>> > >> >>> > Josh >> >>> > >> >>> > ------------------------------------------------- >> >>> > >> >>> > cs= get_conformations(m) >> >>> >> >>> > >> >>> > for i in range(0, cs.get_number_of_configurations()): >> >>> > JOSH = cs.load_configuration(i) >> >>> > S= IMP.atom.Selection >> >>> > h= IMP.atom.Hierarchy.get_children(cs) >> >>> > tfn = IMP.create_temporary_file_name("josh%d"%i, ".rmf") >> >>> > rh = RMF.create_rmf_file(tfn) >> >>> > >> >>> > On 1 July 2014 17:31, imp-users-request@salilab.org wrote: >> >>> > >> >>> >> Send IMP-users mailing list submissions to >> >>> >> imp-users@salilab.org >> >>> >> >> >>> >> To subscribe or unsubscribe via the World Wide Web, visit >> >>> >> https://salilab.org/mailman/listinfo/imp-users >> >>> >> or, via email, send a message with subject or body 'help' to >> >>> >> imp-users-request@salilab.org >> >>> >> >> >>> >> You can reach the person managing the list at >> >>> >> imp-users-owner@salilab.org >> >>> >> >> >>> >> When replying, please edit your Subject line so it is more specific >> >>> >> than "Re: Contents of IMP-users digest..." >> >>> >> >> >>> >> >> >>> >> Today's Topics: >> >>> >> >> >>> >> 1. Re: Sampling and writing to pym/rmf (Barak Raveh) >> >>> >> >> >>> >> >> >>> >> >> ---------------------------------------------------------------------- >> >>> >> >> >>> >> Message: 1 >> >>> >> Date: Tue, 1 Jul 2014 09:31:33 -0700 >> >>> >> From: Barak Raveh barak.raveh@gmail.com >> >>> >> To: Help and discussion for users of IMP imp-users@salilab.org >> >>> >> Subject: Re: [IMP-users] Sampling and writing to pym/rmf >> >>> >> Message-ID: >> >>> >> <CAHp+_UowiBwJozbwOfi8yFEVt7Z8o2tEZ= >> >>> >> LvYPnJh-LjpC2cSA@mail.gmail.com> >> >>> >> Content-Type: text/plain; charset="utf-8" >> >>> >> >>> >> >> >>> >> 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? >> >>> >> >> >>> >> >> >>> >> On Tue, Jul 1, 2014 at 2:40 AM, Josh Bullock < >> jma.bullock@gmail.com> >> >>> >> wrote: >> >>> >> >> >>> >> > Hello, >> >>> >> > >> >>> >> > I'm relatively new to all this so please let me know if i'm >> making >> >>> any >> >>> >> > obvious errors ... >> >>> >> > >> >>> >> > Essentially all i'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'd >> >>> >> like >> >>> >> > to write to an .rmf but i haven't worked that one out either ... >> >>> >> > >> >>> >> > Is this a reasonable way to go about my problem ? >> >>> >> > >> >>> >> > Many thanks, >> >>> >> > >> >>> >> > Josh >> >>> >> > >> >>> >> > ------------------------------------------- >> >>> >> > >> >>> >> > import IMP >> >>> >> > import IMP.atom >> >>> >> > import IMP.rmf >> >>> >> > import inspect >> >>> >> > import IMP.container >> >>> >> > import IMP.display >> >>> >> > import IMP.statistics >> >>> >> > #import IMP.example >> >>> >> > import sys, math, os, optparse >> >>> >> > import RMF >> >>> >> > >> >>> >> > from optparse import OptionParser >> >>> >> > >> >>> >> > >> >>> >> > # Convert the arguments into strings and number >> >>> >> > Firstpdb = str(sys.argv[1]) >> >>> >> > Secondpdb = str(sys.argv[2]) >> >>> >> > Thirdpdb = str(sys.argv[3]) >> >>> >> > Fourthpdb = str(sys.argv[4]) >> >>> >> > models = float(sys.argv[5]) >> >>> >> > >> >>> >> > #***************************************** >> >>> >> > >> >>> >> > # the spring constant to use, it doesnt really matter >> >>> >> > k=100 >> >>> >> > # the target resolution for the representation, this is used to >> >>> specify >> >>> >> > how detailed >> >>> >> > # the representation used should be >> >>> >> > resolution=300 >> >>> >> > # the box to perform everything >> >>> >> > bb=IMP.algebra.BoundingBox3D(IMP.algebra.Vector3D(0,0,0), >> >>> >> > IMP.algebra.Vector3D(300, 300, 300)) >> >>> >> > >> >>> >> > >> >>> >> > # this function creates the molecular hierarchies for the various >> >>> >> involved >> >>> >> > proteins >> >>> >> > def create_representation(): >> >>> >> > m= IMP.Model() >> >>> >> > all=IMP.atom.Hierarchy.setup_particle(IMP.Particle(m)) >> >>> >> > all.set_name("the universe") >> >>> >> > # create a protein, represented as a set of connected balls >> of >> >>> >> > appropriate >> >>> >> > # radii and number, chose by the resolution parameter and the >> >>> >> number of >> >>> >> > # amino acids. >> >>> >> > >> >>> >> > def create_protein_from_pdbs(name, files): >> >>> >> > >> >>> >> > def create_from_pdb(file): >> >>> >> > sls=IMP.SetLogState(IMP.NONE) >> >>> >> > datadir = os.getcwd() >> >>> >> > print datadir >> >>> >> > t=IMP.atom.read_pdb( datadir+'/' + file, m, >> >>> >> > IMP.atom.ATOMPDBSelector()) >> >>> >> > del sls >> >>> >> > #IMP.atom.show_molecular_hierarchy(t) >> >>> >> > c=IMP.atom.Chain(IMP.atom.get_by_type(t, >> >>> >> > IMP.atom.CHAIN_TYPE)[0]) >> >>> >> > if c.get_number_of_children()==0: >> >>> >> > IMP.atom.show_molecular_hierarchy(t) >> >>> >> > # there is no reason to use all atoms, just >> approximate >> >>> the >> >>> >> > pdb shape instead >> >>> >> > s=IMP.atom.create_simplified_along_backbone(c, >> >>> >> > >> >>> >> resolution/300.0) >> >>> >> > IMP.atom.destroy(t) >> >>> >> > # make the simplified structure rigid >> >>> >> > rb=IMP.atom.create_rigid_body(s) >> >>> >> > # rb=IMP.atom.create_rigid_body(c) >> >>> >> > rb.set_coordinates_are_optimized(True) >> >>> >> > return s >> >>> >> > # return c >> >>> >> > >> >>> >> > h= create_from_pdb(files[0]) >> >>> >> > h.set_name(name) >> >>> >> > all.add_child(h) >> >>> >> > >> >>> >> > create_protein_from_pdbs("A", [Firstpdb]) >> >>> >> > create_protein_from_pdbs("B", [Secondpdb]) >> >>> >> > create_protein_from_pdbs("C", [Thirdpdb]) >> >>> >> > create_protein_from_pdbs("D", [Fourthpdb]) >> >>> >> > #create_protein_from_pdbs("C", ["rpt3_imp.pdb"]) >> >>> >> > return (m, all) >> >>> >> > >> >>> >> > # create the needed restraints and add them to the model >> >>> >> > >> >>> >> > def create_restraints(m, all): >> >>> >> > def add_connectivity_restraint(s): >> >>> >> > >> >>> >> > tr= IMP.core.TableRefiner() >> >>> >> > rps=[] >> >>> >> > for sc in s: >> >>> >> > ps= sc.get_selected_particles() >> >>> >> > rps.append(ps[0]) >> >>> >> > tr.add_particle(ps[0], ps) >> >>> >> > >> >>> >> > # duplicate the IMP.atom.create_connectivity_restraint >> >>> >> > functionality >> >>> >> > >> >>> >> > score= >> >>> >> > >> >>> >> >> >>> >> IMP.core.KClosePairsPairScore(IMP.core.HarmonicSphereDistancePairScore(0,1),tr) >> >>> >> > >> >>> >> > r= IMP.core.MSConnectivityRestraint(m,score) >> >>> >> > >> >>> >> > iA = r.add_type([rps[0]]) >> >>> >> > iB = r.add_type([rps[1]]) >> >>> >> > iC = r.add_type([rps[2]]) >> >>> >> > iD = r.add_type([rps[3]]) >> >>> >> > n1 = r.add_composite([iA, iB, iC, iD]) >> >>> >> > n2 = r.add_composite([iA, iB], n1) >> >>> >> > n3 = r.add_composite([iC, iD], n1) >> >>> >> > n4 = r.add_composite([iB, iC, iD], n1) >> >>> >> > >> >>> >> > m.add_restraint(r) >> >>> >> > >> >>> >> > evr=IMP.atom.create_excluded_volume_restraint([all]) >> >>> >> > m.add_restraint(evr) >> >>> >> > # a Selection allows for natural specification of what the >> >>> >> restraints >> >>> >> > act on >> >>> >> > S= IMP.atom.Selection >> >>> >> > sA=S(hierarchy=all, molecule="A") >> >>> >> > sB=S(hierarchy=all, molecule="B") >> >>> >> > sC=S(hierarchy=all, molecule="C") >> >>> >> > sD=S(hierarchy=all, molecule="D") >> >>> >> > add_connectivity_restraint([sA, sB, sC, sD]) >> >>> >> > >> >>> >> > >> >>> >> > # find acceptable conformations of the model >> >>> >> > def get_conformations(m): >> >>> >> > sampler= IMP.core.MCCGSampler(m) >> >>> >> > sampler.set_bounding_box(bb) >> >>> >> > # magic numbers, experiment with them and make them large >> >>> enough for >> >>> >> > things to work >> >>> >> > sampler.set_number_of_conjugate_gradient_steps(100) >> >>> >> > sampler.set_number_of_monte_carlo_steps(20) >> >>> >> > sampler.set_number_of_attempts(models) >> >>> >> > # We don't care to see the output from the sampler >> >>> >> > sampler.set_log_level(IMP.SILENT) >> >>> >> > # return the IMP.ConfigurationSet storing all the found >> >>> >> configurations >> >>> >> > that >> >>> >> > # meet the various restraint maximum scores. >> >>> >> > cs= sampler.create_sample() >> >>> >> > return cs >> >>> >> > >> >>> >> > >> >>> >> > # cluster the conformations and write them to a file >> >>> >> > def analyze_conformations(cs, all, gs): >> >>> >> > # we want to cluster the configurations to make them easier >> to >> >>> >> > understand >> >>> >> > # in the case, the clustering is pretty meaningless >> >>> >> > embed= IMP.statistics.ConfigurationSetXYZEmbedding(cs, >> >>> >> > >> >>> >> > IMP.container.ListSingletonContainer(IMP.atom.get_leaves(all)), >> >>> True) >> >>> >> > cluster= IMP.statistics.create_lloyds_kmeans(embed, 10, >> 10000) >> >>> >> > # dump each cluster center to a file so it can be viewed. >> >>> >> > for i in range(cluster.get_number_of_clusters()): >> >>> >> > center= cluster.get_cluster_center(i) >> >>> >> > cs.load_configuration(i) >> >>> >> > w= IMP.display.PymolWriter("cluster.%d.pym"%i) >> >>> >> > for g in gs: >> >>> >> > w.add_geometry(g) >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> >> >>> >> #****************************************************************************************** >> >>> >> > # now do the actual work >> >>> >> > >> >>> >> > (m,all)= create_representation() >> >>> >> > IMP.atom.show_molecular_hierarchy(all) >> >>> >> > create_restraints(m, all) >> >>> >> > >> >>> >> > # in order to display the results, we need something that maps >> the >> >>> >> > particles onto >> >>> >> > # geometric objets. The IMP.display.Geometry objects do this >> >>> mapping. >> >>> >> > # IMP.display.XYZRGeometry map an IMP.core.XYZR particle onto a >> >>> sphere >> >>> >> > gs=[] >> >>> >> > for i in range(all.get_number_of_children()): >> >>> >> > color= IMP.display.get_display_color(i) >> >>> >> > n= all.get_child(i) >> >>> >> > name= n.get_name() >> >>> >> > g= IMP.atom.HierarchyGeometry(n) >> >>> >> > g.set_color(color) >> >>> >> > gs.append(g) >> >>> >> > >> >>> >> > cs= get_conformations(m) >> >>> >> > >> >>> >> > print "found", cs.get_number_of_configurations(), "solutions" >> >>> >> > >> >>> >> > ListScores = [] >> >>> >> > for i in range(0, cs.get_number_of_configurations()): >> >>> >> > cs.load_configuration(i) >> >>> >> > # print the configuration >> >>> >> > print "solution number: ",i,"scored :", m.evaluate(False) >> >>> >> > ListScores.append(m.evaluate(False)) >> >>> >> > >> >>> >> > f1 = open("out_scores.csv", "w") >> >>> >> > f1.write("\n".join(map(lambda x: str(x), ListScores))) >> >>> >> > f1.close() >> >>> >> > >> >>> >> > # for each of the configuration, dump it to a file to view in >> pymol >> >>> >> > for i in range(0, cs.get_number_of_configurations()): >> >>> >> > JOSH = cs.load_configuration(i) >> >>> >> > S= IMP.atom.Selection >> >>> >> > h= IMP.atom.Hierarchy.get_children(cs) >> >>> >> > tfn = IMP.create_temporary_file_name("josh%d"%i, ".rmf") >> >>> >> > rh = RMF.create_rmf_file(tfn) >> >>> >> > >> >>> >> > # add the hierarchy to the file >> >>> >> > IMP.rmf.add_hierarchies(rh, h) >> >>> >> > >> >>> >> > # add the current configuration to the file as frame 0 >> >>> >> > IMP.rmf.save_frame(rh) >> >>> >> > >> >>> >> > for g in gs: >> >>> >> > w.add_geometry(g) >> >>> >> > >> >>> >> > analyze_conformations(cs, all, gs) >> >>> >> > >> >>> >> > >> >>> >> > _______________________________________________ >> >>> >> > IMP-users mailing list >> >>> >> > IMP-users@salilab.org >> >>> >> > https://salilab.org/mailman/listinfo/imp-users >> >>> >> > >> >>> >> > >> >>> >> >> >>> >> >> >>> >> -- >> >>> >> Barak >> >>> >>
participants (2)
-
Barak Raveh
-
Josh Bullock