diff --git a/README.md b/README.md
index 0d34bd0a..a1ea9711 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,11 @@ on the desktop to *drag&drop* files to visualize.
## Documentation
Automatically generated documentation can be found [**here**](https://vtkplotter.embl.es).
+#### Need help?
+Have any question, or wish to suggest or ask for a missing feature?
+Do not hesitate to open a [**issue**](https://github.com/marcomusy/vtkplotter/issues)
+or send an [email](mailto:marco.musy@embl.es).
+
## Features
Intuitive and straightforward API which can be combined with VTK seamlessly
diff --git a/docs/news.txt b/docs/news.txt
new file mode 100644
index 00000000..b315cfb6
--- /dev/null
+++ b/docs/news.txt
@@ -0,0 +1,16 @@
+2019/11/19
+- added PDV paraview file reading.
+- PDB protein data bank file reader
+- added error bars in plotxy()
+- fast fitting of 2d circles with utils.fitCircle2D()
+- added flag-style pop-up labels for meshes and volumes
+- added settings for resolving polygonal clashes with mesh edges
+- built in set of parametric surfaces in shapes.py module
+- improved plotting2d with error bars
+- added warpMeshToPoint() method
+- improved texture control, can pass texture coords explicitly
+- fix trimesh problem with coloring vertices
+- can use "panel" backend in notebooks
+
+
+
diff --git a/examples/advanced/fitspheres2.py b/examples/advanced/fitspheres2.py
index 5f11ee2b..3dacd175 100644
--- a/examples/advanced/fitspheres2.py
+++ b/examples/advanced/fitspheres2.py
@@ -29,7 +29,7 @@
vp += Points(pts1, c=cols)
vp += Lines(pts1, pts2, c="black 0.2")
-vp += histogram(vals, title="values", bins=20, vrange=[0, 1])
+vp += histogram(vals, bins=20, vrange=[0, 1]).pos(-1,1,-1)
vp += Text(__doc__, pos=1)
-vp.show()
+vp.show(axes=1)
diff --git a/examples/basic/acollection.ipynb b/examples/basic/acollection.ipynb
index a4fea490..097d9f4e 100644
--- a/examples/basic/acollection.ipynb
+++ b/examples/basic/acollection.ipynb
@@ -8,7 +8,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "a833f7c22dc942edbe873727193e0c22",
+ "model_id": "4639a002733847bd8674f05b70c0cadb",
"version_major": 2,
"version_minor": 0
},
diff --git a/examples/basic/align1.py b/examples/basic/align1.py
index 67109eff..b67de26c 100644
--- a/examples/basic/align1.py
+++ b/examples/basic/align1.py
@@ -8,7 +8,8 @@
vp = Plotter()
-limb = vp.load(datadir + "270.vtk")
+# flag() shows the filename when hovering with mouse
+limb = vp.load(datadir + "270.vtk").flag()
rim = vp.load(datadir + "270_rim.vtk").c("r").lw(4)
arim = alignICP(rim, limb, rigid=True).c("g").lw(5)
diff --git a/examples/basic/mirror.py b/examples/basic/mirror.py
index 5ec9513b..07466485 100644
--- a/examples/basic/mirror.py
+++ b/examples/basic/mirror.py
@@ -1,12 +1,14 @@
"""
Mirror a mesh along one of the Cartesian axes.
+
+Hover mouse to see original and mirrored.
"""
from vtkplotter import Plotter, Text, datadir
vp = Plotter(axes=2)
-myted1 = vp.load(datadir+"teddy.vtk")
+myted1 = vp.load(datadir+"teddy.vtk").flag('original')
-myted2 = myted1.clone().mirror("y").pos([0, 3, 0]).color("green")
+myted2 = myted1.clone().mirror("y").pos([0, 3, 0]).c("green").flag('mirrored')
vp.show(myted1, myted2, Text(__doc__), viewup="z")
diff --git a/examples/basic/run_all.sh b/examples/basic/run_all.sh
index c9841222..1ee274c1 100755
--- a/examples/basic/run_all.sh
+++ b/examples/basic/run_all.sh
@@ -170,6 +170,9 @@ python cutter.py
echo Running texturecubes.py
python texturecubes.py
+echo Running texture_coords.py
+python texture_coords.py
+
echo Running ribbon.py
python ribbon.py
diff --git a/examples/basic/texture_coords.py b/examples/basic/texture_coords.py
new file mode 100644
index 00000000..8b8c97fa
--- /dev/null
+++ b/examples/basic/texture_coords.py
@@ -0,0 +1,26 @@
+"""Assign texture coordinates to a polygon
+"""
+from vtkplotter import Actor, Text, datadir, show
+
+# define a polygon of 4 vertices:
+polygon_a = [
+ [(82, 92, 47), (87, 88, 47), # x,y,z of vertices
+ (93, 95, 47), (88, 99, 47)],
+ [[0, 1, 2, 3]], # vertex connectivity
+]
+
+# texture coordinates, one (u,v) pair for each vertex:
+tc = [(0,0), (1,0), (1,1), (0,1)]
+#tc = [(0,0), (2,0), (2,2), (0,2)]
+
+# create the vtkActor
+a = Actor(polygon_a)
+
+a.texture(datadir+"images/dog.jpg",
+ tcoords=tc,
+ interpolate=True,
+ repeat=True, # when tcoords extend beyond [0,1]
+ edgeClamp=False, # only used when repeat is False
+ )
+
+show(a, Text(__doc__), axes=8)
diff --git a/examples/other/flag_labels.py b/examples/other/flag_labels.py
new file mode 100644
index 00000000..cdbfc522
--- /dev/null
+++ b/examples/other/flag_labels.py
@@ -0,0 +1,23 @@
+"""Hover mouse onto an object
+to pop a flag-style label
+"""
+from vtkplotter import *
+
+# Can modify default behaviour through settings:
+#settings.flagDelay = 0 # popup delay in milliseconds
+#settings.flagFont = "Courier" # font type ("Arial", "Courier", "Times")
+#settings.flagFontSize = 18
+#settings.flagJustification = 0
+#settings.flagAngle = 0
+#settings.flagBold = False
+#settings.flagItalic = True
+#settings.flagShadow = False
+#settings.flagColor = 'black'
+#settings.flagBackgroundColor = 'white'
+
+s = load(datadir+'/bunny.obj').flag() # picks filename by default
+c = Cube(side=0.2).x(0.3).flag('my cube\nlabel')
+
+#s.flag(False) #disable
+
+show(s, c, Text(__doc__))
diff --git a/examples/other/run_all.sh b/examples/other/run_all.sh
index d1d61876..64443284 100755
--- a/examples/other/run_all.sh
+++ b/examples/other/run_all.sh
@@ -15,6 +15,9 @@ python colorpalette.py
echo Running printc.py
python printc.py
+echo Running flag_labels.py
+python flag_labels.py
+
echo Running icon.py
python icon.py
diff --git a/examples/other/trimesh/ray.py b/examples/other/trimesh/ray.py
index 8b286fc3..a92c8e71 100644
--- a/examples/other/trimesh/ray.py
+++ b/examples/other/trimesh/ray.py
@@ -1,6 +1,8 @@
import trimesh
import numpy as np
-from vtkplotter import show
+from vtkplotter import show, settings
+
+settings.useDepthPeeling = True
# test on a sphere mesh
mesh = trimesh.creation.icosphere()
diff --git a/examples/plotting2d/README.md b/examples/plotting2d/README.md
index 497ec99e..81a9dc6c 100644
--- a/examples/plotting2d/README.md
+++ b/examples/plotting2d/README.md
@@ -17,7 +17,9 @@ python example.py
| | |
| [](https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/fxy.py)
`fxy.py` | Draw a surface representing a function _f(x, y)_ defined as a string/formula or as a reference to an external already existing function.
Red points indicate where the function does not exist. |
| | |
-| [](https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/histogram.py)
`histogram.py` | Draw a 2D histogram with error bars. |
+| [](https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/plotxy.py)
`plotxy.py` | Draw a _x_ vs _y_ plot with optional error bars. |
+| | |
+| [](https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/histogram.py)
`histogram.py` | Draw a 2D histogram with optional error bars. |
| | |
| [](https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/histoHexagonal.py)
`histoHexagonal.py` | Make a histogram of two variables with hexagonal binning. |
| | |
diff --git a/examples/plotting2d/axesStyle.py b/examples/plotting2d/axesStyle.py
new file mode 100644
index 00000000..d03d3bcf
--- /dev/null
+++ b/examples/plotting2d/axesStyle.py
@@ -0,0 +1,8 @@
+from vtkplotter import *
+
+Earth(r=1).x(3) # set position x=3
+
+Sphere(r=.3).x(-3).texture('marble2')
+
+printc('press keypad 1-9 to change axes style', box='-', invert=1)
+show(..., axes=11, bg='db', bg2='k', verbose=0)
diff --git a/examples/plotting2d/plotxy.py b/examples/plotting2d/plotxy.py
index 862e2e0c..71da48a4 100644
--- a/examples/plotting2d/plotxy.py
+++ b/examples/plotting2d/plotxy.py
@@ -1,27 +1,36 @@
from vtkplotter import plotxy, show
import numpy as np
-x = np.arange(0, 10, 1)
-y = np.sin(x)
+x = np.arange(0, 10, 1)
+y = np.sin(x)
+# assign errors to both x and y
+ye = np.random.rand(10)/2
+xe = np.random.rand(10)
+
+##############
plt1 = plotxy(
- [x, y],
- yscale=3, # set an optional scaling factor
+ [x, y], # accepts different formats
+ yscale=3, # set an optional y-scaling factor
xlimits=(-1, 11),
splined=False,
- lc="r",
- marker="*",
- mc="dr",
+ lc="r", # line color
+ marker="*", # marker style
+ mc="dr", # marker color
)
+##############
plt2 = plotxy(
[x+1, y+0.2],
- yscale=3, # choose the same y-scale as above
+ xerrors=xe, # show error bars
+ yerrors=ye,
+ yscale=3, # choose the same y-scale as above!
splined=True,
xtitle="x variable (mm)",
ytitle="y(x)",
lc="b",
- marker="D",
+ marker="s", # o, p, *, h, D, d , v, ^, s, x, a
)
+##############
show(plt1, plt2, bg="w", axes=1)
diff --git a/examples/plotting2d/run_all.sh b/examples/plotting2d/run_all.sh
index 854e446f..e7173e23 100755
--- a/examples/plotting2d/run_all.sh
+++ b/examples/plotting2d/run_all.sh
@@ -12,6 +12,9 @@ echo
echo Running annotations.py
python annotations.py
+echo Running axesStyle.py
+python axesStyle.py
+
echo Running customAxes.py
python customAxes.py
diff --git a/examples/run_all.sh b/examples/run_all.sh
index 310f49f4..bdfea95c 100755
--- a/examples/run_all.sh
+++ b/examples/run_all.sh
@@ -88,10 +88,10 @@ vtkplotter
##################################### not run/ignored:
-#basic/lights.py
-#plotting2d/text_just.py
-#other/makeVideo.py
-#other/spherical_harmonics2.py
-#other/remesh_ACVD.py
-#other/tf_learn_embryo.py
-#other/self_org_maps3d.py
+# examples/basic/lights.py
+# examples/plotting2d/text_just.py
+# examples/other/makeVideo.py
+# examples/other/spherical_harmonics2.py
+# examples/other/remesh_ACVD.py
+# examples/other/tf_learn_embryo.py
+# examples/other/self_org_maps3d.py
diff --git a/examples/simulations/hanoi3d.py b/examples/simulations/hanoi3d.py
index 28818388..76d46547 100644
--- a/examples/simulations/hanoi3d.py
+++ b/examples/simulations/hanoi3d.py
@@ -79,7 +79,7 @@ def demo3d_hanoi(**kwargs):
}
for k in disks:
vp += disks[k]
- vp += Box(pos=(3.0, 0, -0.05), length=12.0, width=4.0, height=0.1)
+ vp += Box(pos=(3.0, 0, -.5), length=12.0, width=4.0, height=0.1)
vp.show(zoom=1.2)
printc("\n Press q to continue, Esc to exit. ", c="y", invert=1)
diff --git a/examples/volumetric/numpy2volume.ipynb b/examples/volumetric/numpy2volume.ipynb
index 243cc5d7..73b68e1e 100644
--- a/examples/volumetric/numpy2volume.ipynb
+++ b/examples/volumetric/numpy2volume.ipynb
@@ -15,7 +15,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "e2c9bea738bf4d44834a41fb1213eacb",
+ "model_id": "884bf91fb6dc4413add52b6dc0574aba",
"version_major": 2,
"version_minor": 0
},
diff --git a/setup.py b/setup.py
index 9e8b1f92..d4e723ab 100644
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@
verstrline = open(VERSIONFILE, "rt").read()
verstr = verstrline.split('=')[1].replace('\n','').replace("'","")
except:
- verstr='unknown_version'
+ verstr='unknown'
##############################################################
setup(
@@ -50,11 +50,12 @@
# pip install .
# cd examples && ./run_all.sh
+# python tutorial.py
# cd ~/Projects/vtkplotter/
# python tests/test_filetypes.py
# check vtkconvert:
-# vtkconvert vtkplotter/data/290.vtk -to ply
+# vtkconvert vtkplotter/data/290.vtk -to ply; vtkplotter vtkplotter/data/290.ply
# check on python2 the same stuff is ok
# cd ~/Projects/vtkplotter/
@@ -63,7 +64,7 @@
# check notebooks:
# cd ~/Projects/vtkplotter/
-# jupyter notebook &
+# jupyter notebook > /dev/null 2>&1
# remove trailing spaces
# cd ~/Projects/vtkplotter/
@@ -72,7 +73,7 @@
# rm examples/other/trimesh/featuretype.STL examples/other/trimesh/machinist.XAML
# rm examples/other/scene.npy examples/other/timecourse1d.npy vtkplotter/data/290.ply
# rm examples/other/voronoi3d.txt examples/other/voronoi3d.txt.vol
-# rm examples/other/embryo.html examples/other/embryo.x3d timecourse1d.npy
+# rm examples/other/embryo.html examples/other/embryo.x3d
# git status
# git add [files]
diff --git a/vtkplotter/__init__.py b/vtkplotter/__init__.py
index ba67ad51..763cd3a5 100644
--- a/vtkplotter/__init__.py
+++ b/vtkplotter/__init__.py
@@ -12,7 +12,10 @@
- `examples/advanced `_ ,
- `examples/volumetric `_,
- `examples/simulations `_
+ - `examples/plotting2d `_
- `examples/others `_.
+ - `examples/others/dolfin `_.
+ - `examples/others/trimesh `_.
Publications where ``vtkplotter`` has been used so far:
diff --git a/vtkplotter/actors.py b/vtkplotter/actors.py
index d38456de..5271d4fc 100644
--- a/vtkplotter/actors.py
+++ b/vtkplotter/actors.py
@@ -18,7 +18,7 @@
)
__all__ = [
-# 'Prop', # only for docs
+ #'Prop', # only for docs
'Actor',
'Assembly',
'Picture',
@@ -43,7 +43,7 @@ def collection():
Cone(pos=[3*i, 0, 0], axis=[i, i-5, 0])
show(collection())
- # in python3 you can simply use ellipses:
+ # in python3 you can simply use ellipses (three points symbol):
show(...)
"""
return settings.collectable_actors
@@ -89,6 +89,7 @@ class Prop(object):
def __init__(self):
self.filename = ""
+ self.name = ""
self.trail = None
self.trailPoints = []
self.trailSegmentSize = 0
@@ -107,6 +108,7 @@ def __init__(self):
self.renderedAt = set()
self.picked3d = None
self.cmap = None
+ self.flagText = None
def inputdata(self):
"""Return the VTK input data object."""
@@ -163,6 +165,7 @@ def pickable(self, value=None):
self.SetPickable(value)
return self
+
def legend(self, txt=None):
"""Set/get ``Actor`` legend text.
@@ -179,6 +182,21 @@ def legend(self, txt=None):
return self._legend
return self
+ def flag(self, text=None):
+ """Add a flag label which becomes visible when hovering the object with mouse.
+ Can be later disabled by setting `flag(False)`.
+ """
+ if text is None:
+ if self.filename:
+ text = self.filename.split('/')[-1]
+ elif self.name:
+ text = self.name
+ else:
+ text = ""
+ self.flagText = text
+ return self
+
+
def time(self, t=None):
"""Set/get actor's absolute time."""
if t is None:
@@ -839,6 +857,13 @@ def __init__(
self.poly = None
self.mapper = vtk.vtkPolyDataMapper()
+ self.mapper.SetInterpolateScalarsBeforeMapping(settings.interpolateScalarsBeforeMapping)
+
+ if settings.usePolygonOffset:
+ self.mapper.SetResolveCoincidentTopologyToPolygonOffset()
+ pof, pou = settings.polygonOffsetFactor, settings.polygonOffsetUnits
+ self.mapper.SetResolveCoincidentTopologyPolygonOffsetParameters(pof, pou)
+
inputtype = str(type(inputobj))
# print('inputtype',inputtype)
@@ -885,7 +910,6 @@ def __init__(
colors.printc("Error: cannot build Actor from type:\n", inputtype, c=1)
raise RuntimeError()
- self.mapper.InterpolateScalarsBeforeMappingOn()
self.SetMapper(self.mapper)
if settings.computeNormals is not None:
@@ -909,7 +933,7 @@ def __init__(
self.cell_locator = None
self.line_locator = None
self._bfprop = None # backface property holder
- self._scals_idx = 0 # index of the active scalar changed from CLI
+ self._scals_idx = 0 # index of the active scalar changed from CLI
self._ligthingnr = 0
prp = self.GetProperty()
@@ -1192,26 +1216,58 @@ def addScalarBar3D(
c, alpha, cmap)
return self.scalarbar
- def texture(self, tname):
- """Assign a texture to actor from image file or predefined texture tname."""
+ def texture(self, tname,
+ tcoords=None,
+ interpolate=True,
+ repeat=True,
+ edgeClamp=False,
+ ):
+ """Assign a texture to actor from image file or predefined texture `tname`.
+ If tname is ``None`` texture is disabled.
+
+ :param bool interpolate: turn on/off linear interpolation of the texture map when rendering.
+ :param bool repeat: repeat of the texture when tcoords extend beyond the [0,1] range.
+ :param bool edgeClamp: turn on/off the clamping of the texture map when
+ the texture coords extend beyond the [0,1] range.
+ Only used when repeat is False, and edge clamping is supported by the graphics card.
+ """
+ pd = self.polydata(False)
if tname is None:
+ pd.GetPointData().SetTCoords(None)
+ pd.GetPointData().Modified()
return self
- pd = self.polydata(False)
- if not pd.GetPointData().GetTCoords():
- tmapper = vtk.vtkTextureMapToPlane()
- tmapper.AutomaticPlaneGenerationOn()
- tmapper.SetInputData(pd)
- tmapper.Update()
- tc = tmapper.GetOutput().GetPointData().GetTCoords()
- pd.GetPointData().SetTCoords(tc)
+ if tcoords is not None:
+ if not isinstance(tcoords, np.ndarray):
+ tcoords = np.array(tcoords)
+ if tcoords.ndim != 2:
+ colors.printc('tcoords must be a 2-dimensional array', c=1)
+ return self
+ if tcoords.shape[0] != pd.GetNumberOfPoints():
+ colors.printc('Error in texture(): nr of texture coords must match nr of points', c=1)
+ return self
+ if tcoords.shape[1] != 2:
+ colors.printc('Error in texture(): vector must have 2 components', c=1)
+ tarr = numpy_to_vtk(tcoords)
+ tarr.SetName('TCoordinates')
+ pd.GetPointData().SetTCoords(tarr)
+ pd.GetPointData().Modified()
+ else:
+ if not pd.GetPointData().GetTCoords():
+ tmapper = vtk.vtkTextureMapToPlane()
+ tmapper.AutomaticPlaneGenerationOn()
+ tmapper.SetInputData(pd)
+ tmapper.Update()
+ tc = tmapper.GetOutput().GetPointData().GetTCoords()
+ pd.GetPointData().SetTCoords(tc)
+ pd.GetPointData().Modified()
fn = settings.textures_path + tname + ".jpg"
if os.path.exists(tname):
fn = tname
elif not os.path.exists(fn):
- colors.printc("~sad Texture", tname,
+ colors.printc("~sad File does not exist or texture", tname,
"not found in", settings.textures_path, c="r")
colors.printc("~pin Available built-in textures:", c="m", end=" ")
for ff in os.listdir(settings.textures_path):
@@ -1219,27 +1275,32 @@ def texture(self, tname):
print()
return self
- if ".png" in fn.lower():
- reader = vtk.vtkPNGReader()
- elif ".jp" in fn.lower():
+ fnl = fn.lower()
+ if ".jpg" in fnl or ".jpeg" in fnl:
reader = vtk.vtkJPEGReader()
- elif ".bmp" in fn.lower():
+ elif ".png" in fnl:
+ reader = vtk.vtkPNGReader()
+ elif ".bmp" in fnl:
reader = vtk.vtkBMPReader()
else:
- colors.printc("~times Supported texture files: PNG, BMP or JPG", c="r")
+ colors.printc("Error in texture(): supported files, PNG, BMP or JPG", c="r")
return self
reader.SetFileName(fn)
reader.Update()
- img = reader.GetOutput()
- atext = vtk.vtkTexture()
- atext.SetInputData(img)
+
+ tu = vtk.vtkTexture()
+ tu.SetInputData(reader.GetOutput())
+ tu.SetInterpolate(interpolate)
+ tu.SetRepeat(repeat)
+ tu.SetEdgeClamp(edgeClamp)
+
self.GetProperty().SetColor(1, 1, 1)
self.mapper.ScalarVisibilityOff()
- self.mapper.SetScalarModeToUsePointFieldData()
- self.SetTexture(atext)
+ self.SetTexture(tu)
self.Modified()
return self
+
def deletePoints(self, indices):
"""Delete a list of vertices identified by their index.
diff --git a/vtkplotter/addons.py b/vtkplotter/addons.py
index e5074d0c..a569c707 100644
--- a/vtkplotter/addons.py
+++ b/vtkplotter/addons.py
@@ -1445,8 +1445,10 @@ def addAxes(axtype=None, c=None):
rx, ry, rz = (vbb[1]-vbb[0])/2, (vbb[3]-vbb[2])/2, (vbb[5]-vbb[4])/2
rm = max(rx, ry, rz)
xc = shapes.Disc(x0, r1=rm, r2=rm, c='lr', res=1, resphi=72)
- yc = shapes.Disc(x0, r1=rm, r2=rm, c='lg', res=1, resphi=72).RotateX(90)
- zc = shapes.Disc(x0, r1=rm, r2=rm, c='lb', res=1, resphi=72).RotateY(90)
+ yc = shapes.Disc(x0, r1=rm, r2=rm, c='lg', res=1, resphi=72)
+ yc.RotateX(90)
+ zc = shapes.Disc(x0, r1=rm, r2=rm, c='lb', res=1, resphi=72)
+ yc.RotateY(90)
xc.clean().alpha(0.2).wireframe().lineWidth(2.5).PickableOff()
yc.clean().alpha(0.2).wireframe().lineWidth(2.5).PickableOff()
zc.clean().alpha(0.2).wireframe().lineWidth(2.5).PickableOff()
diff --git a/vtkplotter/analysis.py b/vtkplotter/analysis.py
index ec9b2d01..c1df0443 100644
--- a/vtkplotter/analysis.py
+++ b/vtkplotter/analysis.py
@@ -68,6 +68,7 @@
"euclideanDistanceVolume",
"volumeToPoints",
"volumeCorrelation",
+ "warpMeshToPoint",
]
@@ -879,7 +880,7 @@ def surfaceIntersection(actor1, actor2, tol=1e-06):
actor.GetProperty().SetLineWidth(3)
return actor
-################################################## working with volumes
+
def _getimg(obj):
if isinstance(obj, vtk.vtkVolume):
return obj.GetMapper().GetInput()
@@ -1134,6 +1135,39 @@ def thinPlateSpline(actor, sourcePts, targetPts, userFunctions=(None, None), sig
return tfa
+def warpMeshToPoint(actor, point, factor=0.1, absolute=True):
+ """
+ Modify the mesh coordinates by moving the vertices towards a specified point.
+
+ :param float factor: value to scale displacement.
+ :param list point: the position to warp towards.
+ :param bool absolute: turning on causes scale factor of the new position
+ to be one unit away from point.
+
+ :Example:
+ .. code-block:: python
+
+ from vtkplotter import *
+ s = Cylinder(height=3).wireframe(1)
+ pt = [4,0,0]
+ w = warpMeshToPoint(s, pt, factor=0.5).wireframe(0)
+ show(w,s, Point(pt), axes=1, bg='w')
+
+ |warpto|
+ """
+ warpTo = vtk.vtkWarpTo()
+ warpTo.SetInputData(actor.polydata())
+ warpTo.SetPosition(point)
+ warpTo.SetScaleFactor(factor)
+ warpTo.SetAbsolute(absolute)
+ warpTo.Update()
+ prop = vtk.vtkProperty()
+ prop.DeepCopy(actor.GetProperty())
+ a = Actor(warpTo.GetOutput())
+ a.SetProperty(prop)
+ return a
+
+
def transformFilter(actor, transformation):
"""
Transform a ``vtkActor`` and return a new object.
diff --git a/vtkplotter/backends.py b/vtkplotter/backends.py
index fa36f4cd..d9e63505 100644
--- a/vtkplotter/backends.py
+++ b/vtkplotter/backends.py
@@ -253,9 +253,12 @@ def getNotebookBackend(actors2show, zoom, viewup):
####################################################################################
elif settings.notebookBackend == 'panel' and hasattr(vp, 'window') and vp.window:
+
import panel # https://panel.pyviz.org/reference/panes/VTK.html
+
+ vp.renderer.ResetCamera()
+
settings.notebook_plotter = panel.pane.VTK(vp.window,
- width=int(vp.size[0]/2),
+ width=int(vp.size[0]/1.5),
height=int(vp.size[1]/2))
-
return settings.notebook_plotter
diff --git a/vtkplotter/data/1btn.pdb b/vtkplotter/data/1btn.pdb
new file mode 100644
index 00000000..96d9b973
--- /dev/null
+++ b/vtkplotter/data/1btn.pdb
@@ -0,0 +1,1319 @@
+HEADER SIGNAL TRANSDUCTION PROTEIN 23-AUG-95 1BTN
+TITLE STRUCTURE OF THE BINDING SITE FOR INOSITOL PHOSPHATES IN A
+TITLE 2 PH DOMAIN
+COMPND MOL_ID: 1;
+COMPND 2 MOLECULE: BETA-SPECTRIN;
+COMPND 3 CHAIN: A;
+COMPND 4 FRAGMENT: PH DOMAIN, RESIDUES 2199 - 2304;
+COMPND 5 ENGINEERED: YES
+SOURCE MOL_ID: 1;
+SOURCE 2 ORGANISM_SCIENTIFIC: MUS MUSCULUS;
+SOURCE 3 ORGANISM_COMMON: HOUSE MOUSE;
+SOURCE 4 ORGANISM_TAXID: 10090;
+SOURCE 5 ORGAN: BRAIN;
+SOURCE 6 GENE: MUSSPNA.GBROD;
+SOURCE 7 EXPRESSION_SYSTEM: ESCHERICHIA COLI BL21;
+SOURCE 8 EXPRESSION_SYSTEM_TAXID: 511693;
+SOURCE 9 EXPRESSION_SYSTEM_STRAIN: BL21;
+SOURCE 10 EXPRESSION_SYSTEM_PLASMID: PET21D;
+SOURCE 11 EXPRESSION_SYSTEM_GENE: MUSSPNA.GBROD
+KEYWDS SIGNAL TRANSDUCTION PROTEIN
+EXPDTA X-RAY DIFFRACTION
+AUTHOR M.WILMANNS,M.HYVOENEN,M.SARASTE
+REVDAT 3 24-FEB-09 1BTN 1 VERSN
+REVDAT 2 01-APR-03 1BTN 1 JRNL
+REVDAT 1 08-MAR-96 1BTN 0
+JRNL AUTH M.HYVONEN,M.J.MACIAS,M.NILGES,H.OSCHKINAT,
+JRNL AUTH 2 M.SARASTE,M.WILMANNS
+JRNL TITL STRUCTURE OF THE BINDING SITE FOR INOSITOL
+JRNL TITL 2 PHOSPHATES IN A PH DOMAIN.
+JRNL REF EMBO J. V. 14 4676 1995
+JRNL REFN ISSN 0261-4189
+JRNL PMID 7588597
+REMARK 1
+REMARK 1 REFERENCE 1
+REMARK 1 AUTH M.J.MACIAS,A.MUSACCHIO,H.POSTINGL,M.NILGES,
+REMARK 1 AUTH 2 M.SARASTE,H.OSCHKINAT
+REMARK 1 TITL STRUCTURE OF THE PH DOMAIN FROM BETA-SPECTRIN
+REMARK 1 REF NATURE V. 369 675 1994
+REMARK 1 REFN ISSN 0028-0836
+REMARK 2
+REMARK 2 RESOLUTION. 2.00 ANGSTROMS.
+REMARK 3
+REMARK 3 REFINEMENT.
+REMARK 3 PROGRAM : X-PLOR 3.1
+REMARK 3 AUTHORS : BRUNGER
+REMARK 3
+REMARK 3 DATA USED IN REFINEMENT.
+REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 2.00
+REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 8.00
+REMARK 3 DATA CUTOFF (SIGMA(F)) : 1.000
+REMARK 3 DATA CUTOFF HIGH (ABS(F)) : NULL
+REMARK 3 DATA CUTOFF LOW (ABS(F)) : NULL
+REMARK 3 COMPLETENESS (WORKING+TEST) (%) : 88.6
+REMARK 3 NUMBER OF REFLECTIONS : 7573
+REMARK 3
+REMARK 3 FIT TO DATA USED IN REFINEMENT.
+REMARK 3 CROSS-VALIDATION METHOD : NULL
+REMARK 3 FREE R VALUE TEST SET SELECTION : NULL
+REMARK 3 R VALUE (WORKING SET) : 0.205
+REMARK 3 FREE R VALUE : 0.286
+REMARK 3 FREE R VALUE TEST SET SIZE (%) : NULL
+REMARK 3 FREE R VALUE TEST SET COUNT : NULL
+REMARK 3 ESTIMATED ERROR OF FREE R VALUE : NULL
+REMARK 3
+REMARK 3 FIT IN THE HIGHEST RESOLUTION BIN.
+REMARK 3 TOTAL NUMBER OF BINS USED : NULL
+REMARK 3 BIN RESOLUTION RANGE HIGH (A) : NULL
+REMARK 3 BIN RESOLUTION RANGE LOW (A) : NULL
+REMARK 3 BIN COMPLETENESS (WORKING+TEST) (%) : NULL
+REMARK 3 REFLECTIONS IN BIN (WORKING SET) : NULL
+REMARK 3 BIN R VALUE (WORKING SET) : NULL
+REMARK 3 BIN FREE R VALUE : NULL
+REMARK 3 BIN FREE R VALUE TEST SET SIZE (%) : NULL
+REMARK 3 BIN FREE R VALUE TEST SET COUNT : NULL
+REMARK 3 ESTIMATED ERROR OF BIN FREE R VALUE : NULL
+REMARK 3
+REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT.
+REMARK 3 PROTEIN ATOMS : 864
+REMARK 3 NUCLEIC ACID ATOMS : 0
+REMARK 3 HETEROGEN ATOMS : 24
+REMARK 3 SOLVENT ATOMS : 77
+REMARK 3
+REMARK 3 B VALUES.
+REMARK 3 FROM WILSON PLOT (A**2) : NULL
+REMARK 3 MEAN B VALUE (OVERALL, A**2) : 27.90
+REMARK 3 OVERALL ANISOTROPIC B VALUE.
+REMARK 3 B11 (A**2) : NULL
+REMARK 3 B22 (A**2) : NULL
+REMARK 3 B33 (A**2) : NULL
+REMARK 3 B12 (A**2) : NULL
+REMARK 3 B13 (A**2) : NULL
+REMARK 3 B23 (A**2) : NULL
+REMARK 3
+REMARK 3 ESTIMATED COORDINATE ERROR.
+REMARK 3 ESD FROM LUZZATI PLOT (A) : 0.27
+REMARK 3 ESD FROM SIGMAA (A) : NULL
+REMARK 3 LOW RESOLUTION CUTOFF (A) : NULL
+REMARK 3
+REMARK 3 CROSS-VALIDATED ESTIMATED COORDINATE ERROR.
+REMARK 3 ESD FROM C-V LUZZATI PLOT (A) : NULL
+REMARK 3 ESD FROM C-V SIGMAA (A) : NULL
+REMARK 3
+REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES.
+REMARK 3 BOND LENGTHS (A) : 0.011
+REMARK 3 BOND ANGLES (DEGREES) : 1.50
+REMARK 3 DIHEDRAL ANGLES (DEGREES) : 25.62
+REMARK 3 IMPROPER ANGLES (DEGREES) : 1.35
+REMARK 3
+REMARK 3 ISOTROPIC THERMAL MODEL : NULL
+REMARK 3
+REMARK 3 ISOTROPIC THERMAL FACTOR RESTRAINTS. RMS SIGMA
+REMARK 3 MAIN-CHAIN BOND (A**2) : NULL ; NULL
+REMARK 3 MAIN-CHAIN ANGLE (A**2) : NULL ; NULL
+REMARK 3 SIDE-CHAIN BOND (A**2) : NULL ; NULL
+REMARK 3 SIDE-CHAIN ANGLE (A**2) : NULL ; NULL
+REMARK 3
+REMARK 3 NCS MODEL : NULL
+REMARK 3
+REMARK 3 NCS RESTRAINTS. RMS SIGMA/WEIGHT
+REMARK 3 GROUP 1 POSITIONAL (A) : NULL ; NULL
+REMARK 3 GROUP 1 B-FACTOR (A**2) : NULL ; NULL
+REMARK 3
+REMARK 3 PARAMETER FILE 1 : NULL
+REMARK 3 TOPOLOGY FILE 1 : NULL
+REMARK 3
+REMARK 3 OTHER REFINEMENT REMARKS: NULL
+REMARK 4
+REMARK 4 1BTN COMPLIES WITH FORMAT V. 3.15, 01-DEC-08
+REMARK 100
+REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY BNL.
+REMARK 200
+REMARK 200 EXPERIMENTAL DETAILS
+REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION
+REMARK 200 DATE OF DATA COLLECTION : FEB-95
+REMARK 200 TEMPERATURE (KELVIN) : 293
+REMARK 200 PH : 6.5
+REMARK 200 NUMBER OF CRYSTALS USED : NULL
+REMARK 200
+REMARK 200 SYNCHROTRON (Y/N) : N
+REMARK 200 RADIATION SOURCE : NULL
+REMARK 200 BEAMLINE : NULL
+REMARK 200 X-RAY GENERATOR MODEL : NULL
+REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M
+REMARK 200 WAVELENGTH OR RANGE (A) : 1.54
+REMARK 200 MONOCHROMATOR : NULL
+REMARK 200 OPTICS : NULL
+REMARK 200
+REMARK 200 DETECTOR TYPE : IMAGE PLATE
+REMARK 200 DETECTOR MANUFACTURER : MARRESEARCH
+REMARK 200 INTENSITY-INTEGRATION SOFTWARE : XDS
+REMARK 200 DATA SCALING SOFTWARE : NULL
+REMARK 200
+REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 7830
+REMARK 200 RESOLUTION RANGE HIGH (A) : 2.000
+REMARK 200 RESOLUTION RANGE LOW (A) : 1000.000
+REMARK 200 REJECTION CRITERIA (SIGMA(I)) : 0.000
+REMARK 200
+REMARK 200 OVERALL.
+REMARK 200 COMPLETENESS FOR RANGE (%) : 89.6
+REMARK 200 DATA REDUNDANCY : 5.400
+REMARK 200 R MERGE (I) : 0.04700
+REMARK 200 R SYM (I) : NULL
+REMARK 200 FOR THE DATA SET : NULL
+REMARK 200
+REMARK 200 IN THE HIGHEST RESOLUTION SHELL.
+REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : NULL
+REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : NULL
+REMARK 200 COMPLETENESS FOR SHELL (%) : NULL
+REMARK 200 DATA REDUNDANCY IN SHELL : NULL
+REMARK 200 R MERGE FOR SHELL (I) : NULL
+REMARK 200 R SYM FOR SHELL (I) : NULL
+REMARK 200 FOR SHELL : NULL
+REMARK 200
+REMARK 200 DIFFRACTION PROTOCOL: NULL
+REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: NULL
+REMARK 200 SOFTWARE USED: X-PLOR 3.1
+REMARK 200 STARTING MODEL: NULL
+REMARK 200
+REMARK 200 REMARK: NULL
+REMARK 280
+REMARK 280 CRYSTAL
+REMARK 280 SOLVENT CONTENT, VS (%): 50.00
+REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.46
+REMARK 280
+REMARK 280 CRYSTALLIZATION CONDITIONS: PH 6.5
+REMARK 290
+REMARK 290 CRYSTALLOGRAPHIC SYMMETRY
+REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 4 21 2
+REMARK 290
+REMARK 290 SYMOP SYMMETRY
+REMARK 290 NNNMMM OPERATOR
+REMARK 290 1555 X,Y,Z
+REMARK 290 2555 -X,-Y,Z
+REMARK 290 3555 -Y+1/2,X+1/2,Z
+REMARK 290 4555 Y+1/2,-X+1/2,Z
+REMARK 290 5555 -X+1/2,Y+1/2,-Z
+REMARK 290 6555 X+1/2,-Y+1/2,-Z
+REMARK 290 7555 Y,X,-Z
+REMARK 290 8555 -Y,-X,-Z
+REMARK 290
+REMARK 290 WHERE NNN -> OPERATOR NUMBER
+REMARK 290 MMM -> TRANSLATION VECTOR
+REMARK 290
+REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS
+REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM
+REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY
+REMARK 290 RELATED MOLECULES.
+REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000
+REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000
+REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000
+REMARK 290 SMTRY1 2 -1.000000 0.000000 0.000000 0.00000
+REMARK 290 SMTRY2 2 0.000000 -1.000000 0.000000 0.00000
+REMARK 290 SMTRY3 2 0.000000 0.000000 1.000000 0.00000
+REMARK 290 SMTRY1 3 0.000000 -1.000000 0.000000 34.50000
+REMARK 290 SMTRY2 3 1.000000 0.000000 0.000000 34.50000
+REMARK 290 SMTRY3 3 0.000000 0.000000 1.000000 0.00000
+REMARK 290 SMTRY1 4 0.000000 1.000000 0.000000 34.50000
+REMARK 290 SMTRY2 4 -1.000000 0.000000 0.000000 34.50000
+REMARK 290 SMTRY3 4 0.000000 0.000000 1.000000 0.00000
+REMARK 290 SMTRY1 5 -1.000000 0.000000 0.000000 34.50000
+REMARK 290 SMTRY2 5 0.000000 1.000000 0.000000 34.50000
+REMARK 290 SMTRY3 5 0.000000 0.000000 -1.000000 0.00000
+REMARK 290 SMTRY1 6 1.000000 0.000000 0.000000 34.50000
+REMARK 290 SMTRY2 6 0.000000 -1.000000 0.000000 34.50000
+REMARK 290 SMTRY3 6 0.000000 0.000000 -1.000000 0.00000
+REMARK 290 SMTRY1 7 0.000000 1.000000 0.000000 0.00000
+REMARK 290 SMTRY2 7 1.000000 0.000000 0.000000 0.00000
+REMARK 290 SMTRY3 7 0.000000 0.000000 -1.000000 0.00000
+REMARK 290 SMTRY1 8 0.000000 -1.000000 0.000000 0.00000
+REMARK 290 SMTRY2 8 -1.000000 0.000000 0.000000 0.00000
+REMARK 290 SMTRY3 8 0.000000 0.000000 -1.000000 0.00000
+REMARK 290
+REMARK 290 REMARK: NULL
+REMARK 300
+REMARK 300 BIOMOLECULE: 1
+REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM
+REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN
+REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON
+REMARK 300 BURIED SURFACE AREA.
+REMARK 350
+REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN
+REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE
+REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS
+REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND
+REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.
+REMARK 350
+REMARK 350 BIOMOLECULE: 1
+REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: DIMERIC
+REMARK 350 APPLY THE FOLLOWING TO CHAINS: A
+REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000
+REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000
+REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000
+REMARK 350 BIOMT1 2 0.000000 -1.000000 0.000000 69.00000
+REMARK 350 BIOMT2 2 -1.000000 0.000000 0.000000 69.00000
+REMARK 350 BIOMT3 2 0.000000 0.000000 -1.000000 0.00000
+REMARK 500
+REMARK 500 GEOMETRY AND STEREOCHEMISTRY
+REMARK 500 SUBTOPIC: TORSION ANGLES
+REMARK 500
+REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS:
+REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER;
+REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE).
+REMARK 500
+REMARK 500 STANDARD TABLE:
+REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2)
+REMARK 500
+REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI-
+REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400
+REMARK 500
+REMARK 500 M RES CSSEQI PSI PHI
+REMARK 500 HIS A 51 51.96 -141.76
+REMARK 500
+REMARK 500 REMARK: NULL
+REMARK 525
+REMARK 525 SOLVENT
+REMARK 525
+REMARK 525 THE SOLVENT MOLECULES HAVE CHAIN IDENTIFIERS THAT
+REMARK 525 INDICATE THE POLYMER CHAIN WITH WHICH THEY ARE MOST
+REMARK 525 CLOSELY ASSOCIATED. THE REMARK LISTS ALL THE SOLVENT
+REMARK 525 MOLECULES WHICH ARE MORE THAN 5A AWAY FROM THE
+REMARK 525 NEAREST POLYMER CHAIN (M = MODEL NUMBER;
+REMARK 525 RES=RESIDUE NAME; C=CHAIN IDENTIFIER; SSEQ=SEQUENCE
+REMARK 525 NUMBER; I=INSERTION CODE):
+REMARK 525
+REMARK 525 M RES CSSEQI
+REMARK 525 HOH A 115 DISTANCE = 5.12 ANGSTROMS
+REMARK 525 HOH A 167 DISTANCE = 5.81 ANGSTROMS
+REMARK 525 HOH A 170 DISTANCE = 5.82 ANGSTROMS
+REMARK 525 HOH A 184 DISTANCE = 7.44 ANGSTROMS
+REMARK 800
+REMARK 800 SITE
+REMARK 800 SITE_IDENTIFIER: AC1
+REMARK 800 EVIDENCE_CODE: SOFTWARE
+REMARK 800 SITE_DESCRIPTION: BINDING SITE FOR RESIDUE I3P A 107
+DBREF 1BTN A 1 106 UNP Q62261 SPTB2_MOUSE 2199 2304
+SEQRES 1 A 106 MET GLU GLY PHE LEU ASN ARG LYS HIS GLU TRP GLU ALA
+SEQRES 2 A 106 HIS ASN LYS LYS ALA SER SER ARG SER TRP HIS ASN VAL
+SEQRES 3 A 106 TYR CYS VAL ILE ASN ASN GLN GLU MET GLY PHE TYR LYS
+SEQRES 4 A 106 ASP ALA LYS SER ALA ALA SER GLY ILE PRO TYR HIS SER
+SEQRES 5 A 106 GLU VAL PRO VAL SER LEU LYS GLU ALA ILE CYS GLU VAL
+SEQRES 6 A 106 ALA LEU ASP TYR LYS LYS LYS LYS HIS VAL PHE LYS LEU
+SEQRES 7 A 106 ARG LEU SER ASP GLY ASN GLU TYR LEU PHE GLN ALA LYS
+SEQRES 8 A 106 ASP ASP GLU GLU MET ASN THR TRP ILE GLN ALA ILE SER
+SEQRES 9 A 106 SER ALA
+HET I3P A 107 24
+HETNAM I3P D-MYO-INOSITOL-1,4,5-TRIPHOSPHATE
+FORMUL 2 I3P C6 H15 O15 P3
+FORMUL 3 HOH *77(H2 O)
+HELIX 1 1 ALA A 41 SER A 46 1 6
+HELIX 2 2 ASP A 93 SER A 104 1 12
+SHEET 1 A 6 GLU A 34 TYR A 38 0
+SHEET 2 A 6 HIS A 24 ASN A 31 -1 N ASN A 31 O GLU A 34
+SHEET 3 A 6 GLU A 2 TRP A 11 -1 N ARG A 7 O HIS A 24
+SHEET 4 A 6 GLU A 85 GLN A 89 -1 N GLN A 89 O ASN A 6
+SHEET 5 A 6 VAL A 75 ARG A 79 -1 N LEU A 78 O TYR A 86
+SHEET 6 A 6 ILE A 62 VAL A 65 -1 N GLU A 64 O LYS A 77
+SITE 1 AC1 13 LYS A 8 ARG A 21 SER A 22 TRP A 23
+SITE 2 AC1 13 HIS A 24 LYS A 39 TYR A 50 HIS A 51
+SITE 3 AC1 13 TYR A 69 LYS A 71 HOH A 129 HOH A 133
+SITE 4 AC1 13 HOH A 180
+CRYST1 69.000 69.000 50.800 90.00 90.00 90.00 P 4 21 2 8
+ORIGX1 1.000000 0.000000 0.000000 0.00000
+ORIGX2 0.000000 1.000000 0.000000 0.00000
+ORIGX3 0.000000 0.000000 1.000000 0.00000
+SCALE1 0.014493 0.000000 0.000000 0.00000
+SCALE2 0.000000 0.014493 0.000000 0.00000
+SCALE3 0.000000 0.000000 0.019685 0.00000
+ATOM 1 N MET A 1 4.606 58.490 -0.389 1.00 17.43 N
+ATOM 2 CA MET A 1 3.655 59.182 0.534 1.00 14.49 C
+ATOM 3 C MET A 1 4.418 59.540 1.808 1.00 12.75 C
+ATOM 4 O MET A 1 5.191 58.739 2.306 1.00 13.92 O
+ATOM 5 CB MET A 1 2.493 58.238 0.833 1.00 18.54 C
+ATOM 6 CG MET A 1 1.702 58.558 2.066 1.00 24.48 C
+ATOM 7 SD MET A 1 0.517 59.877 1.890 1.00 30.80 S
+ATOM 8 CE MET A 1 -0.903 58.996 2.266 1.00 29.06 C
+ATOM 9 N GLU A 2 4.285 60.762 2.294 1.00 12.54 N
+ATOM 10 CA GLU A 2 4.988 61.153 3.512 1.00 15.08 C
+ATOM 11 C GLU A 2 4.299 62.307 4.201 1.00 13.04 C
+ATOM 12 O GLU A 2 3.521 63.047 3.586 1.00 16.26 O
+ATOM 13 CB GLU A 2 6.425 61.554 3.199 1.00 14.96 C
+ATOM 14 CG GLU A 2 6.485 62.780 2.329 1.00 18.36 C
+ATOM 15 CD GLU A 2 7.818 62.955 1.621 1.00 21.43 C
+ATOM 16 OE1 GLU A 2 8.219 61.959 0.986 1.00 23.68 O
+ATOM 17 OE2 GLU A 2 8.396 64.033 1.686 1.00 19.98 O
+ATOM 18 N GLY A 3 4.608 62.471 5.477 1.00 12.69 N
+ATOM 19 CA GLY A 3 4.018 63.532 6.260 1.00 12.30 C
+ATOM 20 C GLY A 3 4.226 63.273 7.737 1.00 13.84 C
+ATOM 21 O GLY A 3 4.716 62.216 8.133 1.00 13.25 O
+ATOM 22 N PHE A 4 3.900 64.271 8.547 1.00 12.97 N
+ATOM 23 CA PHE A 4 4.016 64.158 9.991 1.00 14.40 C
+ATOM 24 C PHE A 4 2.830 63.363 10.520 1.00 14.47 C
+ATOM 25 O PHE A 4 1.716 63.467 10.013 1.00 15.67 O
+ATOM 26 CB PHE A 4 4.012 65.547 10.644 1.00 15.31 C
+ATOM 27 CG PHE A 4 5.305 66.319 10.483 1.00 15.98 C
+ATOM 28 CD1 PHE A 4 6.387 66.077 11.328 1.00 15.88 C
+ATOM 29 CD2 PHE A 4 5.408 67.344 9.543 1.00 15.58 C
+ATOM 30 CE1 PHE A 4 7.538 66.848 11.246 1.00 16.00 C
+ATOM 31 CE2 PHE A 4 6.549 68.118 9.454 1.00 14.37 C
+ATOM 32 CZ PHE A 4 7.619 67.869 10.310 1.00 15.96 C
+ATOM 33 N LEU A 5 3.061 62.628 11.597 1.00 15.90 N
+ATOM 34 CA LEU A 5 2.025 61.817 12.226 1.00 14.95 C
+ATOM 35 C LEU A 5 2.463 61.641 13.681 1.00 15.58 C
+ATOM 36 O LEU A 5 3.663 61.568 13.931 1.00 14.65 O
+ATOM 37 CB LEU A 5 2.022 60.438 11.554 1.00 14.44 C
+ATOM 38 CG LEU A 5 0.822 59.759 10.879 1.00 15.81 C
+ATOM 39 CD1 LEU A 5 -0.027 60.733 10.085 1.00 14.82 C
+ATOM 40 CD2 LEU A 5 1.375 58.631 9.983 1.00 14.90 C
+ATOM 41 N ASN A 6 1.528 61.693 14.637 1.00 15.41 N
+ATOM 42 CA ASN A 6 1.872 61.424 16.048 1.00 17.86 C
+ATOM 43 C ASN A 6 1.940 59.905 16.136 1.00 15.12 C
+ATOM 44 O ASN A 6 1.037 59.233 15.672 1.00 16.99 O
+ATOM 45 CB ASN A 6 0.795 61.907 17.003 1.00 20.07 C
+ATOM 46 CG ASN A 6 0.807 63.388 17.165 1.00 24.58 C
+ATOM 47 OD1 ASN A 6 1.859 64.016 17.067 1.00 27.76 O
+ATOM 48 ND2 ASN A 6 -0.355 63.971 17.421 1.00 26.75 N
+ATOM 49 N ARG A 7 3.006 59.358 16.701 1.00 16.18 N
+ATOM 50 CA ARG A 7 3.150 57.903 16.776 1.00 16.19 C
+ATOM 51 C ARG A 7 3.346 57.357 18.192 1.00 13.63 C
+ATOM 52 O ARG A 7 4.061 57.936 18.997 1.00 15.40 O
+ATOM 53 CB ARG A 7 4.333 57.457 15.905 1.00 16.01 C
+ATOM 54 CG ARG A 7 4.561 55.947 15.874 1.00 17.82 C
+ATOM 55 CD ARG A 7 5.961 55.617 15.354 1.00 17.21 C
+ATOM 56 NE ARG A 7 6.969 55.769 16.399 1.00 17.73 N
+ATOM 57 CZ ARG A 7 8.282 55.754 16.197 1.00 18.12 C
+ATOM 58 NH1 ARG A 7 8.767 55.603 14.978 1.00 20.67 N
+ATOM 59 NH2 ARG A 7 9.110 55.833 17.228 1.00 17.39 N
+ATOM 60 N LYS A 8 2.721 56.224 18.471 1.00 13.89 N
+ATOM 61 CA LYS A 8 2.848 55.584 19.770 1.00 13.88 C
+ATOM 62 C LYS A 8 3.159 54.123 19.545 1.00 14.53 C
+ATOM 63 O LYS A 8 2.495 53.445 18.763 1.00 13.85 O
+ATOM 64 CB LYS A 8 1.556 55.686 20.581 1.00 13.06 C
+ATOM 65 CG LYS A 8 1.652 55.004 21.938 1.00 13.78 C
+ATOM 66 CD LYS A 8 0.305 54.854 22.610 1.00 12.91 C
+ATOM 67 CE LYS A 8 0.452 54.231 23.969 1.00 12.26 C
+ATOM 68 NZ LYS A 8 -0.850 54.143 24.651 1.00 12.67 N
+ATOM 69 N HIS A 9 4.188 53.639 20.218 1.00 15.62 N
+ATOM 70 CA HIS A 9 4.568 52.244 20.127 1.00 16.70 C
+ATOM 71 C HIS A 9 3.740 51.544 21.218 1.00 18.83 C
+ATOM 72 O HIS A 9 3.892 51.835 22.408 1.00 21.40 O
+ATOM 73 CB HIS A 9 6.064 52.128 20.403 1.00 18.43 C
+ATOM 74 CG HIS A 9 6.664 50.832 19.983 1.00 18.25 C
+ATOM 75 ND1 HIS A 9 5.909 49.729 19.647 1.00 21.26 N
+ATOM 76 CD2 HIS A 9 7.956 50.454 19.833 1.00 19.27 C
+ATOM 77 CE1 HIS A 9 6.706 48.733 19.305 1.00 18.30 C
+ATOM 78 NE2 HIS A 9 7.954 49.154 19.410 1.00 21.71 N
+ATOM 79 N GLU A 10 2.837 50.668 20.799 1.00 16.96 N
+ATOM 80 CA GLU A 10 1.945 49.937 21.694 1.00 18.64 C
+ATOM 81 C GLU A 10 2.411 48.541 22.069 1.00 18.43 C
+ATOM 82 O GLU A 10 2.490 48.178 23.244 1.00 17.76 O
+ATOM 83 CB GLU A 10 0.584 49.792 21.022 1.00 22.03 C
+ATOM 84 CG GLU A 10 -0.387 50.871 21.365 1.00 27.85 C
+ATOM 85 CD GLU A 10 -1.041 50.651 22.710 1.00 29.36 C
+ATOM 86 OE1 GLU A 10 -0.874 49.560 23.297 1.00 31.67 O
+ATOM 87 OE2 GLU A 10 -1.742 51.571 23.171 1.00 30.45 O
+ATOM 88 N TRP A 11 2.622 47.729 21.045 1.00 18.53 N
+ATOM 89 CA TRP A 11 3.018 46.356 21.231 1.00 17.30 C
+ATOM 90 C TRP A 11 4.356 46.023 20.632 1.00 20.83 C
+ATOM 91 O TRP A 11 4.811 46.641 19.661 1.00 19.36 O
+ATOM 92 CB TRP A 11 1.982 45.444 20.591 1.00 16.79 C
+ATOM 93 CG TRP A 11 0.717 45.439 21.298 1.00 15.43 C
+ATOM 94 CD1 TRP A 11 -0.357 46.236 21.067 1.00 16.15 C
+ATOM 95 CD2 TRP A 11 0.378 44.599 22.397 1.00 15.95 C
+ATOM 96 NE1 TRP A 11 -1.355 45.945 21.965 1.00 14.15 N
+ATOM 97 CE2 TRP A 11 -0.930 44.944 22.792 1.00 15.71 C
+ATOM 98 CE3 TRP A 11 1.045 43.579 23.081 1.00 15.63 C
+ATOM 99 CZ2 TRP A 11 -1.576 44.304 23.854 1.00 16.96 C
+ATOM 100 CZ3 TRP A 11 0.410 42.948 24.119 1.00 16.77 C
+ATOM 101 CH2 TRP A 11 -0.890 43.306 24.499 1.00 18.14 C
+ATOM 102 N GLU A 12 4.987 45.034 21.235 1.00 21.11 N
+ATOM 103 CA GLU A 12 6.241 44.529 20.746 1.00 22.04 C
+ATOM 104 C GLU A 12 5.906 43.096 20.424 1.00 21.34 C
+ATOM 105 O GLU A 12 4.745 42.684 20.546 1.00 20.00 O
+ATOM 106 CB GLU A 12 7.321 44.635 21.808 1.00 23.52 C
+ATOM 107 CG GLU A 12 7.700 46.071 22.062 1.00 28.01 C
+ATOM 108 CD GLU A 12 8.932 46.202 22.914 1.00 31.32 C
+ATOM 109 OE1 GLU A 12 9.657 45.192 23.040 1.00 34.37 O
+ATOM 110 OE2 GLU A 12 9.177 47.310 23.453 1.00 32.30 O
+ATOM 111 N ALA A 13 6.890 42.335 19.974 1.00 21.46 N
+ATOM 112 CA ALA A 13 6.631 40.950 19.643 1.00 21.09 C
+ATOM 113 C ALA A 13 6.356 40.097 20.894 1.00 21.55 C
+ATOM 114 O ALA A 13 6.698 40.479 22.019 1.00 20.29 O
+ATOM 115 CB ALA A 13 7.789 40.372 18.823 1.00 21.92 C
+ATOM 116 N HIS A 14 5.658 38.985 20.682 1.00 22.41 N
+ATOM 117 CA HIS A 14 5.330 38.034 21.735 1.00 23.43 C
+ATOM 118 C HIS A 14 4.427 38.565 22.833 1.00 26.65 C
+ATOM 119 O HIS A 14 4.607 38.284 24.027 1.00 25.72 O
+ATOM 120 CB HIS A 14 6.615 37.427 22.280 1.00 20.70 C
+ATOM 121 CG HIS A 14 7.302 36.559 21.284 1.00 19.89 C
+ATOM 122 ND1 HIS A 14 8.343 36.987 20.508 1.00 20.25 N
+ATOM 123 CD2 HIS A 14 7.030 35.285 20.882 1.00 20.19 C
+ATOM 124 CE1 HIS A 14 8.696 36.033 19.662 1.00 20.13 C
+ATOM 125 NE2 HIS A 14 7.908 34.988 19.880 1.00 18.43 N
+ATOM 126 N ASN A 15 3.393 39.265 22.380 1.00 28.96 N
+ATOM 127 CA ASN A 15 2.399 39.876 23.248 1.00 30.52 C
+ATOM 128 C ASN A 15 2.977 40.624 24.425 1.00 28.86 C
+ATOM 129 O ASN A 15 2.425 40.598 25.520 1.00 28.49 O
+ATOM 130 CB ASN A 15 1.360 38.858 23.681 1.00 33.46 C
+ATOM 131 CG ASN A 15 0.428 38.509 22.566 1.00 36.47 C
+ATOM 132 OD1 ASN A 15 -0.545 39.213 22.337 1.00 39.03 O
+ATOM 133 ND2 ASN A 15 0.754 37.464 21.808 1.00 38.03 N
+ATOM 134 N LYS A 16 4.131 41.237 24.191 1.00 28.08 N
+ATOM 135 CA LYS A 16 4.776 42.051 25.201 1.00 29.95 C
+ATOM 136 C LYS A 16 4.312 43.476 24.941 1.00 28.45 C
+ATOM 137 O LYS A 16 4.189 43.901 23.793 1.00 25.74 O
+ATOM 138 CB LYS A 16 6.302 42.000 25.083 1.00 32.55 C
+ATOM 139 CG LYS A 16 7.020 43.021 25.991 1.00 36.30 C
+ATOM 140 CD LYS A 16 8.554 42.915 25.900 1.00 40.04 C
+ATOM 141 CE LYS A 16 9.293 43.829 26.912 1.00 40.76 C
+ATOM 142 NZ LYS A 16 9.198 45.302 26.613 1.00 41.55 N
+ATOM 143 N LYS A 17 4.031 44.192 26.017 1.00 27.33 N
+ATOM 144 CA LYS A 17 3.624 45.574 25.933 1.00 26.96 C
+ATOM 145 C LYS A 17 4.944 46.324 25.747 1.00 28.15 C
+ATOM 146 O LYS A 17 5.948 45.987 26.375 1.00 27.87 O
+ATOM 147 CB LYS A 17 2.975 45.988 27.249 1.00 27.62 C
+ATOM 148 CG LYS A 17 1.778 46.869 27.094 1.00 29.05 C
+ATOM 149 CD LYS A 17 0.655 46.113 26.416 1.00 32.51 C
+ATOM 150 CE LYS A 17 -0.562 47.005 26.218 1.00 35.66 C
+ATOM 151 NZ LYS A 17 -1.113 47.480 27.535 1.00 38.04 N
+ATOM 152 N ALA A 18 4.978 47.268 24.818 1.00 26.95 N
+ATOM 153 CA ALA A 18 6.184 48.042 24.590 1.00 24.83 C
+ATOM 154 C ALA A 18 6.508 48.847 25.857 1.00 26.34 C
+ATOM 155 O ALA A 18 5.610 49.358 26.532 1.00 25.61 O
+ATOM 156 CB ALA A 18 5.981 48.971 23.407 1.00 25.25 C
+ATOM 157 N SER A 19 7.796 48.952 26.173 1.00 29.37 N
+ATOM 158 CA SER A 19 8.278 49.684 27.355 1.00 31.72 C
+ATOM 159 C SER A 19 8.313 51.190 27.152 1.00 32.25 C
+ATOM 160 O SER A 19 8.228 51.957 28.108 1.00 33.66 O
+ATOM 161 CB SER A 19 9.679 49.202 27.734 1.00 32.21 C
+ATOM 162 OG SER A 19 10.522 49.148 26.593 1.00 34.59 O
+ATOM 163 N SER A 20 8.498 51.590 25.899 1.00 33.22 N
+ATOM 164 CA SER A 20 8.554 52.988 25.477 1.00 32.63 C
+ATOM 165 C SER A 20 7.193 53.375 24.874 1.00 29.50 C
+ATOM 166 O SER A 20 6.968 53.232 23.664 1.00 28.25 O
+ATOM 167 CB SER A 20 9.667 53.127 24.428 1.00 34.97 C
+ATOM 168 OG SER A 20 9.680 51.993 23.552 1.00 36.36 O
+ATOM 169 N ARG A 21 6.298 53.913 25.690 1.00 26.57 N
+ATOM 170 CA ARG A 21 4.992 54.239 25.163 1.00 24.41 C
+ATOM 171 C ARG A 21 4.460 55.646 25.113 1.00 20.69 C
+ATOM 172 O ARG A 21 3.252 55.840 25.180 1.00 19.62 O
+ATOM 173 CB ARG A 21 3.955 53.329 25.790 1.00 28.80 C
+ATOM 174 CG ARG A 21 4.123 51.906 25.356 1.00 32.60 C
+ATOM 175 CD ARG A 21 2.974 51.101 25.819 1.00 36.05 C
+ATOM 176 NE ARG A 21 3.055 50.861 27.247 1.00 38.77 N
+ATOM 177 CZ ARG A 21 2.000 50.631 28.008 1.00 40.18 C
+ATOM 178 NH1 ARG A 21 0.784 50.631 27.473 1.00 42.41 N
+ATOM 179 NH2 ARG A 21 2.169 50.339 29.287 1.00 41.27 N
+ATOM 180 N SER A 22 5.321 56.641 24.986 1.00 17.56 N
+ATOM 181 CA SER A 22 4.785 57.982 24.884 1.00 20.47 C
+ATOM 182 C SER A 22 4.616 58.335 23.398 1.00 17.10 C
+ATOM 183 O SER A 22 5.207 57.703 22.524 1.00 20.23 O
+ATOM 184 CB SER A 22 5.657 59.001 25.635 1.00 21.16 C
+ATOM 185 OG SER A 22 6.911 58.450 26.011 1.00 28.08 O
+ATOM 186 N TRP A 23 3.757 59.299 23.114 1.00 16.99 N
+ATOM 187 CA TRP A 23 3.517 59.719 21.737 1.00 17.47 C
+ATOM 188 C TRP A 23 4.665 60.596 21.305 1.00 17.91 C
+ATOM 189 O TRP A 23 5.280 61.274 22.131 1.00 16.76 O
+ATOM 190 CB TRP A 23 2.212 60.503 21.628 1.00 17.14 C
+ATOM 191 CG TRP A 23 0.988 59.656 21.769 1.00 18.46 C
+ATOM 192 CD1 TRP A 23 0.370 59.280 22.943 1.00 17.04 C
+ATOM 193 CD2 TRP A 23 0.222 59.078 20.702 1.00 16.69 C
+ATOM 194 NE1 TRP A 23 -0.738 58.515 22.658 1.00 16.21 N
+ATOM 195 CE2 TRP A 23 -0.854 58.370 21.295 1.00 18.04 C
+ATOM 196 CE3 TRP A 23 0.337 59.085 19.307 1.00 15.15 C
+ATOM 197 CZ2 TRP A 23 -1.805 57.675 20.532 1.00 18.08 C
+ATOM 198 CZ3 TRP A 23 -0.607 58.400 18.549 1.00 14.80 C
+ATOM 199 CH2 TRP A 23 -1.664 57.705 19.161 1.00 16.88 C
+ATOM 200 N HIS A 24 5.015 60.525 20.031 1.00 18.00 N
+ATOM 201 CA HIS A 24 6.100 61.351 19.499 1.00 17.66 C
+ATOM 202 C HIS A 24 5.714 61.757 18.098 1.00 17.67 C
+ATOM 203 O HIS A 24 5.094 60.977 17.377 1.00 14.22 O
+ATOM 204 CB HIS A 24 7.427 60.583 19.489 1.00 18.65 C
+ATOM 205 CG HIS A 24 7.968 60.282 20.858 1.00 22.33 C
+ATOM 206 ND1 HIS A 24 8.058 59.005 21.362 1.00 22.09 N
+ATOM 207 CD2 HIS A 24 8.440 61.103 21.827 1.00 21.09 C
+ATOM 208 CE1 HIS A 24 8.563 59.047 22.585 1.00 20.28 C
+ATOM 209 NE2 HIS A 24 8.803 60.313 22.888 1.00 20.78 N
+ATOM 210 N ASN A 25 5.996 63.010 17.761 1.00 17.55 N
+ATOM 211 CA ASN A 25 5.690 63.551 16.447 1.00 19.15 C
+ATOM 212 C ASN A 25 6.836 63.158 15.517 1.00 19.81 C
+ATOM 213 O ASN A 25 7.977 63.563 15.727 1.00 20.87 O
+ATOM 214 CB ASN A 25 5.560 65.073 16.528 1.00 22.24 C
+ATOM 215 CG ASN A 25 5.213 65.717 15.185 1.00 25.75 C
+ATOM 216 OD1 ASN A 25 5.833 66.707 14.796 1.00 28.50 O
+ATOM 217 ND2 ASN A 25 4.202 65.186 14.496 1.00 25.16 N
+ATOM 218 N VAL A 26 6.540 62.289 14.556 1.00 15.96 N
+ATOM 219 CA VAL A 26 7.534 61.835 13.601 1.00 15.20 C
+ATOM 220 C VAL A 26 7.108 62.068 12.138 1.00 13.93 C
+ATOM 221 O VAL A 26 5.918 62.100 11.799 1.00 13.63 O
+ATOM 222 CB VAL A 26 7.878 60.345 13.823 1.00 15.73 C
+ATOM 223 CG1 VAL A 26 8.500 60.155 15.192 1.00 18.56 C
+ATOM 224 CG2 VAL A 26 6.629 59.488 13.715 1.00 18.23 C
+ATOM 225 N TYR A 27 8.105 62.273 11.288 1.00 15.11 N
+ATOM 226 CA TYR A 27 7.904 62.496 9.865 1.00 14.53 C
+ATOM 227 C TYR A 27 8.054 61.130 9.195 1.00 11.70 C
+ATOM 228 O TYR A 27 9.150 60.576 9.137 1.00 11.47 O
+ATOM 229 CB TYR A 27 8.949 63.482 9.339 1.00 13.59 C
+ATOM 230 CG TYR A 27 8.704 63.893 7.915 1.00 15.13 C
+ATOM 231 CD1 TYR A 27 7.848 64.952 7.615 1.00 15.83 C
+ATOM 232 CD2 TYR A 27 9.299 63.208 6.857 1.00 15.99 C
+ATOM 233 CE1 TYR A 27 7.591 65.320 6.308 1.00 15.94 C
+ATOM 234 CE2 TYR A 27 9.040 63.574 5.534 1.00 16.47 C
+ATOM 235 CZ TYR A 27 8.188 64.626 5.277 1.00 16.93 C
+ATOM 236 OH TYR A 27 7.915 64.989 3.988 1.00 18.84 O
+ATOM 237 N CYS A 28 6.940 60.599 8.704 1.00 14.77 N
+ATOM 238 CA CYS A 28 6.891 59.276 8.072 1.00 16.76 C
+ATOM 239 C CYS A 28 6.963 59.230 6.547 1.00 14.57 C
+ATOM 240 O CYS A 28 6.350 60.047 5.871 1.00 14.13 O
+ATOM 241 CB CYS A 28 5.627 58.547 8.527 1.00 18.26 C
+ATOM 242 SG CYS A 28 5.468 58.479 10.330 1.00 18.07 S
+ATOM 243 N VAL A 29 7.673 58.241 6.012 1.00 14.65 N
+ATOM 244 CA VAL A 29 7.794 58.106 4.562 1.00 14.68 C
+ATOM 245 C VAL A 29 7.518 56.696 4.115 1.00 13.25 C
+ATOM 246 O VAL A 29 8.113 55.759 4.628 1.00 14.32 O
+ATOM 247 CB VAL A 29 9.206 58.502 4.054 1.00 14.48 C
+ATOM 248 CG1 VAL A 29 9.300 58.322 2.526 1.00 15.59 C
+ATOM 249 CG2 VAL A 29 9.520 59.943 4.424 1.00 11.45 C
+ATOM 250 N ILE A 30 6.548 56.543 3.223 1.00 14.58 N
+ATOM 251 CA ILE A 30 6.228 55.224 2.652 1.00 18.10 C
+ATOM 252 C ILE A 30 6.903 55.171 1.279 1.00 18.47 C
+ATOM 253 O ILE A 30 6.541 55.946 0.375 1.00 17.66 O
+ATOM 254 CB ILE A 30 4.704 55.026 2.419 1.00 19.55 C
+ATOM 255 CG1 ILE A 30 3.969 54.930 3.750 1.00 22.28 C
+ATOM 256 CG2 ILE A 30 4.446 53.779 1.604 1.00 19.43 C
+ATOM 257 CD1 ILE A 30 4.606 53.994 4.707 1.00 25.40 C
+ATOM 258 N ASN A 31 7.880 54.286 1.125 1.00 17.68 N
+ATOM 259 CA ASN A 31 8.600 54.134 -0.139 1.00 18.69 C
+ATOM 260 C ASN A 31 9.177 52.721 -0.215 1.00 18.06 C
+ATOM 261 O ASN A 31 9.703 52.216 0.775 1.00 18.45 O
+ATOM 262 CB ASN A 31 9.727 55.176 -0.248 1.00 16.59 C
+ATOM 263 CG ASN A 31 10.447 55.130 -1.593 1.00 18.15 C
+ATOM 264 OD1 ASN A 31 11.585 54.698 -1.677 1.00 19.51 O
+ATOM 265 ND2 ASN A 31 9.770 55.551 -2.649 1.00 17.78 N
+ATOM 266 N ASN A 32 9.063 52.094 -1.388 1.00 18.40 N
+ATOM 267 CA ASN A 32 9.555 50.733 -1.626 1.00 17.68 C
+ATOM 268 C ASN A 32 9.087 49.709 -0.607 1.00 14.45 C
+ATOM 269 O ASN A 32 9.877 48.944 -0.097 1.00 16.24 O
+ATOM 270 CB ASN A 32 11.082 50.701 -1.716 1.00 22.56 C
+ATOM 271 CG ASN A 32 11.615 49.430 -2.412 1.00 28.30 C
+ATOM 272 OD1 ASN A 32 12.803 49.344 -2.725 1.00 32.16 O
+ATOM 273 ND2 ASN A 32 10.735 48.459 -2.676 1.00 30.28 N
+ATOM 274 N GLN A 33 7.784 49.669 -0.370 1.00 17.51 N
+ATOM 275 CA GLN A 33 7.149 48.750 0.584 1.00 18.63 C
+ATOM 276 C GLN A 33 7.667 48.807 2.010 1.00 17.69 C
+ATOM 277 O GLN A 33 7.607 47.797 2.722 1.00 15.07 O
+ATOM 278 CB GLN A 33 7.233 47.311 0.105 1.00 24.47 C
+ATOM 279 CG GLN A 33 6.403 46.994 -1.124 1.00 28.75 C
+ATOM 280 CD GLN A 33 6.453 45.511 -1.444 1.00 30.69 C
+ATOM 281 OE1 GLN A 33 5.511 44.769 -1.152 1.00 31.04 O
+ATOM 282 NE2 GLN A 33 7.585 45.058 -1.986 1.00 31.70 N
+ATOM 283 N GLU A 34 8.204 49.962 2.408 1.00 17.93 N
+ATOM 284 CA GLU A 34 8.709 50.162 3.760 1.00 18.99 C
+ATOM 285 C GLU A 34 8.319 51.524 4.294 1.00 17.91 C
+ATOM 286 O GLU A 34 7.864 52.403 3.554 1.00 14.12 O
+ATOM 287 CB GLU A 34 10.228 49.998 3.830 1.00 22.53 C
+ATOM 288 CG GLU A 34 10.675 48.556 3.690 1.00 29.83 C
+ATOM 289 CD GLU A 34 12.032 48.287 4.302 1.00 33.87 C
+ATOM 290 OE1 GLU A 34 13.043 48.611 3.641 1.00 34.98 O
+ATOM 291 OE2 GLU A 34 12.088 47.735 5.438 1.00 36.29 O
+ATOM 292 N MET A 35 8.462 51.691 5.600 1.00 18.75 N
+ATOM 293 CA MET A 35 8.131 52.958 6.232 1.00 18.73 C
+ATOM 294 C MET A 35 9.322 53.442 7.042 1.00 15.64 C
+ATOM 295 O MET A 35 9.867 52.713 7.871 1.00 13.80 O
+ATOM 296 CB MET A 35 6.880 52.813 7.111 1.00 20.61 C
+ATOM 297 CG MET A 35 6.384 54.099 7.759 1.00 21.49 C
+ATOM 298 SD MET A 35 4.859 53.825 8.668 1.00 23.80 S
+ATOM 299 CE MET A 35 3.821 54.914 7.938 1.00 23.74 C
+ATOM 300 N GLY A 36 9.804 54.622 6.690 1.00 13.19 N
+ATOM 301 CA GLY A 36 10.923 55.201 7.396 1.00 15.14 C
+ATOM 302 C GLY A 36 10.423 56.302 8.305 1.00 14.42 C
+ATOM 303 O GLY A 36 9.402 56.932 8.007 1.00 12.60 O
+ATOM 304 N PHE A 37 11.150 56.536 9.402 1.00 16.60 N
+ATOM 305 CA PHE A 37 10.813 57.573 10.397 1.00 15.71 C
+ATOM 306 C PHE A 37 11.938 58.603 10.488 1.00 15.47 C
+ATOM 307 O PHE A 37 13.113 58.241 10.611 1.00 18.11 O
+ATOM 308 CB PHE A 37 10.565 56.930 11.772 1.00 16.36 C
+ATOM 309 CG PHE A 37 9.499 55.851 11.752 1.00 16.05 C
+ATOM 310 CD1 PHE A 37 8.161 56.178 11.513 1.00 14.84 C
+ATOM 311 CD2 PHE A 37 9.840 54.514 11.904 1.00 14.25 C
+ATOM 312 CE1 PHE A 37 7.184 55.182 11.429 1.00 13.47 C
+ATOM 313 CE2 PHE A 37 8.870 53.515 11.824 1.00 15.39 C
+ATOM 314 CZ PHE A 37 7.539 53.854 11.581 1.00 14.05 C
+ATOM 315 N TYR A 38 11.576 59.875 10.392 1.00 15.65 N
+ATOM 316 CA TYR A 38 12.529 60.976 10.433 1.00 17.08 C
+ATOM 317 C TYR A 38 11.983 62.034 11.362 1.00 16.50 C
+ATOM 318 O TYR A 38 10.805 62.031 11.672 1.00 15.66 O
+ATOM 319 CB TYR A 38 12.730 61.564 9.022 1.00 15.79 C
+ATOM 320 CG TYR A 38 13.149 60.525 8.001 1.00 16.25 C
+ATOM 321 CD1 TYR A 38 14.498 60.175 7.830 1.00 15.13 C
+ATOM 322 CD2 TYR A 38 12.189 59.830 7.255 1.00 14.76 C
+ATOM 323 CE1 TYR A 38 14.881 59.152 6.933 1.00 16.06 C
+ATOM 324 CE2 TYR A 38 12.559 58.805 6.358 1.00 16.42 C
+ATOM 325 CZ TYR A 38 13.896 58.464 6.211 1.00 17.30 C
+ATOM 326 OH TYR A 38 14.232 57.425 5.371 1.00 17.33 O
+ATOM 327 N LYS A 39 12.844 62.921 11.845 1.00 20.63 N
+ATOM 328 CA LYS A 39 12.392 63.977 12.751 1.00 23.18 C
+ATOM 329 C LYS A 39 11.626 65.041 11.957 1.00 22.20 C
+ATOM 330 O LYS A 39 10.655 65.615 12.447 1.00 21.23 O
+ATOM 331 CB LYS A 39 13.585 64.590 13.520 1.00 26.66 C
+ATOM 332 CG LYS A 39 13.199 65.468 14.727 1.00 33.34 C
+ATOM 333 CD LYS A 39 12.188 64.761 15.676 1.00 36.12 C
+ATOM 334 CE LYS A 39 11.772 65.651 16.856 1.00 36.19 C
+ATOM 335 NZ LYS A 39 10.489 65.187 17.472 1.00 37.75 N
+ATOM 336 N ASP A 40 12.039 65.269 10.712 1.00 21.36 N
+ATOM 337 CA ASP A 40 11.378 66.254 9.857 1.00 20.13 C
+ATOM 338 C ASP A 40 11.638 65.959 8.394 1.00 16.54 C
+ATOM 339 O ASP A 40 12.355 65.020 8.050 1.00 15.14 O
+ATOM 340 CB ASP A 40 11.848 67.677 10.195 1.00 21.32 C
+ATOM 341 CG ASP A 40 13.362 67.781 10.363 1.00 22.70 C
+ATOM 342 OD1 ASP A 40 14.130 67.069 9.671 1.00 23.79 O
+ATOM 343 OD2 ASP A 40 13.789 68.578 11.217 1.00 24.16 O
+ATOM 344 N ALA A 41 11.071 66.790 7.539 1.00 14.54 N
+ATOM 345 CA ALA A 41 11.230 66.635 6.115 1.00 16.78 C
+ATOM 346 C ALA A 41 12.698 66.734 5.688 1.00 19.08 C
+ATOM 347 O ALA A 41 13.162 65.969 4.823 1.00 20.33 O
+ATOM 348 CB ALA A 41 10.395 67.660 5.401 1.00 15.61 C
+ATOM 349 N LYS A 42 13.443 67.659 6.288 1.00 18.12 N
+ATOM 350 CA LYS A 42 14.834 67.801 5.928 1.00 18.10 C
+ATOM 351 C LYS A 42 15.680 66.585 6.275 1.00 18.56 C
+ATOM 352 O LYS A 42 16.534 66.181 5.487 1.00 20.23 O
+ATOM 353 CB LYS A 42 15.407 69.093 6.481 1.00 21.88 C
+ATOM 354 CG LYS A 42 15.729 70.079 5.364 1.00 27.22 C
+ATOM 355 CD LYS A 42 17.071 69.751 4.626 1.00 33.40 C
+ATOM 356 CE LYS A 42 16.989 68.732 3.451 1.00 35.50 C
+ATOM 357 NZ LYS A 42 18.084 67.705 3.602 1.00 34.21 N
+ATOM 358 N SER A 43 15.390 65.939 7.397 1.00 16.34 N
+ATOM 359 CA SER A 43 16.138 64.760 7.776 1.00 16.97 C
+ATOM 360 C SER A 43 15.787 63.635 6.838 1.00 14.59 C
+ATOM 361 O SER A 43 16.608 62.776 6.557 1.00 17.30 O
+ATOM 362 CB SER A 43 15.817 64.358 9.206 1.00 19.66 C
+ATOM 363 OG SER A 43 16.179 65.404 10.085 1.00 26.94 O
+ATOM 364 N ALA A 44 14.574 63.663 6.314 1.00 14.94 N
+ATOM 365 CA ALA A 44 14.121 62.630 5.394 1.00 15.23 C
+ATOM 366 C ALA A 44 14.911 62.663 4.076 1.00 14.67 C
+ATOM 367 O ALA A 44 15.341 61.620 3.570 1.00 16.26 O
+ATOM 368 CB ALA A 44 12.619 62.797 5.131 1.00 15.63 C
+ATOM 369 N ALA A 45 15.117 63.864 3.541 1.00 15.77 N
+ATOM 370 CA ALA A 45 15.846 64.048 2.290 1.00 16.70 C
+ATOM 371 C ALA A 45 17.318 63.712 2.486 1.00 17.57 C
+ATOM 372 O ALA A 45 17.975 63.209 1.581 1.00 16.94 O
+ATOM 373 CB ALA A 45 15.683 65.489 1.796 1.00 16.32 C
+ATOM 374 N SER A 46 17.815 63.927 3.695 1.00 19.08 N
+ATOM 375 CA SER A 46 19.211 63.664 4.008 1.00 20.56 C
+ATOM 376 C SER A 46 19.488 62.232 4.422 1.00 20.15 C
+ATOM 377 O SER A 46 20.626 61.784 4.383 1.00 23.16 O
+ATOM 378 CB SER A 46 19.691 64.603 5.108 1.00 19.77 C
+ATOM 379 OG SER A 46 19.515 65.953 4.730 1.00 21.33 O
+ATOM 380 N GLY A 47 18.459 61.514 4.843 1.00 21.38 N
+ATOM 381 CA GLY A 47 18.639 60.129 5.253 1.00 22.12 C
+ATOM 382 C GLY A 47 19.038 59.909 6.709 1.00 24.13 C
+ATOM 383 O GLY A 47 19.601 58.868 7.040 1.00 26.48 O
+ATOM 384 N ILE A 48 18.776 60.893 7.566 1.00 22.63 N
+ATOM 385 CA ILE A 48 19.099 60.812 8.996 1.00 25.22 C
+ATOM 386 C ILE A 48 17.863 60.279 9.734 1.00 23.75 C
+ATOM 387 O ILE A 48 16.862 60.992 9.878 1.00 23.64 O
+ATOM 388 CB ILE A 48 19.481 62.214 9.545 1.00 26.22 C
+ATOM 389 CG1 ILE A 48 20.606 62.809 8.689 1.00 26.12 C
+ATOM 390 CG2 ILE A 48 19.926 62.104 11.004 1.00 25.53 C
+ATOM 391 CD1 ILE A 48 20.851 64.292 8.907 1.00 27.86 C
+ATOM 392 N PRO A 49 17.952 59.042 10.264 1.00 23.06 N
+ATOM 393 CA PRO A 49 16.894 58.324 10.996 1.00 23.13 C
+ATOM 394 C PRO A 49 16.393 58.985 12.280 1.00 23.17 C
+ATOM 395 O PRO A 49 17.155 59.654 12.984 1.00 21.87 O
+ATOM 396 CB PRO A 49 17.545 56.972 11.260 1.00 23.81 C
+ATOM 397 CG PRO A 49 18.950 57.344 11.507 1.00 24.68 C
+ATOM 398 CD PRO A 49 19.228 58.320 10.378 1.00 24.29 C
+ATOM 399 N TYR A 50 15.114 58.758 12.591 1.00 22.96 N
+ATOM 400 CA TYR A 50 14.486 59.330 13.768 1.00 25.35 C
+ATOM 401 C TYR A 50 15.290 59.115 15.040 1.00 29.13 C
+ATOM 402 O TYR A 50 15.677 60.087 15.684 1.00 34.08 O
+ATOM 403 CB TYR A 50 13.051 58.833 13.955 1.00 25.48 C
+ATOM 404 CG TYR A 50 12.377 59.380 15.207 1.00 22.92 C
+ATOM 405 CD1 TYR A 50 12.313 60.749 15.444 1.00 21.55 C
+ATOM 406 CD2 TYR A 50 11.843 58.523 16.165 1.00 22.68 C
+ATOM 407 CE1 TYR A 50 11.748 61.247 16.596 1.00 22.32 C
+ATOM 408 CE2 TYR A 50 11.266 59.014 17.327 1.00 23.05 C
+ATOM 409 CZ TYR A 50 11.224 60.375 17.539 1.00 23.04 C
+ATOM 410 OH TYR A 50 10.671 60.854 18.706 1.00 25.33 O
+ATOM 411 N HIS A 51 15.485 57.879 15.471 1.00 28.80 N
+ATOM 412 CA HIS A 51 16.299 57.676 16.680 1.00 29.41 C
+ATOM 413 C HIS A 51 17.111 56.438 16.427 1.00 28.44 C
+ATOM 414 O HIS A 51 17.105 55.490 17.205 1.00 27.12 O
+ATOM 415 CB HIS A 51 15.428 57.548 17.942 1.00 32.08 C
+ATOM 416 CG HIS A 51 15.070 58.861 18.569 1.00 33.72 C
+ATOM 417 ND1 HIS A 51 14.010 59.018 19.437 1.00 36.39 N
+ATOM 418 CD2 HIS A 51 15.627 60.093 18.447 1.00 35.91 C
+ATOM 419 CE1 HIS A 51 13.925 60.282 19.818 1.00 36.36 C
+ATOM 420 NE2 HIS A 51 14.895 60.956 19.232 1.00 34.98 N
+ATOM 421 N SER A 52 17.784 56.458 15.283 1.00 27.96 N
+ATOM 422 CA SER A 52 18.587 55.336 14.823 1.00 30.52 C
+ATOM 423 C SER A 52 17.643 54.171 14.536 1.00 29.08 C
+ATOM 424 O SER A 52 18.019 52.995 14.576 1.00 29.75 O
+ATOM 425 CB SER A 52 19.683 54.976 15.837 1.00 32.92 C
+ATOM 426 OG SER A 52 20.600 56.064 15.987 1.00 36.03 O
+ATOM 427 N GLU A 53 16.404 54.529 14.210 1.00 28.13 N
+ATOM 428 CA GLU A 53 15.387 53.549 13.878 1.00 29.01 C
+ATOM 429 C GLU A 53 15.674 53.076 12.464 1.00 27.67 C
+ATOM 430 O GLU A 53 16.200 53.842 11.658 1.00 29.41 O
+ATOM 431 CB GLU A 53 13.998 54.189 13.922 1.00 29.49 C
+ATOM 432 CG GLU A 53 13.722 54.938 15.204 1.00 34.26 C
+ATOM 433 CD GLU A 53 12.272 54.853 15.667 1.00 35.62 C
+ATOM 434 OE1 GLU A 53 11.417 54.305 14.933 1.00 35.05 O
+ATOM 435 OE2 GLU A 53 11.994 55.338 16.791 1.00 37.64 O
+ATOM 436 N VAL A 54 15.362 51.819 12.172 1.00 26.06 N
+ATOM 437 CA VAL A 54 15.563 51.268 10.834 1.00 25.17 C
+ATOM 438 C VAL A 54 14.186 51.260 10.175 1.00 24.79 C
+ATOM 439 O VAL A 54 13.177 51.121 10.861 1.00 25.45 O
+ATOM 440 CB VAL A 54 16.077 49.815 10.912 1.00 26.01 C
+ATOM 441 CG1 VAL A 54 14.996 48.900 11.473 1.00 26.67 C
+ATOM 442 CG2 VAL A 54 16.519 49.324 9.547 1.00 28.35 C
+ATOM 443 N PRO A 55 14.106 51.497 8.862 1.00 24.84 N
+ATOM 444 CA PRO A 55 12.793 51.481 8.211 1.00 22.98 C
+ATOM 445 C PRO A 55 12.170 50.102 8.386 1.00 21.20 C
+ATOM 446 O PRO A 55 12.874 49.093 8.400 1.00 22.11 O
+ATOM 447 CB PRO A 55 13.140 51.720 6.748 1.00 23.17 C
+ATOM 448 CG PRO A 55 14.324 52.590 6.838 1.00 24.46 C
+ATOM 449 CD PRO A 55 15.148 51.924 7.911 1.00 24.48 C
+ATOM 450 N VAL A 56 10.857 50.047 8.515 1.00 19.54 N
+ATOM 451 CA VAL A 56 10.211 48.771 8.701 1.00 18.42 C
+ATOM 452 C VAL A 56 9.450 48.358 7.453 1.00 18.28 C
+ATOM 453 O VAL A 56 8.932 49.209 6.731 1.00 16.44 O
+ATOM 454 CB VAL A 56 9.295 48.782 9.940 1.00 19.27 C
+ATOM 455 CG1 VAL A 56 8.120 49.728 9.751 1.00 17.47 C
+ATOM 456 CG2 VAL A 56 8.837 47.367 10.239 1.00 23.80 C
+ATOM 457 N SER A 57 9.428 47.052 7.186 1.00 18.25 N
+ATOM 458 CA SER A 57 8.740 46.502 6.023 1.00 16.65 C
+ATOM 459 C SER A 57 7.233 46.493 6.244 1.00 17.60 C
+ATOM 460 O SER A 57 6.762 46.191 7.335 1.00 19.78 O
+ATOM 461 CB SER A 57 9.250 45.091 5.744 1.00 16.33 C
+ATOM 462 OG SER A 57 8.454 44.421 4.785 1.00 17.05 O
+ATOM 463 N LEU A 58 6.483 46.831 5.205 1.00 16.27 N
+ATOM 464 CA LEU A 58 5.033 46.865 5.271 1.00 15.95 C
+ATOM 465 C LEU A 58 4.426 45.603 4.656 1.00 16.64 C
+ATOM 466 O LEU A 58 3.211 45.493 4.506 1.00 13.84 O
+ATOM 467 CB LEU A 58 4.516 48.121 4.577 1.00 15.46 C
+ATOM 468 CG LEU A 58 4.997 49.459 5.156 1.00 14.17 C
+ATOM 469 CD1 LEU A 58 4.483 50.564 4.253 1.00 14.15 C
+ATOM 470 CD2 LEU A 58 4.513 49.672 6.588 1.00 12.42 C
+ATOM 471 N LYS A 59 5.297 44.645 4.339 1.00 20.39 N
+ATOM 472 CA LYS A 59 4.920 43.341 3.781 1.00 21.12 C
+ATOM 473 C LYS A 59 4.010 42.610 4.756 1.00 21.34 C
+ATOM 474 O LYS A 59 4.410 42.342 5.884 1.00 20.65 O
+ATOM 475 CB LYS A 59 6.171 42.489 3.547 1.00 25.50 C
+ATOM 476 CG LYS A 59 6.531 42.272 2.090 1.00 31.56 C
+ATOM 477 CD LYS A 59 6.440 40.785 1.709 1.00 36.04 C
+ATOM 478 CE LYS A 59 5.012 40.247 1.891 1.00 38.73 C
+ATOM 479 NZ LYS A 59 4.824 38.806 1.524 1.00 41.32 N
+ATOM 480 N GLU A 60 2.783 42.325 4.329 1.00 22.04 N
+ATOM 481 CA GLU A 60 1.807 41.615 5.152 1.00 25.74 C
+ATOM 482 C GLU A 60 1.461 42.356 6.441 1.00 24.68 C
+ATOM 483 O GLU A 60 1.225 41.732 7.482 1.00 25.77 O
+ATOM 484 CB GLU A 60 2.292 40.202 5.513 1.00 30.20 C
+ATOM 485 CG GLU A 60 2.198 39.166 4.414 1.00 35.53 C
+ATOM 486 CD GLU A 60 2.432 37.750 4.943 1.00 40.25 C
+ATOM 487 OE1 GLU A 60 3.601 37.388 5.227 1.00 41.32 O
+ATOM 488 OE2 GLU A 60 1.435 36.993 5.086 1.00 43.60 O
+ATOM 489 N ALA A 61 1.403 43.680 6.370 1.00 22.56 N
+ATOM 490 CA ALA A 61 1.079 44.495 7.534 1.00 18.68 C
+ATOM 491 C ALA A 61 -0.427 44.628 7.644 1.00 19.21 C
+ATOM 492 O ALA A 61 -1.136 44.542 6.650 1.00 20.03 O
+ATOM 493 CB ALA A 61 1.703 45.866 7.389 1.00 16.84 C
+ATOM 494 N ILE A 62 -0.920 44.797 8.861 1.00 18.06 N
+ATOM 495 CA ILE A 62 -2.344 44.993 9.088 1.00 17.86 C
+ATOM 496 C ILE A 62 -2.472 46.457 9.482 1.00 17.24 C
+ATOM 497 O ILE A 62 -1.779 46.920 10.377 1.00 16.24 O
+ATOM 498 CB ILE A 62 -2.857 44.055 10.214 1.00 20.09 C
+ATOM 499 CG1 ILE A 62 -2.848 42.600 9.700 1.00 21.20 C
+ATOM 500 CG2 ILE A 62 -4.245 44.499 10.724 1.00 22.24 C
+ATOM 501 CD1 ILE A 62 -2.770 41.551 10.773 1.00 21.87 C
+ATOM 502 N CYS A 63 -3.302 47.195 8.759 1.00 17.28 N
+ATOM 503 CA CYS A 63 -3.514 48.615 9.022 1.00 18.72 C
+ATOM 504 C CYS A 63 -5.017 48.904 9.033 1.00 18.16 C
+ATOM 505 O CYS A 63 -5.731 48.530 8.101 1.00 18.74 O
+ATOM 506 CB CYS A 63 -2.831 49.441 7.932 1.00 21.64 C
+ATOM 507 SG CYS A 63 -2.843 51.208 8.219 1.00 24.53 S
+ATOM 508 N GLU A 64 -5.510 49.559 10.079 1.00 18.03 N
+ATOM 509 CA GLU A 64 -6.943 49.838 10.168 1.00 17.98 C
+ATOM 510 C GLU A 64 -7.248 50.948 11.158 1.00 20.43 C
+ATOM 511 O GLU A 64 -6.366 51.358 11.910 1.00 21.20 O
+ATOM 512 CB GLU A 64 -7.680 48.575 10.606 1.00 20.21 C
+ATOM 513 CG GLU A 64 -7.182 48.006 11.921 1.00 23.44 C
+ATOM 514 CD GLU A 64 -7.790 46.645 12.252 1.00 28.17 C
+ATOM 515 OE1 GLU A 64 -8.162 45.892 11.316 1.00 30.32 O
+ATOM 516 OE2 GLU A 64 -7.881 46.316 13.457 1.00 27.85 O
+ATOM 517 N VAL A 65 -8.488 51.447 11.149 1.00 19.27 N
+ATOM 518 CA VAL A 65 -8.904 52.493 12.090 1.00 19.89 C
+ATOM 519 C VAL A 65 -8.904 51.907 13.509 1.00 18.94 C
+ATOM 520 O VAL A 65 -9.366 50.787 13.739 1.00 17.30 O
+ATOM 521 CB VAL A 65 -10.309 53.086 11.733 1.00 20.55 C
+ATOM 522 CG1 VAL A 65 -11.388 52.031 11.816 1.00 21.04 C
+ATOM 523 CG2 VAL A 65 -10.653 54.221 12.660 1.00 19.30 C
+ATOM 524 N ALA A 66 -8.333 52.643 14.448 1.00 19.03 N
+ATOM 525 CA ALA A 66 -8.263 52.186 15.822 1.00 19.91 C
+ATOM 526 C ALA A 66 -9.532 52.587 16.574 1.00 22.57 C
+ATOM 527 O ALA A 66 -9.539 53.595 17.269 1.00 24.39 O
+ATOM 528 CB ALA A 66 -7.034 52.781 16.492 1.00 17.73 C
+ATOM 529 N LEU A 67 -10.608 51.817 16.399 1.00 27.18 N
+ATOM 530 CA LEU A 67 -11.902 52.074 17.064 1.00 30.15 C
+ATOM 531 C LEU A 67 -11.757 51.904 18.565 1.00 30.21 C
+ATOM 532 O LEU A 67 -12.340 52.646 19.359 1.00 31.74 O
+ATOM 533 CB LEU A 67 -12.963 51.064 16.604 1.00 32.67 C
+ATOM 534 CG LEU A 67 -13.644 51.128 15.238 1.00 33.66 C
+ATOM 535 CD1 LEU A 67 -13.462 49.806 14.541 1.00 34.94 C
+ATOM 536 CD2 LEU A 67 -15.127 51.419 15.416 1.00 34.74 C
+ATOM 537 N ASP A 68 -11.028 50.857 18.927 1.00 29.13 N
+ATOM 538 CA ASP A 68 -10.758 50.514 20.308 1.00 29.04 C
+ATOM 539 C ASP A 68 -9.983 51.591 21.064 1.00 27.97 C
+ATOM 540 O ASP A 68 -10.079 51.675 22.283 1.00 30.53 O
+ATOM 541 CB ASP A 68 -10.030 49.162 20.369 1.00 31.62 C
+ATOM 542 CG ASP A 68 -8.724 49.128 19.539 1.00 31.93 C
+ATOM 543 OD1 ASP A 68 -8.398 50.091 18.821 1.00 34.02 O
+ATOM 544 OD2 ASP A 68 -8.002 48.116 19.622 1.00 33.00 O
+ATOM 545 N TYR A 69 -9.186 52.390 20.362 1.00 23.97 N
+ATOM 546 CA TYR A 69 -8.452 53.445 21.042 1.00 24.92 C
+ATOM 547 C TYR A 69 -9.372 54.655 21.106 1.00 26.43 C
+ATOM 548 O TYR A 69 -9.774 55.208 20.086 1.00 28.36 O
+ATOM 549 CB TYR A 69 -7.153 53.790 20.327 1.00 21.51 C
+ATOM 550 CG TYR A 69 -6.336 54.825 21.073 1.00 20.27 C
+ATOM 551 CD1 TYR A 69 -5.493 54.458 22.121 1.00 19.42 C
+ATOM 552 CD2 TYR A 69 -6.396 56.168 20.723 1.00 17.78 C
+ATOM 553 CE1 TYR A 69 -4.723 55.425 22.795 1.00 19.52 C
+ATOM 554 CE2 TYR A 69 -5.645 57.121 21.384 1.00 17.84 C
+ATOM 555 CZ TYR A 69 -4.813 56.750 22.417 1.00 18.06 C
+ATOM 556 OH TYR A 69 -4.106 57.712 23.092 1.00 19.50 O
+ATOM 557 N LYS A 70 -9.649 55.103 22.317 1.00 28.52 N
+ATOM 558 CA LYS A 70 -10.573 56.203 22.500 1.00 30.62 C
+ATOM 559 C LYS A 70 -9.991 57.473 23.094 1.00 28.94 C
+ATOM 560 O LYS A 70 -10.687 58.476 23.217 1.00 31.55 O
+ATOM 561 CB LYS A 70 -11.746 55.725 23.357 1.00 34.43 C
+ATOM 562 CG LYS A 70 -12.304 54.377 22.909 1.00 37.28 C
+ATOM 563 CD LYS A 70 -13.616 54.040 23.592 1.00 40.55 C
+ATOM 564 CE LYS A 70 -14.163 52.717 23.092 1.00 42.82 C
+ATOM 565 NZ LYS A 70 -15.531 52.478 23.629 1.00 46.53 N
+ATOM 566 N LYS A 71 -8.720 57.452 23.448 1.00 27.22 N
+ATOM 567 CA LYS A 71 -8.139 58.631 24.038 1.00 27.43 C
+ATOM 568 C LYS A 71 -7.993 59.772 23.048 1.00 27.35 C
+ATOM 569 O LYS A 71 -7.732 60.902 23.433 1.00 30.43 O
+ATOM 570 CB LYS A 71 -6.814 58.295 24.717 1.00 28.44 C
+ATOM 571 CG LYS A 71 -6.952 57.241 25.823 1.00 30.61 C
+ATOM 572 CD LYS A 71 -5.666 57.140 26.644 1.00 33.20 C
+ATOM 573 CE LYS A 71 -5.621 55.899 27.539 1.00 33.64 C
+ATOM 574 NZ LYS A 71 -6.684 55.841 28.597 1.00 35.15 N
+ATOM 575 N LYS A 72 -8.135 59.488 21.764 1.00 27.26 N
+ATOM 576 CA LYS A 72 -8.038 60.550 20.771 1.00 24.04 C
+ATOM 577 C LYS A 72 -8.575 60.154 19.421 1.00 21.95 C
+ATOM 578 O LYS A 72 -8.820 58.985 19.177 1.00 21.57 O
+ATOM 579 CB LYS A 72 -6.626 61.127 20.680 1.00 24.38 C
+ATOM 580 CG LYS A 72 -5.561 60.219 20.198 1.00 24.88 C
+ATOM 581 CD LYS A 72 -4.203 60.833 20.479 1.00 25.32 C
+ATOM 582 CE LYS A 72 -3.989 60.956 21.975 1.00 26.51 C
+ATOM 583 NZ LYS A 72 -2.620 61.400 22.337 1.00 27.15 N
+ATOM 584 N LYS A 73 -8.810 61.155 18.582 1.00 21.34 N
+ATOM 585 CA LYS A 73 -9.380 60.973 17.252 1.00 21.97 C
+ATOM 586 C LYS A 73 -8.399 60.837 16.103 1.00 19.12 C
+ATOM 587 O LYS A 73 -7.235 61.215 16.213 1.00 19.82 O
+ATOM 588 CB LYS A 73 -10.323 62.139 16.956 1.00 22.73 C
+ATOM 589 CG LYS A 73 -11.626 62.061 17.713 1.00 27.02 C
+ATOM 590 CD LYS A 73 -12.347 63.390 17.717 1.00 31.18 C
+ATOM 591 CE LYS A 73 -13.739 63.273 18.348 1.00 35.20 C
+ATOM 592 NZ LYS A 73 -14.741 62.572 17.478 1.00 38.14 N
+ATOM 593 N HIS A 74 -8.920 60.342 14.984 1.00 18.70 N
+ATOM 594 CA HIS A 74 -8.171 60.160 13.741 1.00 18.30 C
+ATOM 595 C HIS A 74 -6.934 59.282 13.952 1.00 16.52 C
+ATOM 596 O HIS A 74 -5.873 59.538 13.372 1.00 12.44 O
+ATOM 597 CB HIS A 74 -7.748 61.524 13.166 1.00 18.63 C
+ATOM 598 CG HIS A 74 -8.691 62.651 13.480 1.00 21.14 C
+ATOM 599 ND1 HIS A 74 -10.050 62.587 13.226 1.00 23.56 N
+ATOM 600 CD2 HIS A 74 -8.463 63.873 13.999 1.00 20.86 C
+ATOM 601 CE1 HIS A 74 -10.609 63.734 13.570 1.00 22.05 C
+ATOM 602 NE2 HIS A 74 -9.676 64.533 14.040 1.00 19.94 N
+ATOM 603 N VAL A 75 -7.082 58.253 14.786 1.00 15.43 N
+ATOM 604 CA VAL A 75 -5.988 57.329 15.098 1.00 16.47 C
+ATOM 605 C VAL A 75 -6.113 55.997 14.356 1.00 16.51 C
+ATOM 606 O VAL A 75 -7.172 55.364 14.382 1.00 15.73 O
+ATOM 607 CB VAL A 75 -5.926 57.014 16.622 1.00 15.31 C
+ATOM 608 CG1 VAL A 75 -4.787 56.027 16.918 1.00 16.60 C
+ATOM 609 CG2 VAL A 75 -5.760 58.285 17.424 1.00 10.91 C
+ATOM 610 N PHE A 76 -5.051 55.591 13.666 1.00 16.44 N
+ATOM 611 CA PHE A 76 -5.065 54.307 12.995 1.00 15.67 C
+ATOM 612 C PHE A 76 -4.023 53.377 13.598 1.00 13.71 C
+ATOM 613 O PHE A 76 -3.070 53.821 14.231 1.00 13.35 O
+ATOM 614 CB PHE A 76 -4.996 54.419 11.452 1.00 15.35 C
+ATOM 615 CG PHE A 76 -3.670 54.871 10.893 1.00 13.48 C
+ATOM 616 CD1 PHE A 76 -2.682 53.954 10.599 1.00 14.05 C
+ATOM 617 CD2 PHE A 76 -3.453 56.214 10.592 1.00 15.17 C
+ATOM 618 CE1 PHE A 76 -1.483 54.345 10.014 1.00 16.28 C
+ATOM 619 CE2 PHE A 76 -2.249 56.626 10.000 1.00 16.76 C
+ATOM 620 CZ PHE A 76 -1.266 55.688 9.710 1.00 17.26 C
+ATOM 621 N LYS A 77 -4.265 52.088 13.461 1.00 11.79 N
+ATOM 622 CA LYS A 77 -3.395 51.059 14.003 1.00 14.97 C
+ATOM 623 C LYS A 77 -2.619 50.345 12.895 1.00 14.66 C
+ATOM 624 O LYS A 77 -3.179 50.030 11.836 1.00 12.66 O
+ATOM 625 CB LYS A 77 -4.267 50.047 14.735 1.00 15.92 C
+ATOM 626 CG LYS A 77 -3.528 48.987 15.478 1.00 20.13 C
+ATOM 627 CD LYS A 77 -4.478 47.854 15.802 1.00 24.66 C
+ATOM 628 CE LYS A 77 -5.781 48.368 16.389 1.00 25.92 C
+ATOM 629 NZ LYS A 77 -6.778 47.272 16.525 1.00 29.80 N
+ATOM 630 N LEU A 78 -1.341 50.071 13.156 1.00 14.83 N
+ATOM 631 CA LEU A 78 -0.483 49.383 12.205 1.00 13.48 C
+ATOM 632 C LEU A 78 0.233 48.238 12.913 1.00 14.49 C
+ATOM 633 O LEU A 78 1.019 48.470 13.835 1.00 14.29 O
+ATOM 634 CB LEU A 78 0.554 50.343 11.613 1.00 12.68 C
+ATOM 635 CG LEU A 78 1.665 49.728 10.746 1.00 12.27 C
+ATOM 636 CD1 LEU A 78 1.097 49.176 9.450 1.00 14.18 C
+ATOM 637 CD2 LEU A 78 2.708 50.771 10.421 1.00 13.97 C
+ATOM 638 N ARG A 79 -0.061 47.007 12.507 1.00 12.62 N
+ATOM 639 CA ARG A 79 0.597 45.845 13.078 1.00 13.89 C
+ATOM 640 C ARG A 79 1.507 45.304 11.992 1.00 13.25 C
+ATOM 641 O ARG A 79 1.038 44.962 10.916 1.00 12.28 O
+ATOM 642 CB ARG A 79 -0.413 44.759 13.486 1.00 17.76 C
+ATOM 643 CG ARG A 79 0.231 43.582 14.272 1.00 24.67 C
+ATOM 644 CD ARG A 79 -0.778 42.563 14.825 1.00 25.44 C
+ATOM 645 NE ARG A 79 -1.931 43.220 15.431 1.00 28.35 N
+ATOM 646 CZ ARG A 79 -3.144 42.686 15.499 1.00 29.87 C
+ATOM 647 NH1 ARG A 79 -3.363 41.469 15.032 1.00 31.39 N
+ATOM 648 NH2 ARG A 79 -4.169 43.433 15.888 1.00 30.92 N
+ATOM 649 N LEU A 80 2.810 45.315 12.250 1.00 12.62 N
+ATOM 650 CA LEU A 80 3.790 44.798 11.309 1.00 14.31 C
+ATOM 651 C LEU A 80 3.828 43.269 11.456 1.00 16.33 C
+ATOM 652 O LEU A 80 3.434 42.727 12.498 1.00 13.98 O
+ATOM 653 CB LEU A 80 5.164 45.392 11.620 1.00 15.19 C
+ATOM 654 CG LEU A 80 5.200 46.914 11.767 1.00 17.17 C
+ATOM 655 CD1 LEU A 80 6.440 47.301 12.543 1.00 19.02 C
+ATOM 656 CD2 LEU A 80 5.153 47.590 10.400 1.00 15.76 C
+ATOM 657 N SER A 81 4.348 42.581 10.444 1.00 16.04 N
+ATOM 658 CA SER A 81 4.423 41.124 10.461 1.00 18.11 C
+ATOM 659 C SER A 81 5.231 40.536 11.637 1.00 19.70 C
+ATOM 660 O SER A 81 4.935 39.442 12.127 1.00 20.75 O
+ATOM 661 CB SER A 81 5.014 40.645 9.145 1.00 19.59 C
+ATOM 662 OG SER A 81 6.266 41.286 8.956 1.00 25.20 O
+ATOM 663 N ASP A 82 6.229 41.274 12.108 1.00 20.82 N
+ATOM 664 CA ASP A 82 7.066 40.798 13.207 1.00 23.69 C
+ATOM 665 C ASP A 82 6.448 40.956 14.599 1.00 23.86 C
+ATOM 666 O ASP A 82 7.094 40.653 15.608 1.00 24.91 O
+ATOM 667 CB ASP A 82 8.429 41.488 13.165 1.00 24.85 C
+ATOM 668 CG ASP A 82 8.360 42.945 13.568 1.00 27.57 C
+ATOM 669 OD1 ASP A 82 7.276 43.555 13.468 1.00 28.60 O
+ATOM 670 OD2 ASP A 82 9.398 43.487 14.003 1.00 29.22 O
+ATOM 671 N GLY A 83 5.221 41.470 14.657 1.00 21.24 N
+ATOM 672 CA GLY A 83 4.572 41.644 15.939 1.00 18.00 C
+ATOM 673 C GLY A 83 4.507 43.054 16.503 1.00 15.72 C
+ATOM 674 O GLY A 83 3.735 43.315 17.420 1.00 17.12 O
+ATOM 675 N ASN A 84 5.330 43.965 16.016 1.00 14.62 N
+ATOM 676 CA ASN A 84 5.272 45.322 16.534 1.00 16.29 C
+ATOM 677 C ASN A 84 4.009 46.008 16.107 1.00 16.20 C
+ATOM 678 O ASN A 84 3.562 45.867 14.960 1.00 17.94 O
+ATOM 679 CB ASN A 84 6.466 46.145 16.098 1.00 17.51 C
+ATOM 680 CG ASN A 84 7.709 45.787 16.865 1.00 22.10 C
+ATOM 681 OD1 ASN A 84 8.596 45.114 16.343 1.00 26.21 O
+ATOM 682 ND2 ASN A 84 7.769 46.198 18.125 1.00 20.25 N
+ATOM 683 N GLU A 85 3.437 46.752 17.040 1.00 14.83 N
+ATOM 684 CA GLU A 85 2.204 47.474 16.774 1.00 15.89 C
+ATOM 685 C GLU A 85 2.290 48.947 17.184 1.00 15.26 C
+ATOM 686 O GLU A 85 2.700 49.294 18.307 1.00 13.52 O
+ATOM 687 CB GLU A 85 1.033 46.791 17.472 1.00 16.80 C
+ATOM 688 CG GLU A 85 -0.279 47.438 17.157 1.00 21.16 C
+ATOM 689 CD GLU A 85 -1.416 46.735 17.814 1.00 23.74 C
+ATOM 690 OE1 GLU A 85 -1.624 45.550 17.487 1.00 22.54 O
+ATOM 691 OE2 GLU A 85 -2.077 47.370 18.664 1.00 26.34 O
+ATOM 692 N TYR A 86 1.934 49.810 16.247 1.00 13.85 N
+ATOM 693 CA TYR A 86 1.974 51.243 16.464 1.00 12.47 C
+ATOM 694 C TYR A 86 0.597 51.836 16.220 1.00 12.81 C
+ATOM 695 O TYR A 86 -0.248 51.238 15.539 1.00 11.68 O
+ATOM 696 CB TYR A 86 2.976 51.911 15.493 1.00 14.41 C
+ATOM 697 CG TYR A 86 4.437 51.487 15.616 1.00 16.29 C
+ATOM 698 CD1 TYR A 86 5.309 52.156 16.482 1.00 16.42 C
+ATOM 699 CD2 TYR A 86 4.952 50.445 14.840 1.00 18.49 C
+ATOM 700 CE1 TYR A 86 6.654 51.803 16.578 1.00 16.75 C
+ATOM 701 CE2 TYR A 86 6.307 50.080 14.929 1.00 18.94 C
+ATOM 702 CZ TYR A 86 7.146 50.765 15.800 1.00 19.18 C
+ATOM 703 OH TYR A 86 8.464 50.395 15.926 1.00 19.88 O
+ATOM 704 N LEU A 87 0.362 52.981 16.850 1.00 13.11 N
+ATOM 705 CA LEU A 87 -0.862 53.754 16.701 1.00 13.14 C
+ATOM 706 C LEU A 87 -0.372 55.066 16.104 1.00 11.91 C
+ATOM 707 O LEU A 87 0.617 55.626 16.578 1.00 12.47 O
+ATOM 708 CB LEU A 87 -1.519 54.018 18.066 1.00 15.13 C
+ATOM 709 CG LEU A 87 -2.583 53.032 18.555 1.00 16.43 C
+ATOM 710 CD1 LEU A 87 -2.055 51.608 18.531 1.00 19.62 C
+ATOM 711 CD2 LEU A 87 -3.012 53.425 19.953 1.00 17.90 C
+ATOM 712 N PHE A 88 -1.023 55.529 15.042 1.00 12.93 N
+ATOM 713 CA PHE A 88 -0.641 56.780 14.399 1.00 13.91 C
+ATOM 714 C PHE A 88 -1.823 57.721 14.391 1.00 14.67 C
+ATOM 715 O PHE A 88 -2.929 57.304 14.089 1.00 16.26 O
+ATOM 716 CB PHE A 88 -0.204 56.547 12.952 1.00 14.83 C
+ATOM 717 CG PHE A 88 1.082 55.796 12.811 1.00 15.66 C
+ATOM 718 CD1 PHE A 88 2.300 56.474 12.771 1.00 14.83 C
+ATOM 719 CD2 PHE A 88 1.078 54.408 12.686 1.00 15.07 C
+ATOM 720 CE1 PHE A 88 3.496 55.777 12.581 1.00 15.85 C
+ATOM 721 CE2 PHE A 88 2.268 53.709 12.499 1.00 15.69 C
+ATOM 722 CZ PHE A 88 3.473 54.389 12.451 1.00 14.48 C
+ATOM 723 N GLN A 89 -1.585 58.997 14.693 1.00 14.73 N
+ATOM 724 CA GLN A 89 -2.654 59.981 14.705 1.00 15.18 C
+ATOM 725 C GLN A 89 -2.456 61.012 13.610 1.00 15.70 C
+ATOM 726 O GLN A 89 -1.407 61.645 13.519 1.00 14.21 O
+ATOM 727 CB GLN A 89 -2.745 60.703 16.049 1.00 15.76 C
+ATOM 728 CG GLN A 89 -4.051 61.476 16.171 1.00 17.55 C
+ATOM 729 CD GLN A 89 -4.042 62.599 17.192 1.00 19.30 C
+ATOM 730 OE1 GLN A 89 -3.000 62.990 17.731 1.00 19.45 O
+ATOM 731 NE2 GLN A 89 -5.224 63.140 17.450 1.00 20.30 N
+ATOM 732 N ALA A 90 -3.485 61.173 12.790 1.00 19.53 N
+ATOM 733 CA ALA A 90 -3.478 62.133 11.695 1.00 20.37 C
+ATOM 734 C ALA A 90 -4.240 63.385 12.126 1.00 21.84 C
+ATOM 735 O ALA A 90 -4.962 63.365 13.124 1.00 17.60 O
+ATOM 736 CB ALA A 90 -4.143 61.509 10.470 1.00 20.17 C
+ATOM 737 N LYS A 91 -4.120 64.448 11.329 1.00 24.94 N
+ATOM 738 CA LYS A 91 -4.786 65.733 11.593 1.00 26.08 C
+ATOM 739 C LYS A 91 -6.303 65.664 11.478 1.00 25.41 C
+ATOM 740 O LYS A 91 -7.014 66.431 12.127 1.00 26.52 O
+ATOM 741 CB LYS A 91 -4.232 66.838 10.678 1.00 28.66 C
+ATOM 742 CG LYS A 91 -4.333 66.544 9.181 1.00 33.02 C
+ATOM 743 CD LYS A 91 -3.995 67.752 8.299 1.00 37.27 C
+ATOM 744 CE LYS A 91 -2.716 68.475 8.730 1.00 37.79 C
+ATOM 745 NZ LYS A 91 -1.488 67.650 8.573 1.00 39.95 N
+ATOM 746 N ASP A 92 -6.802 64.787 10.614 1.00 23.85 N
+ATOM 747 CA ASP A 92 -8.236 64.600 10.446 1.00 22.19 C
+ATOM 748 C ASP A 92 -8.494 63.218 9.872 1.00 21.99 C
+ATOM 749 O ASP A 92 -7.560 62.483 9.587 1.00 20.60 O
+ATOM 750 CB ASP A 92 -8.883 65.708 9.589 1.00 25.78 C
+ATOM 751 CG ASP A 92 -8.316 65.798 8.191 1.00 28.13 C
+ATOM 752 OD1 ASP A 92 -7.826 64.789 7.660 1.00 31.25 O
+ATOM 753 OD2 ASP A 92 -8.355 66.890 7.590 1.00 30.34 O
+ATOM 754 N ASP A 93 -9.757 62.874 9.681 1.00 21.61 N
+ATOM 755 CA ASP A 93 -10.121 61.561 9.173 1.00 22.66 C
+ATOM 756 C ASP A 93 -9.774 61.274 7.731 1.00 22.50 C
+ATOM 757 O ASP A 93 -9.436 60.136 7.410 1.00 21.64 O
+ATOM 758 CB ASP A 93 -11.612 61.293 9.406 1.00 24.62 C
+ATOM 759 CG ASP A 93 -11.942 61.000 10.864 1.00 24.52 C
+ATOM 760 OD1 ASP A 93 -11.026 60.689 11.658 1.00 25.98 O
+ATOM 761 OD2 ASP A 93 -13.139 61.038 11.197 1.00 25.75 O
+ATOM 762 N GLU A 94 -9.858 62.288 6.867 1.00 24.20 N
+ATOM 763 CA GLU A 94 -9.549 62.134 5.440 1.00 27.18 C
+ATOM 764 C GLU A 94 -8.110 61.700 5.264 1.00 26.55 C
+ATOM 765 O GLU A 94 -7.829 60.740 4.536 1.00 28.37 O
+ATOM 766 CB GLU A 94 -9.778 63.443 4.685 1.00 32.42 C
+ATOM 767 CG GLU A 94 -10.181 63.253 3.211 1.00 39.70 C
+ATOM 768 CD GLU A 94 -9.044 63.479 2.196 1.00 42.16 C
+ATOM 769 OE1 GLU A 94 -8.718 64.659 1.929 1.00 43.38 O
+ATOM 770 OE2 GLU A 94 -8.520 62.485 1.624 1.00 43.28 O
+ATOM 771 N GLU A 95 -7.203 62.404 5.943 1.00 25.45 N
+ATOM 772 CA GLU A 95 -5.769 62.100 5.922 1.00 23.76 C
+ATOM 773 C GLU A 95 -5.535 60.710 6.530 1.00 20.75 C
+ATOM 774 O GLU A 95 -4.754 59.910 6.013 1.00 19.35 O
+ATOM 775 CB GLU A 95 -4.987 63.156 6.706 1.00 25.66 C
+ATOM 776 CG GLU A 95 -3.515 62.839 6.795 1.00 30.00 C
+ATOM 777 CD GLU A 95 -2.686 63.966 7.372 1.00 32.69 C
+ATOM 778 OE1 GLU A 95 -2.726 64.192 8.605 1.00 30.42 O
+ATOM 779 OE2 GLU A 95 -1.955 64.606 6.587 1.00 34.16 O
+ATOM 780 N MET A 96 -6.248 60.418 7.611 1.00 19.54 N
+ATOM 781 CA MET A 96 -6.134 59.120 8.239 1.00 19.10 C
+ATOM 782 C MET A 96 -6.393 58.042 7.183 1.00 19.84 C
+ATOM 783 O MET A 96 -5.569 57.133 6.992 1.00 18.51 O
+ATOM 784 CB MET A 96 -7.137 58.962 9.385 1.00 19.08 C
+ATOM 785 CG MET A 96 -7.074 57.571 9.989 1.00 17.27 C
+ATOM 786 SD MET A 96 -8.249 57.299 11.244 1.00 19.40 S
+ATOM 787 CE MET A 96 -9.710 56.988 10.316 1.00 19.19 C
+ATOM 788 N ASN A 97 -7.498 58.179 6.453 1.00 19.85 N
+ATOM 789 CA ASN A 97 -7.852 57.200 5.424 1.00 20.41 C
+ATOM 790 C ASN A 97 -6.875 57.197 4.260 1.00 19.68 C
+ATOM 791 O ASN A 97 -6.591 56.144 3.674 1.00 20.08 O
+ATOM 792 CB ASN A 97 -9.297 57.370 4.965 1.00 20.90 C
+ATOM 793 CG ASN A 97 -10.292 56.941 6.037 1.00 25.96 C
+ATOM 794 OD1 ASN A 97 -11.182 57.707 6.417 1.00 31.98 O
+ATOM 795 ND2 ASN A 97 -10.136 55.718 6.549 1.00 26.96 N
+ATOM 796 N THR A 98 -6.324 58.367 3.967 1.00 19.73 N
+ATOM 797 CA THR A 98 -5.334 58.508 2.919 1.00 18.74 C
+ATOM 798 C THR A 98 -4.145 57.617 3.308 1.00 20.07 C
+ATOM 799 O THR A 98 -3.632 56.851 2.473 1.00 18.79 O
+ATOM 800 CB THR A 98 -4.867 59.967 2.809 1.00 18.79 C
+ATOM 801 OG1 THR A 98 -5.989 60.806 2.539 1.00 24.14 O
+ATOM 802 CG2 THR A 98 -3.860 60.138 1.692 1.00 20.97 C
+ATOM 803 N TRP A 99 -3.718 57.707 4.575 1.00 18.24 N
+ATOM 804 CA TRP A 99 -2.604 56.902 5.078 1.00 17.49 C
+ATOM 805 C TRP A 99 -2.938 55.403 5.111 1.00 16.95 C
+ATOM 806 O TRP A 99 -2.112 54.565 4.747 1.00 16.17 O
+ATOM 807 CB TRP A 99 -2.197 57.360 6.470 1.00 16.62 C
+ATOM 808 CG TRP A 99 -1.317 58.545 6.481 1.00 16.73 C
+ATOM 809 CD1 TRP A 99 -1.665 59.836 6.794 1.00 16.91 C
+ATOM 810 CD2 TRP A 99 0.085 58.556 6.226 1.00 16.09 C
+ATOM 811 NE1 TRP A 99 -0.553 60.643 6.760 1.00 17.44 N
+ATOM 812 CE2 TRP A 99 0.537 59.885 6.417 1.00 17.04 C
+ATOM 813 CE3 TRP A 99 1.016 57.574 5.872 1.00 15.63 C
+ATOM 814 CZ2 TRP A 99 1.876 60.247 6.253 1.00 15.11 C
+ATOM 815 CZ3 TRP A 99 2.344 57.937 5.709 1.00 14.85 C
+ATOM 816 CH2 TRP A 99 2.760 59.263 5.902 1.00 15.82 C
+ATOM 817 N ILE A 100 -4.149 55.068 5.537 1.00 17.89 N
+ATOM 818 CA ILE A 100 -4.564 53.673 5.597 1.00 20.15 C
+ATOM 819 C ILE A 100 -4.551 53.025 4.205 1.00 20.83 C
+ATOM 820 O ILE A 100 -4.141 51.881 4.065 1.00 22.07 O
+ATOM 821 CB ILE A 100 -5.953 53.535 6.266 1.00 18.90 C
+ATOM 822 CG1 ILE A 100 -5.855 53.902 7.747 1.00 17.28 C
+ATOM 823 CG2 ILE A 100 -6.483 52.115 6.121 1.00 20.35 C
+ATOM 824 CD1 ILE A 100 -7.198 53.893 8.470 1.00 15.50 C
+ATOM 825 N GLN A 101 -4.981 53.763 3.183 1.00 22.89 N
+ATOM 826 CA GLN A 101 -4.990 53.259 1.798 1.00 23.20 C
+ATOM 827 C GLN A 101 -3.565 53.133 1.266 1.00 20.44 C
+ATOM 828 O GLN A 101 -3.216 52.134 0.631 1.00 21.18 O
+ATOM 829 CB GLN A 101 -5.783 54.203 0.883 1.00 29.27 C
+ATOM 830 CG GLN A 101 -7.300 54.236 1.119 1.00 34.97 C
+ATOM 831 CD GLN A 101 -8.010 52.939 0.719 1.00 38.55 C
+ATOM 832 OE1 GLN A 101 -7.380 51.887 0.529 1.00 38.92 O
+ATOM 833 NE2 GLN A 101 -9.336 53.012 0.599 1.00 38.89 N
+ATOM 834 N ALA A 102 -2.755 54.161 1.505 1.00 16.13 N
+ATOM 835 CA ALA A 102 -1.362 54.149 1.088 1.00 16.24 C
+ATOM 836 C ALA A 102 -0.646 52.913 1.614 1.00 16.18 C
+ATOM 837 O ALA A 102 -0.041 52.175 0.856 1.00 18.24 O
+ATOM 838 CB ALA A 102 -0.663 55.385 1.584 1.00 17.73 C
+ATOM 839 N ILE A 103 -0.710 52.692 2.921 1.00 18.21 N
+ATOM 840 CA ILE A 103 -0.075 51.524 3.555 1.00 19.38 C
+ATOM 841 C ILE A 103 -0.668 50.198 3.088 1.00 22.15 C
+ATOM 842 O ILE A 103 0.049 49.246 2.783 1.00 21.29 O
+ATOM 843 CB ILE A 103 -0.200 51.584 5.110 1.00 19.54 C
+ATOM 844 CG1 ILE A 103 0.528 52.818 5.650 1.00 18.45 C
+ATOM 845 CG2 ILE A 103 0.245 50.265 5.748 1.00 16.19 C
+ATOM 846 CD1 ILE A 103 0.395 53.026 7.118 1.00 18.15 C
+ATOM 847 N SER A 104 -1.987 50.126 3.015 1.00 25.76 N
+ATOM 848 CA SER A 104 -2.635 48.898 2.605 1.00 29.50 C
+ATOM 849 C SER A 104 -2.425 48.547 1.148 1.00 31.59 C
+ATOM 850 O SER A 104 -2.761 47.438 0.721 1.00 32.75 O
+ATOM 851 CB SER A 104 -4.135 48.963 2.935 1.00 30.37 C
+ATOM 852 OG SER A 104 -4.351 49.048 4.349 1.00 31.89 O
+ATOM 853 N SER A 105 -1.808 49.429 0.378 1.00 32.61 N
+ATOM 854 CA SER A 105 -1.620 49.158 -1.033 1.00 32.03 C
+ATOM 855 C SER A 105 -0.149 49.058 -1.399 1.00 32.49 C
+ATOM 856 O SER A 105 0.150 48.616 -2.480 1.00 36.02 O
+ATOM 857 CB SER A 105 -2.317 50.272 -1.813 1.00 33.18 C
+ATOM 858 OG SER A 105 -3.622 50.413 -1.318 1.00 34.43 O
+ATOM 859 N ALA A 106 0.707 49.274 -0.402 1.00 32.46 N
+ATOM 860 CA ALA A 106 2.145 49.214 -0.596 1.00 31.86 C
+ATOM 861 C ALA A 106 2.500 47.821 -1.037 1.00 34.81 C
+ATOM 862 O ALA A 106 2.077 46.847 -0.358 1.00 34.40 O
+ATOM 863 CB ALA A 106 2.860 49.569 0.684 1.00 32.17 C
+ATOM 864 OXT ALA A 106 3.151 47.709 -2.118 1.00 37.18 O
+TER 865 ALA A 106
+HETATM 866 C1 I3P A 107 2.972 57.170 28.819 1.00 27.30 C
+HETATM 867 C2 I3P A 107 2.402 58.343 28.135 1.00 27.50 C
+HETATM 868 C3 I3P A 107 1.403 57.936 27.036 1.00 27.07 C
+HETATM 869 C4 I3P A 107 0.339 57.030 27.607 1.00 26.76 C
+HETATM 870 C5 I3P A 107 1.010 55.801 28.200 1.00 26.59 C
+HETATM 871 C6 I3P A 107 1.966 56.227 29.313 1.00 25.50 C
+HETATM 872 O1 I3P A 107 3.925 57.540 29.889 1.00 29.65 O
+HETATM 873 O2 I3P A 107 1.780 59.229 29.064 1.00 28.25 O
+HETATM 874 O3 I3P A 107 0.780 59.090 26.511 1.00 26.85 O
+HETATM 875 O4 I3P A 107 -0.567 56.702 26.508 1.00 27.74 O
+HETATM 876 O5 I3P A 107 -0.014 54.949 28.781 1.00 26.57 O
+HETATM 877 O6 I3P A 107 2.584 55.074 29.910 1.00 26.72 O
+HETATM 878 P1 I3P A 107 5.333 57.881 29.854 1.00 30.01 P
+HETATM 879 O11 I3P A 107 5.403 59.260 29.660 1.00 27.71 O
+HETATM 880 O12 I3P A 107 5.847 57.172 28.709 1.00 25.88 O
+HETATM 881 O13 I3P A 107 6.019 57.235 30.879 1.00 29.41 O
+HETATM 882 P4 I3P A 107 -1.980 57.014 26.290 1.00 30.02 P
+HETATM 883 O41 I3P A 107 -2.762 56.883 27.426 1.00 30.25 O
+HETATM 884 O42 I3P A 107 -1.849 58.397 26.096 1.00 23.69 O
+HETATM 885 O43 I3P A 107 -2.368 56.622 25.032 1.00 28.88 O
+HETATM 886 P5 I3P A 107 -0.360 53.656 28.480 1.00 29.26 P
+HETATM 887 O51 I3P A 107 -1.690 53.649 28.310 1.00 28.95 O
+HETATM 888 O52 I3P A 107 0.190 53.157 27.285 1.00 28.47 O
+HETATM 889 O53 I3P A 107 0.212 52.903 29.438 1.00 30.49 O
+HETATM 890 O HOH A 108 -0.596 64.792 10.693 0.32 2.01 O
+HETATM 891 O HOH A 109 3.306 62.245 -0.298 0.30 2.06 O
+HETATM 892 O HOH A 110 -9.016 53.500 3.884 0.28 5.56 O
+HETATM 893 O HOH A 111 -9.321 56.735 17.871 0.39 5.72 O
+HETATM 894 O HOH A 112 3.508 42.882 28.486 0.27 7.30 O
+HETATM 895 O HOH A 113 1.886 42.526 1.985 0.37 7.44 O
+HETATM 896 O HOH A 114 -4.568 45.118 17.900 0.31 7.65 O
+HETATM 897 O HOH A 115 -13.917 55.413 10.087 0.26 8.31 O
+HETATM 898 O HOH A 116 10.244 47.255 19.121 0.26 8.60 O
+HETATM 899 O HOH A 117 9.624 48.228 15.549 0.31 9.04 O
+HETATM 900 O HOH A 118 -9.983 68.935 8.224 0.35 11.26 O
+HETATM 901 O HOH A 119 -7.982 48.646 2.969 0.28 13.02 O
+HETATM 902 O HOH A 120 0.255 39.480 9.323 0.28 13.37 O
+HETATM 903 O HOH A 121 6.283 55.294 21.600 1.00 14.99 O
+HETATM 904 O HOH A 122 -16.850 56.166 24.645 0.27 16.06 O
+HETATM 905 O HOH A 123 9.531 65.437 14.930 0.32 16.55 O
+HETATM 906 O HOH A 124 -9.737 67.129 13.248 0.25 17.45 O
+HETATM 907 O HOH A 125 6.504 56.859 19.255 1.00 18.10 O
+HETATM 908 O HOH A 126 15.894 62.676 11.954 1.00 19.97 O
+HETATM 909 O HOH A 127 0.781 65.367 4.537 0.32 20.43 O
+HETATM 910 O HOH A 128 -9.572 56.457 15.274 1.00 20.66 O
+HETATM 911 O HOH A 129 2.660 60.739 25.537 1.00 20.78 O
+HETATM 912 O HOH A 130 4.737 44.230 7.985 1.00 20.80 O
+HETATM 913 O HOH A 131 -12.276 67.593 7.530 1.00 22.85 O
+HETATM 914 O HOH A 132 7.080 57.308 -2.002 1.00 23.67 O
+HETATM 915 O HOH A 133 7.529 64.637 22.856 1.00 24.76 O
+HETATM 916 O HOH A 134 0.563 41.481 10.704 1.00 24.80 O
+HETATM 917 O HOH A 135 2.609 66.479 7.069 1.00 25.19 O
+HETATM 918 O HOH A 136 -1.098 64.159 13.276 1.00 25.87 O
+HETATM 919 O HOH A 137 -10.292 50.761 8.410 1.00 26.13 O
+HETATM 920 O HOH A 138 12.093 65.390 2.233 1.00 26.86 O
+HETATM 921 O HOH A 139 0.495 46.398 3.631 1.00 27.63 O
+HETATM 922 O HOH A 140 -3.623 56.926 -0.386 1.00 28.02 O
+HETATM 923 O HOH A 141 13.813 55.289 9.460 1.00 29.03 O
+HETATM 924 O HOH A 142 11.837 51.266 13.487 1.00 29.12 O
+HETATM 925 O HOH A 143 4.200 37.672 18.010 1.00 29.35 O
+HETATM 926 O HOH A 144 8.705 56.675 24.015 1.00 29.70 O
+HETATM 927 O HOH A 145 2.666 41.018 20.366 1.00 30.14 O
+HETATM 928 O HOH A 146 -4.289 45.792 6.111 1.00 30.17 O
+HETATM 929 O HOH A 147 12.050 54.802 3.286 1.00 30.20 O
+HETATM 930 O HOH A 148 10.608 44.988 8.519 1.00 31.06 O
+HETATM 931 O HOH A 149 12.829 50.545 2.148 1.00 31.92 O
+HETATM 932 O HOH A 150 0.490 63.479 7.446 1.00 32.55 O
+HETATM 933 O HOH A 151 3.447 64.131 20.211 1.00 32.78 O
+HETATM 934 O HOH A 152 9.895 52.093 18.145 1.00 32.78 O
+HETATM 935 O HOH A 153 -12.405 64.834 10.456 1.00 33.10 O
+HETATM 936 O HOH A 154 20.005 52.703 12.461 1.00 33.47 O
+HETATM 937 O HOH A 155 -9.009 53.986 24.732 1.00 33.67 O
+HETATM 938 O HOH A 156 1.934 65.017 12.949 1.00 33.81 O
+HETATM 939 O HOH A 157 17.445 61.639 15.856 1.00 33.89 O
+HETATM 940 O HOH A 158 13.023 68.522 2.080 1.00 34.00 O
+HETATM 941 O HOH A 159 8.979 55.319 20.634 1.00 34.03 O
+HETATM 942 O HOH A 160 11.546 58.712 20.586 1.00 34.74 O
+HETATM 943 O HOH A 161 1.329 41.959 18.260 1.00 36.17 O
+HETATM 944 O HOH A 162 -4.231 53.627 26.122 1.00 36.23 O
+HETATM 945 O HOH A 163 13.092 46.287 13.453 1.00 36.55 O
+HETATM 946 O HOH A 164 18.381 66.208 12.233 1.00 36.98 O
+HETATM 947 O HOH A 165 0.191 39.982 27.010 1.00 38.59 O
+HETATM 948 O HOH A 166 5.484 39.199 6.180 1.00 39.40 O
+HETATM 949 O HOH A 167 10.007 70.966 17.830 1.00 40.93 O
+HETATM 950 O HOH A 168 -0.935 71.232 9.334 1.00 42.27 O
+HETATM 951 O HOH A 169 -8.621 56.959 30.144 1.00 41.22 O
+HETATM 952 O HOH A 170 -13.026 68.105 18.022 1.00 41.52 O
+HETATM 953 O HOH A 171 5.398 36.917 26.452 1.00 41.77 O
+HETATM 954 O HOH A 172 1.527 39.610 14.461 1.00 42.20 O
+HETATM 955 O HOH A 173 -11.675 47.896 9.704 1.00 42.98 O
+HETATM 956 O HOH A 174 -4.041 46.771 21.920 1.00 43.35 O
+HETATM 957 O HOH A 175 -3.423 55.188 30.482 1.00 43.53 O
+HETATM 958 O HOH A 176 11.409 52.568 -3.922 1.00 43.86 O
+HETATM 959 O HOH A 177 12.989 60.442 23.390 1.00 43.89 O
+HETATM 960 O HOH A 178 5.498 45.180 29.074 1.00 43.97 O
+HETATM 961 O HOH A 179 9.209 50.019 12.991 1.00 45.13 O
+HETATM 962 O HOH A 180 9.143 66.687 19.165 1.00 46.48 O
+HETATM 963 O HOH A 181 -6.781 45.163 19.520 1.00 46.96 O
+HETATM 964 O HOH A 182 9.678 68.437 13.983 1.00 48.81 O
+HETATM 965 O HOH A 183 7.950 43.630 9.830 1.00 51.35 O
+HETATM 966 O HOH A 184 15.847 41.073 23.083 1.00 52.05 O
+CONECT 866 867 871 872
+CONECT 867 866 868 873
+CONECT 868 867 869 874
+CONECT 869 868 870 875
+CONECT 870 869 871 876
+CONECT 871 866 870 877
+CONECT 872 866 878
+CONECT 873 867
+CONECT 874 868
+CONECT 875 869 882
+CONECT 876 870 886
+CONECT 877 871
+CONECT 878 872 879 880 881
+CONECT 879 878
+CONECT 880 878
+CONECT 881 878
+CONECT 882 875 883 884 885
+CONECT 883 882
+CONECT 884 882
+CONECT 885 882
+CONECT 886 876 887 888 889
+CONECT 887 886
+CONECT 888 886
+CONECT 889 886
+MASTER 262 0 1 2 6 0 4 6 965 1 24 9
+END
diff --git a/vtkplotter/data/dolfin_cube.h5 b/vtkplotter/data/dolfin_cube.h5
index 73dfbf92..572a6752 100644
Binary files a/vtkplotter/data/dolfin_cube.h5 and b/vtkplotter/data/dolfin_cube.h5 differ
diff --git a/vtkplotter/docs.py b/vtkplotter/docs.py
index 4ea21680..1176aeb6 100644
--- a/vtkplotter/docs.py
+++ b/vtkplotter/docs.py
@@ -356,8 +356,16 @@ def tips():
.. _histoHexagonal.py: https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/histoHexagonal.py
.. |histoHexagonal| image:: https://user-images.githubusercontent.com/32848391/50738861-bfccf800-11d8-11e9-9698-c0b9dccdba4d.jpg
:width: 250 px
+ :target: histoHexagonal.py_
:alt: histoHexagonal.py
+.. |histogram.py| replace:: histogram.py
+.. _histogram.py: https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/histogram.py
+.. |histogram| image:: https://user-images.githubusercontent.com/32848391/68141260-77cc4e00-ff2d-11e9-9280-0efc5b87314d.png
+ :width: 350 px
+ :target: histogram.py_
+ :alt: histogram.py
+
.. |align3.py| replace:: align3.py
.. _align3.py: https://github.com/marcomusy/vtkplotter/blob/master/examples/basic/align3.py
.. |align3| image:: https://user-images.githubusercontent.com/32848391/50738873-c196bb80-11d8-11e9-8653-a41108a5f02d.png
@@ -1150,39 +1158,53 @@ def tips():
:width: 250 px
:target: polarHisto.py_
:alt: polarHisto.py
-
+
.. |polarPlot.py| replace:: polarPlot.py
.. _polarPlot.py: https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/polarPlot.py
.. |polarPlot| image:: https://user-images.githubusercontent.com/32848391/64992590-7fc82400-d8d4-11e9-9c10-795f4756a73f.png
:width: 250 px
:target: polarPlot.py_
:alt: polarPlot.py
-
+
.. |donutPlot.py| replace:: donutPlot.py
.. _donutPlot.py: https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/donutPlot.py
.. |donutPlot| image:: https://user-images.githubusercontent.com/32848391/64998178-6f6b7580-d8e3-11e9-9bd8-8dfb9ccd90e4.png
:width: 250 px
:target: donutPlot.py_
:alt: donutPlot.py
-
+
.. |extrude.py| replace:: extrude.py
.. _extrude.py: https://github.com/marcomusy/vtkplotter/blob/master/examples/basic/extrude.py
.. |extrude| image:: https://user-images.githubusercontent.com/32848391/65963682-971e1a00-e45b-11e9-9f29-05522ae4a800.png
:width: 250 px
:target: extrude.py_
:alt: extrude.py
-
+
.. |kspline.py| replace:: kspline.py
.. _kspline.py: https://github.com/marcomusy/vtkplotter/blob/master/examples/basic/kspline.py
.. |kspline| image:: https://user-images.githubusercontent.com/32848391/65975805-73fd6580-e46f-11e9-8957-75eddb28fa72.png
:width: 350 px
:target: kspline.py_
:alt: kspline.py
-
+
.. |mesh_lut.py| replace:: mesh_lut.py
.. _mesh_lut.py: https://github.com/marcomusy/vtkplotter/blob/master/examples/basic/mesh_lut.py
.. |elevation| image:: https://user-images.githubusercontent.com/32848391/68478872-3986a580-0231-11ea-8245-b68a683aa295.png
:width: 250 px
+.. |paramshapes| image:: https://user-images.githubusercontent.com/32848391/69181075-bb6aae80-0b0e-11ea-92f7-d0cd3b9087bf.png
+ :width: 350 px
+
+.. |warpto| image:: https://user-images.githubusercontent.com/32848391/69259878-3c817e80-0bbf-11ea-9025-03b9f6affccc.png
+ :width: 350 px
+
+.. |plotxy.py| replace:: plotxy.py
+.. _plotxy.py: https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/plotxy.py
+.. |plotxy| image:: https://user-images.githubusercontent.com/32848391/69158509-d6c1c380-0ae6-11ea-9dbf-ff5cd396a9a6.png
+ :width: 350 px
+ :target: plotxy.py_
+ :alt: plotxy.py
+
+
"""
\ No newline at end of file
diff --git a/vtkplotter/plot2d.py b/vtkplotter/plot2d.py
index 465be7d7..b527a563 100644
--- a/vtkplotter/plot2d.py
+++ b/vtkplotter/plot2d.py
@@ -33,6 +33,8 @@
def plotxy(
data,
+ xerrors=None,
+ yerrors=None,
xlimits=None,
ylimits=None,
xscale=1,
@@ -45,8 +47,10 @@ def plotxy(
ytitle="y",
title="",
titleSize=None,
+ ec=None,
lc="k",
lw=2,
+ line=True,
dashed=False,
splined=False,
marker=None,
@@ -56,9 +60,39 @@ def plotxy(
):
"""Draw a 2D plot of variable x vs y.
+ :param list data: input format can be [allx, ally] or [(x1,y1), (x2,y2), ...]
+
+ :param list xerrors: set uncertainties for the x variable, shown as error bars.
+ :param list yerrors: set uncertainties for the y variable, shown as error bars.
+ :param list xlimits: set limits to the range for the x variable
+ :param list ylimits: set limits to the range for the y variable
+ :param float xscale: set scaling factor in x. Default is 1.
+ :param float yscale: set scaling factor in y. Automatically calculated to get
+ a reasonable aspect ratio. Scaling factor is saved in `info['yscale']`.
+
+ :param bool xlogscale: set x logarithmic scale.
+ :param bool ylogscale: set y logarithmic scale.
+ :param str c: color of frame and text.
+ :param float alpha: opacity of frame and text.
+ :param str xtitle: title label along x-axis.
+ :param str ytitle: title label along y-axis.
+ :param str title: histogram title on top.
+ :param float titleSize: size of title
+ :param str ec: color of error bar, by default the same as marker color
+ :param str lc: color of line
+ :param float lw: width of line
+ :param bool line: join points with line
+ :param bool dashed: use a dashed line style
+ :param bool splined: spline the line joining the point as a countinous curve
+ :param str,int marker: use a marker shape for the data points
+ :param float ms: marker size.
+ :param str mc: color of marker
+ :param float ma: opacity of marker
+
+ |plotxy| |plotxy.py|_
"""
-
if len(data) == 2 and len(data[0])>1 and len(data[0]) == len(data[1]):
+ #format is [allx, ally], convert it:
data = np.c_[data[0], data[1]]
if xlimits is not None:
@@ -112,11 +146,13 @@ def plotxy(
acts = []
if dashed:
l = shapes.DashedLine(data, lw=lw, spacing=20)
+ acts.append(l)
elif splined:
l = shapes.KSpline(data).lw(lw).c(lc)
- else:
+ acts.append(l)
+ elif line:
l = shapes.Line(data, lw=lw, c=lc)
- acts.append(l)
+ acts.append(l)
if marker:
if ms is None:
@@ -128,6 +164,37 @@ def plotxy(
marked = shapes.Glyph(pts, glyphObj=mk, c=mc)
acts.append(marked)
+ if ec is None:
+ if mc is not None:
+ ec = mc
+ else:
+ ec = lc
+ offs = (x1-x0)/1000
+
+ if yerrors is not None:
+ if len(yerrors) != len(data):
+ colors.printc("Error in plotxy(yerrors=...): mismatched array length.", c=1)
+ return None
+ errs = []
+ for i in range(len(data)):
+ xval, yval = data[i]
+ yerr = yerrors[i]/2*yscale
+ errs.append(shapes.Line((xval, yval-yerr, offs), (xval, yval+yerr, offs)))
+ myerrs = merge(errs).c(ec).lw(lw).alpha(alpha)
+ acts.append(myerrs)
+
+ if xerrors is not None:
+ if len(xerrors) != len(data):
+ colors.printc("Error in plotxy(xerrors=...): mismatched array length.", c=1)
+ return None
+ errs = []
+ for i in range(len(data)):
+ xval, yval = data[i]
+ xerr = xerrors[i]/2
+ errs.append(shapes.Line((xval-xerr, yval, offs), (xval+xerr, yval, offs)))
+ mxerrs = merge(errs).c(ec).lw(lw).alpha(alpha)
+ acts.append(mxerrs)
+
x0lim = x0
x1lim = x1
y0lim = y0*yscale
@@ -173,14 +240,9 @@ def cornerPlot(points, pos=1, s=0.2, title="", c="b", bg="k", lines=True):
:param int pos: assign position:
- 1, topleft,
-
- 2, topright,
-
- 3, bottomleft,
-
- 4, bottomright.
-
- .. hint:: Example: |fitspheres1.py|_
"""
if len(points) == 2: # passing [allx, ally]
points = list(zip(points[0], points[1]))
@@ -258,8 +320,6 @@ def cornerHistogram(
- 3, bottomleft,
- 4, bottomright,
- (x, y), as fraction of the rendering window
-
- .. hint:: Example: |fitplanes.py|_
"""
fs, edges = np.histogram(values, bins=bins, range=vrange)
if minbin:
@@ -312,6 +372,8 @@ def histogram(
:param float gap: leave a small space btw bars.
:param bool outline: show outline of the bins.
:param bool errors: show error bars.
+
+ |histogram| |histogram.py|_
"""
if xtitle:
from vtkplotter import settings
diff --git a/vtkplotter/plotter.py b/vtkplotter/plotter.py
index c3bfb068..3ff50ddd 100644
--- a/vtkplotter/plotter.py
+++ b/vtkplotter/plotter.py
@@ -468,6 +468,9 @@ def __init__(
self.offscreen = offscreen
self.qtWidget = qtWidget # (QVTKRenderWindowInteractor)
+ self.flagWidget = None
+ self._flagRep = None
+
# mostly internal stuff:
self.justremoved = None
self.axes_instances = []
@@ -489,6 +492,7 @@ def __init__(
self._first_viewup = True
self.extralight = None
self.size = size
+ self.interactor = None
self.xtitle = settings.xtitle # x axis label and units
self.ytitle = settings.ytitle # y axis label and units
@@ -502,22 +506,23 @@ def __init__(
self.camera = vtk.vtkCamera()
self.window = vtk.vtkRenderWindow()
- if settings.notebookBackend:
+ ############################################################
+ if settings.notebookBackend and settings.notebookBackend != "panel":
self.interactive = False
self.interactor = None
self.window = None
self.camera = None # let the backend choose
if size == "auto":
self.size = (1000, 1000)
- ############################
- return #####################
- ############################
+ ########################################################
+ return #################################################
+ ########################################################
# more settings
- if settings.alphaBitPlanes is not None:
+ if settings.useDepthPeeling:
self.window.SetAlphaBitPlanes(settings.alphaBitPlanes)
- if settings.multiSamples is not None:
self.window.SetMultiSamples(settings.multiSamples)
+
self.window.SetPolygonSmoothing(settings.polygonSmoothing)
self.window.SetLineSmoothing(settings.lineSmoothing)
self.window.SetPointSmoothing(settings.pointSmoothing)
@@ -603,9 +608,10 @@ def __init__(
r.SetLightFollowCamera(settings.lightFollowsCamera)
if settings.useFXAA is not None:
r.SetUseFXAA(settings.useFXAA)
- if settings.maxNumberOfPeels is not None:
+ if settings.useDepthPeeling:
+ r.SetUseDepthPeeling(True)
r.SetMaximumNumberOfPeels(settings.maxNumberOfPeels)
- r.SetUseDepthPeeling(settings.useDepthPeeling)
+ r.SetOcclusionRatio(settings.occlusionRatio)
r.SetBackground(colors.getColor(self.backgrcol))
self.axes_instances.append(None)
@@ -707,6 +713,9 @@ def __init__(
return
########################
+ if settings.notebookBackend == "panel":
+ return
+
if settings.useOpenVR:
self.interactor = vtk.vtkOpenVRRenderWindowInteractor()
else:
@@ -1342,6 +1351,9 @@ def scan(wannabeacts):
elif isinstance(a, vtk.vtkPolyData):
scannedacts.append(Actor(a))
+ elif isinstance(a, vtk.vtkBillboardTextActor3D):
+ scannedacts.append(a)
+
elif isinstance(a, str): # assume a filepath was given
out = vtkio.load(a)
scannedacts.append(out)
@@ -1370,7 +1382,7 @@ def scan(wannabeacts):
from vtkplotter.utils import trimesh2vtk
scannedacts.append(trimesh2vtk(a))
- elif hasattr(a, "GetOutput"): # passing vtk object
+ elif hasattr(a, "GetOutput"): # passing vtk algorithm
scannedacts.append(Actor(a))
else:
@@ -1399,7 +1411,7 @@ def scan(wannabeacts):
self.axes = axes
#########################################################################
- if settings.notebookBackend:
+ if settings.notebookBackend and settings.notebookBackend != "panel":
return backends.getNotebookBackend(actors2show, zoom, viewup)
#########################################################################
@@ -1481,6 +1493,40 @@ def scan(wannabeacts):
c = (0.1, 0.1, 0.1)
ia.GetTextProperty().SetColor(c)
+ if hasattr(ia, 'flagText') and self.interactor:
+ #check balloons
+ if ia.flagText:
+ if not self.flagWidget: # Create widget on the fly
+ self._flagRep = vtk.vtkBalloonRepresentation()
+ self._flagRep.SetBalloonLayoutToImageRight()
+ breppr = self._flagRep.GetTextProperty()
+ breppr.SetFontFamilyAsString(settings.flagFont)
+ breppr.SetFontSize(settings.flagFontSize)
+ breppr.SetBold(settings.flagBold)
+ breppr.SetItalic(settings.flagItalic)
+ breppr.SetColor(colors.getColor(settings.flagColor))
+ breppr.SetBackgroundColor(colors.getColor(settings.flagBackgroundColor))
+ breppr.SetShadow(settings.flagShadow)
+ breppr.SetJustification(settings.flagJustification)
+ breppr.UseTightBoundingBoxOn()
+ if settings.flagAngle:
+ breppr.SetOrientation(settings.flagAngle)
+ breppr.SetBackgroundOpacity(0)
+ self.flagWidget = vtk.vtkBalloonWidget()
+ self.flagWidget.SetTimerDuration(settings.flagDelay)
+ self.flagWidget.ManagesCursorOff()
+ self.flagWidget.SetRepresentation(self._flagRep)
+ self.flagWidget.SetInteractor(self.interactor)
+ self.widgets.append(self.flagWidget)
+ bst = self.flagWidget.GetBalloonString(ia)
+ if bst:
+ if bst != ia.flagText:
+ self.flagWidget.UpdateBalloonString(ia, ia.flagText)
+ else:
+ self.flagWidget.AddBalloon(ia, ia.flagText)
+ if ia.flagText is False and self.flagWidget:
+ self.flagWidget.RemoveBalloon(ia)
+
# remove the ones that are not in actors2show (and their scalarbar if any)
for ia in self.getActors(at) + self.getVolumes(at):
@@ -1495,17 +1541,23 @@ def scan(wannabeacts):
if hasattr(ia, 'renderedAt'):
ia.renderedAt.discard(at)
- if self.axes is not None and not settings.notebookBackend:
+
+ if self.axes is not None:
addons.addAxes()
- addons.addLegend()
+ #########################################################################
+ if settings.notebookBackend == "panel":
+ return backends.getNotebookBackend(0, 0, 0)
+ #########################################################################
- if settings.showRendererFrame and len(self.renderers) > 1:
- addons.addRendererFrame(c=settings.rendererFrameColor)
+ addons.addLegend()
if resetcam: #or self.initializedIren == False:
self.renderer.ResetCamera()
+ if settings.showRendererFrame and len(self.renderers) > 1:
+ addons.addRendererFrame(c=settings.rendererFrameColor)
+
if not self.initializedIren and self.interactor:
self.initializedIren = True
self.interactor.Initialize()
@@ -1515,6 +1567,9 @@ def scan(wannabeacts):
if not settings.notebookBackend:
docs.onelinetip()
+ if self.flagWidget:
+ self.flagWidget.EnabledOn()
+
self.initializedPlotter = True
if zoom:
diff --git a/vtkplotter/settings.py b/vtkplotter/settings.py
index 0287eee8..d27d57a8 100644
--- a/vtkplotter/settings.py
+++ b/vtkplotter/settings.py
@@ -3,7 +3,7 @@
.. code-block:: python
- # Axes titles
+ # Axes title defaults
xtitle = 'x'
ytitle = 'y'
ztitle = 'z'
@@ -27,6 +27,18 @@
# Allow to interact with scene during interactor.Start() execution
allowInteraction = True
+ # Flag-style label options
+ flagDelay = 0.0 # popup delay in milliseconds
+ flagFont = "Courier" # font type ("Arial", "Courier", "Times")
+ flagFontSize = 18
+ flagAngle = 0
+ flagBold = False
+ flagItalic = True
+ flagShadow = False
+ flagColor = 'k'
+ flagJustification = 0
+ flagBackgroundColor = 'w'
+
# Show a gray frame margin in multirendering windows
showRendererFrame = True
rendererFrameColor = None
@@ -65,12 +77,21 @@
# Turn on/off rendering of translucent material with depth peeling technique.
useDepthPeeling = False
- alphaBitPlanes = None # either True or False. None sets the system default
- multiSamples = None # integer value
- maxNumberOfPeels = None # integer value
+ alphaBitPlanes = True # options only active if useDepthPeeling=True
+ multiSamples = 0 # force to not pick a framebuffer with a multisample buffer
+ maxNumberOfPeels= 8 # maximum number of rendering passes
+ occlusionRatio = 0.0 # occlusion ratio, 0 = exact image.
+
+ # Use a polygon/edges offset to possibly resolve conflicts in rendering
+ usePolygonOffset = False
+ polygonOffsetFactor = 0.1
+ polygonOffsetUnits = 0.1
+
+ # Interpolate scalars to render them smoothly
+ interpolateScalarsBeforeMapping = True
# Turn on/off nvidia FXAA anti-aliasing, if supported.
- useFXAA = None # either True or False. None sets the system default
+ useFXAA = None # either True or False. None sets the system default
# Set parallel projection On or Off (place camera to infinity, no perspective effects)
useParallelProjection = False
@@ -79,7 +100,6 @@
voro_path = '/usr/local/bin'
-
Usage example:
.. code-block:: python
@@ -117,6 +137,18 @@
# Allow to interact with scene during interactor.Start() execution
allowInteraction = True
+# Flag-style label options
+flagDelay = 0 # popup delay in milliseconds
+flagFont = "Courier" # font type ("Arial", "Courier", "Times")
+flagFontSize = 18
+flagJustification = 0
+flagAngle = 0
+flagBold = False
+flagItalic = True
+flagShadow = False
+flagColor = 'k'
+flagBackgroundColor = 'w'
+
# Show a gray frame margin in multirendering windows
showRendererFrame = True
rendererFrameColor = None
@@ -151,10 +183,20 @@
lightFollowsCamera = False
# Turn on/off rendering of translucent material with depth peeling technique.
+#https://lorensen.github.io/VTKExamples/site/Cxx/Visualization/CorrectlyRenderTranslucentGeometry
useDepthPeeling = False
-alphaBitPlanes = None # either True or False. None sets the system default
-multiSamples = None # integer value
-maxNumberOfPeels = None # integer value
+alphaBitPlanes = True # only active if useDepthPeeling
+multiSamples = 0
+maxNumberOfPeels= 8
+occlusionRatio = 0.0
+
+# Use a polygon/edges offset to possibly resolve conflicts in rendering
+usePolygonOffset = False
+polygonOffsetFactor = 0.1
+polygonOffsetUnits = 0.1
+
+# Interpolate scalars to render them smoothly
+interpolateScalarsBeforeMapping = True
# Turn on/off nvidia FXAA anti-aliasing, if supported.
useFXAA = None # either True or False. None sets the system default
@@ -229,14 +271,12 @@ def embedWindow(backend='k3d', verbose=True):
elif backend=='panel':
try:
- if verbose:
- print('INFO: embedWindow(verbose=True), first import of panel module, this takes time...')
import panel
panel.extension('vtk')
except:
if verbose:
print('embedWindow(verbose=True): could not load panel try:')
- print('> pip install panel # and/or')
+ print('> pip install panel -U # and/or')
print('> conda install nodejs')
else:
print("Unknown backend", backend)
diff --git a/vtkplotter/shapes.py b/vtkplotter/shapes.py
index 66ae87fd..f9a2d6af 100644
--- a/vtkplotter/shapes.py
+++ b/vtkplotter/shapes.py
@@ -4,7 +4,7 @@
from vtkplotter import settings
from vtk.util.numpy_support import numpy_to_vtk, vtk_to_numpy
import vtkplotter.utils as utils
-import vtkplotter.colors as colors
+from vtkplotter.colors import printc, getColor, colorMap, _mapscales
from vtkplotter.actors import Actor, Assembly
import vtkplotter.docs as docs
@@ -32,6 +32,8 @@
"Polygon",
"Rectangle",
"Disc",
+ "Circle",
+ "Arc",
"Star",
"Sphere",
"Spheres",
@@ -52,20 +54,22 @@
"Latex",
"Glyph",
"Tensors",
+ "ParametricShape",
]
########################################################################
def Marker(symbol, c='lb', alpha=1, s=0.1, filled=True):
"""
- Generate a marker shape. Can be used in association with ``Glyph``.
+ Generate a marker shape.
+ Can be used in association with ``Glyph``.
"""
if isinstance(symbol, int):
symbs = ['.', 'p','*','h','D','d','o','v','^','>','<','s', 'x', 'a']
symbol = symbs[s]
if symbol == '.':
- actor = Polygon(nsides=24, r=s)
+ actor = Polygon(nsides=24, r=s*0.75)
elif symbol == 'p':
actor = Polygon(nsides=5, r=s)
elif symbol == '*':
@@ -75,9 +79,9 @@ def Marker(symbol, c='lb', alpha=1, s=0.1, filled=True):
elif symbol == 'D':
actor = Polygon(nsides=4, r=s)
elif symbol == 'd':
- actor = Polygon(nsides=4, r=s).scale([0.5,1,1])
+ actor = Polygon(nsides=4, r=s*1.1).scale([0.5,1,1])
elif symbol == 'o':
- actor = Polygon(nsides=24, r=s)
+ actor = Polygon(nsides=24, r=s*0.75)
elif symbol == 'v':
actor = Polygon(nsides=3, r=s).rotateZ(180)
elif symbol == '^':
@@ -92,10 +96,11 @@ def Marker(symbol, c='lb', alpha=1, s=0.1, filled=True):
actor = Text('+', pos=(0,0,0), s=s*2.6, justify='center', depth=0)
actor.rotateZ(45)
elif symbol == 'a':
- actor = Text('*', pos=(0,0,0), s=s*2.6, justify='center', depth=0)
+ actor = Text('*', pos=(0,0,0), s=s*3, justify='center', depth=0)
else:
- actor = Text(symbol, pos=(0,0,0), s=s*2.5, justify='center', depth=0)
+ actor = Text(symbol, pos=(0,0,0), s=s*2, justify='center', depth=0)
actor.flat().lighting('ambient').wireframe(not filled).c(c).alpha(alpha)
+ actor.name = "Marker"
return actor
@@ -105,7 +110,9 @@ def Point(pos=(0, 0, 0), r=12, c="red", alpha=1):
pos = (pos[0], pos[1], 0)
if isinstance(pos, vtk.vtkActor):
pos = pos.GetPosition()
- return Points([pos], r, c, alpha)
+ actor = Points([pos], r, c, alpha)
+ actor.name = "Point"
+ return actor
def Points(plist, r=5, c="gold", alpha=1):
@@ -178,12 +185,13 @@ def Points(plist, r=5, c="gold", alpha=1):
actor.SetPosition(plist[0])
settings.collectable_actors.append(actor)
+ actor.name = "Points"
return actor
def _PointsColors(plist, r, cols, alpha):
n = len(plist)
if n != len(cols):
- colors.printc("~times mismatch in Points() colors", n, len(cols), c=1)
+ printc("~times mismatch in Points() colors", n, len(cols), c=1)
raise RuntimeError()
src = vtk.vtkPointSource()
src.SetNumberOfPoints(n)
@@ -199,7 +207,7 @@ def _PointsColors(plist, r, cols, alpha):
ucols.SetName("pointsRGBA")
if utils.isSequence(alpha):
if len(alpha) != n:
- colors.printc("~times mismatch in Points() alphas", n, len(alpha), c=1)
+ printc("~times mismatch in Points() alphas", n, len(alpha), c=1)
raise RuntimeError()
alphas = alpha
alpha = 1
@@ -214,7 +222,7 @@ def _PointsColors(plist, r, cols, alpha):
ucols.InsertNextTuple4(rc, gc, bc, ac)
else:
for i in range(n): # SLOW
- rc,gc,bc = colors.getColor(cols[i])
+ rc,gc,bc = getColor(cols[i])
ucols.InsertNextTuple4(rc*255, gc*255, bc*255, alphas[i]*255)
else:
c = cols
@@ -247,7 +255,7 @@ def Glyph(actor, glyphObj, orientationArray=None,
"""
cmap = None
# user passing a color map to map orientationArray sizes
- if c in list(colors._mapscales.cmap_d.keys()):
+ if c in list(_mapscales.cmap_d.keys()):
cmap = c
c = None
@@ -261,7 +269,7 @@ def Glyph(actor, glyphObj, orientationArray=None,
ucols.SetNumberOfComponents(3)
ucols.SetName("glyphRGB")
for col in c:
- cl = colors.getColor(col)
+ cl = getColor(col)
ucols.InsertNextTuple3(cl[0]*255, cl[1]*255, cl[2]*255)
poly.GetPointData().SetScalars(ucols)
c = None
@@ -312,7 +320,7 @@ def Glyph(actor, glyphObj, orientationArray=None,
lut.SetNumberOfTableValues(512)
lut.Build()
for i in range(512):
- r, g, b = colors.colorMap(i, cmap, 0, 512)
+ r, g, b = colorMap(i, cmap, 0, 512)
lut.SetTableValue(i, r, g, b, 1)
gactor.mapper.SetLookupTable(lut)
gactor.mapper.ScalarVisibilityOn()
@@ -321,6 +329,7 @@ def Glyph(actor, glyphObj, orientationArray=None,
gactor.mapper.SetScalarRange(rng[0], rng[1])
settings.collectable_actors.append(gactor)
+ gactor.name = "Glyph"
return gactor
@@ -408,7 +417,9 @@ def Tensors(domain, source='ellipsoid', useEigenValues=True, isSymmetric=True,
tgn = vtk.vtkPolyDataNormals()
tgn.SetInputData(tg.GetOutput())
tgn.Update()
- return Actor(tgn.GetOutput(), c, alpha)
+ actor = Actor(tgn.GetOutput(), c, alpha)
+ actor.name = "Tensors"
+ return actor
def Line(p0, p1=None, c="r", alpha=1, lw=1, dotted=False, res=None):
@@ -466,6 +477,7 @@ def Line(p0, p1=None, c="r", alpha=1, lw=1, dotted=False, res=None):
actor.base = np.array(p0)
actor.top = np.array(p1)
settings.collectable_actors.append(actor)
+ actor.name = "Line"
return actor
@@ -531,6 +543,7 @@ def DashedLine(p0, p1=None, spacing=None, c="red", alpha=1, lw=1):
actor.base = np.array(p0)
actor.top = np.array(p1)
settings.collectable_actors.append(actor)
+ actor.name = "DashedLine"
return actor
@@ -569,6 +582,7 @@ def Lines(startPoints, endPoints=None, c='gray', alpha=1, lw=1, dotted=False, sc
actor.GetProperty().SetLineStippleRepeatFactor(1)
settings.collectable_actors.append(actor)
+ actor.name = "Lines"
return actor
@@ -617,6 +631,7 @@ def Spline(points, smooth=0.5, degree=2, s=2, res=None):
actline.base = np.array(points[0])
actline.top = np.array(points[-1])
settings.collectable_actors.append(actline)
+ actline.name = "Spline"
return actline
@@ -667,6 +682,7 @@ def KSpline(points,
actor.base = np.array(points[0])
actor.top = np.array(points[-1])
settings.collectable_actors.append(actor)
+ actor.name = "KSpline"
return actor
@@ -713,7 +729,7 @@ def Tube(points, r=1, c="r", alpha=1, res=12):
cc.SetNumberOfComponents(3)
cc.SetNumberOfTuples(len(c))
for i, ic in enumerate(c):
- r, g, b = colors.getColor(ic)
+ r, g, b = getColor(ic)
cc.InsertTuple3(i, int(255 * r), int(255 * g), int(255 * b))
polyln.GetPointData().AddArray(cc)
c = None
@@ -729,6 +745,7 @@ def Tube(points, r=1, c="r", alpha=1, res=12):
actor.base = np.array(points[0])
actor.top = np.array(points[-1])
settings.collectable_actors.append(actor)
+ actor.name = "Tube"
return actor
@@ -794,6 +811,7 @@ def Ribbon(line1, line2, c="m", alpha=1, res=(200, 5)):
rsf.Update()
actor = Actor(rsf.GetOutput(), c, alpha)
settings.collectable_actors.append(actor)
+ actor.name = "Ribbon"
return actor
@@ -824,6 +842,7 @@ def FlatArrow(line1, line2, c="m", alpha=1, tipSize=1, tipWidth=1):
actor = Ribbon(line1, line2, alpha=alpha, c=c, res=(resm, 1)).phong()
settings.collectable_actors.pop()
settings.collectable_actors.append(actor)
+ actor.name = "FlatArrow"
return actor
@@ -876,6 +895,7 @@ def Arrow(startPoint, endPoint, s=None, c="r", alpha=1, res=12):
actor.base = np.array(startPoint)
actor.top = np.array(endPoint)
settings.collectable_actors.append(actor)
+ actor.name = "Arrow"
return actor
@@ -918,6 +938,7 @@ def Arrows(startPoints, endPoints=None, s=None, scale=1, c="r", alpha=1, res=12)
orientationArray=orients, scaleByVectorSize=True,
c=c, alpha=alpha).flat()
settings.collectable_actors.append(arrg)
+ arrg.name = "Arrows"
return arrg
@@ -934,9 +955,22 @@ def Polygon(pos=(0, 0, 0), nsides=6, r=1, c="coral", alpha=1):
actor = Actor(ps.GetOutput(), c, alpha)
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Polygon"
return actor
+def Circle(pos=(0, 0, 0), r=1, fill=False, c="grey", alpha=1, res=120):
+ """
+ Build a circle of radius `r`.
+ """
+ if len(pos) == 2:
+ pos = (pos[0], pos[1], 0)
+ pl = Polygon(pos, nsides=res, r=r)
+ pl.wireframe(not fill).alpha(alpha).c(c)
+ pl.name = "Circle"
+ return pl
+
+
def Star(pos=(0, 0, 0), n=5, r1=0.7, r2=1.0, line=False, c="lb", alpha=1):
"""
Build a 2D star shape of `n` cusps of inner radius `r1` and outer radius `r2`.
@@ -972,6 +1006,7 @@ def Star(pos=(0, 0, 0), n=5, r1=0.7, r2=1.0, line=False, c="lb", alpha=1):
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Star"
return actor
@@ -982,8 +1017,9 @@ def Rectangle(p1=(0, 0, 0), p2=(2, 1, 0), lw=1, c="g", alpha=1):
pos = (p1 + p2) / 2
length = abs(p2[0] - p1[0])
height = abs(p2[1] - p1[1])
- return Plane(pos, [0, 0, 1], length, height, c, alpha)
-
+ actor = Plane(pos, [0, 0, 1], length, height, c, alpha)
+ actor.name = "Rectangle"
+ return actor
def Disc(
pos=(0, 0, 0),
@@ -1010,6 +1046,50 @@ def Disc(
actor = Actor(ps.GetOutput(), c, alpha).flat()
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Disc"
+ return actor
+
+
+def Arc(
+ center,
+ point1,
+ point2=None,
+ normal=None,
+ angle=None,
+ invert=False,
+ c="grey",
+ alpha=1,
+ res=48,
+):
+ """
+ Build a 2D circular arc between points `point1` and `point2`.
+ If `normal` is specified then `center` is ignored, and
+ normal vector, a starting `point1` (polar vector)
+ and an angle defining the arc length need to be assigned.
+
+ Arc spans the shortest angular sector point1 and point2,
+ if invert=True, then the opposite happens.
+ """
+ ar = vtk.vtkArcSource()
+ if point2 is not None:
+ ar.UseNormalAndAngleOff()
+ ar.SetPoint1(point1)
+ ar.SetPoint2(point2)
+ ar.SetCenter(center)
+ elif normal is not None and angle is not None:
+ ar.UseNormalAndAngleOn()
+ ar.SetAngle(angle)
+ ar.SetPolarVector(point1)
+ ar.SetNormal(normal)
+ else:
+ printc("Error in Arc(): incorrect input.")
+ return None
+ ar.SetNegative(invert)
+ ar.SetResolution(res)
+ ar.Update()
+ actor = Actor(ar.GetOutput(), c, alpha).flat().lw(2)
+ settings.collectable_actors.append(actor)
+ actor.name = "Arc"
return actor
@@ -1026,6 +1106,7 @@ def Sphere(pos=(0, 0, 0), r=1, c="r", alpha=1, res=24):
actor = Actor(ss.GetOutput(), c, alpha).phong()
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Sphere"
return actor
@@ -1044,10 +1125,10 @@ def Spheres(centers, r=1, c="r", alpha=1, res=8):
if cisseq:
if len(centers) > len(c):
- colors.printc("~times Mismatch in Spheres() colors", len(centers), len(c), c=1)
+ printc("~times Mismatch in Spheres() colors", len(centers), len(c), c=1)
raise RuntimeError()
if len(centers) != len(c):
- colors.printc("~lightningWarning: mismatch in Spheres() colors", len(centers), len(c))
+ printc("~lightningWarning: mismatch in Spheres() colors", len(centers), len(c))
risseq = False
if utils.isSequence(r):
@@ -1055,12 +1136,12 @@ def Spheres(centers, r=1, c="r", alpha=1, res=8):
if risseq:
if len(centers) > len(r):
- colors.printc("times Mismatch in Spheres() radius", len(centers), len(r), c=1)
+ printc("times Mismatch in Spheres() radius", len(centers), len(r), c=1)
raise RuntimeError()
if len(centers) != len(r):
- colors.printc("~lightning Warning: mismatch in Spheres() radius", len(centers), len(r))
+ printc("~lightning Warning: mismatch in Spheres() radius", len(centers), len(r))
if cisseq and risseq:
- colors.printc("~noentry Limitation: c and r cannot be both sequences.", c=1)
+ printc("~noentry Limitation: c and r cannot be both sequences.", c=1)
raise RuntimeError()
src = vtk.vtkSphereSource()
@@ -1086,7 +1167,7 @@ def Spheres(centers, r=1, c="r", alpha=1, res=8):
ucols.SetName("colors")
for i, p in enumerate(centers):
vpts.SetPoint(i, p)
- cx, cy, cz = colors.getColor(c[i])
+ cx, cy, cz = getColor(c[i])
ucols.InsertNextTuple3(cx * 255, cy * 255, cz * 255)
pd.GetPointData().SetScalars(ucols)
glyph.ScalingOff()
@@ -1110,12 +1191,13 @@ def Spheres(centers, r=1, c="r", alpha=1, res=8):
actor.mapper.ScalarVisibilityOn()
else:
actor.mapper.ScalarVisibilityOff()
- actor.GetProperty().SetColor(colors.getColor(c))
+ actor.GetProperty().SetColor(getColor(c))
settings.collectable_actors.append(actor)
+ actor.name = "Spheres"
return actor
-def Earth(pos=(0, 0, 0), r=1, lw=1):
+def Earth(pos=(0, 0, 0), r=1, lw=0):
"""Build a textured actor representing the Earth.
|geodesic| |geodesic.py|_
@@ -1126,10 +1208,7 @@ def Earth(pos=(0, 0, 0), r=1, lw=1):
tss.SetRadius(r)
tss.SetThetaResolution(72)
tss.SetPhiResolution(36)
- earthMapper = vtk.vtkPolyDataMapper()
- earthMapper.SetInputConnection(tss.GetOutputPort())
- earthActor = Actor(c="w")
- earthActor.SetMapper(earthMapper)
+ earthActor = Actor(tss, c="w")
atext = vtk.vtkTexture()
pnmReader = vtk.vtkPNMReader()
cdir = os.path.dirname(__file__)
@@ -1142,19 +1221,20 @@ def Earth(pos=(0, 0, 0), r=1, lw=1):
earthActor.SetTexture(atext)
if not lw:
earthActor.SetPosition(pos)
+ settings.collectable_actors.append(earthActor)
+ earthActor.name = "Earth"
return earthActor
- es = vtk.vtkEarthSource()
- es.SetRadius(r / 0.995)
- earth2Mapper = vtk.vtkPolyDataMapper()
- earth2Mapper.SetInputConnection(es.GetOutputPort())
- earth2Actor = Actor()
- earth2Actor.SetMapper(earth2Mapper)
- earth2Mapper.ScalarVisibilityOff()
- earth2Actor.GetProperty().SetLineWidth(lw)
- ass = Assembly([earthActor, earth2Actor])
- ass.SetPosition(pos)
- settings.collectable_actors.append(ass)
- return ass
+ else:
+ es = vtk.vtkEarthSource()
+ es.SetOnRatio(2)
+ es.SetRadius(r / 0.995)
+ earth2Actor = Actor(es)
+ earth2Actor.GetProperty().SetLineWidth(lw)
+ asse = Assembly([earthActor, earth2Actor])
+ asse.SetPosition(pos)
+ settings.collectable_actors.append(asse)
+ asse.name = "Earth"
+ return asse
def Ellipsoid(pos=(0, 0, 0), axis1=(1, 0, 0), axis2=(0, 2, 0), axis3=(0, 0, 3),
@@ -1198,6 +1278,7 @@ def Ellipsoid(pos=(0, 0, 0), axis1=(1, 0, 0), axis2=(0, 2, 0), axis3=(0, 0, 3),
actor.base = -np.array(axis1) / 2 + pos
actor.top = np.array(axis1) / 2 + pos
settings.collectable_actors.append(actor)
+ actor.name = "Ellipsoid"
return actor
@@ -1241,6 +1322,7 @@ def Grid(
actor = Actor(tf.GetOutput(), c, alpha).wireframe().lw(lw)
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Grid"
return actor
@@ -1274,6 +1356,7 @@ def Plane(pos=(0, 0, 0), normal=(0, 0, 1), sx=1, sy=None, c="g", alpha=1):
actor = Actor(tf.GetOutput(), c, alpha)
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Plane"
return actor
@@ -1295,6 +1378,7 @@ def Box(pos=(0,0,0), length=1, width=2, height=3, size=(), c="g", alpha=1):
actor = Actor(pd, c, alpha)
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Box"
return actor
@@ -1303,7 +1387,9 @@ def Cube(pos=(0, 0, 0), side=1, c="g", alpha=1):
|colorcubes| |colorcubes.py|_
"""
- return Box(pos, side, side, side, (), c, alpha)
+ actor = Box(pos, side, side, side, (), c, alpha)
+ actor.name = "Cube"
+ return actor
def Spring(
@@ -1367,10 +1453,11 @@ def Spring(
actor.base = np.array(startPoint)
actor.top = np.array(endPoint)
settings.collectable_actors.append(actor)
+ actor.name = "Spring"
return actor
-def Cylinder(pos=(0,0,0), r=1, height=1, axis=(0,0,1), c="teal", alpha=1, res=24):
+def Cylinder(pos=(0,0,0), r=1, height=2, axis=(0,0,1), c="teal", alpha=1, res=24):
"""
Build a cylinder of specified height and radius `r`, centered at `pos`.
@@ -1416,6 +1503,7 @@ def Cylinder(pos=(0,0,0), r=1, height=1, axis=(0,0,1), c="teal", alpha=1, res=24
actor.base = base + pos
actor.top = top + pos
settings.collectable_actors.append(actor)
+ actor.name = "Cylinder"
return actor
@@ -1437,6 +1525,7 @@ def Cone(pos=(0,0,0), r=1, height=3, axis=(0,0,1), c="dg", alpha=1, res=48):
actor.base = pos - v
actor.top = pos + v
settings.collectable_actors.append(actor)
+ actor.name = "Cone"
return actor
@@ -1444,7 +1533,9 @@ def Pyramid(pos=(0,0,0), s=1, height=1, axis=(0,0,1), c="dg", alpha=1):
"""
Build a pyramid of specified base size `s` and `height`, centered at `pos`.
"""
- return Cone(pos, s, height, axis, c, alpha, 4)
+ actor = Cone(pos, s, height, axis, c, alpha, 4)
+ actor.name = "Pyramid"
+ return actor
def Torus(pos=(0, 0, 0), r=1, thickness=0.2, c="khaki", alpha=1, res=30):
@@ -1461,10 +1552,10 @@ def Torus(pos=(0, 0, 0), r=1, thickness=0.2, c="khaki", alpha=1, res=30):
pfs.SetUResolution(res * 3)
pfs.SetVResolution(res)
pfs.Update()
-
actor = Actor(pfs.GetOutput(), c, alpha).phong()
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Torus"
return actor
@@ -1496,6 +1587,7 @@ def Paraboloid(pos=(0,0,0), r=1, height=1, c="cyan", alpha=1, res=50):
actor.mapper.ScalarVisibilityOff()
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Paraboloid"
return actor
@@ -1526,6 +1618,7 @@ def Hyperboloid(pos=(0,0,0), a2=1, value=0.5, height=1, c="m", alpha=1, res=100)
actor.mapper.ScalarVisibilityOff()
actor.SetPosition(pos)
settings.collectable_actors.append(actor)
+ actor.name = "Hyperboloid"
return actor
@@ -1630,7 +1723,7 @@ def Text(
ca.SetText(pos - 1, str(txt))
ca.PickableOff()
cap = ca.GetTextProperty()
- cap.SetColor(colors.getColor(c))
+ cap.SetColor(getColor(c))
if font.lower() == "courier": cap.SetFontFamilyToCourier()
elif font.lower() == "times": cap.SetFontFamilyToTimes()
elif font.lower() == "arial": cap.SetFontFamilyToArial()
@@ -1638,7 +1731,7 @@ def Text(
cap.SetFontFamily(vtk.VTK_FONT_FILE)
cap.SetFontFile(settings.fonts_path+font+'.ttf')
if bg:
- bgcol = colors.getColor(bg)
+ bgcol = getColor(bg)
cap.SetBackgroundColor(bgcol)
cap.SetBackgroundOpacity(alpha * 0.5)
cap.SetFrameColor(bgcol)
@@ -1655,7 +1748,7 @@ def Text(
tp = tmapper.GetTextProperty()
tp.BoldOff()
tp.SetFontSize(s*20)
- tp.SetColor(colors.getColor(c))
+ tp.SetColor(getColor(c))
tp.SetJustificationToLeft()
tp.SetVerticalJustificationToBottom()
if font.lower() == "courier": tp.SetFontFamilyToCourier()
@@ -1669,11 +1762,11 @@ def Text(
elif os.path.exists(font):
tp.SetFontFile(font)
else:
- colors.printc("~sad Font", font, "not found in", settings.fonts_path, c="r")
- colors.printc("~pin Available fonts are:", settings.fonts, c="m")
+ printc("~sad Font", font, "not found in", settings.fonts_path, c="r")
+ printc("~pin Available fonts are:", settings.fonts, c="m")
return None
if bg:
- bgcol = colors.getColor(bg)
+ bgcol = getColor(bg)
tp.SetBackgroundColor(bgcol)
tp.SetBackgroundOpacity(alpha * 0.5)
tp.SetFrameColor(bgcol)
@@ -1723,6 +1816,7 @@ def Text(
ttactor.SetPosition(pos)
settings.collectable_actors.append(ttactor)
+ ttactor.name = "Text"
return ttactor
@@ -1768,7 +1862,7 @@ def build_img_web(formula, tfile):
f.write(r.content)
f.close()
except requests.exceptions.ConnectionError:
- colors.printc('Latex error. Web site unavailable?', wsite, c=1)
+ printc('Latex error. Web site unavailable?', wsite, c=1)
return None
def build_img_plt(formula, tfile):
@@ -1778,9 +1872,9 @@ def build_img_plt(formula, tfile):
formula1 = '$'+formula+'$'
plt.axis('off')
- col = colors.getColor(c)
+ col = getColor(c)
if bg:
- bx = dict(boxstyle="square", ec=col, fc=colors.getColor(bg))
+ bx = dict(boxstyle="square", ec=col, fc=getColor(bg))
else:
bx = None
plt.text(0.5, 0.5, formula1,
@@ -1816,10 +1910,97 @@ def build_img_plt(formula, tfile):
pass
except:
- colors.printc('Error in Latex()\n', formula, c=1)
- colors.printc(' latex or dvipng not installed?', c=1)
- colors.printc(' Try: usetex=False' , c=1)
- colors.printc(' Try: sudo apt install dvipng' , c=1)
+ printc('Error in Latex()\n', formula, c=1)
+ printc(' latex or dvipng not installed?', c=1)
+ printc(' Try: usetex=False' , c=1)
+ printc(' Try: sudo apt install dvipng' , c=1)
settings.collectable_actors.append(vactor)
+ vactor.name = "Latex"
return vactor
+
+
+def ParametricShape(name, c='powderblue', alpha=1, res=51):
+ """
+ A set of built-in shapes for illustration purposes.
+
+ Name can be an integer or a string in this list:
+
+ `['Boy', 'ConicSpiral', 'CrossCap', 'Dini', 'Enneper',
+ 'Figure8Klein', 'Klein', 'Mobius', 'RandomHills', 'Roman',
+ 'SuperEllipsoid', 'BohemianDome', 'Bour', 'CatalanMinimal',
+ 'Henneberg', 'Kuen', 'PluckerConoid', 'Pseudosphere'].`
+
+ :Example:
+ .. code-block:: python
+
+ from vtkplotter import *
+ for i in range(18):
+ ps = ParametricShape(i, c=i)
+ show([ps, Text(ps.name)], at=i, N=18)
+ interactive()
+
+ |paramshapes|
+ """
+ shapes = ['Boy', 'ConicSpiral', 'CrossCap', 'Dini', 'Enneper',
+ 'Figure8Klein', 'Klein', 'Mobius', 'RandomHills', 'Roman',
+ 'SuperEllipsoid', 'BohemianDome', 'Bour', 'CatalanMinimal',
+ 'Henneberg', 'Kuen', 'PluckerConoid', 'Pseudosphere']
+
+ if isinstance(name, int):
+ name = name%len(shapes)
+ name = shapes[name]
+
+ if name == 'Boy': ps = vtk.vtkParametricBoy()
+ elif name == 'ConicSpiral': ps = vtk.vtkParametricConicSpiral()
+ elif name == 'CrossCap': ps = vtk.vtkParametricCrossCap()
+ elif name == 'Dini': ps = vtk.vtkParametricDini()
+ elif name == 'Enneper': ps = vtk.vtkParametricEnneper()
+ elif name == 'Figure8Klein': ps = vtk.vtkParametricFigure8Klein()
+ elif name == 'Klein': ps = vtk.vtkParametricKlein()
+ elif name == 'Mobius':
+ ps = vtk.vtkParametricMobius()
+ ps.SetRadius(2.0)
+ ps.SetMinimumV(-0.5)
+ ps.SetMaximumV(0.5)
+ elif name == 'RandomHills':
+ ps = vtk.vtkParametricRandomHills()
+ ps.AllowRandomGenerationOn()
+ ps.SetRandomSeed(1)
+ ps.SetNumberOfHills(25)
+ elif name == 'Roman': ps = vtk.vtkParametricRoman()
+ elif name == 'SuperEllipsoid':
+ ps = vtk.vtkParametricSuperEllipsoid()
+ ps.SetN1(0.5)
+ ps.SetN2(0.4)
+ elif name == 'BohemianDome':
+ ps = vtk.vtkParametricBohemianDome()
+ ps.SetA(5.0)
+ ps.SetB(1.0)
+ ps.SetC(2.0)
+ elif name == 'Bour': ps = vtk.vtkParametricBour()
+ elif name == 'CatalanMinimal': ps = vtk.vtkParametricCatalanMinimal()
+ elif name == 'Henneberg': ps = vtk.vtkParametricHenneberg()
+ elif name == 'Kuen':
+ ps = vtk.vtkParametricKuen()
+ ps.SetDeltaV0(0.001)
+ elif name == 'PluckerConoid': ps = vtk.vtkParametricPluckerConoid()
+ elif name == 'Pseudosphere': ps = vtk.vtkParametricPseudosphere()
+ else:
+ printc("Error in ParametricShape: unknown name", name, c=1)
+ printc("Available shape names:\n", shapes)
+ return None
+
+ pfs = vtk.vtkParametricFunctionSource()
+ pfs.SetParametricFunction(ps)
+ pfs.SetUResolution(res)
+ pfs.SetVResolution(res)
+ pfs.SetWResolution(res)
+ pfs.Update()
+
+ actor = Actor(pfs.GetOutput(), c, alpha)
+ if name != 'Kuen': actor.normalize()
+ settings.collectable_actors.append(actor)
+ actor.name = name
+ return actor
+
diff --git a/vtkplotter/utils.py b/vtkplotter/utils.py
index 6c7cd558..6428ba01 100644
--- a/vtkplotter/utils.py
+++ b/vtkplotter/utils.py
@@ -18,6 +18,7 @@
"geometry",
"isSequence",
"linInterpolate",
+ "fitCircle2D",
"vector",
"mag",
"mag2",
@@ -405,7 +406,7 @@ def linInterpolate(x, rangeX, rangeY):
"""
Interpolate linearly variable x in rangeX onto rangeY.
If x is a vector the linear weight is the distance to two the rangeX vectors.
-
+
E.g. if x runs in rangeX=[x0,x1] and I want it to run in rangeY=[y0,y1] then
y = linInterpolate(x, rangeX, rangeY) will interpolate x onto rangeY.
"""
@@ -434,6 +435,66 @@ def linInterpolate(x, rangeX, rangeY):
return out
+def fitCircle2D(points):
+ """
+ Fits a circle through points in the plane, with a very fast non-iterative method.
+
+ Returns the tuple (center_x, center_y, radius).
+
+ Reference: J.F. Crawford, Nucl. Instr. Meth. 211, 1983, 223-225.
+
+ .. note:: E.g.:
+
+ .. code-block:: python
+
+ from vtkplotter import *
+
+ x = arange(0, 3, 0.1)
+ y = sin(x)
+
+ cx, cy, R = fitCircle2D([x,y])
+ Points([x, y])
+ Point([cx, cy])
+ Circle([cx, cy], r=R)
+ show(..., axes=8)
+ """
+ if len(points) == 2:
+ data = np.c_[points[0],points[1]]
+ else:
+ data = np.array(points)
+ xi = data[:,0]
+ yi = data[:,1]
+
+ x = sum(xi)
+ xx = sum(xi*xi)
+ xxx = sum(xi*xi*xi)
+
+ y = sum(yi)
+ yy = sum(yi*yi)
+ yyy = sum(yi*yi*yi)
+
+ xy = sum(xi*yi)
+ xyy = sum(xi*yi*yi)
+ xxy = sum(xi*xi*yi)
+
+ N = len(xi)
+ k = (xx+yy)/N
+
+ a1 = xx-x*x/N
+ b1 = xy-x*y/N
+ c1 = 0.5*(xxx + xyy - x*k)
+
+ a2 = xy-x*y/N
+ b2 = yy-y*y/N
+ c2 = 0.5*(xxy + yyy - y*k)
+
+ x0 = (b1*c2 - b2*c1)/(a2*b1 - a1*b2)
+ y0 = (c1 - a1*x0)/b1
+
+ R = np.sqrt(x0*x0 + y0*y0 -1/N*(2*x0*x +2*y0*y -xx -yy))
+ return x0, y0, R
+
+
def vector(x, y=None, z=0.0, dtype=np.float64):
"""Return a 3D numpy array representing a vector.
@@ -1352,13 +1413,21 @@ def trimesh2vtk(inputobj, alphaPerCell=False):
if isSequence(trim_c):
if isSequence(trim_c[0]):
- trim_cc = (trim_c[:, [0, 1, 2]] / 255)
- trim_al = trim_c[:, 3] / 255
- if inputobj.visual.kind == "face":
- tact.cellColors(trim_cc, mode='colors',
- alpha=trim_al, alphaPerCell=alphaPerCell)
+ sameColor = len(np.unique(trim_c, axis=0)) < 2 # all vtxs have same color
+ trim_c = trim_c/255
+
+ if sameColor:
+ tact.c(trim_c[0, [0,1,2]]).alpha(trim_c[0, 3])
else:
- tact.pointColors(trim_cc, mode='colors', alpha=trim_al)
+ if inputobj.visual.kind == "face":
+ tact.cellColors(trim_c[:, [0,1,2]],
+ mode='colors',
+ alpha=trim_c[:,3],
+ alphaPerCell=alphaPerCell)
+ else:
+ tact.pointColors(trim_c[:, [0,1,2]],
+ mode='colors',
+ alpha=trim_c[3])
return tact
elif "PointCloud" in inputobj_type:
diff --git a/vtkplotter/version.py b/vtkplotter/version.py
index 9ffec70f..8e8ad75f 100644
--- a/vtkplotter/version.py
+++ b/vtkplotter/version.py
@@ -1 +1 @@
-_version='2019.4.9'
+_version='2019.4.10'
diff --git a/vtkplotter/vtkio.py b/vtkplotter/vtkio.py
index 409938f6..1ed82933 100644
--- a/vtkplotter/vtkio.py
+++ b/vtkplotter/vtkio.py
@@ -230,6 +230,9 @@ def _load_file(filename, c, alpha, threshold, spacing, unpack):
elif fl.endswith(".pvd"):
return loadPVD(fl)
+ elif fl.endswith(".pdb"):
+ return loadPDB(fl)
+
################################################################# polygonal mesh:
else:
if fl.endswith(".vtk"): # read all legacy vtk types
@@ -532,7 +535,7 @@ def loadPVD(filename):
import xml.etree.ElementTree as et
tree = et.parse(filename)
-
+
dname = os.path.dirname(filename)
if not dname:
dname = '.'
@@ -554,6 +557,21 @@ def loadPVD(filename):
return listofobjs
+def loadPDB(filename, bondScale=1, hydrogenBondScale=1, coilWidth=0.3, helixWidth=1.3):
+ """Reads a molecule Protein Data Bank file."""
+ rr = vtk.vtkPDBReader()
+ rr.SetFileName('1btn.pdb')
+ rr.SetBScale(bondScale)
+ rr.SetHBScale(hydrogenBondScale)
+ rr.Update()
+ prf = vtk.vtkProteinRibbonFilter()
+ prf.SetCoilWidth(coilWidth)
+ prf.SetHelixWidth(helixWidth)
+ prf.SetInputData(rr.GetOutput())
+ prf.Update()
+ return Actor(prf.GetOutput())
+
+
def loadNeutral(filename):
"""Reads a `Neutral` tetrahedral file format. Return an ``Actor(vtkActor)`` object."""
f = open(filename, "r")