1 | from chimerax.atomic import Residues, Atoms, selected_residues
|
---|
2 | from math import sqrt
|
---|
3 | import numpy
|
---|
4 | models = selected_residues(session).unique_structures
|
---|
5 | from chimerax.core.commands import run
|
---|
6 |
|
---|
7 | run(session, f'match {"|".join(["#"+m.id_string for m in models[1:]])} to #{models[0].id_string}')
|
---|
8 |
|
---|
9 | for residues in zip(*[m.residues for m in models]):
|
---|
10 | residues = Residues(residues)
|
---|
11 | pas = Atoms(residues.principal_atoms)
|
---|
12 | if not len(pas):
|
---|
13 | residues.atoms.bfactors = 0
|
---|
14 | continue
|
---|
15 |
|
---|
16 | coords = pas.scene_coords
|
---|
17 | avg = numpy.mean(coords, axis=0)
|
---|
18 | deviations = coords-avg
|
---|
19 | distances = numpy.linalg.norm(deviations, axis=0)
|
---|
20 | rms = sqrt(numpy.mean(distances**2))
|
---|
21 | residues.atoms.bfactors = rms
|
---|
22 |
|
---|
23 | run(session, f'color bfactor sel')
|
---|