Source code for xmipp3.viewers.viewer_pdb_deform_zernike3d
# **************************************************************************
# *
# * Authors: David Herreros Calero (dherreros@cnb.csic.es)
# *
# * Unidad de Bioinformatica of Centro Nacional de Biotecnologia , CSIC
# *
# * This program is free software; you can redistribute it and/or modify
# * it under the terms of the GNU General Public License as published by
# * the Free Software Foundation; either version 2 of the License, or
# * (at your option) any later version.
# *
# * This program is distributed in the hope that it will be useful,
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# * GNU General Public License for more details.
# *
# * You should have received a copy of the GNU General Public License
# * along with this program; if not, write to the Free Software
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# * 02111-1307 USA
# *
# * All comments concerning this program package may be sent to the
# * e-mail address 'scipion@cnb.csic.es'
# *
# **************************************************************************
import os
import pyworkflow.viewer as pwviewer
import pwem.viewers.views as vi
import pyworkflow.protocol.params as params
from pwem.viewers import ChimeraView
from pyworkflow.object import Set
from xmipp3.protocols.protocol_apply_zernike3d import XmippApplyZernike3D
[docs]class XmippPDBDeformViewer(pwviewer.ProtocolViewer):
""" Visualize the deformation applied to the PDB file """
_label = 'viewer pdb deform sph'
_targets = [XmippApplyZernike3D]
_environments = [pwviewer.DESKTOP_TKINTER, pwviewer.WEB_DJANGO]
OPEN_FILE = "open %s\n"
def _defineParams(self, form):
self.deformed = self.protocol.deformed.get()
self.have_set = isinstance(self.deformed, Set)
form.addSection(label='Show deformation')
form.addParam('pdbIdChoice', params.EnumParam,
condition='self.have_set==True',
choices=list(self.deformed.getIdSet()),
default=0,
label='Structure to display', display=params.EnumParam.DISPLAY_COMBO,
help='Select which structure to display from the IDs of the set')
form.addParam('doShowPDB', params.LabelParam,
label="Display original and deformed PDB or volume")
form.addParam('doShowMorph', params.LabelParam,
label="Display a morphing between the original and deformed PDB or volume")
def _getVisualizeDict(self):
if self.have_set==True:
self.chosen = self.deformed[list(self.deformed.getIdSet())[self.pdbIdChoice]]
else:
self.chosen = self.deformed
return {'doShowPDB': self._doShowPDB,
'doShowMorph': self._doShowMorph}
def _doShowPDB(self, obj, **kwargs):
if self.protocol.applyPDB.get() == True:
scriptFile = self.protocol._getPath('pdb_deform_chimera.cxc')
fhCmd = open(scriptFile, 'w')
inputFile = os.path.abspath(self.protocol.inputPDB.get().getFileName())
outputFile = os.path.abspath(self.chosen.getFileName())
fhCmd.write(self.OPEN_FILE % inputFile)
fhCmd.write(self.OPEN_FILE % outputFile)
# fhCmd.write("start Model Panel\n")
fhCmd.write("show cartoons\n")
fhCmd.write("cartoon style width 1.5 thick 1.5\n")
fhCmd.write("style stick\n")
fhCmd.write("color bymodel\n")
fhCmd.close()
view = ChimeraView(scriptFile)
return [view]
else:
raise ValueError("This viewer is only for atomic structures")
def _doShowMorph(self, obj, **kwargs):
if self.protocol.applyPDB.get() == True:
scriptFile = self.protocol._getPath('pdb_deform_chimera.cxc')
fhCmd = open(scriptFile, 'w')
inputFile = os.path.abspath(self.protocol.inputPDB.get().getFileName())
outputFile = os.path.abspath(self.protocol.chosen.getFileName())
fhCmd.write(self.OPEN_FILE % inputFile)
fhCmd.write(self.OPEN_FILE % outputFile)
fhCmd.write("hide models\n")
fhCmd.write("morph #1,2 frames 50 play false\n")
fhCmd.write("coordset #3 1,\n")
fhCmd.write("wait 50\n")
fhCmd.write("coordset #3 50,1\n")
fhCmd.close()
view = ChimeraView(scriptFile)
return [view]
else:
raise ValueError("This viewer is only for atomic structures")