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 | | | | [![fxy](https://user-images.githubusercontent.com/32848391/50738863-bfccf800-11d8-11e9-882d-7b217aceb55a.jpg)](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. | | | | -| [![histo](https://user-images.githubusercontent.com/32848391/68141260-77cc4e00-ff2d-11e9-9280-0efc5b87314d.png)](https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/histogram.py)
`histogram.py` | Draw a 2D histogram with error bars. | +| [![plotxy](https://user-images.githubusercontent.com/32848391/69158509-d6c1c380-0ae6-11ea-9dbf-ff5cd396a9a6.png)](https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/plotxy.py)
`plotxy.py` | Draw a _x_ vs _y_ plot with optional error bars. | +| | | +| [![histo](https://user-images.githubusercontent.com/32848391/68141260-77cc4e00-ff2d-11e9-9280-0efc5b87314d.png)](https://github.com/marcomusy/vtkplotter/blob/master/examples/plotting2d/histogram.py)
`histogram.py` | Draw a 2D histogram with optional error bars. | | | | | [![histo2d](https://user-images.githubusercontent.com/32848391/50738861-bfccf800-11d8-11e9-9698-c0b9dccdba4d.jpg)](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")