Source code for tomo.protocols.protocol_assignTransformationTS

# **************************************************************************
# *
# * Authors:     Federico P. de Isidro Gomez (fp.deisidro@cnb.csic.es) [1]
# *
# * [1] Centro Nacional de Biotecnologia, CSIC, Spain
# *
# * 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 pyworkflow import BETA
import pyworkflow.protocol.params as params
from pwem.protocols import EMProtocol
import tomo.objects as tomoObj
from tomo.protocols import ProtTomoBase


[docs]class ProtAssignTransformationMatrixTiltSeries(EMProtocol, ProtTomoBase): """ Assign the transformation matrices from an input set of tilt-series to a target one. """ _label = 'Tilt-series assign alignment' _devStatus = BETA # -------------------------- DEFINE param functions ----------------------- def _defineParams(self, form): form.addSection('Input') form.addParam('getTMSetOfTiltSeries', params.PointerParam, pointerClass='SetOfTiltSeries', important=True, help='Set of tilt-series from which transformation matrices will be obtained.', label='Set of tilt-series from which get transform') form.addParam('setTMSetOfTiltSeries', params.PointerParam, pointerClass='SetOfTiltSeries', important=True, help='Set of tilt-series on which transformation matrices will be assigned.', label='Set of tilt-series to which set transform') # -------------------------- INSERT steps functions --------------------- def _insertAllSteps(self): for ts in self.getTMSetOfTiltSeries.get(): self._insertFunctionStep('assignTransformationMatricesStep', ts.getObjId()) # --------------------------- STEPS functions ----------------------------
[docs] def assignTransformationMatricesStep(self, tsObjId): outputAssignedTransformSetOfTiltSeries = self.getOutputAssignedTransformSetOfTiltSeries() setTMTS = self.setTMSetOfTiltSeries.get()[tsObjId] getTMTS = self.getTMSetOfTiltSeries.get()[tsObjId] tsId = getTMTS.getTsId() newTs = tomoObj.TiltSeries(tsId=tsId) newTs.copyInfo(setTMTS) outputAssignedTransformSetOfTiltSeries.append(newTs) for tiltImageGetTM, tiltImageSetTM in zip(getTMTS, setTMTS): newTi = tomoObj.TiltImage() newTi.copyInfo(tiltImageSetTM, copyId=True) newTi.setLocation(tiltImageSetTM.getLocation()) newTi.setTransform(tiltImageGetTM.getTransform()) newTs.append(newTi) newTs.setDim(setTMTS.getDim()) newTs.write() outputAssignedTransformSetOfTiltSeries.update(newTs) outputAssignedTransformSetOfTiltSeries.updateDim() outputAssignedTransformSetOfTiltSeries.write() self._store()
# --------------------------- UTILS functions ----------------------------
[docs] def getOutputAssignedTransformSetOfTiltSeries(self): if not hasattr(self, "outputAssignedTransformSetOfTiltSeries"): outputAssignedTransformSetOfTiltSeries = self._createSetOfTiltSeries(suffix='AssignedTransform') outputAssignedTransformSetOfTiltSeries.copyInfo(self.setTMSetOfTiltSeries.get()) outputAssignedTransformSetOfTiltSeries.setDim(self.setTMSetOfTiltSeries.get().getDim()) self._defineOutputs(outputAssignedTransformSetOfTiltSeries=outputAssignedTransformSetOfTiltSeries) self._defineSourceRelation(self.getTMSetOfTiltSeries, outputAssignedTransformSetOfTiltSeries) return self.outputAssignedTransformSetOfTiltSeries
# --------------------------- INFO functions ---------------------------- def _validate(self): validateMsgs = [] for tsGetTM, tsSetTM in zip(self.getTMSetOfTiltSeries.get(), self.setTMSetOfTiltSeries.get()): if not tsGetTM.getFirstItem().hasTransform(): validateMsgs.append("Some tilt-series from the input set of tilt-series does not have a " "transformation matrix assigned.") if tsGetTM.getSize() != tsSetTM.getSize(): validateMsgs.append("Some tilt-series from the input set of tilt-series and its target in the assign " "transformation set of tilt-series size's do not match. Every input tilt-series " "and its target must have the same number of elements") if self.getTMSetOfTiltSeries.get().getSize() != self.setTMSetOfTiltSeries.get().getSize(): validateMsgs.append("Both input sets of tilt-series size's do not match. Both sets must have the same " "number of elements.") return validateMsgs def _summary(self): summary = [] if hasattr(self, 'outputAssignedTransformSetOfTiltSeries'): summary.append("Input Tilt-Series: %d.\nTransformation matrices assigned: %d.\n" % (self.getTMSetOfTiltSeries.get().getSize(), self.outputAssignedTransformSetOfTiltSeries.getSize())) else: summary.append("Output classes not ready yet.") return summary def _methods(self): methods = [] if hasattr(self, 'outputAssignedTransformSetOfTiltSeries'): methods.append("The transformation matrix has been assigned to %d Tilt-series from the input set.\n" % (self.outputAssignedTransformSetOfTiltSeries.getSize())) else: methods.append("Output classes not ready yet.") return methods