Ejemplo n.º 1
0
    def restore_state(self, model):

        model.name = self.name
        model.display = self.display
        model.openState.xform = self.xform.create_object()
        model.openState.active = self.active

        #
        # Record how model id number has been remapped.
        #
        if self.version >= 2:
            import SimpleSession
            if hasattr(SimpleSession, 'modelMap'):
                mid = (self.id, self.subid)
                SimpleSession.modelMap.setdefault(mid, []).append(model)
        else:
            from SimpleSession import updateOSLmap
            updateOSLmap(self.osl_identifier, model.oslIdent())

        if self.version >= 3:
            p = model.clipPlane
            import chimera
            p.origin = chimera.Point(*self.clip_plane_origin)
            n = chimera.Vector(*self.clip_plane_normal)
            if n.length == 0:
                n = chimera.Vector(0, 0, -1)
            p.normal = n
            model.clipPlane = p
            model.clipThickness = self.clip_thickness
            model.useClipPlane = self.use_clip_plane
            if self.version >= 4:
                model.useClipThickness = self.use_clip_thickness
Ejemplo n.º 2
0
def AddAxes ( rad, lX, lY, lZ, cF, mol ) :

    pos = chimera.Vector(0,0,0)
    mol = AddArrow2 ( pos, chimera.Vector(1,0,0), lX, (cF,0,0,1), rad, mol )
    mol = AddArrow2 ( pos, chimera.Vector(0,1,0), lY, (0,cF,0,1), rad, mol )
    mol = AddArrow2 ( pos, chimera.Vector(0,0,1), lZ, (0,0,cF,1), rad, mol )
    mol.name = "XYZ (RGB) Axes"

    return mol
Ejemplo n.º 3
0
def AxesModOffset ( COM=[0,0,0], U=None, Extents=[30,30,30], rad=1.0, f=1.0,
			 alignTo = None ) :
	
    import _surface
    mol = _surface.SurfaceModel()
    chimera.openModels.add([mol], sameAs = alignTo)
	
    pos = chimera.Vector(0,0,0)
    axes = AddArrow2 ( pos, chimera.Vector(0,1,0), lY, (cF,.3,.3,1), rad, mol )
	
    axes.name = "Riboarrow"
	
    if U != None :
        R = numpy.array([
						 [  U[0,0], U[0,1], U[0,2], 0.0    ],
						 [  U[1,0], U[1,1], U[1,2], 0.0    ],
						 [  U[2,0], U[2,1], U[2,2], 0.0    ]  ] )
		
        T = numpy.array([
						 [  1.0, 0.0, 0.0, COM[0]   ],
						 [  0.0, 1.0, 0.0, COM[1]   ],
						 [  0.0, 0.0, 1.0, COM[2]   ]  ] )
		
        Ti = numpy.array([
						  [  1.0, 0.0, 0.0, Extents[0]*0.7  ],
						  [  0.0, 1.0, 0.0, -Extents[1]/2.0   ],
						  [  0.0, 0.0, 1.0, -Extents[0]*0.7   ]  ] )
		
        import Matrix
        M = Matrix.multiply_matrices ( R, Ti )
        M = Matrix.multiply_matrices ( T, M )
		
        ps = []
        for p in axes.surfacePieces :
            v, t = numpy.copy(p.geometry[0]), numpy.copy(p.geometry[1])
            ps.append ( [v,t,p.color] )
            axes.removePiece ( p )
		
        import _contour
        for p in ps :
            _contour.affine_transform_vertices( p[0], M )
            axes.addPiece ( p[0], p[1], p[2] )
		
        from random import random as rand
        clr = ( rand()*.7, rand()*.7, rand()*.7, 1.0 )
	# for p in axes.surfacePieces : p.color = clr
	
    #for g in axes.surfacePieces :
    #    g.initial_v = numpy.copy ( g.geometry[0] )
	
    return axes
Ejemplo n.º 4
0
def AxesMod1 ( COM=[0,0,0], U=None, length=10.0, exfac=10.0, rad=1.0,
              alignTo = None, axes=None ) :

    import _surface
    toaxes = axes
    if toaxes == None :
        toaxes = _surface.SurfaceModel()
        chimera.openModels.add([toaxes], sameAs = alignTo)
        toaxes.name = "Axes"

    #axes = AddAxes ( rad, Extents[0]*f, Extents[1]*f, Extents[2]*f, 1.0, mol )
    pos = chimera.Vector(0,0,0)
    #mol = AddArrow2 ( pos, chimera.Vector(1,0,0), lX, (cF,0,0,1), rad, mol )
    #mol = AddArrow2 ( pos, chimera.Vector(0,1,0), lY, (0,cF,0,1), rad, mol )
    naxes = AddArrow3 ( pos, chimera.Vector(0,0,1), length, (0,0,1,1), rad, _surface.SurfaceModel() )

    if U != None :
        S = numpy.array([
            [  1.0, 0.0, 0.0, 0   ],
            [  0.0, 1.0, 0.0, 0   ],
            [  0.0, 0.0, 2.0, 0   ]  ] )

        P = numpy.array([
            [  1.0, 0.0, 0.0, 0   ],
            [  0.0, 1.0, 0.0, 0   ],
            [  0.0, 0.0, 1.0, -length   ]  ] )

        R = numpy.array([
            [  U[0,0], U[0,1], U[0,2], 0.0    ],
            [  U[1,0], U[1,1], U[1,2], 0.0    ],
            [  U[2,0], U[2,1], U[2,2], 0.0    ]  ] )

        T = numpy.array([
            [  1.0, 0.0, 0.0, COM[0]   ],
            [  0.0, 1.0, 0.0, COM[1]   ],
            [  0.0, 0.0, 1.0, COM[2]   ]  ] )

        import Matrix
        M = Matrix.multiply_matrices ( T, R )
        M = Matrix.multiply_matrices ( M, P )
        M = Matrix.multiply_matrices ( M, S )

        import _contour
        for p in naxes.surfacePieces :
            v, t = numpy.copy(p.geometry[0]), numpy.copy(p.geometry[1])
            _contour.affine_transform_vertices( v, M )
            toaxes.addPiece ( v,t,p.color )


    return toaxes
Ejemplo n.º 5
0
def matchPositions(fixedPositions, movablePositions):
    m = Match(fixedPositions, movablePositions)
    mat = m.matrix()
    rot = chimera.Xform.xform(mat[0, 0], mat[0, 1], mat[0, 2], 0, mat[1, 0],
                              mat[1, 1], mat[1, 2], 0, mat[2, 0], mat[2, 1],
                              mat[2, 2], 0, True)
    fC = m.center(fixedPositions)
    fT = chimera.Xform.translation(chimera.Vector(fC[0], fC[1], fC[2]))
    mC = m.center(movablePositions)
    mT = chimera.Xform.translation(chimera.Vector(-mC[0], -mC[1], -mC[2]))
    xform = chimera.Xform()
    xform.multiply(fT)
    xform.multiply(rot)
    xform.multiply(mT)
    return xform, m.rms
Ejemplo n.º 6
0
def transform_square(xform, center):

    axis, angle_deg = xform.getRotation()
    trans = xform.getTranslation()
    t1 = trans - axis * (trans * axis)
    import chimera
    t2 = chimera.cross(axis, t1)

    from math import pi, sin, cos
    angle = angle_deg * pi / 180
    sa, ca = sin(angle), cos(angle)
    if 1 - ca == 0:
        return None  # No rotation
    axis_offset = t1 * .5 + t2 * (.5 * sa / (1 - ca))
    c = chimera.Vector(center[0], center[1], center[2])
    cd = c - axis_offset
    sq1 = cd - axis * (cd * axis)
    sq2 = axis * sq1.length
    e = 2  # Factor for enlarging square
    dz = chimera.cross(axis, sq1) * .05  # Thickness vector
    corners = [
        p.data() for p in (
            c - sq1 - sq2 * e - dz,
            c - sq1 + sq2 * e - dz,
            c + sq1 * e + sq2 * e - dz,
            c + sq1 * e - sq2 * e - dz,
            c - sq1 - sq2 * e + dz,
            c - sq1 + sq2 * e + dz,
            c + sq1 * e + sq2 * e + dz,
            c + sq1 * e - sq2 * e + dz,
        )
    ]
    return corners
Ejemplo n.º 7
0
def rotate(molecule, at, alpha):
    if len(at) == 3:
        try:
            a1, a2, a3 = [a.coord() for a in at]
        except AttributeError:
            a1, a2, a3 = at
        axis_a = a1 - a2
        axis_b = a3 - a2
        delta = chimera.angle(a1, a2, a3) - alpha
        axis = chimera.cross(axis_a, axis_b)
        if axis.data() == (0.0, 0.0, 0.0):
            axis = chimera.cross(axis_a, axis_b + chimera.Vector(1, 0, 0))
            logger.warning("Had to choose arbitrary normal vector")
        pivot = a2
    elif len(at) == 4:
        try:
            a1, a2, a3, a4 = [a.coord() for a in at]
        except AttributeError:
            a1, a2, a3, a4 = at
        axis = a3 - a2
        delta = chimera.dihedral(a1, a2, a3, a4) - alpha
        pivot = a3
    else:
        raise ValueError(
            "Atom list must contain 3 (angle) or 4 (dihedral) atoms only")

    r = X.translation(pivot - ZERO)  # move to origin
    r.multiply(X.rotation(axis, -delta))  # rotate
    r.multiply(X.translation(ZERO - pivot))  # return to orig pos
    for a in molecule.atoms:
        a.setCoord(r.apply(a.coord()))
Ejemplo n.º 8
0
def interpolateCorkscrew(xf, c0, c1, f):
	"""Interpolate by splitting the transformation into a rotation
	and a translation along the axis of rotation."""
	import chimera, math
	dc = c1 - c0
	vr, a = xf.getRotation()		# a is in degrees
	tra = dc * vr				# magnitude of translation
						# along rotation axis
	vt = dc - tra * vr			# where c1 would end up if
						# only rotation is used
	cm = c0 + vt / 2
	v0 = chimera.cross(vr, vt)
	if v0.sqlength() <= 0.0:
		ident = chimera.Xform.identity()
		return ident, ident
	v0.normalize()
	if a != 0.0:
		l = vt.length / 2 / math.tan(math.radians(a / 2))
		cr = (cm + v0 * l).toVector()
	else:
		cr = chimera.Vector(0.0, 0.0, 0.0)

	Tinv = chimera.Xform.translation(-cr)
	R0 = chimera.Xform.rotation(vr, a * f)
	R1 = chimera.Xform.rotation(vr, -a * (1 - f))
	X0 = chimera.Xform.translation(cr + vr * (f * tra))
	X0.multiply(R0)
	X0.multiply(Tinv)
	X1 = chimera.Xform.translation(cr - vr * ((1 - f) * tra))
	X1.multiply(R1)
	X1.multiply(Tinv)
	return X0, X1
Ejemplo n.º 9
0
def prAxes ( points ) :

    com = numpy.sum(points, axis=0) / len(points)
    C = chimera.Vector ( com[0], com[1], com[2] )

    comv = numpy.ones_like ( points ) * com
    points = points - comv

    i = numpy.matrix ( [[1,0,0], [0,1,0], [0,0,1]] )
    ii = i * numpy.sum ( numpy.multiply ( points, points ) )
    p_t = numpy.transpose(points)
    td = numpy.tensordot ( points, p_t, axes=[0,1] )

    I0 = ii - td

    try :
        U, S, V = numpy.linalg.svd( I0 )
    except :
        print "- error computing SVD - prob. singular matrix"
        return []

    #U[0,0] = U[0,0] * -1.0
    #U[1,0] = U[1,0] * -1.0
    #U[2,0] = U[2,0] * -1.0

    #U[0,2] = U[0,2] * -1.0
    #U[1,2] = U[1,2] * -1.0
    #U[2,2] = U[2,2] * -1.0

    return [C, U, S, V]
Ejemplo n.º 10
0
 def _setLightFromParams(self, params, activeName, saveName):
     import chimera
     active, diff, diffScale, spec, specScale, dir = params
     light = self._setActiveLight(active, activeName, saveName)
     light.diffuse = chimera.MaterialColor(*diff)
     light.diffuseScale = diffScale
     light.specular = chimera.MaterialColor(*spec)
     light.specularScale = specScale
     light.direction = chimera.Vector(*dir)
Ejemplo n.º 11
0
 def _makeLight(self):
     import chimera
     light = chimera.DirectionalLight()
     light.diffuse = self.diffuse.get()
     light.diffuseScale = self.diffuseScale.get()
     light.specular = self.specular.get()
     light.specularScale = self.specularScale.get()
     light.direction = chimera.Vector(0.25, 0.25, 1)
     return light
Ejemplo n.º 12
0
def restoreModelClip(clipInfo):
    for modelID, info in clipInfo.items():
        model = idLookup(modelID)
        originData, normalData = info
        cp = model.clipPlane
        cp.origin = chimera.Point(*originData)
        cp.normal = chimera.Vector(*normalData)
        model.clipPlane = cp
        model.useClipPlane = True
def translate_perpendicular_to_axis(axis, screen_xy, last_screen_xy):

    psize = pixel_size()
    d = chimera.Vector((screen_xy[0] - last_screen_xy[0]) * psize,
                       -(screen_xy[1] - last_screen_xy[1]) * psize,
                       0)
    a = apply(chimera.Vector, axis)
    a.normalize()
    t = d - a * (a*d)

    xf = chimera.Xform.translation(t)
    move_active_models(xf)
Ejemplo n.º 14
0
def translate(x, y, z, molecule):
    '''
    from chimera import runCommand as rc
    rc('rmsd #0 #1')
    m=chimera.openModels.list()[0]
    xf = chimera.Xform.translation(chimera.Vector(10,0,0))
    m.openState.globalXform(xf)

    import io
    f=io.open('/Users/wyf/Desktop/sbw/version_manager/auto_fit_902/tt.dat','w',encoding='utf-8')
    old = sys.stdout
    sys.stdout=f
    :param x:
    :param y:
    :param z:
    :param molecule:
    :return:
    '''
    xf = chimera.Xform.translation(chimera.Vector(x, y, z))
    molecule.openState.globalXform(xf)
Ejemplo n.º 15
0
def slerp(p, q, t):

    cs = p.dot(q)
    angle = numpy.arccos(cs)

    if abs(angle) > 0.0:
        sn = numpy.sin(angle)
        invSn = 1.0 / sn
        tAngle = t * angle
        c0 = numpy.sin(angle - tAngle) * invSn
        c1 = numpy.sin(tAngle) * invSn

        #mTuple[0] = coeff0*p.mTuple[0] + coeff1*q.mTuple[0];
        #mTuple[1] = coeff0*p.mTuple[1] + coeff1*q.mTuple[1];
        #mTuple[2] = coeff0*p.mTuple[2] + coeff1*q.mTuple[2];
        #mTuple[3] = coeff0*p.mTuple[3] + coeff1*q.mTuple[3];
        return Quaternion(p.s * c0 + q.s * c1, p.v * c0 + q.v * c1)

    else:
        return Quaternion(p.s, chimera.Vector(p.v[0], p.v[1], p.v[2]))
Ejemplo n.º 16
0
def AlignXf ( pos, v ) :
    Z = v
    Z.normalize()
    from random import random as rand
    dZ = chimera.Vector( rand(), rand(), rand() )
    dZ.normalize()
    X = chimera.cross ( Z, dZ )
    X.normalize ()
    Y = chimera.cross ( Z, X )
    Y.normalize ()

    xf = chimera.Xform.xform (
        X.x, Y.x, Z.x, pos[0],
        X.y, Y.y, Z.y, pos[1],
        X.z, Y.z, Z.z, pos[2] )

    #xf3 = chimera.Xform.xform (
    #    d, 0, 0, 0,
    #    0, d, 0, 0,
    #    0, 0, d, 0 )
    #print xf3

    return xf
Ejemplo n.º 17
0
    def _planeTrans(self, viewer, event):
        clipModel = getClipModel()
        if not clipModel:
            return
        p = clipModel.clipPlane
        dx, dy = viewer.delta(event.x, event.y, event.state % 2 == 1)
        axis, angle = clipModel.openState.xform.getRotation()
        mxf = chimera.Xform.rotation(axis, angle)
        n = mxf.apply(p.normal)

        # figure out major axis of normal in lab space
        if abs(n.x) >= abs(n.y):
            axis = (0, 1)
        else:
            axis = (1, 0)

        # reassign normal so there are no zeros
        # in mouse adjustment calculation
        def fuzzySign(x):
            if x < -1e-6:
                return -1
            if x > 1e-6:
                return 1
            return 0

        n = [fuzzySign(n.x), fuzzySign(n.y), fuzzySign(n.z)]
        if n[axis[0]] == 0:
            # should never happen with non-zero normal
            n[axis[0]] = 1
        if n[axis[1]] == 0:
            n[axis[1]] = n[axis[0]]  # mimic major axis
        n = chimera.Vector(*n)
        adjust = n.x * dx + n.y * dy

        distance = 2 * viewer.camera.extent * adjust
        p.moveOrigin(distance)
        clipModel.clipPlane = p
Ejemplo n.º 18
0
 def _chooseInterface(self, value=None):
     if value is None:
         value = self.interfaceVar.get()
     if value == self.Interface_LightsAdvanced:
         try:
             from _LightViewer import LightViewer
             self.viewer.mode = LightViewer.Advanced
         except ImportError:
             pass
         self.simpleFrame.pack_forget()
         self.shininessFrame.pack_forget()
         self.advancedFrame.pack()
         self._updateLight()
     elif value == self.Interface_LightsBasic:
         try:
             from _LightViewer import LightViewer
             self.viewer.mode = LightViewer.Simple
         except ImportError:
             pass
         self.advancedFrame.pack_forget()
         self.shininessFrame.pack_forget()
         self.simpleFrame.pack()
         keyLight = self.lensViewer.keyLight
         if not keyLight and self.saveKey:
             # bring back original in simple interface
             keyLight = self.saveKey
             self.lensViewer.keyLight = keyLight
             self.saveKey = None
         if not keyLight:
             import chimera
             keyLight = chimera.DirectionalLight()
             keyLight.diffuse = keyLight.specular \
                = self.diffuse.get()
             keyLight.diffuseScale = self.diffuseScale.get()
             keyLight.specularScale = 1
             # use default from chimera module
             from math import sin, cos, radians
             angle = radians(45)
             keyLight.direction = chimera.Vector(-sin(angle / 2),
                                                 sin(angle), cos(angle))
             self.lensViewer.keyLight = keyLight
         fillLight = self.lensViewer.fillLight
         if not fillLight and self.saveFill:
             # bring back original in simple interface
             fillLight = self.saveFill
             self.lensViewer.fillLight = fillLight
             self.saveFill = None
         if not fillLight:
             import chimera
             fillLight = chimera.DirectionalLight()
             fillLight.diffuse = keyLight.specular \
                = self.diffuse.get()
             fillLight.diffuseScale = self.diffuseScale.get()
             fillLight.specularScale = 0
             # use default from chimera module
             from math import sin, cos, radians
             angle = radians(15)
             fillLight.direction = chimera.Vector(sin(angle), sin(angle),
                                                  cos(angle))
             self.lensViewer.fillLight = fillLight
         brightness, contrast = self._calculateBrightnessContrast()
         self.brightness.set_value(brightness)
         self.contrast.set_value(contrast)
         if not self.light:
             # update in case user goes to Advanced version
             if self.whichLight.getvalue() == "key light":
                 self.light = self.lensViewer.keyLight
             else:
                 self.light = self.lensViewer.fillLight
     elif value == self.Interface_Shininess:
         try:
             from _LightViewer import LightViewer
             self.viewer.mode = LightViewer.Shininess
         except ImportError:
             pass
         self.advancedFrame.pack_forget()
         self.simpleFrame.pack_forget()
         self.shininessFrame.pack()
Ejemplo n.º 19
0
 def __init__(self, s=1.0, v=chimera.Vector(0, 0, 0)):
     self.s = s
     self.v = v
Ejemplo n.º 20
0
def restoreCoreModels():
	from SimpleSession.versions.v65 import init, restoreViewer, \
	     restoreMolecules, restoreColors, restoreSurfaces, \
	     restoreVRML, restorePseudoBondGroups, restoreModelAssociations
	molInfo = cPickle.loads(base64.b64decode('gAJ9cQEoVRFyaWJib25JbnNpZGVDb2xvcnECSwZOfYdVCWJhbGxTY2FsZXEDSwZHP8mZmaAAAAB9h1UJcG9pbnRTaXplcQRLBkc/8AAAAAAAAH2HVQVjb2xvcnEFSwZLAH1xBihLAV1xB0sBYUsCXXEISwJhSwNdcQlLA2FLBF1xCksEYUsFXXELSwVhdYdVCnJpYmJvblR5cGVxDEsGSwB9h1UKc3RpY2tTY2FsZXENSwZHP+AAAAAAAAB9h1UMbW1DSUZIZWFkZXJzcQ5dcQ8oTk5OTk5OZVUMYXJvbWF0aWNNb2RlcRBLBksBfYdVCnZkd0RlbnNpdHlxEUsGR0AUAAAAAAAAfYdVBmhpZGRlbnESSwaJfYdVDWFyb21hdGljQ29sb3JxE0sGTn2HVQ9yaWJib25TbW9vdGhpbmdxFEsGSwB9h1UJYXV0b2NoYWlucRVLBoh9h1UKcGRiVmVyc2lvbnEWSwZLAH2HVQhvcHRpb25hbHEXfXEYVQhvcGVuZWRBc3EZiIlLBihVMS9Vc2Vycy90ZW1lbHNvYi9Eb3dubG9hZHMvY29vcmRzL1MyLUExLURNQTEtMS54eXpxGk5OSwF0cRt9cRwoKFUqL1VzZXJzL3RlbWVsc29iL0Rvd25sb2Fkcy9jb29yZHMvMy1JLWQueHl6cR1OTksBdHEeXXEfSwJhKFUrL1VzZXJzL3RlbWVsc29iL0Rvd25sb2Fkcy9jb29yZHMvQTFXMy0xLnh5enEgTk5LAXRxIV1xIksEYShVMS9Vc2Vycy90ZW1lbHNvYi9Eb3dubG9hZHMvY29vcmRzL3dhdGVyLTYtQkstMS54eXpxI05OSwF0cSRdcSVLAGEoVTovVXNlcnMvdGVtZWxzb2IvRG93bmxvYWRzL2Nvb3Jkcy9jb3JhbnV1bGVuZV93YXRlci1vdXQueHl6cSZOTksBdHEnXXEoSwVhKFUrL1VzZXJzL3RlbWVsc29iL0Rvd25sb2Fkcy9jb29yZHMvMV8yLUExLnh5enEpTk5LAXRxKl1xK0sBYXWHh3NVD2xvd2VyQ2FzZUNoYWluc3EsSwaJfYdVCWxpbmVXaWR0aHEtSwZHP/AAAAAAAAB9h1UPcmVzaWR1ZUxhYmVsUG9zcS5LBksAfYdVBG5hbWVxL0sGWEsAAABTMlczLUlfZCBFW1JJLU1QMi9hVltEVFFdWi8vTVAyLzYtMzErRypdIC0xNjI3LjAwMTMgLTEsNjI3LjkxNjEgLTEsNjI4LjIxNzZ9cTAoWAYAAAA2LUJLLTFdcTFLAGFYIAAAAEFjZW5hcGh0aGVuZS0oSDJPKTMgSXNvbWVyIGVmcC0zXXEySwRhWDcAAAAxXzItQTEgRVtSSS1NUDIvYVZbRFRRXVpdCS04NTEuNjI3NAktODUyLjExMzUJLTg1Mi4yNzQ3XXEzSwFhWCEAAABwcmluY2lwYWwgbW9tZW50IGFsaWduZWQgZ2VvbWV0cnldcTRLBWFYSwAAAFMyLUExLURNQTFfRUZQLUQtMzAtcHc5MSAGBkVlPTAuMzEga2MvbSAGBkUwPTAuMjcga2MvbSAGBkcoMjk4Syk9IDAuMTkga2MvbV1xNUsDYXWHVQ9hcm9tYXRpY0Rpc3BsYXlxNksGiX2HVQ9yaWJib25TdGlmZm5lc3NxN0sGRz/pmZmZmZmafYdVCnBkYkhlYWRlcnNxOF1xOSh9cTp9cTt9cTx9cT19cT59cT9lVQNpZHNxQEsGSwBLAIZ9cUEoSwNLAIZdcUJLA2FLAksAhl1xQ0sCYUsFSwCGXXFESwVhSwFLAIZdcUVLAWFLBEsAhl1xRksEYXWHVQ5zdXJmYWNlT3BhY2l0eXFHSwZHv/AAAAAAAAB9h1UQYXJvbWF0aWNMaW5lVHlwZXFISwZLAn2HVRRyaWJib25IaWRlc01haW5jaGFpbnFJSwaIfYdVB2Rpc3BsYXlxSksGiH2HdS4='))
	resInfo = cPickle.loads(base64.b64decode('gAJ9cQEoVQZpbnNlcnRxAksGVQEgfYdVC2ZpbGxEaXNwbGF5cQNLBol9h1UEbmFtZXEESwZYAwAAAFVOS32HVQVjaGFpbnEFSwZYAQAAACB9h1UOcmliYm9uRHJhd01vZGVxBksGSwJ9h1UCc3NxB0sGiYmGfYdVCG1vbGVjdWxlcQhLBksAfXEJKEsBTl1xCksBSwGGcQthhksCTl1xDEsCSwGGcQ1hhksDTl1xDksDSwGGcQ9hhksETl1xEEsESwGGcRFhhksFTl1xEksFSwGGcRNhhnWHVQtyaWJib25Db2xvcnEUSwZOfYdVBWxhYmVscRVLBlgAAAAAfYdVCmxhYmVsQ29sb3JxFksGTn2HVQhmaWxsTW9kZXEXSwZLAX2HVQVpc0hldHEYSwaJfYdVC2xhYmVsT2Zmc2V0cRlLBk59h1UIcG9zaXRpb25xGl1xGyhLAUsBhnEcSwFLAYZxHUsBSwGGcR5LAUsBhnEfSwFLAYZxIEsBSwGGcSFlVQ1yaWJib25EaXNwbGF5cSJLBol9h1UIb3B0aW9uYWxxI31VBHNzSWRxJEsGSv////99h3Uu'))
	atomInfo = cPickle.loads(base64.b64decode('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'))
	bondInfo = cPickle.loads(base64.b64decode('gAJ9cQEoVQVjb2xvcnECS4NOfYdVBWF0b21zcQNdcQQoXXEFKEsMSw1lXXEGKEsMSw5lXXEHKEsPSxBlXXEIKEsPSxFlXXEJKEsSSxNlXXEKKEsSSxRlXXELKEsVSxZlXXEMKEsVSxdlXXENKEsYSxllXXEOKEsYSxplXXEPKEsbSxxlXXEQKEsbSx1lXXERKEseSx9lXXESKEseSyBlXXETKEseSyFlXXEUKEseSyJlXXEVKEshSyNlXXEWKEsiSyRlXXEXKEslSyZlXXEYKEslSydlXXEZKEsoSyllXXEaKEsoSyplXXEbKEsrSyxlXXEcKEsrSy1lXXEdKEsrSy5lXXEeKEsrSy9lXXEfKEssSzBlXXEgKEsuSzFlXXEhKEsySzNlXXEiKEsySzRlXXEjKEsySzVlXXEkKEsySzZlXXElKEszSzdlXXEmKEs1SzhlXXEnKEs5SzplXXEoKEs5SztlXXEpKEs8Sz1lXXEqKEs8Sz5lXXErKEs/S0BlXXEsKEs/S0FlXXEtKEtCS0NlXXEuKEtCS0RlXXEvKEtES0VlXXEwKEtES0ZlXXExKEtES0dlXXEyKEtIS0llXXEzKEtIS0plXXE0KEtKS0tlXXE1KEtKS0xlXXE2KEtKS01lXXE3KEtOS09lXXE4KEtOS1BlXXE5KEtOS1FlXXE6KEtOS1hlXXE7KEtPS1JlXXE8KEtPS1NlXXE9KEtPS1RlXXE+KEtQS1VlXXE/KEtQS1ZlXXFAKEtQS1dlXXFBKEtZS1plXXFCKEtZS1tlXXFDKEtZS1xlXXFEKEtZS11lXXFFKEteS19lXXFGKEteS2ZlXXFHKEteS2dlXXFIKEtfS2BlXXFJKEtfS2FlXXFKKEtgS2JlXXFLKEtgS3JlXXFMKEthS2NlXXFNKEthS3NlXXFOKEtiS2RlXXFPKEtiS3BlXXFQKEtjS2VlXXFRKEtjS3FlXXFSKEtkS2ZlXXFTKEtkS25lXXFUKEtlS2dlXXFVKEtlS29lXXFWKEtmS2hlXXFXKEtnS2llXXFYKEtoS2llXXFZKEtoS2plXXFaKEtoS2xlXXFbKEtpS2tlXXFcKEtpS21lXXFdKEt0S3VlXXFeKEt0S3ZlXXFfKEt3S3hlXXFgKEt3S3llXXFhKEt6S3tlXXFiKEt6S3xlXXFjKEt9S35lXXFkKEt9S4FlXXFlKEt9S4ZlXXFmKEt+S39lXXFnKEt+S4llXXFoKEt/S4BlXXFpKEt/S4JlXXFqKEuAS4FlXXFrKEuAS4VlXXFsKEuBS4plXXFtKEuCS4NlXXFuKEuCS5BlXXFvKEuDS4RlXXFwKEuDS5FlXXFxKEuES4VlXXFyKEuES5JlXXFzKEuFS4xlXXF0KEuGS4dlXXF1KEuGS45lXXF2KEuHS4hlXXF3KEuHS5NlXXF4KEuIS4llXXF5KEuIS5RlXXF6KEuJS49lXXF7KEuKS4tlXXF8KEuKS41lXXF9KEuLS4xlXXF+KEuLS5VlXXF/KEuMS5ZlXXGAKEuNS45lXXGBKEuNS5dlXXGCKEuOS5hlXXGDKEuPS5BlXXGEKEuPS5llXXGFKEuQS5plXXGGKEubS5xlXXGHKEubS51lZVUFbGFiZWxxiEuDWAAAAAB9h1UIaGFsZmJvbmRxiUuDiH2HVQZyYWRpdXNxikuDRz/JmZmgAAAAfYdVC2xhYmVsT2Zmc2V0cYtLg059h1UIZHJhd01vZGVxjEuDSwF9h1UIb3B0aW9uYWxxjX1VB2Rpc3BsYXlxjkuDSwJ9h3Uu'))
	crdInfo = cPickle.loads(base64.b64decode('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'))
	surfInfo = {'category': (6, u'main', {}), 'probeRadius': (6, 1.4, {}), 'pointSize': (6, 1, {}), 'name': [u'MSMS main surface of 6-BK-1', u'MSMS main surface of 1_2-A1 E[RI-MP2/aV[DTQ]Z]\t-851.6274\t-852.1135\t-852.2747', u'MSMS main surface of S2W3-I_d E[RI-MP2/aV[DTQ]Z//MP2/6-31+G*] -1627.0013 -1,627.9161 -1,628.2176', u'MSMS main surface of S2-A1-DMA1_EFP-D-30-pw91 \x06\x06Ee=0.31 kc/m \x06\x06E0=0.27 kc/m \x06\x06G(298K)= 0.19 kc/m', u'MSMS main surface of Acenaphthene-(H2O)3 Isomer efp-3', u'MSMS main surface of principal moment aligned geometry'], 'density': (6, 2, {}), 'colorMode': (6, 1, {}), 'useLighting': (6, True, {}), 'transparencyBlendMode': (6, 1, {}), 'molecule': [0, 1, 2, 3, 4, 5], 'smoothLines': (6, False, {}), 'lineWidth': (6, 1, {}), 'allComponents': (6, True, {}), 'twoSidedLighting': (6, True, {}), 'customVisibility': [None, None, None, None, None, None], 'drawMode': (6, 1, {}), 'display': (6, True, {}), 'customColors': [(0, None, {}), (0, None, {}), (0, None, {}), (0, None, {}), (0, None, {}), (0, None, {})]}
	vrmlInfo = {'subid': (0, None, {}), 'display': (0, None, {}), 'id': (0, None, {}), 'vrmlString': [], 'name': (0, None, {})}
	colors = {u'Ru': ((0.141176, 0.560784, 0.560784), 1, u'default'), u'Re': ((0.14902, 0.490196, 0.670588), 1, u'default'), u'Rf': ((0.8, 0, 0.34902), 1, u'default'), u'Ra': ((0, 0.490196, 0), 1, u'default'), u'Rb': ((0.439216, 0.180392, 0.690196), 1, u'default'), u'Rn': ((0.258824, 0.509804, 0.588235), 1, u'default'), u'Rh': ((0.0392157, 0.490196, 0.54902), 1, u'default'), u'Be': ((0.760784, 1, 0), 1, u'default'), u'Ba': ((0, 0.788235, 0), 1, u'default'), u'Bh': ((0.878431, 0, 0.219608), 1, u'default'), u'Bi': ((0.619608, 0.309804, 0.709804), 1, u'default'), u'Bk': ((0.541176, 0.309804, 0.890196), 1, u'default'), u'Br': ((0.65098, 0.160784, 0.160784), 1, u'default'), u'H': ((1, 1, 1), 1, u'default'), u'P': ((1, 0.501961, 0), 1, u'default'), u'Os': ((0.14902, 0.4, 0.588235), 1, u'default'), u'Es': ((0.701961, 0.121569, 0.831373), 1, u'default'), u'Hg': ((0.721569, 0.721569, 0.815686), 1, u'default'), u'Ge': ((0.4, 0.560784, 0.560784), 1, u'default'), u'Gd': ((0.270588, 1, 0.780392), 1, u'default'), u'Ga': ((0.760784, 0.560784, 0.560784), 1, u'default'), u'Pr': ((0.85098, 1, 0.780392), 1, u'default'),
u'Pt': ((0.815686, 0.815686, 0.878431), 1, u'default'), u'Pu': ((0, 0.419608, 1), 1, u'default'), u'C': ((0.564706, 0.564706, 0.564706), 1, u'default'), u'Pb': ((0.341176, 0.34902, 0.380392), 1, u'default'), u'Pa': ((0, 0.631373, 1), 1, u'default'), u'Pd': ((0, 0.411765, 0.521569), 1, u'default'), u'Xe': ((0.258824, 0.619608, 0.690196), 1, u'default'), u'Po': ((0.670588, 0.360784, 0), 1, u'default'), u'Pm': ((0.639216, 1, 0.780392), 1, u'default'), u'Hs': ((0.901961, 0, 0.180392), 1, u'default'), u'Ho': ((0, 1, 0.611765), 1, u'default'), u'Hf': ((0.301961, 0.760784, 1), 1, u'default'), u'Mo': ((0.329412, 0.709804, 0.709804), 1, u'default'), u'He': ((0.85098, 1, 1), 1, u'default'), u'Md': ((0.701961, 0.0509804, 0.65098), 1, u'default'), u'Mg': ((0.541176, 1, 0), 1, u'default'), u'K': ((0.560784, 0.25098, 0.831373), 1, u'default'), u'Mn': ((0.611765, 0.478431, 0.780392), 1, u'default'), u'O': ((1, 0.0509804, 0.0509804), 1, u'default'), u'Mt': ((0.921569, 0, 0.14902), 1, u'default'), u'S': ((1, 1, 0.188235), 1, u'default'), u'W': ((0.129412, 0.580392, 0.839216), 1, u'default'),
u'sky blue': ((0.529412, 0.807843, 0.921569), 1, u'default'), u'Zn': ((0.490196, 0.501961, 0.690196), 1, u'default'), u'plum': ((0.866667, 0.627451, 0.866667), 1, u'default'), u'Eu': ((0.380392, 1, 0.780392), 1, u'default'), u'Zr': ((0.580392, 0.878431, 0.878431), 1, u'default'), u'Er': ((0, 0.901961, 0.458824), 1, u'default'), u'Ni': ((0.313725, 0.815686, 0.313725), 1, u'default'), u'No': ((0.741176, 0.0509804, 0.529412), 1, u'default'), u'Na': ((0.670588, 0.360784, 0.94902), 1, u'default'), u'Nb': ((0.45098, 0.760784, 0.788235), 1, u'default'), u'Nd': ((0.780392, 1, 0.780392), 1, u'default'), u'Ne': ((0.701961, 0.890196, 0.960784), 1, u'default'), u'Np': ((0, 0.501961, 1), 1, u'default'), u'Fr': ((0.258824, 0, 0.4), 1, u'default'), u'Fe': ((0.878431, 0.4, 0.2), 1, u'default'), u'Fm': ((0.701961, 0.121569, 0.729412), 1, u'default'), u'B': ((1, 0.709804, 0.709804), 1, u'default'), u'F': ((0.564706, 0.878431, 0.313725), 1, u'default'), u'Sr': ((0, 1, 0), 1, u'default'), u'N': ((0.188235, 0.313725, 0.972549), 1, u'default'), u'Kr': ((0.360784, 0.721569, 0.819608), 1, u'default'),
u'Si': ((0.941176, 0.784314, 0.627451), 1, u'default'), u'Sn': ((0.4, 0.501961, 0.501961), 1, u'default'), u'Sm': ((0.560784, 1, 0.780392), 1, u'default'), u'V': ((0.65098, 0.65098, 0.670588), 1, u'default'), u'Sc': ((0.901961, 0.901961, 0.901961), 1, u'default'), u'Sb': ((0.619608, 0.388235, 0.709804), 1, u'default'), u'Sg': ((0.85098, 0, 0.270588), 1, u'default'), u'Se': ((1, 0.631373, 0), 1, u'default'), u'Co': ((0.941176, 0.564706, 0.627451), 1, u'default'), u'Cm': ((0.470588, 0.360784, 0.890196), 1, u'default'), u'Cl': ((0.121569, 0.941176, 0.121569), 1, u'default'), u'Ca': ((0.239216, 1, 0), 1, u'default'), u'Cf': ((0.631373, 0.211765, 0.831373), 1, u'default'), u'Ce': ((1, 1, 0.780392), 1, u'default'), u'Cd': ((1, 0.85098, 0.560784), 1, u'default'), u'Lu': ((0, 0.670588, 0.141176), 1, u'default'), u'light green': ((0.564706, 0.933333, 0.564706), 1, u'default'), u'Cs': ((0.341176, 0.0901961, 0.560784), 1, u'default'), u'Cr': ((0.541176, 0.6, 0.780392), 1, u'default'), u'Cu': ((0.784314, 0.501961, 0.2), 1, u'default'), u'La': ((0.439216, 0.831373, 1), 1, u'default'),
u'Li': ((0.8, 0.501961, 1), 1, u'default'), u'Tl': ((0.65098, 0.329412, 0.301961), 1, u'default'), u'Tm': ((0, 0.831373, 0.321569), 1, u'default'), u'Lr': ((0.780392, 0, 0.4), 1, u'default'), u'Th': ((0, 0.729412, 1), 1, u'default'), u'Ti': ((0.74902, 0.760784, 0.780392), 1, u'default'), u'tan': ((0.823529, 0.705882, 0.54902), 1, u'default'), u'Te': ((0.831373, 0.478431, 0), 1, u'default'), u'Tb': ((0.188235, 1, 0.780392), 1, u'default'), u'Tc': ((0.231373, 0.619608, 0.619608), 1, u'default'), u'Ta': ((0.301961, 0.65098, 1), 1, u'default'), u'Yb': ((0, 0.74902, 0.219608), 1, u'default'), u'Db': ((0.819608, 0, 0.309804), 1, u'default'), u'Dy': ((0.121569, 1, 0.780392), 1, u'default'), u'I': ((0.580392, 0, 0.580392), 1, u'default'), u'salmon': ((0.980392, 0.501961, 0.447059), 1, u'default'), u'U': ((0, 0.560784, 1), 1, u'default'), u'Y': ((0.580392, 1, 1), 1, u'default'), u'Ac': ((0.439216, 0.670588, 0.980392), 1, u'default'), u'Ag': ((0.752941, 0.752941, 0.752941), 1, u'default'), u'Ir': ((0.0901961, 0.329412, 0.529412), 1, u'default'), u'Am': ((0.329412, 0.360784, 0.94902), 1, u'default'),
u'Al': ((0.74902, 0.65098, 0.65098), 1, u'default'), u'As': ((0.741176, 0.501961, 0.890196), 1, u'default'), u'Ar': ((0.501961, 0.819608, 0.890196), 1, u'default'), u'Au': ((1, 0.819608, 0.137255), 1, u'default'), u'At': ((0.458824, 0.309804, 0.270588), 1, u'default'), u'In': ((0.65098, 0.458824, 0.45098), 1, u'default'), u'light gray': ((0.827451, 0.827451, 0.827451), 1, u'default')}
	materials = {u'default': ((0.85, 0.85, 0.85), 30)}
	pbInfo = {'category': [u'distance monitor', u'hydrogen bonds'], 'bondInfo': [{'color': (0, None, {}), 'atoms': [], 'label': (0, None, {}), 'halfbond': (0, None, {}), 'labelColor': (0, None, {}), 'labelOffset': (0, None, {}), 'drawMode': (0, None, {}), 'display': (0, None, {})}, {'color': (27, 13, {}), 'atoms': [[14, 15], [16, 18], [17, 27], [20, 21], [22, 27], [25, 12], [29, 24], [35, 37], [36, 40], [39, 31], [42, 32], [48, 53], [49, 52], [55, 57], [56, 60], [59, 47], [62, 63], [65, 54], [73, 70], [88, 77], [88, 75], [81, 71], [90, 75], [93, 69], [118, 119], [120, 122], [123, 116]], 'label': (27, u'', {}), 'halfbond': (27, False, {}), 'labelColor': (27, None, {}), 'labelOffset': (27, chimera.Vector(-1e+99, 0.0, 0.0), {chimera.Vector(-1e+99, 0.0, 0.0): [7], chimera.Vector(-1e+99, 0.0, 0.0): [21], chimera.Vector(-1e+99, 0.0, 0.0): [22], chimera.Vector(-1e+99, 0.0, 0.0): [23], chimera.Vector(-1e+99, 0.0, 0.0): [24], chimera.Vector(-1e+99, 0.0, 0.0): [2], chimera.Vector(-1e+99, 0.0, 0.0): [4], chimera.Vector(-1e+99, 0.0, 0.0): [26], chimera.Vector(-1e+99, 0.0, 0.0): [9], chimera.Vector(-1e+99, 0.0, 0.0): [1], chimera.Vector(-1e+99, 0.0, 0.0): [25], chimera.Vector(-1e+99, 0.0, 0.0): [13], chimera.Vector(-1e+99, 0.0, 0.0): [0], chimera.Vector(-1e+99, 0.0, 0.0): [10], chimera.Vector(-1e+99, 0.0, 0.0): [11], chimera.Vector(-1e+99, 0.0, 0.0): [12], chimera.Vector(-1e+99, 0.0, 0.0): [3], chimera.Vector(-1e+99, 0.0, 0.0): [14], chimera.Vector(-1e+99, 0.0, 0.0): [15], chimera.Vector(-1e+99, 0.0, 0.0): [16], chimera.Vector(-1e+99, 0.0, 0.0): [17], chimera.Vector(-1e+99, 0.0, 0.0): [18], chimera.Vector(-1e+99, 0.0, 0.0): [19], chimera.Vector(-1e+99, 0.0, 0.0): [6], chimera.Vector(-1e+99, 0.0, 0.0): [20], chimera.Vector(-1e+99, 0.0, 0.0): [8]}),
'drawMode': (27, 0, {}), 'display': (27, 2, {})}], 'lineType': (2, 1, {2: [0]}), 'color': (2, 11, {12: [1]}), 'optional': {'fixedLabels': (True, False, (2, False, {None: [1]}))}, 'display': (2, True, {}), 'showStubBonds': (2, False, {}), 'lineWidth': (2, 1, {}), 'stickScale': (2, 1, {}), 'id': [-2, -1]}
	modelAssociations = {}
	colorInfo = (16, (u'', (0, 0, 1, 1)), {(u'H', (1, 1, 1, 1)): [7], (u'S', (1, 1, 0.188235, 1)): [8], (u'light green', (0.564706, 0.933333, 0.564706, 1)): [3], (u'N', (0.188235, 0.313725, 0.972549, 1)): [9], (u'green', (0, 1, 0, 1)): [15], (u'O', (1, 0.0509804, 0.0509804, 1)): [6], (u'sky blue', (0.529412, 0.807843, 0.921569, 1)): [1], (u'tan', (0.823529, 0.705882, 0.54902, 1)): [0], (u'plum', (0.866667, 0.627451, 0.866667, 1)): [2], (u'light gray', (0.827451, 0.827451, 0.827451, 1)): [5], (u'salmon', (0.980392, 0.501961, 0.447059, 1)): [4], (u'white', (1, 1, 1, 1)): [14], (u'C', (0.564706, 0.564706, 0.564706, 1)): [10], (u'gray', (0.745, 0.745, 0.745, 1)): [12]})
	viewerInfo = {'cameraAttrs': {'center': (9.3963327286629, -5.2188747823001, -0.095359999999999), 'fieldOfView': 25.50160439021, 'nearFar': (16.239534862196, -16.430254862196), 'ortho': False, 'eyeSeparation': 50.8, 'focal': -0.095359999999999}, 'viewerAttrs': {'silhouetteColor': None, 'clipping': False, 'showSilhouette': True, 'showShadows': False, 'viewSize': 17.330834895913, 'labelsOnTop': True, 'depthCueRange': (0.5, 1), 'silhouetteWidth': 2, 'singleLayerTransparency': True, 'shadowTextureSize': 2048, 'backgroundImage': [None, 1, 2, 1, 0, 0], 'backgroundGradient': [(None, [(0.941176, 0.941176, 0.941176, 1), (0.741176, 0.741176, 0.741176, 1), (0.388235, 0.388235, 0.388235, 1)], 1), 1, 0, 0], 'depthCue': False, 'highlight': 0, 'scaleFactor': 1.2070993261352, 'angleDependentTransparency': True, 'backgroundMethod': 0}, 'viewerHL': 15, 'cameraMode': 'mono', 'detail': 5, 'viewerFog': None, 'viewerBG': 14}

	replyobj.status("Initializing session restore...", blankAfter=0,
		secondary=True)
	from SimpleSession.versions.v65 import expandSummary
	init(dict(enumerate(expandSummary(colorInfo))))
	replyobj.status("Restoring colors...", blankAfter=0,
		secondary=True)
	restoreColors(colors, materials)
	replyobj.status("Restoring molecules...", blankAfter=0,
		secondary=True)
	restoreMolecules(molInfo, resInfo, atomInfo, bondInfo, crdInfo)
	replyobj.status("Restoring surfaces...", blankAfter=0,
		secondary=True)
	restoreSurfaces(surfInfo)
	replyobj.status("Restoring VRML models...", blankAfter=0,
		secondary=True)
	restoreVRML(vrmlInfo)
	replyobj.status("Restoring pseudobond groups...", blankAfter=0,
		secondary=True)
	restorePseudoBondGroups(pbInfo)
	replyobj.status("Restoring model associations...", blankAfter=0,
		secondary=True)
	restoreModelAssociations(modelAssociations)
	replyobj.status("Restoring camera...", blankAfter=0,
		secondary=True)
	restoreViewer(viewerInfo)
Ejemplo n.º 21
0
def showTurn(turn, color, width, thickness):
    pt = []
    for r in turn:
        a = r.findAtom('CA')
        if not a:
            continue
        pt.append(a.coord())
    size = max(width, thickness)
    try:
        c, d, n, b = ssMap[turn[0]]
        cv = chimera.Point(c[0], c[1], c[2])
        dv = chimera.Vector(d[0], d[1], d[2])
        nv = chimera.Vector(n[0], n[1], n[2])
        bv = chimera.Vector(b[0], b[1], b[2])
        startDir = dv
        startNormals = (nv, bv)
        pt.insert(0, cv)
    except KeyError:
        startDir = None
        startNormals = None
    try:
        c, d, n, b = ssMap[turn[-1]]
        cv = chimera.Point(c[0], c[1], c[2])
        dv = chimera.Vector(d[0], d[1], d[2])
        nv = chimera.Vector(n[0], n[1], n[2])
        bv = chimera.Vector(b[0], b[1], b[2])
        endDir = -dv
        endNormals = (nv, bv)
        pt.append(cv)
    except KeyError:
        endDir = None
        endNormals = None
    if len(pt) < 3:
        return []
    if len(pt) == 3:
        # need at least 4 points for vrml.Extrustion
        if startDir:
            pt.insert(1, chimera.Point(pt[:2]))
        if endDir:
            pt.insert(-1, chimera.Point(pt[-2:]))
    dir = []
    if startDir is None:
        dir.append(pt[1] - pt[0])
    else:
        dir.append(startDir)
    for i in range(1, len(pt) - 1):
        dir.append(pt[i + 1] - pt[i - 1])
    if endDir is None:
        dir.append(pt[-1] - pt[-2])
    else:
        dir.append(endDir)
    offsets = [[0.0, thickness], [width, 0.0], [0.0, -thickness],
               [-width, 0.0]]
    edges = []
    for i in offsets:
        edges.append([])
    if startNormals is not None:
        normal, binormal = startNormals
    else:
        normal, binormal = getEndNormals(pt[0], pt[1], pt[2])
    addEdges(edges, offsets, pt[0], normal, binormal)
    for i in range(1, len(pt) - 1):
        try:
            n, b = getInteriorNormals(pt[i], pt[i - 1], pt[i + 1])
            normal, binormal = minimizeTwist(dir[i], n, b, normal, binormal)
        except ValueError:
            # This can happen if the three points are linear
            # We just inherit the normals from the previous triple
            pass
        addEdges(edges, offsets, pt[i], normal, binormal)
    if endNormals is not None:
        n, b = endNormals
    else:
        n, b = getEndNormals(pt[-1], pt[-3], pt[-2])
    normal, binormal = minimizeTwist(dir[-1], n, b, normal, binormal)
    addEdges(edges, offsets, pt[-1], normal, binormal)
    rgba = color.get().rgba()
    ext = vrml.Extrusion(color=rgba[:3], edges=edges)
    if rgba[3] < 1.0:
        ext.transparency = 1.0 - rgba[3]
    return [ext]
Ejemplo n.º 22
0
    def Icos(self):

        imod = None
        axmod = None
        for m in chimera.openModels.list():
            if m.name == "Icosahedron":
                imod = m
            if m.name == "Icosahedron_Axes":
                axmod = m

        if axmod == None:
            pass
        else:
            chimera.openModels.close([axmod])

        if imod == None:
            self.umsg("No Icosahedron model found - please follow step 2.")
            return

        if len(imod.surfacePieces) <> 1:
            self.umsg("Please set 'Subdivision factor' to 1")
            return

        print len(imod.surfacePieces[0].geometry[1]), " tris"
        print len(imod.surfacePieces[0].geometry[0]), " verts"

        if len(imod.surfacePieces[0].geometry[1]) <> 20:
            self.umsg("Please set 'Subdivision factor' to 1")
            return

        self.umsg("Building axes...")

        import _surface
        surf_mod = _surface.SurfaceModel()
        chimera.openModels.add([surf_mod], sameAs=imod)

        import axes
        reload(axes)

        self.icos_vecs = []
        from numpy import arccos, pi

        for p in imod.surfacePieces:
            v, t = p.geometry[0], p.geometry[1]
            #print len(v), len(t)

            #for pt in v :
            #    print " - pt: ", pt

            for tri in t:
                #print " - tri: ", tri,
                p1 = v[tri[0]]
                p2 = v[tri[1]]
                p3 = v[tri[2]]
                mp = (p1 + p2 + p3) / 3.0
                pv = chimera.Vector(mp[0], mp[1], mp[2])
                r = pv.length
                pv.normalize()
                #print mp
                self.icos_vecs.append(pv)

                cyl = axes.AddCylinderSolid(chimera.Vector(0, 0, 0), pv, r,
                                            (.6, .4, .4, 1), 10.0, surf_mod)
                cyl.name = "Icosahedron_Axes"

                p1v = chimera.Vector(p1[0], p1[1], p1[2])
                p1v.normalize()
                p2v = chimera.Vector(p2[0], p2[1], p2[2])
                p2v.normalize()
                p3v = chimera.Vector(p3[0], p3[1], p3[2])
                p3v.normalize()

                a1 = arccos(p1v * pv) * 180.0 / pi
                a2 = arccos(p2v * pv) * 180.0 / pi
                a3 = arccos(p3v * pv) * 180.0 / pi

                a12 = arccos(p1v * p2v) * 180.0 / pi

                # print a1, a2, a3, a12

        minAng = 1e9
        pv1 = self.icos_vecs[0]
        for pv2 in self.icos_vecs[1:]:
            dp = pv1 * pv2
            ang = arccos(dp)
            #print ang * 180.0 / pi

        self.umsg("Axes built.")
Ejemplo n.º 23
0
def rotate(a, b, c, angle, molecule):
    axis = chimera.Vector(a, b, c)
    xf = chimera.Xform.rotation(axis, angle)
    molecule.openState.globalXform(xf)
Ejemplo n.º 24
0
    def MakeHist(self):

        segMap = segmentation_map()
        if segMap == None:
            self.umsg("Please select a map in the Segment Map Dialog")
            return

        import axes
        reload(axes)
        pts, weights = axes.map_points(segMap)
        print len(pts)

        COM, U, S, V = prAxes(pts)

        print " - COM : ", COM

        smod = current_segmentation()
        if smod == None:
            self.umsg(
                "Please select a Current Segmentation in the Segment Map dialog"
            )
            return

        print "Seg has %d regions" % (len(smod.regions))

        if hasattr(self, 'icos_vecs'):
            self.umsg("Making (icosahedrally corrected) histogram...")
        else:
            self.umsg("Making histogram...")

        nregs, last = len(smod.regions), 0
        regs = list(smod.regions)
        distByReg = {}
        for ri, r in enumerate(regs):

            if 0 and r.surface_piece != None:
                if r.surface_piece.display == False:
                    print "i" + ri,
                    continue
            try:
                p = r.center_of_points()
            except:
                print "+"
                continue

            rvec = chimera.Vector(p[0], p[1], p[2]) - chimera.Vector(
                COM[0], COM[1], COM[2])
            rad = 0.0

            if hasattr(self, 'icos_vecs'):
                for ivec in self.icos_vecs:
                    irad = ivec * rvec
                    if irad > rad:
                        rad = irad
            else:
                rad = rvec.length

            distByReg[r] = rad
            at = int(numpy.floor(10.0 * (ri + 1) / nregs))
            if at > last:
                #print at,
                if hasattr(self, 'icos_vecs'):
                    self.status(
                        "Making (icosahedrally corrected) histogram %d regions, at %d"
                        % (len(regs), ri + 1))
                else:
                    self.status("Making histogram %d regions, at %d" %
                                (len(regs), ri + 1))
                last = at
                at += 1

        print ""

        dists = distByReg.values()
        maxDist = max(dists) + 0.01
        minDist = min(dists)
        nbins = int(self.numBins.get())
        dr = (maxDist - minDist) / float(nbins)
        print "%d dists - max %.2f, min %.2f, nb %d, dr %.2f" % (
            len(dists), maxDist, minDist, nbins, dr)

        bins = []
        for i in range(nbins):
            bins.append([])

        print "bad bins: ",
        for regm, rad in distByReg.iteritems():
            bini = int(numpy.floor((rad - minDist) / dr))
            if bini >= len(bins):
                print bini,
                bini = len(bins) - 1
            bins[bini].append(regm)

        print ""

        if 0:
            f = open("rads.txt", "w")
            for k, regs in enumerate(bins):
                v = len(regs)
                vmin = minDist + k * dr
                vmax = minDist + (k + 1) * dr
                rm = .5 * (vmin + vmax)
                vn = v / (4 * 3.14 * rm * rm)
                f.write("%d\t%.2f\t%.2f\t%d\t%f\n" % (k, vmin, vmax, v, vn))
            f.close()

        self.distByReg = distByReg

        #print self.distByReg

        def save(okay, dialog):
            if okay:
                paths = dialog.getPaths()
                if paths:
                    path = paths[0]
                    self.umsg("Saved plot to: " + path)
                    f = open(path, "w")
                    for k, regs in enumerate(bins):
                        v = len(regs)
                        vmin = minDist + k * dr
                        vmax = minDist + (k + 1) * dr
                        rm = .5 * (vmin + vmax)
                        vn = v / (4 * 3.14 * rm * rm)
                        f.write("%.2f,%d\n" % (vmin, v))
                    f.close()

        from OpenSave import SaveModeless
        SaveModeless(title='Save Histogram',
                     filters=[('TXT', '*.txt', '.txt')],
                     initialfile="dist_hist.txt",
                     command=save)
Ejemplo n.º 25
0
 def _setDirection(self, opt):
     if self.light:
         import chimera
         self.light.direction = chimera.Vector(*opt.get())
         self.saveui.setItemChanged(True)
Ejemplo n.º 26
0
def restoreCoreModels():
    from SimpleSession.versions.v65 import init, restoreViewer, \
         restoreMolecules, restoreColors, restoreSurfaces, \
         restoreVRML, restorePseudoBondGroups, restoreModelAssociations
    molInfo = cPickle.loads(
        base64.b64decode(
            'gAJ9cQEoVRFyaWJib25JbnNpZGVDb2xvcnECSwNOfYdVCWJhbGxTY2FsZXEDSwNHP9AAAAAAAAB9h1UJcG9pbnRTaXplcQRLA0c/8AAAAAAAAH2HVQVjb2xvcnEFSwNLAH1xBihLAV1xB0sBYUsCXXEISwJhdYdVCnJpYmJvblR5cGVxCUsDSwB9h1UKc3RpY2tTY2FsZXEKSwNHP/AAAAAAAAB9h1UMbW1DSUZIZWFkZXJzcQtdcQwoTk5OZVUMYXJvbWF0aWNNb2RlcQ1LA0sBfYdVCnZkd0RlbnNpdHlxDksDR0AUAAAAAAAAfYdVBmhpZGRlbnEPSwOJfYdVDWFyb21hdGljQ29sb3JxEEsDTn2HVQ9yaWJib25TbW9vdGhpbmdxEUsDSwB9h1UJYXV0b2NoYWlucRJLA4h9h1UKcGRiVmVyc2lvbnETSwNLAn2HVQhvcHRpb25hbHEUfXEVVQhvcGVuZWRBc3EWiIlLAyhVEG91dGxpZXIuMDAzMS5wZGJxF05OSwF0cRh9cRkoKFUQb3V0bGllci4wNTkyLnBkYnEaTk5LAXRxG11xHEsBYShVEG91dGxpZXIuMTM0Mi5wZGJxHU5OSwF0cR5dcR9LAmF1h4dzVQ9sb3dlckNhc2VDaGFpbnNxIEsDiX2HVQlsaW5lV2lkdGhxIUsDRz/wAAAAAAAAfYdVD3Jlc2lkdWVMYWJlbFBvc3EiSwNLAH2HVQRuYW1lcSNLA1gQAAAAb3V0bGllci4xMzQyLnBkYn1xJChYEAAAAG91dGxpZXIuMDU5Mi5wZGJdcSVLAWFYEAAAAG91dGxpZXIuMDAzMS5wZGJdcSZLAGF1h1UPYXJvbWF0aWNEaXNwbGF5cSdLA4l9h1UPcmliYm9uU3RpZmZuZXNzcShLA0c/6ZmZmZmZmn2HVQpwZGJIZWFkZXJzcSldcSoofXErWAUAAABUSVRMRV1xLFg7AAAAVElUTEUgICAgIFRISVMgUERCIEZJTEUgSVMgR0VORVJBVEVEIEJZICJtb2wybW9sIiAtLWxmemhhby5xLWFzfXEuWAUAAABUSVRMRV1xL1g7AAAAVElUTEUgICAgIFRISVMgUERCIEZJTEUgSVMgR0VORVJBVEVEIEJZICJtb2wybW9sIiAtLWxmemhhby5xMGFzfXExWAUAAABUSVRMRV1xMlg7AAAAVElUTEUgICAgIFRISVMgUERCIEZJTEUgSVMgR0VORVJBVEVEIEJZICJtb2wybW9sIiAtLWxmemhhby5xM2FzZVUDaWRzcTRLA0sCSwCGfXE1KEsBSwCGXXE2SwFhSwBLAIZdcTdLAGF1h1UOc3VyZmFjZU9wYWNpdHlxOEsDR7/wAAAAAAAAfYdVEGFyb21hdGljTGluZVR5cGVxOUsDSwJ9h1UUcmliYm9uSGlkZXNNYWluY2hhaW5xOksDiH2HVQdkaXNwbGF5cTtLA4h9h3Uu'
        ))
    resInfo = cPickle.loads(
        base64.b64decode(
            'gAJ9cQEoVQZpbnNlcnRxAksDVQEgfYdVC2ZpbGxEaXNwbGF5cQNLA4l9h1UEbmFtZXEESwNYAwAAAExJR32HVQVjaGFpbnEFSwNYAQAAAEF9h1UOcmliYm9uRHJhd01vZGVxBksDSwJ9h1UCc3NxB0sDiYmGfYdVCG1vbGVjdWxlcQhLA0sAfXEJKEsBTl1xCksBSwGGcQthhksCTl1xDEsCSwGGcQ1hhnWHVQtyaWJib25Db2xvcnEOSwNLA32HVQVsYWJlbHEPSwNYAAAAAH2HVQpsYWJlbENvbG9ycRBLA0sDfYdVCGZpbGxNb2RlcRFLA0sBfYdVBWlzSGV0cRJLA4l9h1ULbGFiZWxPZmZzZXRxE0sDTn2HVQhwb3NpdGlvbnEUXXEVKEsBSwGGcRZLAUsBhnEXSwFLAYZxGGVVDXJpYmJvbkRpc3BsYXlxGUsDiX2HVQhvcHRpb25hbHEafVUEc3NJZHEbSwNK/////32HdS4='
        ))
    atomInfo = cPickle.loads(
        base64.b64decode(
            'gAJ9cQEoVQdyZXNpZHVlcQJLEksDfXEDKEsETl1xBEsGSwaGcQVhhksFTl1xBksMSwaGcQdhhnWHVQh2ZHdDb2xvcnEISxJOfYdVBG5hbWVxCUsSWAEAAABIfXEKWAEAAABPXXELKEsASwNLBksJSwxLD2Vzh1UDdmR3cQxLEol9h1UOc3VyZmFjZURpc3BsYXlxDUsSiX2HVQVjb2xvcnEOSxJLA31xDyhLBF1xEChLA0sGSw9lSwVdcREoSwRLBUsHSwhLEEsRZXWHVQlpZGF0bVR5cGVxEksSiX2HVQZhbHRMb2NxE0sSVQB9h1UFbGFiZWxxFEsSWAAAAAB9h1UOc3VyZmFjZU9wYWNpdHlxFUsSR7/wAAAAAAAAfYdVB2VsZW1lbnRxFksSSwF9cRdLCF1xGChLAEsDSwZLCUsMSw9lc4dVCmxhYmVsQ29sb3JxGUsSSwN9cRpOXXEbKEsDSwRLBUsGSwdLCEsPSxBLEWVzh1UMc3VyZmFjZUNvbG9ycRxLEksDfXEdTl1xHihLA0sESwVLBksHSwhLD0sQSxFlc4dVD3N1cmZhY2VDYXRlZ29yeXEfSxJYBAAAAG1haW59h1UGcmFkaXVzcSBLEkc/8AAAAAAAAH1xIUc/+AAAAAAAAF1xIihLAEsDSwZLCUsMSw9lc4dVCmNvb3JkSW5kZXhxI11xJChLAEsGhnElSwBLBoZxJksASwaGcSdlVQtsYWJlbE9mZnNldHEoSxJOfYdVEm1pbmltdW1MYWJlbFJhZGl1c3EpSxJHAAAAAAAAAAB9h1UIZHJhd01vZGVxKksSSwJ9h1UIb3B0aW9uYWxxK31xLChVDHNlcmlhbE51bWJlcnEtiIhdcS4oSwFLBoZxL0sBSwaGcTBLAUsGhnExZYdVB2JmYWN0b3JxMoiJSxJHAAAAAAAAAAB9h4dVCW9jY3VwYW5jeXEziIlLEkc/8AAAAAAAAH2Hh3VVB2Rpc3BsYXlxNEsSiH2HdS4='
        ))
    bondInfo = cPickle.loads(
        base64.b64decode(
            'gAJ9cQEoVQVjb2xvcnECSwxLA31xA05dcQQoSwJLA0sESwVLCksLZXOHVQVhdG9tc3EFXXEGKF1xByhLBksHZV1xCChLBksIZV1xCShLCUsKZV1xCihLCUsLZV1xCyhLDEsNZV1xDChLDEsOZV1xDShLD0sQZV1xDihLD0sRZV1xDyhLEksTZV1xEChLEksUZV1xEShLFUsWZV1xEihLFUsXZWVVBWxhYmVscRNLDFgAAAAAfYdVCGhhbGZib25kcRRLDIh9h1UGcmFkaXVzcRVLDEc/yZmZoAAAAH2HVQtsYWJlbE9mZnNldHEWSwxOfYdVCGRyYXdNb2RlcRdLDEsBfYdVCG9wdGlvbmFscRh9VQdkaXNwbGF5cRlLDEsCfYd1Lg=='
        ))
    crdInfo = cPickle.loads(
        base64.b64decode(
            'gAJ9cQEoSwB9cQIoSwBdcQMoRz/0j1wo9cKPR7/xZFocrAgxR8ADwIMSbpeNh3EERz/mbpeNT987R7/aLQ5WBBiTR8AA87ZFocrBh3EFRz/8NT987ZFoR7/k/fO2RaHLR8AJdLxqfvnbh3EGR0AHj1wo9cKPRz/cWhysCDEnR8ANyLQ5WBBih3EHR0ADJul41P30Rz/rItDlYEGJR8ARlocrAgxKh3EIR0ADl41P3ztkR7/U3S8an753R8ALcKPXCj1xh3EJZVUGYWN0aXZlcQpLAHVLAX1xCyhLAF1xDChHv8Q5WBBiTdNHP7fO2RaHKwJHP+141P3ztkaHcQ1Hv4BiTdLxqfxHP+1P3ztkWh1HP/ZJul41P32HcQ5Hv8xqfvnbItFHv+Jul41P3ztHP/m6XjU/fO6HcQ9HP8OVgQYk3S9HP/ZBiTdLxqhHQAayLQ5WBBmHcRBHv9KfvnbItDlHP/crAgxJul5HP//KwIMSbpiHcRFHP/A5WBBiTdNHP/AxJul41P5HQAUcrAgxJumHcRJlaApLAHVLAn1xEyhLAF1xFChHP/DlYEGJN0xHQBAi0OVgQYlHQBnfO2RaHKyHcRVHP/g9cKPXCj1HQBN3ztkWhytHQBlYEGJN0vKHcRZHP/rQ5WBBiTdHQArlYEGJN0xHQBiyLQ5WBBmHcRdHP/9YEGJN0vJHP/qTdLxqfvpHQBmhysCDEm+HcRhHQAAGJN0vGqBHQAPztkWhysFHQBuJN0vGp/CHcRlHQANgQYk3S8dHP/CDEm6XjVBHQBveNT987ZGHcRplaApLAHV1Lg=='
        ))
    surfInfo = {
        'category': (0, None, {}),
        'probeRadius': (0, None, {}),
        'pointSize': (0, None, {}),
        'name': [],
        'density': (0, None, {}),
        'colorMode': (0, None, {}),
        'useLighting': (0, None, {}),
        'transparencyBlendMode': (0, None, {}),
        'molecule': [],
        'smoothLines': (0, None, {}),
        'lineWidth': (0, None, {}),
        'allComponents': (0, None, {}),
        'twoSidedLighting': (0, None, {}),
        'customVisibility': [],
        'drawMode': (0, None, {}),
        'display': (0, None, {}),
        'customColors': []
    }
    vrmlInfo = {
        'subid': (0, None, {}),
        'display': (0, None, {}),
        'id': (0, None, {}),
        'vrmlString': [],
        'name': (0, None, {})
    }
    colors = {
        'Ru': ((0.141176, 0.560784, 0.560784), 1, u'default'),
        'Re': ((0.14902, 0.490196, 0.670588), 1, u'default'),
        'Rf': ((0.8, 0, 0.34902), 1, u'default'),
        'Ra': ((0, 0.490196, 0), 1, u'default'),
        'Rb': ((0.439216, 0.180392, 0.690196), 1, u'default'),
        'Rn': ((0.258824, 0.509804, 0.588235), 1, u'default'),
        'Rh': ((0.0392157, 0.490196, 0.54902), 1, u'default'),
        'Be': ((0.760784, 1, 0), 1, u'default'),
        'Ba': ((0, 0.788235, 0), 1, u'default'),
        'Bh': ((0.878431, 0, 0.219608), 1, u'default'),
        'Bi': ((0.619608, 0.309804, 0.709804), 1, u'default'),
        'Bk': ((0.541176, 0.309804, 0.890196), 1, u'default'),
        'Br': ((0.65098, 0.160784, 0.160784), 1, u'default'),
        'H': ((1, 1, 1), 1, u'default'),
        'P': ((1, 0.501961, 0), 1, u'default'),
        'Os': ((0.14902, 0.4, 0.588235), 1, u'default'),
        'Ge': ((0.4, 0.560784, 0.560784), 1, u'default'),
        'Gd': ((0.270588, 1, 0.780392), 1, u'default'),
        'Ga': ((0.760784, 0.560784, 0.560784), 1, u'default'),
        'Pr': ((0.85098, 1, 0.780392), 1, u'default'),
        'Pt': ((0.815686, 0.815686, 0.878431), 1, u'default'),
        'Pu': ((0, 0.419608, 1), 1, u'default'),
        'C': ((0.564706, 0.564706, 0.564706), 1, u'default'),
        'Pb': ((0.341176, 0.34902, 0.380392), 1, u'default'),
        'Pa': ((0, 0.631373, 1), 1, u'default'),
        'Pd': ((0, 0.411765, 0.521569), 1, u'default'),
        'Cd': ((1, 0.85098, 0.560784), 1, u'default'),
        'Po': ((0.670588, 0.360784, 0), 1, u'default'),
        'Pm': ((0.639216, 1, 0.780392), 1, u'default'),
        'Hs': ((0.901961, 0, 0.180392), 1, u'default'),
        'Ho': ((0, 1, 0.611765), 1, u'default'),
        'Hf': ((0.301961, 0.760784, 1), 1, u'default'),
        'Hg': ((0.721569, 0.721569, 0.815686), 1, u'default'),
        'He': ((0.85098, 1, 1), 1, u'default'),
        'Md': ((0.701961, 0.0509804, 0.65098), 1, u'default'),
        'Mg': ((0.541176, 1, 0), 1, u'default'),
        'K': ((0.560784, 0.25098, 0.831373), 1, u'default'),
        'Mn': ((0.611765, 0.478431, 0.780392), 1, u'default'),
        'O': ((1, 0.0509804, 0.0509804), 1, u'default'),
        'Mt': ((0.921569, 0, 0.14902), 1, u'default'),
        'S': ((1, 1, 0.188235), 1, u'default'),
        'W': ((0.129412, 0.580392, 0.839216), 1, u'default'),
        'sky blue': ((0.529412, 0.807843, 0.921569), 1, u'default'),
        'cornflower blue': ((0.392157, 0.584314, 0.929412), 1, u'default'),
        'plum': ((0.866667, 0.627451, 0.866667), 1, u'default'),
        'Eu': ((0.380392, 1, 0.780392), 1, u'default'),
        'Zr': ((0.580392, 0.878431, 0.878431), 1, u'default'),
        'Er': ((0, 0.901961, 0.458824), 1, u'default'),
        'Ni': ((0.313725, 0.815686, 0.313725), 1, u'default'),
        'No': ((0.741176, 0.0509804, 0.529412), 1, u'default'),
        'Na': ((0.670588, 0.360784, 0.94902), 1, u'default'),
        'Nb': ((0.45098, 0.760784, 0.788235), 1, u'default'),
        'Nd': ((0.780392, 1, 0.780392), 1, u'default'),
        'Ne': ((0.701961, 0.890196, 0.960784), 1, u'default'),
        'Np': ((0, 0.501961, 1), 1, u'default'),
        'Fr': ((0.258824, 0, 0.4), 1, u'default'),
        'Fe': ((0.878431, 0.4, 0.2), 1, u'default'),
        'Fm': ((0.701961, 0.121569, 0.729412), 1, u'default'),
        'B': ((1, 0.709804, 0.709804), 1, u'default'),
        'F': ((0.564706, 0.878431, 0.313725), 1, u'default'),
        'Sr': ((0, 1, 0), 1, u'default'),
        'Zn': ((0.490196, 0.501961, 0.690196), 1, u'default'),
        'N': ((0.188235, 0.313725, 0.972549), 1, u'default'),
        'Kr': ((0.360784, 0.721569, 0.819608), 1, u'default'),
        'Si': ((0.941176, 0.784314, 0.627451), 1, u'default'),
        'Sn': ((0.4, 0.501961, 0.501961), 1, u'default'),
        'Sm': ((0.560784, 1, 0.780392), 1, u'default'),
        'V': ((0.65098, 0.65098, 0.670588), 1, u'default'),
        'Sc': ((0.901961, 0.901961, 0.901961), 1, u'default'),
        'Sb': ((0.619608, 0.388235, 0.709804), 1, u'default'),
        'Sg': ((0.85098, 0, 0.270588), 1, u'default'),
        'Se': ((1, 0.631373, 0), 1, u'default'),
        'Co': ((0.941176, 0.564706, 0.627451), 1, u'default'),
        'Cm': ((0.470588, 0.360784, 0.890196), 1, u'default'),
        'Cl': ((0.121569, 0.941176, 0.121569), 1, u'default'),
        'Ca': ((0.239216, 1, 0), 1, u'default'),
        'Cf': ((0.631373, 0.211765, 0.831373), 1, u'default'),
        'Ce': ((1, 1, 0.780392), 1, u'default'),
        'Xe': ((0.258824, 0.619608, 0.690196), 1, u'default'),
        'Tm': ((0, 0.831373, 0.321569), 1, u'default'),
        'Cs': ((0.341176, 0.0901961, 0.560784), 1, u'default'),
        'Cr': ((0.541176, 0.6, 0.780392), 1, u'default'),
        'Cu': ((0.784314, 0.501961, 0.2), 1, u'default'),
        'La': ((0.439216, 0.831373, 1), 1, u'default'),
        'Li': ((0.8, 0.501961, 1), 1, u'default'),
        'Tl': ((0.65098, 0.329412, 0.301961), 1, u'default'),
        'Lu': ((0, 0.670588, 0.141176), 1, u'default'),
        'Lr': ((0.780392, 0, 0.4), 1, u'default'),
        'Th': ((0, 0.729412, 1), 1, u'default'),
        'Ti': ((0.74902, 0.760784, 0.780392), 1, u'default'),
        'tan': ((0.823529, 0.705882, 0.54902), 1, u'default'),
        'Te': ((0.831373, 0.478431, 0), 1, u'default'),
        'Tb': ((0.188235, 1, 0.780392), 1, u'default'),
        'Tc': ((0.231373, 0.619608, 0.619608), 1, u'default'),
        'Ta': ((0.301961, 0.65098, 1), 1, u'default'),
        'Yb': ((0, 0.74902, 0.219608), 1, u'default'),
        'Db': ((0.819608, 0, 0.309804), 1, u'default'),
        'Dy': ((0.121569, 1, 0.780392), 1, u'default'),
        'At': ((0.458824, 0.309804, 0.270588), 1, u'default'),
        'I': ((0.580392, 0, 0.580392), 1, u'default'),
        'U': ((0, 0.560784, 1), 1, u'default'),
        'Y': ((0.580392, 1, 1), 1, u'default'),
        'Ac': ((0.439216, 0.670588, 0.980392), 1, u'default'),
        'Ag': ((0.752941, 0.752941, 0.752941), 1, u'default'),
        'Ir': ((0.0901961, 0.329412, 0.529412), 1, u'default'),
        'Am': ((0.329412, 0.360784, 0.94902), 1, u'default'),
        'Al': ((0.74902, 0.65098, 0.65098), 1, u'default'),
        'As': ((0.741176, 0.501961, 0.890196), 1, u'default'),
        'Ar': ((0.501961, 0.819608, 0.890196), 1, u'default'),
        'Au': ((1, 0.819608, 0.137255), 1, u'default'),
        'Es': ((0.701961, 0.121569, 0.831373), 1, u'default'),
        'In': ((0.65098, 0.458824, 0.45098), 1, u'default'),
        'Mo': ((0.329412, 0.709804, 0.709804), 1, u'default')
    }
    materials = {u'default': ((0.85, 0.85, 0.85), 30)}
    pbInfo = {
        'category': [u'distance monitor'],
        'bondInfo': [{
            'color': (5, None, {}),
            'atoms': [[16, 13], [16, 11], [22, 20], [18, 6], [12, 18]],
            'label': (5, u'2.335\xc5', {
                u'0.846\xc5': [0],
                u'0.797\xc5': [1],
                u'0.000\xc5': [3],
                u'1.168\xc5': [2]
            }),
            'halfbond': (5, False, {}),
            'labelColor': (5, None, {}),
            'labelOffset': (5, chimera.Vector(-1e+99, 0.0, 0.0), {
                chimera.Vector(-1e+99, 0.0, 0.0): [3],
                chimera.Vector(-1e+99, 0.0, 0.0): [1],
                chimera.Vector(-1e+99, 0.0, 0.0): [0],
                chimera.Vector(-1e+99, 0.0, 0.0): [4]
            }),
            'drawMode': (5, 0, {}),
            'display': (5, 2, {})
        }],
        'lineType': (1, 2, {}),
        'color': (1, 6, {}),
        'optional': {
            'fixedLabels': (True, False, (1, False, {}))
        },
        'display': (1, True, {}),
        'showStubBonds': (1, False, {}),
        'lineWidth': (1, 1, {}),
        'stickScale': (1, 1, {}),
        'id': [-2]
    }
    modelAssociations = {}
    colorInfo = (8, (u'H', (1, 1, 1, 1)), {
        (u'green', (0, 1, 0, 1)): [7],
        (u'O', (1, 0.0509804, 0.0509804, 1)): [4],
        (u'sky blue', (0.529412, 0.807843, 0.921569, 1)): [1],
        (u'tan', (0.823529, 0.705882, 0.54902, 1)): [0],
        (u'plum', (0.866667, 0.627451, 0.866667, 1)): [2],
        (u'gray', (0.745, 0.745, 0.745, 1)): [3],
        (u'yellow', (1, 1, 0, 1)): [6]
    })
    viewerInfo = {
        'cameraAttrs': {
            'center': (-1.3921506511017, 0.021210263279751, 3.5953628871827),
            'fieldOfView': 18.537294142553,
            'nearFar': (7.8705550310897, -0.071197851695135),
            'ortho': False,
            'eyeSeparation': 50.8,
            'focal': -3.183
        },
        'viewerAttrs': {
            'silhouetteColor':
            None,
            'clipping':
            False,
            'showSilhouette':
            False,
            'showShadows':
            False,
            'viewSize':
            5.5016586772818,
            'labelsOnTop':
            True,
            'depthCueRange': (0.5, 1),
            'silhouetteWidth':
            2,
            'singleLayerTransparency':
            True,
            'shadowTextureSize':
            2048,
            'backgroundImage': [None, 1, 2, 1, 0, 0],
            'backgroundGradient': [('Chimera default', [(1, 1, 1, 1),
                                                        (0, 0, 1, 1)], 1), 1,
                                   0, 0],
            'depthCue':
            True,
            'highlight':
            0,
            'scaleFactor':
            1.5264412841657,
            'angleDependentTransparency':
            True,
            'backgroundMethod':
            0
        },
        'viewerHL': 7,
        'cameraMode': 'mono',
        'detail': 1.5,
        'viewerFog': None,
        'viewerBG': None
    }

    replyobj.status("Initializing session restore...",
                    blankAfter=0,
                    secondary=True)
    from SimpleSession.versions.v65 import expandSummary
    init(dict(enumerate(expandSummary(colorInfo))))
    replyobj.status("Restoring colors...", blankAfter=0, secondary=True)
    restoreColors(colors, materials)
    replyobj.status("Restoring molecules...", blankAfter=0, secondary=True)
    restoreMolecules(molInfo, resInfo, atomInfo, bondInfo, crdInfo)
    replyobj.status("Restoring surfaces...", blankAfter=0, secondary=True)
    restoreSurfaces(surfInfo)
    replyobj.status("Restoring VRML models...", blankAfter=0, secondary=True)
    restoreVRML(vrmlInfo)
    replyobj.status("Restoring pseudobond groups...",
                    blankAfter=0,
                    secondary=True)
    restorePseudoBondGroups(pbInfo)
    replyobj.status("Restoring model associations...",
                    blankAfter=0,
                    secondary=True)
    restoreModelAssociations(modelAssociations)
    replyobj.status("Restoring camera...", blankAfter=0, secondary=True)
    restoreViewer(viewerInfo)
Ejemplo n.º 27
0
    def LineCC(self):

        dmap = segmentation_map()
        if dmap == None:
            umsg("No map selected")
            return

        from chimera import Molecule
        mlist = OML(modelTypes=[Molecule])
        if len(mlist) == 0:
            umsg("No molecule found")
            return

        mol = mlist[0]

        print "Doing line CC in " + dmap.name + " using mol " + mol.name

        print dmap.openState.xform
        print mol.openState.xform

        rccs = []
        rmap = None
        rmap_pos = None
        rpoints, rpoint_weights = None, None
        xf = None

        resolution = 10.0

        for ri, res in enumerate(mol.residues):
            try:
                cat = res.atomsMap["CA"][0]
            except:
                continue

            if rmap == None:
                rmap = makeMap("#%d:%d@CA" % (mol.id, res.id.position),
                               resolution, 1, (.5, .5, .5, 1.0), "resmap")
                rmap_pos = cat.coord().toVector()
                print " - sphere map pos ", rmap_pos
                #rpoints, rpoint_weights = fit_points (rmap)
                rpoints, rpoint_weights = fit_points_old(rmap)
                xf = rmap.openState.xform

                break

        for radi in range(0, 1300, 1):

            #d = cat.coord() - rmap_pos
            d = chimera.Vector(0, 0, radi) - rmap_pos
            #print chimera.Vector(0,0,radi)
            trx = chimera.Xform.translation(d)
            #xf = dmap.openState.xform.inverse
            xf2 = xf.__copy__()
            xf2.multiply(trx)

            rmap.openState.xform = xf2
            break

            if 1:
                rmap_values = dmap.interpolated_values(rpoints, xf2)
                olap, corr = overlap_and_correlation(rpoint_weights,
                                                     rmap_values)

                if radi % 100 == 0:
                    print " %d - overlap: %f, cross-correlation: %f" % (
                        radi, olap, corr)

                rccs.append([radi, corr])
            #print corr,

        #chimera.openModels.close ( rmap )

        fp = open("lineCC.txt", "w")
        for rad, cc in rccs:
            fp.write("%d\t%f\n" % (rad, cc))

        fp.close()
Ejemplo n.º 28
0
				pyrimidine_min[1] = min[1]
			if pyrimidine_min[2] > min[2]:
				pyrimidine_min[2] = min[2]
			if pyrimidine_max[0] < max[0]:
				pyrimidine_max[0] = max[0]
			if pyrimidine_max[1] < max[1]:
				pyrimidine_max[1] = max[1]
			if pyrimidine_max[2] < max[2]:
				pyrimidine_max[2] = max[2]
pu = (purine_max[1] - purine_min[1])
py = (pyrimidine_max[1] - pyrimidine_min[1])
purine_pyrimidine_ratio = pu / (pu + py)
del b, coord, min, max, pu, py

# precompute z-plane rotation correction factor
zAxis = chimera.Vector(0, 0, 1)
for b in standard_bases.values():
	pts = [chimera.Point(*b[n]) for n in b["ring atom names"][0:2]]
	yAxis = pts[0] - pts[1]
	yAxis.normalize()
	yAxis.z = 0.0	# should be zero already
			# insurance, so yAxis is perpendicular to zAxis
	xAxis = chimera.cross(yAxis, zAxis)
	xf = chimera.Xform.xform(
		xAxis[0], yAxis[0], zAxis[0], 0.0,
		xAxis[1], yAxis[1], zAxis[1], 0.0,
		xAxis[2], yAxis[2], zAxis[2], 0.0,
		orthogonalize=True
	)
	# we can work in 2d because we know atoms are in z=0 plane
	#coords = [b[a][0:2] for a in atoms]
Ejemplo n.º 29
0
    def Icos2(self):

        imod = self.GetMod("Icosahedron")

        axmods = []
        for m in chimera.openModels.list():
            if m.name == "Icosahedron Faces":
                axmods.append(m)

        if len(axmods) > 0:
            chimera.openModels.close(axmods)

        if imod == None:
            self.umsg("No Icosahedron model found - please follow step 2.")
            return

        if len(imod.surfacePieces) <> 1:
            self.umsg("Please set 'Subdivision factor' to 1")
            return

        print len(imod.surfacePieces[0].geometry[1]), " tris"
        print len(imod.surfacePieces[0].geometry[0]), " verts"

        if len(imod.surfacePieces[0].geometry[1]) <> 20:
            self.umsg("Please set 'Subdivision factor' to 1")
            return

        self.umsg("Building Icos2")

        import _surface
        surf_mod = _surface.SurfaceModel()
        surf_mod.name = "Icosahedron Faces"
        chimera.openModels.add([surf_mod], sameAs=imod)

        import axes
        reload(axes)

        self.icos_vecs = []
        from numpy import arccos, pi

        for p in imod.surfacePieces:
            v, t = p.geometry[0], p.geometry[1]
            #print len(v), len(t)

            #for pt in v :
            #    print " - pt: ", pt

            surf_mod.icosVerts0 = numpy.copy(v)
            surf_mod.icosVerts = numpy.copy(v)
            surf_mod.icosTris = numpy.copy(t)
            surf_mod.nvecs = numpy.zeros((len(t), 3))
            surf_mod.sps = []

            for ti, tri in enumerate(t):
                #print " - tri: ", tri,
                p1 = v[tri[0]]
                p2 = v[tri[1]]
                p3 = v[tri[2]]

                mp = (p1 + p2 + p3) / 3.0
                pv = chimera.Vector(mp[0], mp[1], mp[2])
                r = pv.length
                pv.normalize()
                #print mp
                #self.icos_vecs.append ( pv )
                mp = mp / r

                #cyl = axes.AddCylinderSolid ( chimera.Vector(0,0,0), pv, r, (.6,.4,.4,1), 10.0, surf_mod )
                #cyl.name = "Icosahedron_Axes"

                sp = axes.TriangleMeshDiv(p1, p2, p3, 50.0, None, None,
                                          surf_mod)
                #sp = surf_mod.surfacePieces [ len(surf_mod.surfacePieces)-1 ]
                sp.N = numpy.array(pv, numpy.float32)
                #surf_mod.nvecs.append ( mp )
                surf_mod.nvecs[ti] = mp
                surf_mod.sps.append(sp)
                sp.ind = ti

                #p1v = chimera.Vector ( p1[0], p1[1], p1[2] ); p1v.normalize ()
                #p2v = chimera.Vector ( p2[0], p2[1], p2[2] ); p2v.normalize ()
                #p3v = chimera.Vector ( p3[0], p3[1], p3[2] ); p3v.normalize ()

                #a1 = arccos ( p1v * pv ) * 180.0 / pi
                #a2 = arccos ( p2v * pv ) * 180.0 / pi
                #a3 = arccos ( p3v * pv ) * 180.0 / pi

                #a12 = arccos ( p1v * p2v ) * 180.0 / pi

                #print a1, a2, a3, a12

                #if ti >= 0 :
                #    break

        p1 = surf_mod.icosVerts0[surf_mod.icosTris[0][0]]
        r0 = numpy.sqrt(numpy.sum(p1 * p1))

        self.umsg("Made Icos2 from %d sps in %s -> %d sps, rad %.1f" % (len(
            imod.surfacePieces), imod.name, len(surf_mod.surfacePieces), r0))

        self.rad.set(r0)
Ejemplo n.º 30
0
def ReadMesh (patchpts = None, pos=Vector(0,0,0)) :

    m = _surface.Surface_Model()

    com = Vector (0,0,0)
    rad = Vector (0,0,0)
    numv = 0

    aV = []
    fp = open ( "C:\\greg\\chimera\\Blob\\psu_points.txt", 'r' )
    for line in fp :
        n = line.split(',')
        for i in range( len(n) ) :
            c = n[i].split()
            if len(c) == 3 :
                #v = numpy.array([[float(c[0]),float(c[1]),float(c[2])]], 'f' )
                aV = aV + [ [float(c[0]), float(c[1]), float(c[2])], ]
                numv = numv + 1
                v = Vector ( float(c[0]), float(c[1]), float(c[2]) )
                com = com + v
                if v.length > rad.length :
                    rad = v
    fp.close()

    v = numpy.array( aV, 'f' )
    print "COM:", com/float(numv)
    print "Rad:", rad.length
    scale = 1.0/rad.length

    xf = chimera.Xform.rotation ( Vector(0,0,1), 180 )
    xf.multiply ( chimera.Xform.rotation ( Vector(1,0,0), -90 ) )
    for i in range (numv) :
        vec = xf.apply ( Vector ( v[i][0], v[i][1], v[i][2] ) * scale )
        v[i][0] = vec.x
        v[i][1] = vec.y
        v[i][2] = vec.z


    vi = []
    vs = []
    fp = open ( "C:\\greg\\chimera\\Blob\\psu_tris.txt", 'r' )
    for line in fp :
        n = line.split(',')
        for t in n :
            try :
                ivi = int(t)
                if ivi == -1 :
                    #print 'tri', vs
                    vi = vi + [vs]
                    vs = []
                else :
                    vs = vs + [ivi]
            except:
                #print "bad token:", t
                continue
    fp.close()

    color = (0.6039, 0.8431, 0.898, 1.0)
    sph = m.add_group( v, vi, color )
    #sph.set_display_style(sph.Mesh)


    if patchpts :
        vcolors = ()

        for i in range ( len(v) ) :
            vp = chimera.Vector (  v[i][0], v[i][1], v[i][2] ) - pos
            inP = None
            for pt in patchpts:
                if (pt[0] - vp).length < (1.0/2.5) :
                    inP = pt[1]
                    break
            if inP :
                if inP < 0.0 :
                    vcolors = vcolors + ( (-inP*.6+.4, .4, .4, 1), )
                else :
                    vcolors = vcolors + ( (.4, .4, inP*.6+.4, 1), )
            else :
                vcolors = vcolors + ( (color), )

        print len ( vcolors ), len ( v )

        sph.set_vertex_colors( vcolors )


    chimera.openModels.add([m])
    return m