11 from sys
import version_info
12 if version_info >= (2,6,0):
13 def swig_import_helper():
14 from os.path
import dirname
18 fp, pathname, description = imp.find_module(
'_IMP_modeller', [dirname(__file__)])
24 _mod = imp.load_module(
'_IMP_modeller', fp, pathname, description)
28 _IMP_modeller = swig_import_helper()
29 del swig_import_helper
34 _swig_property = property
37 def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
38 if (name ==
"thisown"):
return self.this.own(value)
40 if type(value).__name__ ==
'SwigPyObject':
41 self.__dict__[name] = value
43 method = class_type.__swig_setmethods__.get(name,
None)
44 if method:
return method(self,value)
46 self.__dict__[name] = value
48 raise AttributeError(
"You cannot add attributes to %s" % self)
50 def _swig_setattr(self,class_type,name,value):
51 return _swig_setattr_nondynamic(self,class_type,name,value,0)
53 def _swig_getattr(self,class_type,name):
54 if (name ==
"thisown"):
return self.this.own()
55 method = class_type.__swig_getmethods__.get(name,
None)
56 if method:
return method(self)
57 raise AttributeError(name)
60 try: strthis =
"proxy of " + self.this.__repr__()
62 return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
67 except AttributeError:
74 weakref_proxy = weakref.proxy
76 weakref_proxy =
lambda x: x
79 class IMP_MODELLER_SwigPyIterator(_object):
80 """Proxy of C++ swig::IMP_MODELLER_SwigPyIterator class"""
81 __swig_setmethods__ = {}
82 __setattr__ =
lambda self, name, value: _swig_setattr(self, IMP_MODELLER_SwigPyIterator, name, value)
83 __swig_getmethods__ = {}
84 __getattr__ =
lambda self, name: _swig_getattr(self, IMP_MODELLER_SwigPyIterator, name)
85 def __init__(self, *args, **kwargs):
raise AttributeError(
"No constructor defined - class is abstract")
87 __swig_destroy__ = _IMP_modeller.delete_IMP_MODELLER_SwigPyIterator
88 __del__ =
lambda self :
None;
90 """value(IMP_MODELLER_SwigPyIterator self) -> PyObject *"""
91 return _IMP_modeller.IMP_MODELLER_SwigPyIterator_value(self)
95 incr(IMP_MODELLER_SwigPyIterator self, size_t n=1) -> IMP_MODELLER_SwigPyIterator
96 incr(IMP_MODELLER_SwigPyIterator self) -> IMP_MODELLER_SwigPyIterator
98 return _IMP_modeller.IMP_MODELLER_SwigPyIterator_incr(self, n)
102 decr(IMP_MODELLER_SwigPyIterator self, size_t n=1) -> IMP_MODELLER_SwigPyIterator
103 decr(IMP_MODELLER_SwigPyIterator self) -> IMP_MODELLER_SwigPyIterator
105 return _IMP_modeller.IMP_MODELLER_SwigPyIterator_decr(self, n)
107 def distance(self, *args):
108 """distance(IMP_MODELLER_SwigPyIterator self, IMP_MODELLER_SwigPyIterator x) -> ptrdiff_t"""
109 return _IMP_modeller.IMP_MODELLER_SwigPyIterator_distance(self, *args)
111 def equal(self, *args):
112 """equal(IMP_MODELLER_SwigPyIterator self, IMP_MODELLER_SwigPyIterator x) -> bool"""
113 return _IMP_modeller.IMP_MODELLER_SwigPyIterator_equal(self, *args)
116 """copy(IMP_MODELLER_SwigPyIterator self) -> IMP_MODELLER_SwigPyIterator"""
117 return _IMP_modeller.IMP_MODELLER_SwigPyIterator_copy(self)
120 """next(IMP_MODELLER_SwigPyIterator self) -> PyObject *"""
121 return _IMP_modeller.IMP_MODELLER_SwigPyIterator_next(self)
124 """__next__(IMP_MODELLER_SwigPyIterator self) -> PyObject *"""
125 return _IMP_modeller.IMP_MODELLER_SwigPyIterator___next__(self)
128 """previous(IMP_MODELLER_SwigPyIterator self) -> PyObject *"""
129 return _IMP_modeller.IMP_MODELLER_SwigPyIterator_previous(self)
131 def advance(self, *args):
132 """advance(IMP_MODELLER_SwigPyIterator self, ptrdiff_t n) -> IMP_MODELLER_SwigPyIterator"""
133 return _IMP_modeller.IMP_MODELLER_SwigPyIterator_advance(self, *args)
135 def __eq__(self, *args):
136 """__eq__(IMP_MODELLER_SwigPyIterator self, IMP_MODELLER_SwigPyIterator x) -> bool"""
137 return _IMP_modeller.IMP_MODELLER_SwigPyIterator___eq__(self, *args)
139 def __ne__(self, *args):
140 """__ne__(IMP_MODELLER_SwigPyIterator self, IMP_MODELLER_SwigPyIterator x) -> bool"""
141 return _IMP_modeller.IMP_MODELLER_SwigPyIterator___ne__(self, *args)
143 def __iadd__(self, *args):
144 """__iadd__(IMP_MODELLER_SwigPyIterator self, ptrdiff_t n) -> IMP_MODELLER_SwigPyIterator"""
145 return _IMP_modeller.IMP_MODELLER_SwigPyIterator___iadd__(self, *args)
147 def __isub__(self, *args):
148 """__isub__(IMP_MODELLER_SwigPyIterator self, ptrdiff_t n) -> IMP_MODELLER_SwigPyIterator"""
149 return _IMP_modeller.IMP_MODELLER_SwigPyIterator___isub__(self, *args)
151 def __add__(self, *args):
152 """__add__(IMP_MODELLER_SwigPyIterator self, ptrdiff_t n) -> IMP_MODELLER_SwigPyIterator"""
153 return _IMP_modeller.IMP_MODELLER_SwigPyIterator___add__(self, *args)
155 def __sub__(self, *args):
157 __sub__(IMP_MODELLER_SwigPyIterator self, ptrdiff_t n) -> IMP_MODELLER_SwigPyIterator
158 __sub__(IMP_MODELLER_SwigPyIterator self, IMP_MODELLER_SwigPyIterator x) -> ptrdiff_t
160 return _IMP_modeller.IMP_MODELLER_SwigPyIterator___sub__(self, *args)
162 def __iter__(self):
return self
163 IMP_MODELLER_SwigPyIterator_swigregister = _IMP_modeller.IMP_MODELLER_SwigPyIterator_swigregister
164 IMP_MODELLER_SwigPyIterator_swigregister(IMP_MODELLER_SwigPyIterator)
171 IMP_DEBUG = _IMP_modeller.IMP_DEBUG
172 IMP_RELEASE = _IMP_modeller.IMP_RELEASE
173 IMP_SILENT = _IMP_modeller.IMP_SILENT
174 IMP_PROGRESS = _IMP_modeller.IMP_PROGRESS
175 IMP_TERSE = _IMP_modeller.IMP_TERSE
176 IMP_VERBOSE = _IMP_modeller.IMP_VERBOSE
177 IMP_MEMORY = _IMP_modeller.IMP_MEMORY
178 IMP_NONE = _IMP_modeller.IMP_NONE
179 IMP_USAGE = _IMP_modeller.IMP_USAGE
180 IMP_INTERNAL = _IMP_modeller.IMP_INTERNAL
181 IMP_BASE_HAS_LOG4CXX = _IMP_modeller.IMP_BASE_HAS_LOG4CXX
182 IMP_COMPILER_HAS_AUTO = _IMP_modeller.IMP_COMPILER_HAS_AUTO
183 IMP_COMPILER_HAS_DEBUG_VECTOR = _IMP_modeller.IMP_COMPILER_HAS_DEBUG_VECTOR
184 IMP_BASE_HAS_BOOST_RANDOM = _IMP_modeller.IMP_BASE_HAS_BOOST_RANDOM
185 IMP_BASE_HAS_GPERFTOOLS = _IMP_modeller.IMP_BASE_HAS_GPERFTOOLS
186 IMP_BASE_HAS_TCMALLOC_HEAPCHECKER = _IMP_modeller.IMP_BASE_HAS_TCMALLOC_HEAPCHECKER
187 IMP_BASE_HAS_TCMALLOC_HEAPPROFILER = _IMP_modeller.IMP_BASE_HAS_TCMALLOC_HEAPPROFILER
188 IMPBASE_SHOW_WARNINGS = _IMP_modeller.IMPBASE_SHOW_WARNINGS
190 class _DirectorObjects(object):
191 """@internal Simple class to keep references to director objects
192 to prevent premature deletion."""
195 def register(self, obj):
196 """Take a reference to a director object; will only work for
197 refcounted C++ classes"""
198 if hasattr(obj,
'get_ref_count'):
199 self._objects.append(obj)
201 """Only drop our reference and allow cleanup by Python if no other
202 Python references exist (we hold 3 references: one in self._objects,
203 one in x, and one in the argument list for getrefcount) *and* no
204 other C++ references exist (the Python object always holds one)"""
205 objs = [x
for x
in self._objects
if sys.getrefcount(x) > 3 \
206 or x.get_ref_count() > 1]
210 def get_object_count(self):
211 """Get number of director objects (useful for testing only)"""
212 return len(self._objects)
213 _director_objects = _DirectorObjects()
215 DEFAULT_CHECK = _IMP_modeller.DEFAULT_CHECK
216 NONE = _IMP_modeller.NONE
217 USAGE = _IMP_modeller.USAGE
218 USAGE_AND_INTERNAL = _IMP_modeller.USAGE_AND_INTERNAL
221 """set_check_level(IMP::base::CheckLevel tf)"""
222 return _IMP_modeller.set_check_level(*args)
225 """get_check_level() -> IMP::base::CheckLevel"""
226 return _IMP_modeller.get_check_level()
227 class _ostream(_object):
228 """Proxy of C++ std::ostream class"""
229 __swig_setmethods__ = {}
230 __setattr__ =
lambda self, name, value: _swig_setattr(self, _ostream, name, value)
231 __swig_getmethods__ = {}
232 __getattr__ =
lambda self, name: _swig_getattr(self, _ostream, name)
233 def __init__(self, *args, **kwargs):
raise AttributeError(
"No constructor defined")
234 __repr__ = _swig_repr
235 def write(self, *args):
236 """write(_ostream self, char const * osa_buf)"""
237 return _IMP_modeller._ostream_write(self, *args)
239 _ostream_swigregister = _IMP_modeller._ostream_swigregister
240 _ostream_swigregister(_ostream)
242 IMP_COMPILER_HAS_OVERRIDE = _IMP_modeller.IMP_COMPILER_HAS_OVERRIDE
243 IMP_COMPILER_HAS_FINAL = _IMP_modeller.IMP_COMPILER_HAS_FINAL
244 IMP_HAS_NOEXCEPT = _IMP_modeller.IMP_HAS_NOEXCEPT
246 IMP_CGAL_HAS_BOOST_FILESYSTEM = _IMP_modeller.IMP_CGAL_HAS_BOOST_FILESYSTEM
247 IMP_CGAL_HAS_BOOST_PROGRAMOPTIONS = _IMP_modeller.IMP_CGAL_HAS_BOOST_PROGRAMOPTIONS
248 IMP_CGAL_HAS_BOOST_RANDOM = _IMP_modeller.IMP_CGAL_HAS_BOOST_RANDOM
249 IMP_CGAL_HAS_BOOST_SYSTEM = _IMP_modeller.IMP_CGAL_HAS_BOOST_SYSTEM
250 IMPCGAL_SHOW_WARNINGS = _IMP_modeller.IMPCGAL_SHOW_WARNINGS
252 IMP_ALGEBRA_HAS_IMP_CGAL = _IMP_modeller.IMP_ALGEBRA_HAS_IMP_CGAL
253 IMP_ALGEBRA_HAS_BOOST_FILESYSTEM = _IMP_modeller.IMP_ALGEBRA_HAS_BOOST_FILESYSTEM
254 IMP_ALGEBRA_HAS_BOOST_PROGRAMOPTIONS = _IMP_modeller.IMP_ALGEBRA_HAS_BOOST_PROGRAMOPTIONS
255 IMP_ALGEBRA_HAS_BOOST_RANDOM = _IMP_modeller.IMP_ALGEBRA_HAS_BOOST_RANDOM
256 IMP_ALGEBRA_HAS_BOOST_SYSTEM = _IMP_modeller.IMP_ALGEBRA_HAS_BOOST_SYSTEM
257 IMP_ALGEBRA_HAS_CGAL = _IMP_modeller.IMP_ALGEBRA_HAS_CGAL
258 IMP_ALGEBRA_HAS_ANN = _IMP_modeller.IMP_ALGEBRA_HAS_ANN
259 IMPALGEBRA_SHOW_WARNINGS = _IMP_modeller.IMPALGEBRA_SHOW_WARNINGS
261 IMP_KERNEL_HAS_IMP_CGAL = _IMP_modeller.IMP_KERNEL_HAS_IMP_CGAL
262 IMP_KERNEL_HAS_BOOST_PROGRAMOPTIONS = _IMP_modeller.IMP_KERNEL_HAS_BOOST_PROGRAMOPTIONS
263 IMP_KERNEL_HAS_BOOST_RANDOM = _IMP_modeller.IMP_KERNEL_HAS_BOOST_RANDOM
264 IMP_KERNEL_HAS_BOOST_SYSTEM = _IMP_modeller.IMP_KERNEL_HAS_BOOST_SYSTEM
265 IMP_KERNEL_HAS_CGAL = _IMP_modeller.IMP_KERNEL_HAS_CGAL
266 IMPKERNEL_SHOW_WARNINGS = _IMP_modeller.IMPKERNEL_SHOW_WARNINGS
268 IMP_DISPLAY_HAS_IMP_BASE = _IMP_modeller.IMP_DISPLAY_HAS_IMP_BASE
269 IMP_DISPLAY_HAS_IMP_CGAL = _IMP_modeller.IMP_DISPLAY_HAS_IMP_CGAL
270 IMP_DISPLAY_HAS_BOOST_FILESYSTEM = _IMP_modeller.IMP_DISPLAY_HAS_BOOST_FILESYSTEM
271 IMP_DISPLAY_HAS_BOOST_PROGRAMOPTIONS = _IMP_modeller.IMP_DISPLAY_HAS_BOOST_PROGRAMOPTIONS
272 IMP_DISPLAY_HAS_BOOST_RANDOM = _IMP_modeller.IMP_DISPLAY_HAS_BOOST_RANDOM
273 IMP_DISPLAY_HAS_BOOST_SYSTEM = _IMP_modeller.IMP_DISPLAY_HAS_BOOST_SYSTEM
274 IMP_DISPLAY_HAS_CGAL = _IMP_modeller.IMP_DISPLAY_HAS_CGAL
275 IMPDISPLAY_SHOW_WARNINGS = _IMP_modeller.IMPDISPLAY_SHOW_WARNINGS
277 IMP_SCORE_FUNCTOR_HAS_IMP_CGAL = _IMP_modeller.IMP_SCORE_FUNCTOR_HAS_IMP_CGAL
278 IMP_SCORE_FUNCTOR_HAS_BOOST_FILESYSTEM = _IMP_modeller.IMP_SCORE_FUNCTOR_HAS_BOOST_FILESYSTEM
279 IMP_SCORE_FUNCTOR_HAS_BOOST_PROGRAMOPTIONS = _IMP_modeller.IMP_SCORE_FUNCTOR_HAS_BOOST_PROGRAMOPTIONS
280 IMP_SCORE_FUNCTOR_HAS_BOOST_RANDOM = _IMP_modeller.IMP_SCORE_FUNCTOR_HAS_BOOST_RANDOM
281 IMP_SCORE_FUNCTOR_HAS_BOOST_SYSTEM = _IMP_modeller.IMP_SCORE_FUNCTOR_HAS_BOOST_SYSTEM
282 IMP_SCORE_FUNCTOR_HAS_CGAL = _IMP_modeller.IMP_SCORE_FUNCTOR_HAS_CGAL
283 IMP_SCORE_FUNCTOR_HAS_HDF5 = _IMP_modeller.IMP_SCORE_FUNCTOR_HAS_HDF5
284 IMPSCOREFUNCTOR_SHOW_WARNINGS = _IMP_modeller.IMPSCOREFUNCTOR_SHOW_WARNINGS
286 IMP_CORE_HAS_IMP_BASE = _IMP_modeller.IMP_CORE_HAS_IMP_BASE
287 IMP_CORE_HAS_IMP_CGAL = _IMP_modeller.IMP_CORE_HAS_IMP_CGAL
288 IMP_CORE_HAS_IMP_KERNEL = _IMP_modeller.IMP_CORE_HAS_IMP_KERNEL
289 IMP_CORE_HAS_BOOST_FILESYSTEM = _IMP_modeller.IMP_CORE_HAS_BOOST_FILESYSTEM
290 IMP_CORE_HAS_BOOST_PROGRAMOPTIONS = _IMP_modeller.IMP_CORE_HAS_BOOST_PROGRAMOPTIONS
291 IMP_CORE_HAS_BOOST_RANDOM = _IMP_modeller.IMP_CORE_HAS_BOOST_RANDOM
292 IMP_CORE_HAS_BOOST_SYSTEM = _IMP_modeller.IMP_CORE_HAS_BOOST_SYSTEM
293 IMP_CORE_HAS_CGAL = _IMP_modeller.IMP_CORE_HAS_CGAL
294 IMP_CORE_HAS_HDF5 = _IMP_modeller.IMP_CORE_HAS_HDF5
295 IMPCORE_SHOW_WARNINGS = _IMP_modeller.IMPCORE_SHOW_WARNINGS
297 IMP_MODELLER_HAS_IMP_ALGEBRA = _IMP_modeller.IMP_MODELLER_HAS_IMP_ALGEBRA
298 IMP_MODELLER_HAS_IMP_BASE = _IMP_modeller.IMP_MODELLER_HAS_IMP_BASE
299 IMP_MODELLER_HAS_IMP_CGAL = _IMP_modeller.IMP_MODELLER_HAS_IMP_CGAL
300 IMP_MODELLER_HAS_IMP_DISPLAY = _IMP_modeller.IMP_MODELLER_HAS_IMP_DISPLAY
301 IMP_MODELLER_HAS_IMP_KERNEL = _IMP_modeller.IMP_MODELLER_HAS_IMP_KERNEL
302 IMP_MODELLER_HAS_IMP_SCORE_FUNCTOR = _IMP_modeller.IMP_MODELLER_HAS_IMP_SCORE_FUNCTOR
303 IMP_MODELLER_HAS_BOOST_FILESYSTEM = _IMP_modeller.IMP_MODELLER_HAS_BOOST_FILESYSTEM
304 IMP_MODELLER_HAS_BOOST_PROGRAMOPTIONS = _IMP_modeller.IMP_MODELLER_HAS_BOOST_PROGRAMOPTIONS
305 IMP_MODELLER_HAS_BOOST_RANDOM = _IMP_modeller.IMP_MODELLER_HAS_BOOST_RANDOM
306 IMP_MODELLER_HAS_BOOST_SYSTEM = _IMP_modeller.IMP_MODELLER_HAS_BOOST_SYSTEM
307 IMP_MODELLER_HAS_CGAL = _IMP_modeller.IMP_MODELLER_HAS_CGAL
308 IMP_MODELLER_HAS_HDF5 = _IMP_modeller.IMP_MODELLER_HAS_HDF5
309 IMPMODELLER_SHOW_WARNINGS = _IMP_modeller.IMPMODELLER_SHOW_WARNINGS
310 BinormalTermList=list
311 _plural_types.append(
"BinormalTermList")
312 _value_types.append(
"BinormalTerm")
314 _object_types.append(
"MultipleBinormalRestraint")
317 def _object_cast_to_MultipleBinormalRestraint(*args):
318 """_object_cast_to_MultipleBinormalRestraint(Object o) -> MultipleBinormalRestraint"""
319 return _IMP_modeller._object_cast_to_MultipleBinormalRestraint(*args)
329 def _import_modeller_scripts_optimizers():
330 """Do the equivalent of "import modeller.scripts, modeller.optimizers".
331 (We can't do the regular import because Python tries a relative import
332 first, and that would load the modeller module in IMP.) This is an
333 absolute import. Once we can require that everybody uses Python 2.6,
334 this should no longer be required."""
335 modeller = _import_module(
"modeller",
"modeller",
None)
336 scripts = _import_module(
"scripts",
"modeller.scripts", modeller)
337 optimizers = _import_module(
"optimizers",
"modeller.optimizers", modeller)
338 modeller.scripts = scripts
339 modeller.optimizers = optimizers
342 def _import_module(partname, fqname, parent):
343 """Import a single Python module, possibly from a parent."""
344 fp, pathname, description = imp.find_module(partname,
345 parent
and parent.__path__)
347 m = imp.load_module(fqname, fp, pathname, description)
354 modeller = _import_modeller_scripts_optimizers()
357 class _TempDir(object):
358 """Make a temporary directory that is deleted when the object is."""
361 self.tmpdir = tempfile.mkdtemp()
364 shutil.rmtree(self.tmpdir, ignore_errors=
True)
368 """A Modeller restraint which evaluates all defined IMP restraints.
369 This can be used to incorporate IMP Restraints into an existing
370 comparative modeling pipeline, or to use Modeller optimizers or
372 @param particles A list of the IMP atoms (as Particle objects),
373 same order as the Modeller atoms.
374 @note since Modeller, unlike IMP, is sensitive to the ordering
375 of atoms, it usually makes sense to create the model in
376 Modeller and then use ModelLoader to load it into IMP,
377 since that will preserve the Modeller atom ordering in IMP.
380 _physical_type = modeller.physical.absposition
382 def __init__(self, particles):
383 modeller.terms.energy_term.__init__(self)
384 self._particles = particles
386 def eval(self, mdl, deriv, indats):
387 atoms = self.indices_to_atoms(mdl, indats)
388 _copy_modeller_coords_to_imp(atoms, self._particles)
389 if len(self._particles) == 0:
392 score = self._particles[0].get_model().evaluate(deriv)
394 dvx = [0.] * len(indats)
395 dvy = [0.] * len(indats)
396 dvz = [0.] * len(indats)
397 _get_imp_derivs(self._particles, dvx, dvy, dvz)
398 return (score, dvx, dvy, dvz)
404 """An IMP restraint using all defined Modeller restraints.
405 This is useful if you want to use Modeller restraints with an IMP
406 optimizer, or in combination with IMP restraints.
408 @param model The IMP Model object.
409 @param modeller_model The Modeller model object.
410 @param particles A list of the IMP atoms (as Particle objects),
411 in the same order as the Modeller atoms.
412 @note since Modeller, unlike IMP, is sensitive to the ordering
413 of atoms, it usually makes sense to create the model in
414 Modeller and then use ModelLoader to load it into IMP,
415 since that will preserve the Modeller atom ordering in IMP.
416 @note Currently only the coordinates of the atoms are translated
417 between Modeller and IMP; thus, a Modeller restraint which
418 uses any other attribute (e.g. charge) will not react if
419 this attribute is changed by IMP.
421 def __init__(self, model, modeller_model, particles):
423 if hasattr(x,
'get_particle'):
424 return x.get_particle()
427 IMP.Restraint.__init__(self, model,
"ModellerRestraints %1%")
428 self._modeller_model = modeller_model
429 self._particles = [get_particle(x)
for x
in particles]
431 def unprotected_evaluate(self, accum):
432 atoms = self._modeller_model.atoms
433 sel = modeller.selection(self._modeller_model)
434 _copy_imp_coords_to_modeller(self._particles, atoms)
435 energies = sel.energy()
437 _add_modeller_derivs_to_imp(atoms, self._particles, accum)
442 return IMP.VersionInfo(
"IMP developers",
"0.1")
443 def do_show(self, fh):
444 fh.write(
"ModellerRestraints")
446 return self._particles
449 def _copy_imp_coords_to_modeller(particles, atoms):
450 """Copy atom coordinates from IMP to Modeller"""
454 for (num, at)
in enumerate(atoms):
455 at.x = particles[num].get_value(xkey)
456 at.y = particles[num].get_value(ykey)
457 at.z = particles[num].get_value(zkey)
460 def _copy_modeller_coords_to_imp(atoms, particles):
461 """Copy atom coordinates from Modeller to IMP"""
465 for (num, at)
in enumerate(atoms):
466 particles[num].set_value(xkey, at.x)
467 particles[num].set_value(ykey, at.y)
468 particles[num].set_value(zkey, at.z)
471 def _add_modeller_derivs_to_imp(atoms, particles, accum):
472 """Add atom derivatives from Modeller to IMP"""
473 for (num, at)
in enumerate(atoms):
475 xyz.add_to_derivative(0, at.dvx, accum)
476 xyz.add_to_derivative(1, at.dvy, accum)
477 xyz.add_to_derivative(2, at.dvz, accum)
480 def _get_imp_derivs(particles, dvx, dvy, dvz):
481 """Move atom derivatives from IMP to Modeller"""
485 for idx
in range(0, len(dvx)):
486 dvx[idx] = particles[idx].get_derivative(xkey)
487 dvy[idx] = particles[idx].get_derivative(ykey)
488 dvz[idx] = particles[idx].get_derivative(zkey)
492 def _HarmonicLowerBoundGenerator(parameters, modalities):
493 (mean, stdev) = parameters
497 def _HarmonicUpperBoundGenerator(parameters, modalities):
498 (mean, stdev) = parameters
502 def _HarmonicGenerator(parameters, modalities):
503 (mean, stdev) = parameters
507 def _CosineGenerator(parameters, modalities):
508 (phase, force_constant) = parameters
509 (periodicity,) = modalities
512 def _LinearGenerator(parameters, modalities):
513 (scale,) = parameters
516 def _SplineGenerator(parameters, modalities):
517 (open, low, high, delta, lowderiv, highderiv) = parameters[:6]
519 for v
in parameters[6:]:
527 _unary_func_generators = {
528 1: _HarmonicLowerBoundGenerator,
529 2: _HarmonicUpperBoundGenerator,
530 3: _HarmonicGenerator,
533 10: _SplineGenerator,
537 def _DistanceRestraintGenerator(form, modalities, atoms, parameters):
538 unary_func_gen = _unary_func_generators[form]
542 def _AngleRestraintGenerator(form, modalities, atoms, parameters):
543 unary_func_gen = _unary_func_generators[form]
545 atoms[0], atoms[1], atoms[2])
547 def _MultiBinormalGenerator(form, modalities, atoms, parameters):
548 nterms = modalities[0]
549 if len(parameters) != nterms * 6:
550 raise ValueError(
"Incorrect number of parameters (%d) for multiple "
551 "binormal restraint - expecting %d (%d terms * 6)" \
552 % (len(parameters), nterms * 6, nterms))
555 for i
in range(nterms):
557 t.set_weight(parameters[i])
558 t.set_means((parameters[nterms + i * 2],
559 parameters[nterms + i * 2 + 1]))
560 t.set_standard_deviations((parameters[nterms * 3 + i * 2],
561 parameters[nterms * 3 + i * 2 + 1]))
562 t.set_correlation(parameters[nterms * 5 + i])
566 def _DihedralRestraintGenerator(form, modalities, atoms, parameters):
568 return _MultiBinormalGenerator(form, modalities, atoms, parameters)
569 unary_func_gen = _unary_func_generators[form]
571 atoms[0], atoms[1], atoms[2], atoms[3])
573 def _get_protein_atom_particles(protein):
574 """Given a protein particle, get the flattened list of all child atoms"""
577 for ichain
in range(protein.get_number_of_children()):
578 chain = protein.get_child(ichain)
579 for ires
in range(chain.get_number_of_children()):
580 residue = chain.get_child(ires)
581 for iatom
in range(residue.get_number_of_children()):
582 atom = residue.get_child(iatom)
583 atom_particles.append(atom.get_particle())
584 return atom_particles
586 def _load_restraints_line(line, atom_particles):
587 """Parse a single Modeller restraints file line and return the
588 corresponding IMP restraint."""
591 if typ ==
'MODELLER5':
594 raise NotImplementedError(
"Only 'R' lines currently read from " + \
595 "Modeller restraints files")
596 form = int(spl.pop(0))
597 modalities = [int(spl.pop(0))]
598 features = [int(spl.pop(0))]
601 natoms = [int(spl.pop(0))]
602 nparam = int(spl.pop(0))
603 nfeat = int(spl.pop(0))
604 for i
in range(nfeat - 1):
605 modalities.append(int(spl.pop(0)))
606 features.append(int(spl.pop(0)))
607 natoms.append(int(spl.pop(0)))
608 atoms = [int(spl.pop(0))
for x
in range(natoms[0])]
609 for i
in range(len(atoms)):
610 atoms[i] = atom_particles[atoms[i] - 1]
611 parameters = [float(spl.pop(0))
for x
in range(nparam)]
612 restraint_generators = {
613 1 : _DistanceRestraintGenerator,
614 2 : _AngleRestraintGenerator,
615 3 : _DihedralRestraintGenerator,
617 restraint_gen = restraint_generators[features[0]]
618 return restraint_gen(form, modalities, atoms, parameters)
621 def _load_entire_restraints_file(filename, protein):
622 """Yield a set of IMP restraints from a Modeller restraints file."""
623 atoms = _get_protein_atom_particles(protein)
624 fh = open(filename,
'r')
627 rsr = _load_restraints_line(line, atoms)
630 except Exception, err:
631 print "Cannot read restraints file line:\n" + line
636 """Convert a Modeller restraints file into IMP::Restraint objects.
638 @deprecated Use ModelLoader instead.
640 @param filename Name of the Modeller restraints file.
641 @param protein An IMP::atom::Hierarchy containing the protein atoms
642 (e.g. as returned by read_pdb). The Modeller restraints
643 file is assumed to act on the same PDB described by
645 @return A Python list of the newly-created IMP::Restraint objects.
647 return list(_load_entire_restraints_file(filename, protein))
650 def _copy_residue(r, model):
651 """Copy residue information from modeller to imp"""
656 p.set_name(str(
"residue "+r.num));
660 def _copy_atom(a, model):
661 """Copy atom information from modeller"""
667 if hasattr(a,
'charge'):
669 if hasattr(a,
'type'):
671 ap.set_input_index(a.index)
674 def _copy_chain(c, model):
675 """Copy chain information from modeller"""
682 def _get_forcefield(submodel):
694 """Add radii to the hierarchy using the Modeller radius library, radii.lib.
695 Each radius is scaled by the given scale (Modeller usually scales radii
696 by a factor of 0.82). submodel specifies the topology submodel, which is
697 the column in radii.lib to use."""
701 for line
in open(filename):
702 if line.startswith(
'#'):
continue
705 radii[spl[0]] = float(spl[submodel])
715 """Read a Modeller model into IMP. After creating this object, the atoms
716 in the Modeller model can be loaded into IMP using the load_atoms()
717 method, then optionally any Modeller static restraints can be read in
718 with load_static_restraints() or load_static_restraints_file().
720 This class can also be used to read Modeller alignment structures;
721 however, only load_atoms() will be useful in such a case (since
722 alignment structures don't have restraints or other information).
724 @param modeller_model The Modeller model or alignment structure
728 def __init__(self, modeller_model):
729 self._modeller_model = modeller_model
732 """Construct an IMP::atom::Hierarchy that contains the same atoms as
733 the Modeller model or alignment structure.
735 IMP atoms created from a Modeller model will be given charges and
736 CHARMM types, extracted from the model. Alignment structures don't
737 contain this information, so the IMP atoms won't either.
739 @param model The IMP::Model object in which the hierarchy will be
740 created. The highest level hierarchy node is a PROTEIN.
741 @return the newly-created root IMP::atom::Hierarchy.
746 for chain
in self._modeller_model.chains:
751 for residue
in chain.residues:
752 rp = _copy_residue(residue, model)
753 hrp = IMP.atom.Hierarchy.decorate_particle(rp)
755 for atom
in residue.atoms:
756 ap = _copy_atom(atom, model)
757 hap = IMP.atom.Hierarchy.decorate_particle(ap)
759 self._atoms[atom.index] = ap
761 self._modeller_hierarchy = hpp
764 def _get_nonbonded_list(self, atoms, pair_filter, edat, distance):
769 if pair_filter
is None:
771 if edat.excl_local[0]:
772 pair_filter.set_bonds(list(self.
load_bonds()))
773 if edat.excl_local[1]:
775 if edat.excl_local[2]:
777 nbl.add_pair_filter(pair_filter)
781 """Load the Modeller bond topology into the IMP model. Each bond is
782 represented in IMP as an IMP::atom::Bond, with no defined length
783 or stiffness. These bonds are primarily useful as input to
784 IMP::atom::StereochemistryPairFilter, to exclude bond interactions
785 from the nonbonded list. Typically the contribution to the scoring
786 function from the bonds is included in the Modeller static restraints
787 (use load_static_restraints() or load_static_restraints_file() to
788 load these). If you want to regenerate the stereochemistry in IMP,
789 do not use these functions (as then stereochemistry scoring terms
790 and exclusions would be double-counted) and instead use the
791 IMP::atom::CHARMMTopology class.
793 You must call load_atoms() prior to using this function.
794 @see load_angles(), load_dihedrals(), load_impropers()
795 @return A generator listing all of the bonds.
797 if not hasattr(self,
'_modeller_hierarchy'):
798 raise ValueError(
"Call load_atoms() first.")
799 for (maa, mab)
in self._modeller_model.bonds:
800 pa = self._atoms[maa.index]
801 pb = self._atoms[mab.index]
811 IMP.atom.Bond.SINGLE).get_particle()
814 """Load the Modeller angle topology into the IMP model.
815 See load_bonds() for more details."""
816 return self._internal_load_angles(self._modeller_model.angles,
820 """Load the Modeller dihedral topology into the IMP model.
821 See load_bonds() for more details."""
822 return self._internal_load_angles(self._modeller_model.dihedrals,
826 """Load the Modeller improper topology into the IMP model.
827 See load_bonds() for more details."""
828 return self._internal_load_angles(self._modeller_model.impropers,
831 def _internal_load_angles(self, angles, angle_class):
832 if not hasattr(self,
'_modeller_hierarchy'):
833 raise ValueError(
"Call load_atoms() first.")
834 for modeller_atoms
in angles:
835 imp_particles = [self._atoms[x.index]
for x
in modeller_atoms]
837 a = angle_class.setup_particle(p,
839 yield a.get_particle()
842 """Convert a Modeller static restraints file into equivalent
843 IMP::Restraints. load_atoms() must have been called first to read
844 in the atoms that the restraints will act upon.
845 @param filename Name of the Modeller restraints file. The restraints
846 in this file are assumed to act upon the model read in by
847 load_atoms(); no checking is done to enforce this.
848 @return A Python generator of the newly-created IMP::Restraint
851 if not hasattr(self,
'_modeller_hierarchy'):
852 raise ValueError(
"Call load_atoms() first.")
853 return _load_entire_restraints_file(filename, self._modeller_hierarchy)
857 """Convert the current set of Modeller static restraints into equivalent
858 IMP::Restraints. load_atoms() must have been called first to read
859 in the atoms that the restraints will act upon.
860 @return A Python generator of the newly-created IMP::Restraint
863 class _RestraintGenerator(object):
864 """Simple generator wrapper"""
865 def __init__(self, gen):
867 def __iter__(self, *args, **keys):
869 def close(self, *args, **keys):
870 return self._gen.close(*args, **keys)
871 def next(self, *args, **keys):
872 return self._gen.next(*args, **keys)
873 def send(self, *args, **keys):
874 return self._gen.send(*args, **keys)
875 def throw(self, *args, **keys):
876 return self._gen.throw(*args, **keys)
879 rsrfile = os.path.join(t.tmpdir,
'restraints.rsr')
880 self._modeller_model.restraints.write(file=rsrfile)
883 wrap = _RestraintGenerator(gen)
889 """Convert Modeller dynamic restraints into IMP::Restraint objects.
891 For each currently active Modeller dynamic restraint
892 (e.g. soft-sphere, electrostatics) an equivalent IMP::Restraint
894 load_atoms() must have been called first to read
895 in the atoms that the restraints will act upon.
897 If pair_filter is given, it is an IMP::PairFilter object to exclude
898 pairs from the nonbonded lists used by the dynamic restraints.
899 Otherwise, an IMP::atom::StereochemistryPairFilter object is created
900 to exclude Modeller bonds, angles and dihedrals, as specified by
901 edat.excl_local. (Note that this calls load_bonds(), load_angles()
902 and load_dihedrals(), so will create duplicate lists of bonds if
903 those methods are called manually as well.)
905 @note Currently only soft-sphere, electrostatic and Lennard-Jones
906 restraints are loaded.
907 @return A Python generator of the newly-created IMP::Restraint
910 if not hasattr(self,
'_modeller_hierarchy'):
911 raise ValueError(
"Call load_atoms() first.")
912 edat = self._modeller_model.env.edat
913 libs = self._modeller_model.env.libs
917 if edat.dynamic_sphere:
920 nbl = self._get_nonbonded_list(atoms, pair_filter, edat, 0.)
923 libs.topology.submodel, edat.radii_factor)
930 if edat.dynamic_lennard
or edat.dynamic_coulomb:
932 d = max(edat.contact_shell - 3.0, 0.0)
933 nbl = self._get_nonbonded_list(atoms, pair_filter, edat, d)
934 ff = _get_forcefield(libs.topology.submodel)
935 ff.add_radii(self._modeller_hierarchy)
937 if edat.dynamic_lennard:
938 ff.add_well_depths(self._modeller_hierarchy)
940 edat.lennard_jones_switch[1])
944 if edat.dynamic_coulomb:
946 edat.coulomb_switch[1])
948 ps.set_relative_dielectric(edat.relative_dielectric)
953 """Construct an IMP::atom::Hierarchy from a PDB file.
955 @deprecated Use IMP::atom::read_pdb() instead to read a PDB file,
956 or ModelLoader to read a Modeller model.
958 @param name The name of the PDB file to read.
959 @param model The IMP::Model object in which the hierarchy will be
960 created. The highest level hierarchy node is a PROTEIN.
961 @param special_patches If given, a function that applies patches
962 (e.g. nucleic acid termini) to the Modeller model.
963 @return the newly-created root IMP::atom::Hierarchy.
965 e = modeller.environ()
966 e.libs.topology.read(
'${LIB}/top_heav.lib')
967 e.libs.parameters.read(
'${LIB}/par.lib')
969 modeller_model = modeller.scripts.complete_pdb(e, name,
970 special_patches=special_patches)
972 hpp = loader.load_atoms(model)
973 hpp.get_particle().set_name(name)
978 """Proxy of C++ IMP::modeller::MultipleBinormalRestraint class"""
979 __swig_setmethods__ = {}
980 for _s
in [
IMP.kernel.Restraint]: __swig_setmethods__.update(getattr(_s,
'__swig_setmethods__',{}))
981 __setattr__ =
lambda self, name, value: _swig_setattr(self, MultipleBinormalRestraint, name, value)
982 __swig_getmethods__ = {}
983 for _s
in [
IMP.kernel.Restraint]: __swig_getmethods__.update(getattr(_s,
'__swig_getmethods__',{}))
984 __getattr__ =
lambda self, name: _swig_getattr(self, MultipleBinormalRestraint, name)
985 def __init__(self, *args):
986 """__init__(IMP::modeller::MultipleBinormalRestraint self, IMP::kernel::ParticleQuad const & q1, IMP::kernel::ParticleQuad const & q2) -> MultipleBinormalRestraint"""
987 this = _IMP_modeller.new_MultipleBinormalRestraint(*args)
988 try: self.this.append(this)
989 except: self.this = this
990 def add_term(self, *args):
991 """add_term(MultipleBinormalRestraint self, BinormalTerm term)"""
992 return _IMP_modeller.MultipleBinormalRestraint_add_term(self, *args)
994 def do_get_inputs(self):
995 """do_get_inputs(MultipleBinormalRestraint self) -> IMP::kernel::ModelObjectsTemp"""
996 return _IMP_modeller.MultipleBinormalRestraint_do_get_inputs(self)
998 def get_version_info(self):
999 """get_version_info(MultipleBinormalRestraint self) -> VersionInfo"""
1000 return _IMP_modeller.MultipleBinormalRestraint_get_version_info(self)
1003 """__str__(MultipleBinormalRestraint self) -> std::string"""
1004 return _IMP_modeller.MultipleBinormalRestraint___str__(self)
1007 """__repr__(MultipleBinormalRestraint self) -> std::string"""
1008 return _IMP_modeller.MultipleBinormalRestraint___repr__(self)
1011 return _object_cast_to_MultipleBinormalRestraint(o)
1012 get_from = staticmethod(get_from)
1014 MultipleBinormalRestraint_swigregister = _IMP_modeller.MultipleBinormalRestraint_swigregister
1015 MultipleBinormalRestraint_swigregister(MultipleBinormalRestraint)
1018 """Proxy of C++ IMP::modeller::BinormalTerm class"""
1019 __swig_setmethods__ = {}
1020 __setattr__ =
lambda self, name, value: _swig_setattr(self, BinormalTerm, name, value)
1021 __swig_getmethods__ = {}
1022 __getattr__ =
lambda self, name: _swig_getattr(self, BinormalTerm, name)
1024 """__init__(IMP::modeller::BinormalTerm self) -> BinormalTerm"""
1025 this = _IMP_modeller.new_BinormalTerm()
1026 try: self.this.append(this)
1027 except: self.this = this
1028 def set_correlation(self, *args):
1029 """set_correlation(BinormalTerm self, double correlation)"""
1030 return _IMP_modeller.BinormalTerm_set_correlation(self, *args)
1032 def set_weight(self, *args):
1033 """set_weight(BinormalTerm self, double weight)"""
1034 return _IMP_modeller.BinormalTerm_set_weight(self, *args)
1036 def set_means(self, *args):
1037 """set_means(BinormalTerm self, IMP::FloatPair means)"""
1038 return _IMP_modeller.BinormalTerm_set_means(self, *args)
1040 def set_standard_deviations(self, *args):
1041 """set_standard_deviations(BinormalTerm self, IMP::FloatPair stdevs)"""
1042 return _IMP_modeller.BinormalTerm_set_standard_deviations(self, *args)
1044 def show(self, *args):
1046 show(BinormalTerm self, _ostream out=std::cout)
1047 show(BinormalTerm self)
1049 return _IMP_modeller.BinormalTerm_show(self, *args)
1052 """__str__(BinormalTerm self) -> std::string"""
1053 return _IMP_modeller.BinormalTerm___str__(self)
1056 """__repr__(BinormalTerm self) -> std::string"""
1057 return _IMP_modeller.BinormalTerm___repr__(self)
1059 __swig_destroy__ = _IMP_modeller.delete_BinormalTerm
1060 __del__ =
lambda self :
None;
1061 BinormalTerm_swigregister = _IMP_modeller.BinormalTerm_swigregister
1062 BinormalTerm_swigregister(BinormalTerm)
1065 def get_module_version():
1066 """get_module_version() -> std::string const"""
1067 return _IMP_modeller.get_module_version()
1070 """get_example_path(std::string fname) -> std::string"""
1071 return _IMP_modeller.get_example_path(*args)
1074 """get_data_path(std::string fname) -> std::string"""
1075 return _IMP_modeller.get_data_path(*args)
1076 import _version_check
1077 _version_check.check_version(get_module_version())
static Residue setup_particle(kernel::Model *m, ParticleIndex pi, ResidueType t, int index, int insertion_code)
Lower bound harmonic function (non-zero when feature < mean)
def load_static_restraints
Convert the current set of Modeller static restraints into equivalent IMP::Restraints.
static Charged setup_particle(kernel::Model *m, ParticleIndex pi, Float charge)
def read_pdb
Construct an IMP::atom::Hierarchy from a PDB file.
std::string get_example_path(std::string file_name)
Return the path to installed example data for this module.
def load_bonds
Load the Modeller bond topology into the IMP model.
A Modeller restraint which evaluates all defined IMP restraints.
Coulomb (electrostatic) score between a pair of particles.
static CHARMMAtom setup_particle(kernel::Model *m, ParticleIndex pi, String charmm_type)
static Atom setup_particle(kernel::Model *m, ParticleIndex pi, Atom other)
Various classes to hold sets of particles.
Upper bound harmonic function (non-zero when feature > mean)
A decorator for a particle which has bonds.
def load_impropers
Load the Modeller improper topology into the IMP model.
Make CGAL functionality available to IMP.
void set_check_level(CheckLevel tf)
Control runtime checks in the code.
Low level functionality (logging, error handling, profiling, command line flags etc) that is used by ...
std::string get_data_path(std::string file_name)
Return the full path to installed data.
static XYZ setup_particle(kernel::Model *m, ParticleIndex pi)
Dihedral restraint between four particles.
def load_static_restraints_file
Convert a Modeller static restraints file into equivalent IMP::Restraints.
A score on the distance between the surfaces of two spheres.
Return all close unordered pairs of particles taken from the SingletonContainer.
def load_dynamic_restraints
Convert Modeller dynamic restraints into IMP::Restraint objects.
Distance restraint between two particles.
Composable functors to implement scores via compile-time composition.
An IMP restraint using all defined Modeller restraints.
static bool get_is_setup(const IMP::kernel::ParticleAdaptor &p)
CHARMM force field parameters.
Bond create_bond(Bonded a, Bonded b, Bond o)
Connect the two wrapped particles by a custom bond.
def load_dihedrals
Load the Modeller dihedral topology into the IMP model.
static Float get_k_from_standard_deviation(Float sd, Float t=297.15)
Return the k to use for a given Gaussian standard deviation.
virtual VersionInfo get_version_info() const
Get information about the module and version of the object.
A single binormal term in a MultipleBinormalRestraint.
Angle restraint between three particles.
static XYZR setup_particle(kernel::Model *m, ParticleIndex pi)
static Bonded setup_particle(kernel::Model *m, ParticleIndex pi)
Lennard-Jones score between a pair of particles.
A particle that describes an angle between three particles.
static Hierarchy setup_particle(kernel::Model *m, kernel::ParticleIndex pi, kernel::ParticleIndexesAdaptor children=kernel::ParticleIndexesAdaptor())
Store a kernel::ParticleIndexes.
Hierarchies get_by_type(Hierarchy mhd, GetByType t)
Base functionality and abstract base classes for representation, scoring and sampling.
def load_atoms
Construct an IMP::atom::Hierarchy that contains the same atoms as the Modeller model or alignment str...
A restraint is a term in an IMP ScoringFunction.
A decorator for a particle with x,y,z coordinates.
static Chain setup_particle(kernel::Model *m, ParticleIndex pi, std::string id)
def load_restraints_file
Convert a Modeller restraints file into IMP::Restraint objects.
Class to handle individual model particles.
def add_soft_sphere_radii
Add radii to the hierarchy using the Modeller radius library, radii.lib.
A particle that describes a dihedral angle between four particles.
def load_angles
Load the Modeller angle topology into the IMP model.
Modeller-style multiple binormal (phi/psi) restraint.
Basic functionality that is expected to be used by a wide variety of IMP users.
General purpose algebraic and geometric methods that are expected to be used by a wide variety of IMP...
void show(Hierarchy h, std::ostream &out=std::cout)
Print out a molecular hierarchy.
virtual ModelObjectsTemp do_get_inputs() const =0
A filter that excludes bonds, angles and dihedrals.
Read a Modeller model into IMP.
std::string get_data_path(std::string file_name)
Return the full path to installed data.
Smooth interaction scores by switching the derivatives (force switch).
Output IMP model data in various file formats.
CheckLevel get_check_level()
Get the current audit mode.
Functionality for loading, creating, manipulating and scoring atomic structures.
Hierarchies get_leaves(const Selection &h)
Applies a PairScore to each Pair in a list.
Closed cubic spline function.
A decorator for an atom that has a defined CHARMM type.
Harmonic function (symmetric about the mean)