Source code for xmipp3.viewers.viewer_metaprotocol_golden_highres

# **************************************************************************
# *
# * Authors:  Amaya Jimenez Moreno (ajimenez@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'
# *
# **************************************************************************

from glob import glob
from os.path import exists, join

from pyworkflow.protocol.params import EnumParam, NumericRangeParam, LabelParam, \
    IntParam, FloatParam
from pyworkflow.protocol.constants import LEVEL_ADVANCED
from pyworkflow.viewer import DESKTOP_TKINTER, WEB_DJANGO, ProtocolViewer
from pwem.viewers import ObjectView, DataView, ChimeraClientView
import pwem.viewers.showj as showj

from xmippLib import (MDL_SAMPLINGRATE, MDL_ANGLE_ROT, MDL_ANGLE_TILT,
                      MDL_RESOLUTION_FREQ, MDL_RESOLUTION_FRC, MetaData)
from xmipp3.protocols.protocol_metaprotocol_golden_highres import \
    XmippMetaProtGoldenHighRes
from .plotter import XmippPlotter

[docs]class XmippMetaprotocolGoldenHighResViewer(ProtocolViewer): """ Visualize the output of protocol reconstruct highres """ _label = 'viewer golden highres' _targets = [XmippMetaProtGoldenHighRes] _environments = [DESKTOP_TKINTER, WEB_DJANGO] def _defineParams(self, form): form.addSection(label='Visualization') form.addParam('showResolutionPlotsGlob', LabelParam, default=True, label='Display resolution plots of global iterations (FSC)') form.addParam('showResolutionPlotsLoc', LabelParam, default=True, label='Display resolution plots of local iterations (FSC)') form.addParam('resolutionThreshold', FloatParam, default=0.5, expertLevel=LEVEL_ADVANCED, label='Threshold in resolution plots') def _getVisualizeDict(self): self._load() return { 'showResolutionPlotsGlob': self._showFSCGlob, 'showResolutionPlotsLoc': self._showFSCLoc } def _validate(self): pass def _load(self): from matplotlib.ticker import FuncFormatter self._plotFormatter = FuncFormatter(self._formatFreq) def _showFSCGlob(self, paramName=None): self.minInv = [] self.maxInv = [] fnFSCs = open(self.protocol._getExtraPath('fnFSCs.txt'), 'r') title="FSC of global iterations" xplotter = XmippPlotter(windowTitle=title) a = xplotter.createSubPlot("FSC", "Frequency (1/A)", "FSC") legends = [] for i, line in enumerate(fnFSCs): if i>=10: continue fnFSC = line[:-2] if exists(fnFSC): legends.append('Group %s' % chr(65 + i)) self._plotFSC(a, fnFSC) xplotter.showLegend(legends) a.plot([min(self.minInv), max(self.maxInv)], [self.resolutionThreshold.get(), self.resolutionThreshold.get()], color='black', linestyle='--') a.grid(True) views = [] views.append(xplotter) return views def _showFSCLoc(self, paramName=None): self.minInv = [] self.maxInv = [] fnFSCs = open(self.protocol._getExtraPath('fnFSCs.txt'), 'r') title="FSC of local iterations" xplotter = XmippPlotter(windowTitle=title) a = xplotter.createSubPlot("FSC", "Frequency (1/A)", "FSC") legends = [] for i, line in enumerate(fnFSCs): if i<10: continue fnFSC = line[:-2] if exists(fnFSC): legends.append('Group %s' % chr(65 + i)) self._plotFSC(a, fnFSC) xplotter.showLegend(legends) a.plot([min(self.minInv), max(self.maxInv)], [self.resolutionThreshold.get(), self.resolutionThreshold.get()], color='black', linestyle='--') a.grid(True) views = [] views.append(xplotter) return views def _plotFSC(self, ab, fnFSC): md = MetaData(fnFSC) resolution_inv = [md.getValue(MDL_RESOLUTION_FREQ, f) for f in md] frc = [md.getValue(MDL_RESOLUTION_FRC, f) for f in md] # self.maxFrc = max(frc) self.minInv.append(min(resolution_inv)) self.maxInv.append(max(resolution_inv)) ab.plot(resolution_inv, frc) ab.xaxis.set_major_formatter(self._plotFormatter) ab.set_ylim([-0.1, 1.1]) def _formatFreq(self, value, pos): """ Format function for Matplotlib formatter. """ inv = 999 if value: inv = 1 / value return "1/%0.2f" % inv