2 from __future__
import print_function
18 from math
import sqrt, exp
19 from io
import StringIO
21 from random
import random
23 kB = (1.381 * 6.02214) / 4184.0
28 def __init__(self, cont, md, n_md_steps):
31 self.n_md_steps = n_md_steps
38 for i
in range(self.cont.get_number_of_particles()):
39 p = self.cont.get_particle(i)
42 self.oldcoords.append(d.get_coordinates())
44 def propose_move(self, prob):
45 self.md.optimize(self.n_md_steps)
48 for i
in range(self.cont.get_number_of_particles()):
49 p = self.cont.get_particle(i)
53 d.set_coordinates(self.oldcoords[i])
55 def get_number_of_steps(self):
56 return self.n_md_steps
58 def set_number_of_steps(self, nsteps):
59 self.n_md_steps = nsteps
65 def __init__(self, model):
68 def add_mover(self, mv):
74 def set_return_best(self, thing):
77 def set_move_probability(self, thing):
81 pot = self.m.evaluate(
False)
83 kin = self.mv.md.get_kinetic_energy()
86 def metropolis(self, old, new):
89 print(
": old %f new %f deltaE %f new_epot: %f" % (old, new, deltaE,
96 return exp(-deltaE / kT) > random()
98 def optimize(self, nsteps):
100 print(
"=== new MC call")
103 for i
in range(nsteps):
104 print(
"MC step %d " % i, end=
' ')
106 self.mv.md.assign_velocities(self.kT / kB)
108 old = self.get_energy()
110 self.mv.propose_move(1)
112 new = self.get_energy()
113 if self.metropolis(old, new):
123 def get_number_of_forward_steps(self):
129 """nonspecific methods used across all shared function objects.
131 - Their name starts with the name of the parent function (e.g.
133 - they don't store anything in the class, but instead
134 return all created objects.
135 Exceptions: the model, which is self._m
136 the statistics class, which is self.stat
137 - they store what they have to store in the model (e.g. restraints)
138 - they don't print out anything except for long routines (e.g. NOE
140 - the prior RestraintSet is added to the model when it is created, so
141 that when it is passed to another function, it is not added twice.
147 def set_checklevel(self, value):
150 def set_loglevel(self, value):
153 def m(self, name, *args, **kw):
154 "wrapper to call methods of m"
155 func = getattr(self._m, name)
156 return func(*args, **kw)
159 "moves to wd and creates model"
165 self, initpdb, top, par, selector, pairscore,
166 ff_temp=300.0, disulfides=
None, representation=
'custom'):
167 """creates a CHARMM protein representation.
168 creates the charmm force field, bonded and nonbonded.
169 - initpdb: initial structure in pdb format
170 - top is a CHARMM top.lib, read if representation=='custom' (default)
171 - par is a CHARMM par.lib
172 - selector is an instance of
173 one of the selectors of IMP.atom, for example
174 IMP.atom.NonWaterNonHydrogenPDBSelector().
175 - pairscore is an instance of a Pair Score to score the interaction
176 between two atoms. usually, it's either
177 LennardJonesDistancePairScore(0,1) or
178 RepulsiveDistancePairScore(0,1)
179 - ff_temp is the temperature at which the force field should be
181 - disulfides: if not None, a list of tuples corresponding to residue
182 numbers that should be cross-linked. Residues should be
183 cysteines, and residue numbering should start at 0.
184 - representation: 'full' : all-atom CHARMM force field
185 'heavy': heavy atom CHARMM forcefield with polar H
186 'calpha': only C alphas, ball and stick model with
187 bondlength 3.78 angstrom, beads at VdW
188 contact, and harmonic restraint between
190 'custom' (default) : read given CHARMM top and par
192 Returns: prot, ff, rsb, rs
194 - ff: the force field
195 - rsb: the RestraintSet on bonded interactions
196 - rs: the RestraintSet on nonbonded interactions. Both are weighted
201 if not prot.get_is_valid(
True):
202 raise ValueError(
"invalid hierarchy!")
203 if representation ==
'custom':
206 elif representation ==
'heavy':
208 elif representation ==
'full':
210 elif representation ==
'calpha':
213 raise NotImplementedError(representation)
214 if representation ==
'calpha':
215 print(
"setting up simplified C alpha force field")
222 for chain
in prot.get_children():
223 residues = [(chain.get_child(i), chain.get_child(i + 1))
224 for i
in range(chain.get_number_of_children() - 1)]
225 residues = [(i.get_child(0).get_particle(),
226 j.get_child(0).get_particle())
227 for (i, j)
in residues]
228 pairs.extend(residues)
247 rsb.add_restraint(br)
248 rsb.set_weight(1.0 / (kB * ff_temp))
251 nonbonded_pair_filter.set_bonds(bonds)
254 print(
"setting up CHARMM forcefield")
258 topology = ff.create_topology(prot)
262 topology.apply_default_patches()
265 s = topology.get_segment(0)
266 dis = ff.get_patch(
'DISU')
267 for (i, j)
in disulfides:
270 r0 = s.get_residue(i)
271 r1 = s.get_residue(j)
273 r0.set_patched(
False)
275 r1.set_patched(
False)
277 print(
"added disulfide bridge between cysteines %d and %d" % (i, j))
283 topology.setup_hierarchy(prot)
296 ff.add_well_depths(prot)
297 nonbonded_pair_filter = r.get_pair_filter()
309 nbl.add_pair_filter(nonbonded_pair_filter)
315 return prot, ff, rsb, rs
318 """sets up a Scale particle to the initial default value. It can
319 optionnally be constrained between two positive bounds, or else its
320 range is 0 to infinity.
325 scale.set_lower(lower)
327 scale.set_upper(upper)
331 """given a list of scales, returns a RestraintSet('prior') with weight
332 1.0 that contains a list of vonMisesKappaJeffreysRestraint on each scale.
333 If argument prior_rs is used, add them to that RestraintSet instead.
337 self._m.add_restraint(prior_rs)
338 prior_rs.set_weight(1.0)
344 """given a list of scales, returns a RestraintSet('prior') with weight
345 1.0 that contains a list of JeffreysRestraint on each scale.
346 If argument prior_rs is used, add them to that RestraintSet instead.
350 self._m.add_restraint(prior_rs)
353 prior_rs.add_restraint(jr)
357 """given a list of scales, returns a RestraintSet('prior') with weight
358 1.0 that contains a list of vonMisesKappaConjugateRestraint on each
359 scale. If argument prior_rs is used, add them to that RestraintSet
362 if not (0 <= R <= c):
363 raise ValueError(
"parameters R and c should satisfy 0 <= R <= c")
366 self._m.add_restraint(prior_rs)
368 prior_rs.add_restraint(
373 """scans the prot hierarchy and tries to find atom = (resno, name)
374 assumes that resno follows the same numbering as the sequence.
375 Stores already found atoms for increased speed.
377 if not hasattr(self,
'__memoized'):
378 self.__memoized = {prot: {}}
380 return self.__memoized[prot][atom]
385 residue_index=atom[0],
387 ).get_selected_particles()
389 print(
"found multiple atoms for atom %d %s!" % atom)
393 print(
"atom %d %s not found" % atom)
395 self.__memoized[prot][atom] = p0
400 Sets up a vonMises torsion angle restraint using the given kappa
401 particle as concentration parameter. Returns the restraint.
402 data is a list of observations.
408 Sets up a vonMises torsion angle restraint using the given kappa
409 particle as concentration parameter. Returns the restraint.
410 data is (mean, standard deviation).
412 raise NotImplementedError
416 Sets up a lognormal distance restraint using the given sigma and gamma.
417 Returns the restraint.
418 assumes atoms = (atom1, atom2)
419 where atom1 is (resno, atomname) and resno is the residue sequence
437 """Reads an ambiguous NOE restraint. contributions is a list of
438 (atom1, atom2) pairs, where atom1 is (resno, atomname). Sets up a
439 lognormal distance restraint using the given sigma and gamma.
440 Returns the restraint.
443 pairs = [(self.
find_atom(i, prot).get_particle(),
444 self.
find_atom(j, prot).get_particle())
for (i, j)
in
449 pairs, sigma, gamma, distance ** (-6))
453 self, prot, seqfile, tblfile, name=
'NOE', prior_rs=
None,
454 bounds_sigma=(1.0, 0.1, 100), bounds_gamma=(1.0, 0.1, 100),
455 verbose=
True, sequence_match=(1, 1)):
456 """read TBL file and store NOE restraints, using one sigma and one gamma
457 for the whole dataset. Creates the necessary uninformative priors.
458 - prot: protein hierarchy
459 - seqfile: a file with 3-letter sequence
460 - tblfile: a TBL file with the restraints
461 - name: an optional name for the restraintset
462 - prior_rs: when not None, add new sigma and gamma to this
463 RestraintSet instance.
464 - bounds_sigma or gamma: tuple of (initial value, lower, upper bound)
465 bounds can be -1 to set to default range [0,+inf]
466 - verbose: be verbose (default True)
467 - sequence_match : (noe_start, sequence_start)
468 Returns: data_rs, prior_rs, sigma, gamma
472 print(
"Prior for the NOE Scales")
480 first_residue_number=sequence_match[1])
481 tblr = IMP.isd.TBLReader.TBLReader(sequence,
482 sequence_match=sequence_match)
483 restraints = tblr.read_distances(tblfile,
'NOE')[
'NOE']
484 for i, restraint
in enumerate(restraints):
485 if verbose
and i % 100 == 0:
486 print(
"\r%d" % i, end=
' ')
491 if len(restraint[0]) > 1:
494 restraint[1], sigma, gamma)
497 restraint[1], sigma, gamma)
500 print(
"\r%d NOE restraints read" % i)
503 self._m.add_restraint(rs)
504 return rs, prior_rs, sigma, gamma
507 verbose=
True, sequence_match=(1, 1)):
508 """read TBL file and store NOE restraints, using the marginal of the
509 lognormal with one sigma and one gamma, for the whole dataset.
510 - prot: protein hierarchy
511 - seqfile: a file with 3-letter sequence
512 - tblfile: a TBL file with the restraints
513 - name: an optional name for the restraintset
514 - verbose: be verbose (default True)
515 - sequence_match : (noe_start, sequence_start)
522 first_residue_number=sequence_match[1])
523 tblr = IMP.isd.TBLReader.TBLReader(sequence,
524 sequence_match=sequence_match)
525 restraints = tblr.read_distances(tblfile,
'NOE')[
'NOE']
527 for i, restraint
in enumerate(restraints):
528 if verbose
and i % 100 == 0:
529 print(
"\r%d" % i, end=
' ')
535 pairs = [(self.
find_atom(i, prot).get_particle(),
536 self.
find_atom(j, prot).get_particle())
for (i, j)
in
539 ln.add_contribution(pairs, restraint[4])
542 print(
"\r%d NOE contributions added" % (len(restraints)))
543 self._m.add_restraint(rs)
548 """read TBL file and store lognormal restraints, using the marginal of the
549 lognormal with one sigma and gamma=1, for the whole dataset.
550 - prot: protein hierarchy
551 - seqfile: a file with 3-letter sequence
552 - tblfile: a TBL file with the restraints
553 - name: an optional name for the restraintset
554 - verbose: be verbose (default True)
561 tblr = IMP.isd.TBLReader.TBLReader(sequence)
562 restraints = tblr.read_distances(tblfile,
'HBond')[
'HBond']
564 for i, restraint
in enumerate(restraints):
565 if verbose
and i % 100 == 0:
566 print(
"\r%d" % i, end=
' ')
572 pairs = [(self.
find_atom(i, prot).get_particle(),
573 self.
find_atom(j, prot).get_particle())
for (i, j)
in
576 ln.add_contribution(pairs, restraint[4])
579 print(
"\r%d Hbond contributions added" % (len(restraints)))
580 self._m.add_restraint(rs)
584 sequence_match=(1, 1), name=
'TALOS', prior_rs=
None,
585 bounds_kappa=(1.0, 0.1, 10), verbose=
True, prior=
'jeffreys',
587 """read TALOS dihedral angle data, and create restraints for phi/psi
588 torsion angles, along with the prior for kappa, which is a scale for the
589 whole dataset, compare to 1/sigma**2 in the NOE case.
590 - prot: protein hierarchy
591 - seqfile: a file with 3-letter sequence
592 - talos_data: either a file (pred.tab), or a folder (pred/) in which all
593 files in the form res???.tab can be found. If possible,
594 try to provide the folder, as statistics are more
595 accurate in that case.
596 - fulldata : either True or False, whether the data is the full TALOS
597 output (predAll.tab or pred/ folder), or just the averages
599 - sequence_match : (talos_no, sequence_no) to adjust for different
601 - name: an optional name for the restraintset
602 - prior_rs: when not None, add new kappa(s) to this RestraintSet instance.
603 - bounds_kappa: tuple of (initial value, lower, upper bound)
604 bounds can be -1 to set to default range [0,+inf]
605 - verbose: be verbose (default True)
606 - prior: either 'jeffreys' or a tuple (R,c), which signifies to use the
607 conjugate prior of the von Mises restraint, with parameters R
608 and c. Good values are R=0 and c=10. Default: jeffreys prior.
609 - keep_all: in case of a folder for 'talos_data', whether to keep
610 candidates marked as 'outliers' by TALOS, or to include them.
611 Returns: data_rs, prior_rs, kappa
616 print(
"Prior for von Mises Kappa")
621 print(
"reading data")
624 first_residue_no=sequence_match[1])
627 sequence_match=sequence_match)
628 if os.path.isdir(talos_data):
630 for i, res
in enumerate(glob(os.path.join(talos_data,
'res???.tab'))):
631 if verbose
and i % 100:
632 print(
"\r%d" % i, end=
' ')
637 talosr.read(talos_data)
641 sequence_match=sequence_match)
642 talosr.read(talos_data)
644 data = talosr.get_data()
646 print(
"\rread dihedral data for %d residues" % len(data))
647 print(
"creating restraints")
649 for resno, datum
in data.items():
650 phidata = datum[
'phi']
651 psidata = datum[
'psi']
661 avgR.append(r.get_R0())
666 avgR.append(r.get_R0())
672 avgR.append(r.get_R0())
677 avgR.append(r.get_R0())
679 print(
"%s Restraints created. Average R0: %f" % \
680 (len(avgR), sum(avgR) / float(len(avgR))))
681 self._m.add_restraint(rs)
682 return rs, prior_rs, kappa
685 self, prot, profilefile, name=
'SAXS',
686 ff_type=IMP.saxs.HEAVY_ATOMS):
687 """read experimental SAXS profile and apply restraint the standard
689 Returns: a restraintset and the experimental profile
695 rs.add_restraint(saxs_restraint)
696 self._m.add_restraint(rs)
697 return rs, saxs_profile
699 def _setup_md(self, prot, temperature=300.0, thermostat='berendsen',
700 coupling=500, md_restraints=
None, timestep=1.0, recenter=1000,
702 """setup molecular dynamics
703 - temperature: target temperature
704 - thermostat: one of 'NVE', rescale_velocities',
705 'berendsen', 'langevin'
706 - coupling: coupling constant (tau (fs) for berendsen,
707 gamma (/fs) for langevin)
708 - md_restraints: if not None, specify the terms of the energy to be used
709 during the md steps via a list of restraints.
710 - timestep: in femtoseconds.
711 - recenter: recenter the molecule every so many steps (Langevin only)
712 - momentum: remove angular momentum every so many steps (Berendsen only)
713 Returns: an instance of md and an instance of an OptimizerState (the
714 thermostat), or None if NVE.
718 md.assign_velocities(temperature)
719 md.set_time_step(timestep)
720 if thermostat ==
'NVE':
722 elif thermostat ==
'rescale_velocities':
725 md.add_optimizer_state(os)
726 elif thermostat ==
'berendsen':
729 md.add_optimizer_state(os)
732 md.add_optimizer_state(mom)
733 elif thermostat ==
'langevin':
736 md.add_optimizer_state(os)
741 raise NotImplementedError(thermostat)
744 md.set_restraints(md_restraints)
748 def _setup_normal_mover(self, particle, floatkey, stepsize):
749 """setup NormalMover to move particle's floatkey attribute
750 by a gaussian with standard deviation 'stepsize'
751 Returns: mover instance.
757 def _setup_md_mover(self, md, particles, temperature, n_md_steps=10):
758 """setup MDMover using md and particles.
760 - particles: particles to move, usually the leaves of the protein
762 - n_md_steps: number of md steps to perform on each move
763 Returns: mover instance.
766 cont.add_particles(particles)
767 return IMP.atom.MDMover(cont, md, temperature, n_md_steps)
769 def _setup_mc(self, mover, temperature=300.0, mc_restraints=None):
770 """setup monte carlo using a certain mover.
771 - mover: mover to use, NormalMover or MDMover usually.
772 - temperature: target temperature.
773 - mc_restraints: if not None, list of restraints for the metropolis
775 Returns: mc instance.
781 mc.set_kt(kB * temperature)
783 mc.set_return_best(
False)
786 mc.set_restraints(mc_restraints)
790 gamma=0.01, n_md_steps=10,
791 md_restraints=
None, mc_restraints=
None, timestep=1.0,
792 sd_threshold=0.0, sd_stepsize=0.01, sd_maxsteps=100):
793 """setup hybrid monte-carlo on protein. Uses basin hopping with steepest
794 descent minimization.
795 - prot: protein hierarchy.
796 - temperature: target temperature.
797 - gamma: coupling constant for langevin (/fs)
798 - n_md_steps: number of md steps per mc step
799 - md_restraints: if not None, specify the terms of the energy to be used
801 - mc_restraints: if not None, use these energy terms for the metropolis
803 - timestep: time step for md, in femtoseconds.
804 - sd_threshold: stop steepest descent after energy difference drops
806 - sd_stepsize: stepsize to use for the steepest descent, in angstrom.
807 - sd_maxsteps: maximum number of steps for steepest descent
808 Returns: hmc, mdmover, md and OptimizerState (thermostat)
810 raise NotImplementedError
811 md, os = self._setup_md(prot, temperature=temperature,
812 thermostat=
'langevin', coupling=gamma,
813 md_restraints=md_restraints, timestep=timestep)
815 mdmover = self._setup_md_mover(md, particles, temperature, n_md_steps)
816 hmc = self._setup_mc(mdmover, temperature, mc_restraints)
818 sd.set_threshold(sd_threshold)
819 sd.set_step_size(sd_stepsize)
820 hmc.set_local_optimizer(sd)
821 hmc.set_local_steps(sd_maxsteps)
822 hmc.set_use_basin_hopping(
True)
823 return hmc, mdmover, md, os
826 n_md_steps=100, md_restraints=
None, mc_restraints=
None,
828 """setup hybrid monte-carlo on protein. Uses NVE MD and tries the full
829 - prot: protein hierarchy.
830 - temperature: target temperature.
831 - coupling: coupling constant (tau (fs) for berendsen,
832 gamma (/fs) for langevin)
833 - n_md_steps: number of md steps per mc step
834 - md_restraints: if not None, specify the terms of the energy to be used
836 - mc_restraints: if not None, use these energy terms for the metropolis
838 - timestep: time step for md, in femtoseconds.
839 - sd_threshold: stop steepest descent after energy difference drops
841 - sd_stepsize: stepsize to use for the steepest descent, in angstrom.
842 - sd_maxsteps: maximum number of steps for steepest descent
843 Returns: hmc, mdmover and md
845 prot = self._p[
'prot']
846 md, os = self._setup_md(prot, temperature=temperature,
847 thermostat=
'NVE', coupling=
None, timestep=1.0,
848 md_restraints=md_restraints)
851 cont.add_particles(particles)
852 mdmover = PyMDMover(cont, md, n_md_steps)
858 mc.add_mover(mdmover)
860 mc.set_kt(kB * temperature)
862 mc.set_return_best(
False)
864 mc.set_move_probability(1.0)
865 return mc, mdmover, md
868 mc_restraints=
None, nm_stepsize=0.1):
869 """sets up monte carlo on nuisance, at a certain target temperature,
870 optionnally using a certain set of restraints only.
871 - nuis: nuisance particle
872 - temperature: target temperature
873 - mc_restraints: optional set of restraints from which the energy should
874 be drawn instead of the energy of the complete system.
875 - floatkey: the floatkey to move.
876 - nm_stepsize: the stepsize of the normal mover
877 Returns: mc instance, nm instance.
879 nm = self._setup_normal_mover(nuis, nuis.get_nuisance_key(),
881 mc = self._setup_mc(nm, temperature, mc_restraints)
884 def _mc_and_update_nm(self, nsteps, mc, nm, stats_key,
885 adjust_stepsize=
True):
886 """run mc using a normal mover on a single particle,
887 update stepsize and store nsteps, acceptance and stepsize in the
888 statistics instance self.stat by using the key stats_key.
892 naccept = mc.get_number_of_forward_steps()
894 self.stat.increment_counter(stats_key, nsteps)
896 accept = float(naccept) / nsteps
897 self.stat.update(stats_key,
'acceptance', accept)
898 stepsize = nm.get_sigma()
899 self.stat.update(stats_key,
'stepsize', stepsize)
902 if 0.4 < accept < 0.6:
908 nm.set_sigma(stepsize * 2 * accept)
910 def _hmc_and_update_md(self, nsteps, hmc, mv, stats_key,
911 adjust_stepsize=
True):
912 """run hmc, update stepsize and print statistics. Updates number of MD
913 steps to reach a target acceptance between 0.4 and 0.6, sends
914 statistics to self.stat. MD steps are always at least 10 and at most 500.
917 naccept = hmc.get_number_of_forward_steps()
918 self.stat.increment_counter(stats_key, nsteps)
919 accept = float(naccept) / nsteps
920 self.stat.update(stats_key,
'acceptance', accept)
921 mdsteps = mv.get_number_of_steps()
922 self.stat.update(stats_key,
'n_md_steps', mdsteps)
924 if 0.4 < accept < 0.6:
926 mdsteps = int(mdsteps * 2 ** (accept - 0.5))
931 mv.set_nsteps(mdsteps)
934 """returns a string corresponding to the pdb structure of hierarchy
939 return output.getvalue()
941 def get_netcdf(self, prot):
942 raise NotImplementedError
945 temperature=300.0, prot_coordinates=
None):
946 """updates statistics for md simulation: target temp, kinetic energy,
947 kinetic temperature, writes coordinates and increments counter.
948 - md_key: stats md key
949 - nsteps: number of steps performed.
950 - md_instance: instance of the MolecularDynamics class.
951 - temperature: target temperature
952 - prot_coordinates: protein coordinates to be passed to the stats class,
955 self.stat.update(md_key,
'target_temp', temperature)
956 kinetic = md_instance.get_kinetic_energy()
957 self.stat.update(md_key,
'E_kinetic', kinetic)
958 self.stat.update(md_key,
'instant_temp',
959 md_instance.get_kinetic_temperature(kinetic))
960 self.stat.update_coordinates(md_key,
'protein', prot_coordinates)
961 self.stat.increment_counter(md_key, nsteps)
964 """shortcut for a frequent series of operations on MC simulations'
965 statistics. Creates an entry for acceptance, stepsize and one
966 coordinate set printed in the statistics file.
969 mc_key = stat.add_category(name=name)
971 stat.add_entry(mc_key, entry=Entry(
'temperature',
'%10G',
None))
972 stat.add_entry(mc_key, entry=Entry(
'acceptance',
'%10G',
None))
973 stat.add_entry(mc_key, entry=Entry(
'stepsize',
'%10G',
None))
975 stat.add_entry(mc_key, entry=Entry(coord,
'%10G',
None))
977 stat.add_entry(mc_key, name=
'counter')
981 """shortcut for a frequent series of operations on MD simulations'
982 statistics. Creates an entry for target temp, instantaneous temp,
983 kinetic energy, and one set of coordinates called 'protein' by
987 md_key = stat.add_category(name=name)
989 stat.add_entry(md_key, entry=Entry(
'target_temp',
'%10G',
None))
990 stat.add_entry(md_key, entry=Entry(
'instant_temp',
'%10G',
None))
991 stat.add_entry(md_key, entry=Entry(
'E_kinetic',
'%10G',
None))
993 stat.add_coordinates(md_key, coord)
995 stat.add_entry(md_key, name=
'counter')
999 """shortcut for a frequent series of operations on HMC simulations'
1000 statistics. Adds acceptance, number of MD steps and a trajectory for
1004 hmc_key = stat.add_category(name=name)
1006 stat.add_entry(hmc_key, entry=Entry(
'temperature',
'%10G',
None))
1007 stat.add_entry(hmc_key, entry=Entry(
'acceptance',
'%10G',
None))
1008 stat.add_entry(hmc_key, entry=Entry(
'n_md_steps',
'%10G',
None))
1009 stat.add_entry(hmc_key, entry=Entry(
'E_kinetic',
'%10G',
None))
1011 stat.add_coordinates(hmc_key, coord)
1013 stat.add_entry(hmc_key, name=
'counter')
1017 """rescale the velocities of a bunch of particles having vx vy and vz
1023 p.set_value(k, p.get_value(k) * factor)
Applies a SingletonScore to each Singleton in a list.
def rescale_velocities
rescale the velocities of a bunch of particles having vx vy and vz floatkeys
CHARMMParameters * get_heavy_atom_CHARMM_parameters()
def init_model_ambiguous_NOE_restraint
Reads an ambiguous NOE restraint.
Maintains temperature during molecular dynamics.
Enforce CHARMM stereochemistry on the given Hierarchy.
Atoms get_phi_dihedral_atoms(Residue rd)
Return the atoms comprising the phi dihedral.
void write_pdb(const Selection &mhd, base::TextOutput out, unsigned int model=1)
def do_md_protein_statistics
updates statistics for md simulation: target temp, kinetic energy, kinetic temperature, writes coordinates and increments counter.
def init_model_charmm_protein_and_ff
creates a CHARMM protein representation.
def find_atom
scans the prot hierarchy and tries to find atom = (resno, name) assumes that resno follows the same n...
def init_model_NOEs
read TBL file and store NOE restraints, using one sigma and one gamma for the whole dataset...
Various classes to hold sets of particles.
def init_simulation_setup_nuisance_mc
sets up monte carlo on nuisance, at a certain target temperature, optionnally using a certain set of ...
A decorator for a particle which has bonds.
void set_log_level(LogLevel l)
Set the current global log level.
def init_simulation_setup_protein_hmc_nve
setup hybrid monte-carlo on protein.
Calculate score based on fit to SAXS profile.
void set_check_level(CheckLevel tf)
Control runtime checks in the code.
Object used to hold a set of restraints.
A simple steepest descent optimizer.
def init_model_TALOS
read TALOS dihedral angle data, and create restraints for phi/psi torsion angles, along with the prio...
static Scale setup_particle(kernel::Model *m, ParticleIndex pi)
Ambiguous NOE distance restraint between a number of pairs of particles.
def get_pdb
returns a string corresponding to the pdb structure of hierarchy prot.
Hierarchy get_residue(Hierarchy mhd, unsigned int index)
Get the residue with the specified index.
def init_model_base
moves to wd and creates model
def init_model_NOEs_marginal
read TBL file and store NOE restraints, using the marginal of the lognormal with one sigma and one ga...
Return all close unordered pairs of particles taken from the SingletonContainer.
Classes to handle ISD statistics files.
def init_model_NOE_restraint
Sets up a lognormal distance restraint using the given sigma and gamma.
static bool get_is_setup(const IMP::kernel::ParticleAdaptor &p)
CHARMM force field parameters.
Bond create_custom_bond(Bonded a, Bonded b, Float length, Float stiffness=-1)
Connect the two wrapped particles by a custom bond.
Removes rigid translation and rotation from the particles.
def init_model_vonMises_restraint_full
Sets up a vonMises torsion angle restraint using the given kappa particle as concentration parameter...
Store a kernel::ParticleIndexPairs.
Conjugate prior for the concentration parameter of a von Mises distribution.
Maintains temperature during molecular dynamics by velocity scaling.
static Bonded setup_particle(kernel::Model *m, ParticleIndex pi)
def init_model_jeffreys_kappa
given a list of scales, returns a RestraintSet('prior') with weight 1.0 that contains a list of vonMi...
Simple molecular dynamics optimizer.
Store a kernel::ParticleIndexes.
Atoms get_psi_dihedral_atoms(Residue rd)
Return the atoms comprising the psi dihedral.
def init_stats_add_md_category
shortcut for a frequent series of operations on MD simulations' statistics.
Hierarchies get_by_type(Hierarchy mhd, GetByType t)
def init_model_HBonds_marginal
read TBL file and store lognormal restraints, using the marginal of the lognormal with one sigma and ...
Apply an NOE distance restraint between two particles.
def init_stats_add_mc_category
shortcut for a frequent series of operations on MC simulations' statistics.
def init_simulation_setup_protein_hmc_hopper
setup hybrid monte-carlo on protein.
A decorator for a particle with x,y,z coordinates.
Class to handle individual model particles.
phi/psi dihedral restraint between four particles, using data from TALOS.
Score the bond based on a UnaryFunction,.
def read_sequence_file
read sequence of ONE chain, 1-letter or 3-letter, returns dict of no:3-letter code.
Base class for all optimizers.
reads a TALOS file, or a TALOS folder, and stores the data
Modify a set of continuous variables using a normal distribution.
nonspecific methods used across all shared function objects.
A decorator for a residue.
Apply a lognormal distance restraint between two particles.
Basic functionality that is expected to be used by a wide variety of IMP users.
def init_model_standard_SAXS_restraint
read experimental SAXS profile and apply restraint the standard way (like foxs) Returns: a restraints...
def init_model_setup_scale
sets up a Scale particle to the initial default value.
def init_model_jeffreys
given a list of scales, returns a RestraintSet('prior') with weight 1.0 that contains a list of Jeffr...
A filter that excludes bonds, angles and dihedrals.
def init_model_vonMises_restraint_mean
Sets up a vonMises torsion angle restraint using the given kappa particle as concentration parameter...
def init_stats_add_hmc_category
shortcut for a frequent series of operations on HMC simulations' statistics.
def m
wrapper to call methods of m
Apply an NOE distance restraint between two particles.
Functionality for loading, creating, manipulating and scoring atomic structures.
void read_pdb(base::TextInput input, int model, Hierarchy h)
CHARMMParameters * get_all_atom_CHARMM_parameters()
Hierarchies get_leaves(const Selection &h)
Classes to handle TALOS files or folders.
Select hierarchy particles identified by the biological name.
Applies a PairScore to each Pair in a list.
Support for small angle X-ray scattering (SAXS) data.
def init_model_conjugate_kappa
given a list of scales, returns a RestraintSet('prior') with weight 1.0 that contains a list of vonMi...
Class for storing model, its restraints, constraints, and particles.
Inferential scoring building on methods developed as part of the Inferential Structure Determination ...
Classes to handle TBL files.
Harmonic function (symmetric about the mean)
Maintains temperature during molecular dynamics.
A decorator for a particle with x,y,z coordinates and a radius.