Beispiel #1
0
    def generateExecutiveSummary(self, _edPlugin):
        """
        Generates a summary of the execution of the plugin.
        """
        EDPluginMOSFLMv10.generateExecutiveSummary(self, _edPlugin)
        self.DEBUG("EDPluginMOSFLMIntegrationv10.createDataMOSFLMOutputIndexing")
        xsDataMOSFLMInputIntegration = self.getDataInput()
        xsDataMOSFLMOutputIntegration = self.getDataOutput()
        if xsDataMOSFLMOutputIntegration.getNumberOfFullyRecordedReflections() is not None:
            self.addExecutiveSummaryLine("Execution of MOSFLM integration successful.")
            self.addExecutiveSummaryLine("Image directory     : %s" % xsDataMOSFLMInputIntegration.getDirectory().getValue())
            self.addExecutiveSummaryLine("Image template      : %s" % xsDataMOSFLMInputIntegration.getTemplate().getValue())
            self.addExecutiveSummaryLine("Image start         : %4d" % xsDataMOSFLMInputIntegration.getImageStart().getValue())
            self.addExecutiveSummaryLine("Image end           : %4d" % xsDataMOSFLMInputIntegration.getImageEnd().getValue())
            fRotationAxisStart = xsDataMOSFLMInputIntegration.getRotationAxisStart().getValue()
            fOscillationWidth = xsDataMOSFLMInputIntegration.getOscillationWidth().getValue()
            self.addExecutiveSummaryLine("Rotation axis start : %4.1f [degrees]" % fRotationAxisStart)
            self.addExecutiveSummaryLine("Rotation axis end   : %4.1f [degrees]" % (fRotationAxisStart + fOscillationWidth))
            self.addExecutiveSummaryLine("")
            iNumberOfFullyRecordedReflections = xsDataMOSFLMOutputIntegration.getNumberOfFullyRecordedReflections().getValue()
            self.addExecutiveSummaryLine("Number of fully recorded reflections          : %5d" % iNumberOfFullyRecordedReflections)
            self.addExecutiveSummaryLine("Number of partials                            : %5d" % xsDataMOSFLMOutputIntegration.getNumberOfPartialReflections().getValue())
            self.addExecutiveSummaryLine("Number of overlapped reflections              : %5d" % xsDataMOSFLMOutputIntegration.getNumberOfOverlappedReflections().getValue())
            self.addExecutiveSummaryLine("Number of reflections with negative intensity : %5d" % xsDataMOSFLMOutputIntegration.getNumberOfNegativeReflections().getValue())
            self.addExecutiveSummaryLine("Number of bad reflections                     : %5d" % xsDataMOSFLMOutputIntegration.getNumberOfBadReflections().getValue())
            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine("RMS spot deviation                            : %5.3f [mm]" % xsDataMOSFLMOutputIntegration.getRMSSpotDeviation().getValue())
            self.addExecutiveSummaryLine("Average I/sigma overall                       : %5.1f" % xsDataMOSFLMOutputIntegration.getOverallIOverSigma().getValue())
            self.addExecutiveSummaryLine("Average I/sigma at highest resolution         : %5.1f" % xsDataMOSFLMOutputIntegration.getHighestResolutionIOverSigma().getValue())
            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine("Analysis as a function of resolution:")
            strResolution = "Res (Ang) "

            strNumberProfileFittedFullyRecorded = "Number    "
            strAverageIntensityProfileFittedFullyRecorded = " <I>      "
            strAverageIOverSigmaProfileFittedFullyRecorded = " <I/sigma>"

            strNumberProfileFittedPartials = "Number    "
            strAverageIntensityProfileFittedPartials = " <I>      "
            strAverageIOverSigmaProfileFittedPartials = " <I/sigma>"

            for xsDataMOSFLMIntegrationStatisticsPerResolutionBin in xsDataMOSFLMOutputIntegration.getStatisticsPerResolutionBin():
                fMaxResolution = xsDataMOSFLMIntegrationStatisticsPerResolutionBin.getMaxResolution().getValue()
                strResolution += "%7.2f" % fMaxResolution
                xsDataMOSFLMIntegrationStatisticsProfileFitted = xsDataMOSFLMIntegrationStatisticsPerResolutionBin.getProfileFitted()

                xsDataMOSFLMIntegrationStatisticsProfileFittedFullyRecorded = xsDataMOSFLMIntegrationStatisticsProfileFitted.getFullyRecorded()
                strNumberProfileFittedFullyRecorded += "%7d" % xsDataMOSFLMIntegrationStatisticsProfileFittedFullyRecorded.getNumberOfReflections().getValue()
                strAverageIntensityProfileFittedFullyRecorded += "%7.0f" % xsDataMOSFLMIntegrationStatisticsProfileFittedFullyRecorded.getAverageIntensity().getValue()
                strAverageIOverSigmaProfileFittedFullyRecorded += "%7.1f" % xsDataMOSFLMIntegrationStatisticsProfileFittedFullyRecorded.getAverageIOverSigma().getValue()

                xsDataMOSFLMIntegrationStatisticsProfileFittedPartials = xsDataMOSFLMIntegrationStatisticsProfileFitted.getPartials()
                strNumberProfileFittedPartials += "%7d" % xsDataMOSFLMIntegrationStatisticsProfileFittedPartials.getNumberOfReflections().getValue()
                strAverageIntensityProfileFittedPartials += "%7.0f" % xsDataMOSFLMIntegrationStatisticsProfileFittedPartials.getAverageIntensity().getValue()
                strAverageIOverSigmaProfileFittedPartials += "%7.1f" % xsDataMOSFLMIntegrationStatisticsProfileFittedPartials.getAverageIOverSigma().getValue()

            strResolution += " Overall"
            self.addExecutiveSummaryLine(strResolution)

            strNumberProfileFittedFullyRecorded += "%8d" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getFullyRecorded().getNumberOfReflections().getValue()
            strAverageIntensityProfileFittedFullyRecorded += "%8.0f" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getFullyRecorded().getAverageIntensity().getValue()
            strAverageIOverSigmaProfileFittedFullyRecorded += "%8.1f" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getFullyRecorded().getAverageIOverSigma().getValue()

            strNumberProfileFittedPartials += "%8d" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getPartials().getNumberOfReflections().getValue()
            strAverageIntensityProfileFittedPartials += "%8.0f" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getPartials().getAverageIntensity().getValue()
            strAverageIOverSigmaProfileFittedPartials += "%8.1f" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getPartials().getAverageIOverSigma().getValue()

            if (iNumberOfFullyRecordedReflections > 0):
                self.addExecutiveSummaryLine("Profile fitted fully recorded:")
                self.addExecutiveSummaryLine(strNumberProfileFittedFullyRecorded)
                self.addExecutiveSummaryLine(strAverageIntensityProfileFittedFullyRecorded)
                self.addExecutiveSummaryLine(strAverageIOverSigmaProfileFittedFullyRecorded)

            self.addExecutiveSummaryLine("Profile fitted partials:")
            self.addExecutiveSummaryLine(strNumberProfileFittedPartials)
            self.addExecutiveSummaryLine(strAverageIntensityProfileFittedPartials)
            #self.addExecutiveSummaryLine( strAverageSigmaProfileFittedPartials )
            self.addExecutiveSummaryLine(strAverageIOverSigmaProfileFittedPartials)

            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine("Path to MTZ file : %s" % xsDataMOSFLMOutputIntegration.getGeneratedMTZFile().getPath().getValue())
    def generateExecutiveSummary(self, _edPlugin):
        """
        Generates a summary of the execution of the plugin.
        """
        EDPluginMOSFLMv10.generateExecutiveSummary(self, _edPlugin)
        EDVerbose.DEBUG("EDPluginMOSFLMIndexingv10.createDataMOSFLMOutputIndexing")
        xsDataMOSFLMInputIndexing = self.getDataInput()
        xsDataMOSFLMOutputIndexing = self.getDataOutput()
        if not self.isFailure():
            self.addExecutiveSummaryLine("Execution of MOSFLM indexing successful.")
        self.addExecutiveSummaryLine("Image directory         : %s" % xsDataMOSFLMInputIndexing.getDirectory().getValue())
        self.addExecutiveSummaryLine("Image template          : %s" % xsDataMOSFLMInputIndexing.getTemplate().getValue())
        strImagesUsed = "Images used in indexing : "
        for xsDataMOSFLMImage in xsDataMOSFLMInputIndexing.getImage():
            strImagesUsed += "%3d" % xsDataMOSFLMImage.getNumber().getValue()
        self.addExecutiveSummaryLine(strImagesUsed)
        if (xsDataMOSFLMInputIndexing.getSymmetry() is not None):
            self.addExecutiveSummaryLine("Target symmetry     : %s" % xsDataMOSFLMInputIndexing.getSymmetry().getValue())
            self.addExecutiveSummaryLine("")
        if (xsDataMOSFLMOutputIndexing is not None):
            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine("List of possible solutions (index, penalty, lattice and cell):")
            iSelectedSolutionNumber = xsDataMOSFLMOutputIndexing.getSelectedSolutionNumber().getValue()
            # Add all solutions with penalty < 100 + 1 solution with penalty > 100
            bAddSolution = False
            listMOSFLMOutputIndexing = xsDataMOSFLMOutputIndexing.getPossibleSolutions()
            iNumberOfSolutions = len(listMOSFLMOutputIndexing)
            for i in range(iNumberOfSolutions):

                iPenalty = listMOSFLMOutputIndexing[i].getPenalty().getValue()
                if (i < (iNumberOfSolutions - 1)):
                    iPenaltyNext = listMOSFLMOutputIndexing[i + 1].getPenalty().getValue()
                    if ((iPenalty >= 100) and (iPenaltyNext <= 100)):
                        bAddSolution = True
                if (bAddSolution):
                    iIndex = listMOSFLMOutputIndexing[i].getIndex().getValue()
                    xsDataCell = listMOSFLMOutputIndexing[i].getCell()
                    strLattice = listMOSFLMOutputIndexing[i].getLattice().getValue()
                    strPossibleSolution = "%3d %4d %2s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f" % \
                                                (iIndex, iPenalty, strLattice, \
                                                  xsDataCell.getLength_a().getValue(),
                                                  xsDataCell.getLength_b().getValue(),
                                                  xsDataCell.getLength_c().getValue(),
                                                  xsDataCell.getAngle_alpha().getValue(),
                                                  xsDataCell.getAngle_beta().getValue(),
                                                  xsDataCell.getAngle_gamma().getValue(),
                                                 )
                    self.addExecutiveSummaryLine(strPossibleSolution)
                iPenaltyOld = iPenalty
            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine("Choosen solution number   : %14d" % iSelectedSolutionNumber)
            strSelectedSpaceGroup = xsDataMOSFLMOutputIndexing.getSelectedSolutionSpaceGroup().getValue()
            self.addExecutiveSummaryLine("Selected space group      : %14s" % (strSelectedSpaceGroup))
            xsDataCellRefined = xsDataMOSFLMOutputIndexing.getRefinedNewmat().getRefinedCell()
            self.addExecutiveSummaryLine("Refined cell              : %6.2f %7.2f %7.2f %5.1f %5.1f %5.1f" % (\
                                          xsDataCellRefined.getLength_a().getValue(),
                                          xsDataCellRefined.getLength_b().getValue(),
                                          xsDataCellRefined.getLength_c().getValue(),
                                          xsDataCellRefined.getAngle_alpha().getValue(),
                                          xsDataCellRefined.getAngle_beta().getValue(),
                                          xsDataCellRefined.getAngle_gamma().getValue()
                                          ))
            iSpotsTotal = xsDataMOSFLMOutputIndexing.getSpotsTotal().getValue()
            iSpotsUsed = xsDataMOSFLMOutputIndexing.getSpotsUsed().getValue()
            self.addExecutiveSummaryLine("Number of spots used      : %14d " % (iSpotsUsed))
            self.addExecutiveSummaryLine("Number of spots total     : %14d " % (iSpotsTotal))
            fDeviationPositional = xsDataMOSFLMOutputIndexing.getDeviationPositional().getValue()
            fDeviationAngular = xsDataMOSFLMOutputIndexing.getDeviationAngular().getValue()
            self.addExecutiveSummaryLine("Spot deviation positional : %14.2f [mm]" % (fDeviationPositional))
            self.addExecutiveSummaryLine("Spot deviation angular    : %14.2f [degrees]" % (fDeviationAngular))
            fBeamshiftX = xsDataMOSFLMOutputIndexing.getBeamShift().getX().getValue()
            fBeamshiftY = xsDataMOSFLMOutputIndexing.getBeamShift().getY().getValue()
            self.addExecutiveSummaryLine("Beam shift (X, Y)         : %6.3f, %6.3f [mm]" % \
                                          (fBeamshiftX, fBeamshiftY))
            fMosaicityEstimated = xsDataMOSFLMOutputIndexing.getMosaicityEstimation().getValue()
            self.addExecutiveSummaryLine("Estimated mosaicity       : %14.2f [degrees]" % fMosaicityEstimated)
    def generateExecutiveSummary(self, _edPlugin):
        """
        Generates a summary of the execution of the plugin.
        """
        EDPluginMOSFLMv10.generateExecutiveSummary(self, _edPlugin)
        self.DEBUG("EDPluginMOSFLMIntegrationv10.createDataMOSFLMOutputIndexing")
        xsDataMOSFLMInputIntegration = self.getDataInput()
        xsDataMOSFLMOutputIntegration = self.getDataOutput()
        if xsDataMOSFLMOutputIntegration.getNumberOfFullyRecordedReflections() is not None:
            self.addExecutiveSummaryLine("Execution of MOSFLM integration successful.")
            self.addExecutiveSummaryLine("Image directory     : %s" % xsDataMOSFLMInputIntegration.getDirectory().getValue())
            self.addExecutiveSummaryLine("Image template      : %s" % xsDataMOSFLMInputIntegration.getTemplate().getValue())
            self.addExecutiveSummaryLine("Image start         : %4d" % xsDataMOSFLMInputIntegration.getImageStart().getValue())
            self.addExecutiveSummaryLine("Image end           : %4d" % xsDataMOSFLMInputIntegration.getImageEnd().getValue())
            fRotationAxisStart = xsDataMOSFLMInputIntegration.getRotationAxisStart().getValue()
            fOscillationWidth = xsDataMOSFLMInputIntegration.getOscillationWidth().getValue()
            self.addExecutiveSummaryLine("Rotation axis start : %4.1f [degrees]" % fRotationAxisStart)
            self.addExecutiveSummaryLine("Rotation axis end   : %4.1f [degrees]" % (fRotationAxisStart + fOscillationWidth))
            self.addExecutiveSummaryLine("")
            iNumberOfFullyRecordedReflections = xsDataMOSFLMOutputIntegration.getNumberOfFullyRecordedReflections().getValue()
            self.addExecutiveSummaryLine("Number of fully recorded reflections          : %5d" % iNumberOfFullyRecordedReflections)
            self.addExecutiveSummaryLine("Number of partials                            : %5d" % xsDataMOSFLMOutputIntegration.getNumberOfPartialReflections().getValue())
            self.addExecutiveSummaryLine("Number of overlapped reflections              : %5d" % xsDataMOSFLMOutputIntegration.getNumberOfOverlappedReflections().getValue())
            self.addExecutiveSummaryLine("Number of reflections with negative intensity : %5d" % xsDataMOSFLMOutputIntegration.getNumberOfNegativeReflections().getValue())
            self.addExecutiveSummaryLine("Number of bad reflections                     : %5d" % xsDataMOSFLMOutputIntegration.getNumberOfBadReflections().getValue())
            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine("RMS spot deviation                            : %5.3f [mm]" % xsDataMOSFLMOutputIntegration.getRMSSpotDeviation().getValue())
            self.addExecutiveSummaryLine("Average I/sigma overall                       : %5.1f" % xsDataMOSFLMOutputIntegration.getOverallIOverSigma().getValue())
            self.addExecutiveSummaryLine("Average I/sigma at highest resolution         : %5.1f" % xsDataMOSFLMOutputIntegration.getHighestResolutionIOverSigma().getValue())
            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine("Analysis as a function of resolution:")
            strResolution = "Res (Ang) "

            strNumberProfileFittedFullyRecorded = "Number    "
            strAverageIntensityProfileFittedFullyRecorded = " <I>      "
            strAverageIOverSigmaProfileFittedFullyRecorded = " <I/sigma>"

            strNumberProfileFittedPartials = "Number    "
            strAverageIntensityProfileFittedPartials = " <I>      "
            strAverageIOverSigmaProfileFittedPartials = " <I/sigma>"

            for xsDataMOSFLMIntegrationStatisticsPerResolutionBin in xsDataMOSFLMOutputIntegration.getStatisticsPerResolutionBin():
                fMaxResolution = xsDataMOSFLMIntegrationStatisticsPerResolutionBin.getMaxResolution().getValue()
                strResolution += "%7.2f" % fMaxResolution
                xsDataMOSFLMIntegrationStatisticsProfileFitted = xsDataMOSFLMIntegrationStatisticsPerResolutionBin.getProfileFitted()

                xsDataMOSFLMIntegrationStatisticsProfileFittedFullyRecorded = xsDataMOSFLMIntegrationStatisticsProfileFitted.getFullyRecorded()
                strNumberProfileFittedFullyRecorded += "%7d" % xsDataMOSFLMIntegrationStatisticsProfileFittedFullyRecorded.getNumberOfReflections().getValue()
                strAverageIntensityProfileFittedFullyRecorded += "%7.0f" % xsDataMOSFLMIntegrationStatisticsProfileFittedFullyRecorded.getAverageIntensity().getValue()
                strAverageIOverSigmaProfileFittedFullyRecorded += "%7.1f" % xsDataMOSFLMIntegrationStatisticsProfileFittedFullyRecorded.getAverageIOverSigma().getValue()

                xsDataMOSFLMIntegrationStatisticsProfileFittedPartials = xsDataMOSFLMIntegrationStatisticsProfileFitted.getPartials()
                strNumberProfileFittedPartials += "%7d" % xsDataMOSFLMIntegrationStatisticsProfileFittedPartials.getNumberOfReflections().getValue()
                strAverageIntensityProfileFittedPartials += "%7.0f" % xsDataMOSFLMIntegrationStatisticsProfileFittedPartials.getAverageIntensity().getValue()
                strAverageIOverSigmaProfileFittedPartials += "%7.1f" % xsDataMOSFLMIntegrationStatisticsProfileFittedPartials.getAverageIOverSigma().getValue()

            strResolution += " Overall"
            self.addExecutiveSummaryLine(strResolution)

            strNumberProfileFittedFullyRecorded += "%8d" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getFullyRecorded().getNumberOfReflections().getValue()
            strAverageIntensityProfileFittedFullyRecorded += "%8.0f" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getFullyRecorded().getAverageIntensity().getValue()
            strAverageIOverSigmaProfileFittedFullyRecorded += "%8.1f" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getFullyRecorded().getAverageIOverSigma().getValue()

            strNumberProfileFittedPartials += "%8d" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getPartials().getNumberOfReflections().getValue()
            strAverageIntensityProfileFittedPartials += "%8.0f" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getPartials().getAverageIntensity().getValue()
            strAverageIOverSigmaProfileFittedPartials += "%8.1f" % xsDataMOSFLMOutputIntegration.getOverallStatistics().getProfileFitted().getPartials().getAverageIOverSigma().getValue()

            if (iNumberOfFullyRecordedReflections > 0):
                self.addExecutiveSummaryLine("Profile fitted fully recorded:")
                self.addExecutiveSummaryLine(strNumberProfileFittedFullyRecorded)
                self.addExecutiveSummaryLine(strAverageIntensityProfileFittedFullyRecorded)
                self.addExecutiveSummaryLine(strAverageIOverSigmaProfileFittedFullyRecorded)

            self.addExecutiveSummaryLine("Profile fitted partials:")
            self.addExecutiveSummaryLine(strNumberProfileFittedPartials)
            self.addExecutiveSummaryLine(strAverageIntensityProfileFittedPartials)
            #self.addExecutiveSummaryLine( strAverageSigmaProfileFittedPartials )
            self.addExecutiveSummaryLine(strAverageIOverSigmaProfileFittedPartials)

            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine("Path to MTZ file : %s" % xsDataMOSFLMOutputIntegration.getGeneratedMTZFile().getPath().getValue())
    def generateExecutiveSummary(self, _edPlugin):
        """
        Generates a summary of the execution of the plugin.
        """
        EDPluginMOSFLMv10.generateExecutiveSummary(self, _edPlugin)
        self.DEBUG("EDPluginMOSFLMIndexingv10.createDataMOSFLMOutputIndexing")
        xsDataMOSFLMInputIndexing = self.getDataInput()
        xsDataMOSFLMOutputIndexing = self.getDataOutput()
        if not self.isFailure():
            self.addExecutiveSummaryLine(
                "Execution of MOSFLM indexing successful.")
        self.addExecutiveSummaryLine(
            "Image directory         : %s" %
            xsDataMOSFLMInputIndexing.getDirectory().getValue())
        self.addExecutiveSummaryLine(
            "Image template          : %s" %
            xsDataMOSFLMInputIndexing.getTemplate().getValue())
        strImagesUsed = "Images used in indexing : "
        for xsDataMOSFLMImage in xsDataMOSFLMInputIndexing.getImage():
            strImagesUsed += "%5d" % xsDataMOSFLMImage.getNumber().getValue()
        self.addExecutiveSummaryLine(strImagesUsed)
        if (xsDataMOSFLMInputIndexing.getSymmetry() is not None):
            self.addExecutiveSummaryLine(
                "Target symmetry     : %s" %
                xsDataMOSFLMInputIndexing.getSymmetry().getValue())
            self.addExecutiveSummaryLine("")
        if (xsDataMOSFLMOutputIndexing is not None):
            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine(
                "List of possible solutions (index, penalty, lattice and cell):"
            )
            iSelectedSolutionNumber = xsDataMOSFLMOutputIndexing.getSelectedSolutionNumber(
            ).getValue()
            # Add all solutions with penalty < 100 + 1 solution with penalty > 100
            bAddSolution = False
            listMOSFLMOutputIndexing = xsDataMOSFLMOutputIndexing.getPossibleSolutions(
            )
            iNumberOfSolutions = len(listMOSFLMOutputIndexing)
            for i in range(iNumberOfSolutions):

                iPenalty = listMOSFLMOutputIndexing[i].getPenalty().getValue()
                if (i < (iNumberOfSolutions - 1)):
                    iPenaltyNext = listMOSFLMOutputIndexing[
                        i + 1].getPenalty().getValue()
                    if ((iPenalty >= 100) and (iPenaltyNext <= 100)):
                        bAddSolution = True
                if (bAddSolution):
                    iIndex = listMOSFLMOutputIndexing[i].getIndex().getValue()
                    xsDataCell = listMOSFLMOutputIndexing[i].getCell()
                    strLattice = listMOSFLMOutputIndexing[i].getLattice(
                    ).getValue()
                    strPossibleSolution = "%3d %4d %2s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f" % \
                                                (iIndex, iPenalty, strLattice, \
                                                  xsDataCell.getLength_a().getValue(),
                                                  xsDataCell.getLength_b().getValue(),
                                                  xsDataCell.getLength_c().getValue(),
                                                  xsDataCell.getAngle_alpha().getValue(),
                                                  xsDataCell.getAngle_beta().getValue(),
                                                  xsDataCell.getAngle_gamma().getValue(),
                                                 )
                    self.addExecutiveSummaryLine(strPossibleSolution)
                iPenaltyOld = iPenalty
            self.addExecutiveSummaryLine("")
            self.addExecutiveSummaryLine("Choosen solution number   : %14d" %
                                         iSelectedSolutionNumber)
            strSelectedSpaceGroup = xsDataMOSFLMOutputIndexing.getSelectedSolutionSpaceGroup(
            ).getValue()
            self.addExecutiveSummaryLine("Selected space group      : %14s" %
                                         (strSelectedSpaceGroup))
            xsDataCellRefined = xsDataMOSFLMOutputIndexing.getRefinedNewmat(
            ).getRefinedCell()
            self.addExecutiveSummaryLine("Refined cell              : %6.2f %7.2f %7.2f %5.1f %5.1f %5.1f" % (\
                                          xsDataCellRefined.getLength_a().getValue(),
                                          xsDataCellRefined.getLength_b().getValue(),
                                          xsDataCellRefined.getLength_c().getValue(),
                                          xsDataCellRefined.getAngle_alpha().getValue(),
                                          xsDataCellRefined.getAngle_beta().getValue(),
                                          xsDataCellRefined.getAngle_gamma().getValue()
                                          ))
            iSpotsTotal = xsDataMOSFLMOutputIndexing.getSpotsTotal().getValue()
            iSpotsUsed = xsDataMOSFLMOutputIndexing.getSpotsUsed().getValue()
            self.addExecutiveSummaryLine("Number of spots used      : %14d " %
                                         (iSpotsUsed))
            self.addExecutiveSummaryLine("Number of spots total     : %14d " %
                                         (iSpotsTotal))
            fDeviationPositional = xsDataMOSFLMOutputIndexing.getDeviationPositional(
            ).getValue()
            fDeviationAngular = xsDataMOSFLMOutputIndexing.getDeviationAngular(
            ).getValue()
            self.addExecutiveSummaryLine(
                "Spot deviation positional : %14.2f [mm]" %
                (fDeviationPositional))
            self.addExecutiveSummaryLine(
                "Spot deviation angular    : %14.2f [degrees]" %
                (fDeviationAngular))
            fBeamshiftX = xsDataMOSFLMOutputIndexing.getBeamShift().getX(
            ).getValue()
            fBeamshiftY = xsDataMOSFLMOutputIndexing.getBeamShift().getY(
            ).getValue()
            self.addExecutiveSummaryLine("Beam shift (X, Y)         : %6.3f, %6.3f [mm]" % \
                                          (fBeamshiftX, fBeamshiftY))
            fMosaicityEstimated = xsDataMOSFLMOutputIndexing.getMosaicityEstimation(
            ).getValue()
            self.addExecutiveSummaryLine(
                "Estimated mosaicity       : %14.2f [degrees]" %
                fMosaicityEstimated)