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 Center for Infectious Disease Research |