IMP bug - decorating floppy bodies as gaussians
I seem to have run into a bug while trying to use a cryoEM restraint with IMP.pmi 2.8.0. Reading the BuildSystem code, it looks like it will add individual gaussians to the flexible beads as long as a non-zero value is given for the em_residues_per_gaussian column in the topology file. However, this then crashes when the system is shuffled with IMP.pmi.tools.shuffle_configuration. If I do not shuffle the system and start the simulation via the IMP.pmi.macros.ReplicaExchange0 routine, I get the same error while performing replica exchange.
I am setting up my complex using a topology file and the BuildSystem macro, following the code below.
m = IMP.Model() topology = IMP.pmi.topology.TopologyReader(topology_file, pdb_dir=os.path.join("data/PDBs"), fasta_dir=os.path.join("data/Sequences"), gmm_dir=os.path.join("data/subunitEMs")) bs = IMP.pmi.macros.BuildSystem(m, resolutions=[1,10]) bs.add_state(topology) root_hier, dof = bs.execute_macro() #Add restraints.. <snip> # IMP.pmi.tools.shuffle_configuration(root_hier)
This fails with the following error:
shuffling 23 rigid bodies shuffling 186 flexible beads Traceback (most recent call last): File "..\modelling\simulate_tfiid.py", line 690, in <module> main() File "..\modelling\simulate_tfiid.py", line 686, in main simulation = TFIIDModelling(parser.parse_args()) File "..\modelling\simulate_tfiid.py", line 333, in __init__ self.initialise() File "..\modelling\simulate_tfiid.py", line 357, in initialise tools.shuffle_configuration(self.root_hier) File "C:\Users\fduffy\AppData\Local\Continuum\Anaconda2\envs\IMP\lib\site-packages\IMP\pmi\tools.py", line 2087, in shuffle_configuration IMP.core.transform(d, transformation) File "C:\Users\fduffy\AppData\Local\Continuum\Anaconda2\envs\IMP\lib\site-packages\IMP\core__init__.py", line 8878, in transform return _IMP_core.transform(*args) _IMP_kernel.UsageException: Usage check failure: Particle is also a RigidBody, so this function would do the wrong thing; decorate your Particle as a RigidBody instead and call transform(RigidBody a, const algebra::Transformation3D &tr)
Looking at the tools.shuffle_configuration code, the problem seems to lie around line 2111, where
https://github.com/salilab/imp/blob/develop/modules/pmi/pyext/src/tools.py 1987 rigid_bodies,flexible_beads = get_rbs_and_beads(hierarchies) ... 2090 for fb in flexible_beads: ... 2110 # For gaussians, treat this fb as an rb 2111 if IMP.core.NonRigidMember.get_is_setup(fb): 2112 xyz=[fb.get_value(IMP.FloatKey(4)), fb.get_value(IMP.FloatKey(5)), fb.get_value(IMP.FloatKey(6))] ... 2126 else: 2127 d =IMP.core.XYZ(fb)
Presumably, the IMP.core.NonRigidMember.get_is_setup(fb) call should return True for floppy bodies with gaussians, but it currently is returning False, which causes the co-ordinate transformation to fail.
Is there any easy solution or workaround for this?
Fergal Duffy Staff Scientist Center for Infectious Disease Researchhttp://www.cidresearch.org/ 307 Westlake Ave N, Suite 500 | Seattle, WA 98109 206.256.7435 | fergal.duffy@cidresearch.orgmailto:fergal.duffy@cidresearch.org
participants (1)
-
Fergal Duffy