def _createAngDist2D(self): # Common variables to use nparts = self.protocol._getInputParticles().getSize() title = "Angular Distribution" plotter = EmPlotter(windowTitle=title) sqliteFn = self.protocol._getFileName('projections') if not os.path.exists(sqliteFn): self.createAngDistributionSqlite( sqliteFn, nparts, itemDataIterator=iterAngles( self.protocol._getFileName('anglesFn'))) plotter.plotAngularDistributionFromMd(sqliteFn, title) return plotter
def _createAngDist2D(self, it, heatmap): fnDir = self.protocol._getExtraPath("Iter%03d"%it) fnAngles = join(fnDir,"angles.xmd") view=None if exists(fnAngles): fnAnglesSqLite = join(fnDir,"angles.sqlite") from pwem.viewers import EmPlotter if not exists(fnAnglesSqLite): from pwem.emlib.metadata import getSize self.createAngDistributionSqlite(fnAnglesSqLite, getSize(fnAngles), itemDataIterator=self._iterAngles(fnAngles)) view = EmPlotter(x=1, y=1, mainTitle="Iteration %d" % it, windowTitle="Angular distribution") if heatmap: axis = view.plotAngularDistributionFromMd(fnAnglesSqLite, '', histogram=True) view.getFigure().colorbar(axis) else: view.plotAngularDistributionFromMd(fnAnglesSqLite, '') return view
def _displayAngDist(self, *args): iterations = self._getIterations() nparts = self.protocol.inputParticles.get().getSize() views = [] if self.displayAngDist == ANGDIST_2DPLOT: for it in iterations: if it == 1: print( "Orientations for the first iteration cannot be plotted. " "Skipping..") continue anglesSqlite = self._getFinalPath('angular_dist_%03d.sqlite' % it) title = 'Angular distribution iter %03d' % it plotter = EmPlotter(x=1, y=1, windowTitle=title) self.createAngDistributionSqlite( anglesSqlite, nparts, itemDataIterator=self._iterAngles(it)) plotter.plotAngularDistributionFromMd(anglesSqlite, title) views.append(plotter) else: it = iterations[-1] print("Using last iteration: ", it) anglesSqlite = self._getFinalPath('angular_dist_%03d.sqlite' % it) self.createAngDistributionSqlite( anglesSqlite, nparts, itemDataIterator=self._iterAngles(it)) volumes = self.getVolumeNames(it) vol = self.protocol.outputVolume volOrigin = vol.getOrigin(force=True).getShifts() samplingRate = vol.getSamplingRate() views.append( ChimeraAngDist(volumes[0], self.protocol._getTmpPath(), voxelSize=samplingRate, volOrigin=volOrigin, angularDistFile=anglesSqlite, format="spider")) return views