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