def testDefaultChemicalComposition(self): edPluginStrategy = self.createPlugin() from XSDataCommon import XSDataAngle from XSDataCommon import XSDataLength from XSDataMXv1 import XSDataSampleCrystalMM from XSDataMXv1 import XSDataCrystal from XSDataMXv1 import XSDataCell xsDataSampleCrystalMM = XSDataSampleCrystalMM() xsDataCrystal = XSDataCrystal() xsDataCell = XSDataCell(XSDataAngle(90.0), XSDataAngle(90.0), XSDataAngle(90.0), XSDataLength(78.9), XSDataLength(95.162), XSDataLength(104.087)) xsDataCrystal.setCell(xsDataCell) xsDataSampleCrystalMM.setCrystal(xsDataCrystal) inumOperators = 4 xsDataSample2 = edPluginStrategy.getDefaultChemicalComposition(xsDataSampleCrystalMM, inumOperators) strChainType = xsDataSample2.getStructure().getChain()[0].getType() EDAssert.equal("protein", strChainType.getValue())
def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlCharacterisationv1_2.preProcess") # Load the plugins self.__edPluginControlIndexingIndicators = self.loadPlugin(self.__strPluginControlIndexingIndicators, \ "Indexing") self.__edPluginControlIndexingLabelit = self.loadPlugin(self.__strPluginControlIndexingLabelit, \ "IndexingLabelit") self.__edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self.__strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self.__edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self.__strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self.__edPluginControlGeneratePrediction = self.loadPlugin(self.__strPluginControlGeneratePrediction, \ "GeneratePrediction") self.__edPluginControlIntegration = self.loadPlugin(self.__strPluginControlIntegration, \ "Integration") self.__edPluginControlStrategy = self.loadPlugin(self.__strPluginControlStrategy, \ "Strategy") if (self.__edPluginControlIndexingIndicators is not None): self.DEBUG("EDPluginControlCharacterisationv1_2.preProcess: " + self.__strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self.__xsDataCollection = xsDataInputCharacterisation.getDataCollection() xsDataCrystal = None xsDataSubWedgeList = self.__xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_2.preProcess: No subwedges in input data." self.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam().getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.addErrorMessage("EDPluginControlCharacterisationv1_2.preProcess ERROR: " + strErrorMessage) #self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self.__xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup() if (xsDataStringForcedSpaceGroup is not None): self.__xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self.__xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self.__edPluginControlIndexingIndicators.setDataInput(self.__xsDataCollection, "dataCollection") if self.__xsDataCrystal is not None: self.__edPluginControlIndexingIndicators.setDataInput(self.__xsDataCrystal, "crystal") # Populate characterisation object self.__xsDataResultCharacterisation = XSDataResultCharacterisation() self.__xsDataResultCharacterisation.setDataCollection(XSDataCollection.parseString(self.__xsDataCollection.marshal()))
def generateXSDataIndexingResult(_xsDataResultXDSIndexing, _xsDataExperimentalCondition=None): xsDataIndexingResult = XSDataIndexingResult() xsDataIndexingSolutionSelected = XSDataIndexingSolutionSelected() xsDataCrystalSelected = XSDataCrystal() # xsDataIndexingSolutionSelected.setNumber(XSDataInteger(iIndex)) # xsDataCellSelected = xsDataLabelitSolution.getUnitCell() spaceGroupName = EDUtilsSymmetry.getMinimumSymmetrySpaceGroupFromBravaisLattice(_xsDataResultXDSIndexing.bravaisLattice.value) xsDataCrystalSelected = XSDataCrystal() xsDataSpaceGroupSelected = XSDataSpaceGroup() xsDataSpaceGroupSelected.setName(XSDataString(spaceGroupName)) xsDataCrystalSelected.setSpaceGroup(xsDataSpaceGroupSelected) # xsDataCrystalSelected.setCell(xsDataCellSelected) xsDataCrystalSelected.setMosaicity(XSDataDouble(_xsDataResultXDSIndexing.mosaicity.value)) xsDataCrystalSelected.setCell(XSDataCell.parseString(_xsDataResultXDSIndexing.unitCell.marshal())) xsDataIndexingSolutionSelected.setCrystal(xsDataCrystalSelected) xsDataOrientation = XSDataOrientation() xsDataOrientation.setMatrixA(_xsDataResultXDSIndexing.getAMatrix()) xsDataOrientation.setMatrixU(_xsDataResultXDSIndexing.getUMatrix()) xsDataIndexingSolutionSelected.setOrientation(xsDataOrientation) xsDataStatisticsIndexing = XSDataStatisticsIndexing() if (_xsDataExperimentalCondition is not None): fBeamPositionXOrig = _xsDataExperimentalCondition.getDetector().getBeamPositionX().getValue() fBeamPositionYOrig = _xsDataExperimentalCondition.getDetector().getBeamPositionY().getValue() fBeamPositionXNew = _xsDataResultXDSIndexing.getBeamCentreX().getValue() fBeamPositionYNew = _xsDataResultXDSIndexing.getBeamCentreY().getValue() xsDataStatisticsIndexing.setBeamPositionShiftX(XSDataLength(fBeamPositionXOrig - fBeamPositionXNew)) xsDataStatisticsIndexing.setBeamPositionShiftY(XSDataLength(fBeamPositionYOrig - fBeamPositionYNew)) xsDataExperimentalConditionRefined = None if (_xsDataExperimentalCondition is None): xsDataExperimentalConditionRefined = XSDataExperimentalCondition() else: # Copy the incoming experimental condition xmlExperimentalCondition = _xsDataExperimentalCondition.marshal() xsDataExperimentalConditionRefined = XSDataExperimentalCondition.parseString(xmlExperimentalCondition) xsDataDetector = xsDataExperimentalConditionRefined.getDetector() if (xsDataDetector is None): xsDataDetector = XSDataDetector() xsDataDetector.setBeamPositionX(XSDataLength(_xsDataResultXDSIndexing.getBeamCentreX().value)) xsDataDetector.setBeamPositionY(XSDataLength(_xsDataResultXDSIndexing.getBeamCentreY().value)) xsDataDetector.setDistance(_xsDataResultXDSIndexing.getDistance()) xsDataExperimentalConditionRefined.setDetector(xsDataDetector) xsDataIndexingSolutionSelected.setExperimentalConditionRefined(xsDataExperimentalConditionRefined) xsDataIndexingResult.setSelectedSolution(xsDataIndexingSolutionSelected) return xsDataIndexingResult
def preProcess(self, _edObject=None): """ Gets the Configuration Parameters, if found, overrides default parameters """ EDPluginControl.preProcess(self, _edObject) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_1.preProcess...") self.__edPluginIndexing = self.loadPlugin(self.__strPluginIndexingName , "Indexing") self.__edPluginIntegration = self.loadPlugin(self.__strPluginIntegrationName, "Integration") self.__edPluginStrategy = self.loadPlugin(self.__strPluginStrategyName , "Strategy") if (self.__edPluginIndexing is not None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_1.preProcess: " + self.__strPluginIndexingName + " Found... setting Data Input") # create Data Input for indexing xsDataInputStrategy = self.getDataInput() xsDataCollection = xsDataInputStrategy.getDataCollection() xsDataSample = xsDataCollection.getSample() xsDataSubWedgeList = xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_1.preProcess: No subwedges in input data." EDVerbose.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam().getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): pyStrErrorMessage = "EDPluginControlCharacterisationv1_1.preProcess ERROR: Input flux is negative or close to zero. Execution of characterisation aborted." EDVerbose.ERROR(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) self.setFailure() xsDataIndexingInput = XSDataIndexingInput() xsDataIndexingInput.setDataCollection(xsDataCollection) xsDataIndexingInput.setExperimentalCondition(xsDataExperimentalCondition) xsDataDiffractionPlan = xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup() if (xsDataStringForcedSpaceGroup is not None): xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataIndexingInput.setCrystal(xsDataCrystal) self.__edPluginIndexing.setDataInput(xsDataIndexingInput) # Populate characterisation object self.__xsDataResultCharacterisation = XSDataResultCharacterisation() self.__xsDataResultCharacterisation.setDataCollection(XSDataCollection.parseString(xsDataCollection.marshal()))
def preProcess(self, _edObject=None): """ Gets the Configuration Parameters, if found, overrides default parameters """ EDPluginControl.preProcess(self, _edObject) EDVerbose.DEBUG("EDPluginControlCharacterisationv2_0.preProcess...") self.edPluginIndexing = self.loadPlugin(self.strPluginIndexingName, "Indexing") self.edPluginIntegration = self.loadPlugin( self.strPluginIntegrationName, "Integration") self.edPluginStrategy = self.loadPlugin(self.strPluginStrategyName, "Strategy") if (self.edPluginIndexing is not None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv2_0.preProcess: " + self.strPluginIndexingName + " Found... setting Data Input") # create Data Input for indexing xsDataInputStrategy = self.getDataInput( "mxv1InputCharacterisation")[0] xsDataCollection = xsDataInputStrategy.getDataCollection() #xsDataSample = xsDataCollection.getSample() xsDataSubWedgeList = xsDataCollection.getSubWedge() xsDataExperimentalCondition = xsDataSubWedgeList[ 0].getExperimentalCondition() xsDataIndexingInput = XSDataIndexingInput() xsDataIndexingInput.setDataCollection(xsDataCollection) xsDataIndexingInput.setExperimentalCondition( xsDataExperimentalCondition) xsDataDiffractionPlan = xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup( ) if (xsDataStringForcedSpaceGroup is not None): xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataIndexingInput.setCrystal(xsDataCrystal) self.edPluginIndexing.setDataInput(xsDataIndexingInput) # Populate characterisation object self.xsDataResultCharacterisationv2_0 = XSDataResultCharacterisationv2_0( ) self.xsDataResultCharacterisation = XSDataResultCharacterisation() self.xsDataResultCharacterisationv2_0.setMxv1ResultCharacterisation( self.xsDataResultCharacterisation) self.xsDataResultCharacterisation.setDataCollection( XSDataCollection.parseString(xsDataCollection.marshal()))
def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.preProcess") # Load the plugins self._edPluginControlIndexingIndicators = self.loadPlugin(self._strPluginControlIndexingIndicators, \ "Indexing") self._edPluginControlIndexingLabelit = self.loadPlugin(self._strPluginControlIndexingLabelit, \ "IndexingLabelit") self._edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self._edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self._edPluginControlGeneratePrediction = self.loadPlugin(self._strPluginControlGeneratePrediction, \ "GeneratePrediction") self._edPluginControlIntegration = self.loadPlugin(self._strPluginControlIntegration, \ "Integration") self._edPluginControlXDSGenerateBackgroundImage = self.loadPlugin(self._strPluginControlXDSGenerateBackgroundImage, \ "ControlXDSGenerateBackgroundImage") self._edPluginControlStrategy = self.loadPlugin(self._strPluginControlStrategy, \ "Strategy") if (self._edPluginControlIndexingIndicators is not None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.preProcess: " + self._strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self._xsDataCollection = xsDataInputCharacterisation.getDataCollection() xsDataCrystal = None xsDataSubWedgeList = self._xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_3.preProcess: No subwedges in input data." EDVerbose.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam().getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage("EDPluginControlCharacterisationv1_3.preProcess ERROR: " + strErrorMessage) #self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self._xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup() if (xsDataStringForcedSpaceGroup is not None): self._xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self._xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCollection, "dataCollection") if self._xsDataCrystal is not None: self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCrystal, "crystal") # Populate characterisation object self._xsDataResultCharacterisation = XSDataResultCharacterisation() self._xsDataResultCharacterisation.setDataCollection(XSDataCollection.parseString(self._xsDataCollection.marshal()))
def preProcess(self, _edObject=None): """ Gets the Configuration Parameters, if found, overrides default parameters """ EDPluginControl.preProcess(self, _edObject) EDVerbose.DEBUG("EDPluginControlCharacterisationv2_0.preProcess...") self.edPluginIndexing = self.loadPlugin(self.strPluginIndexingName, "Indexing") self.edPluginIntegration = self.loadPlugin(self.strPluginIntegrationName, "Integration") self.edPluginStrategy = self.loadPlugin(self.strPluginStrategyName, "Strategy") if self.edPluginIndexing is not None: EDVerbose.DEBUG( "EDPluginControlCharacterisationv2_0.preProcess: " + self.strPluginIndexingName + " Found... setting Data Input" ) # create Data Input for indexing xsDataInputStrategy = self.getDataInput("mxv1InputCharacterisation")[0] xsDataCollection = xsDataInputStrategy.getDataCollection() # xsDataSample = xsDataCollection.getSample() xsDataSubWedgeList = xsDataCollection.getSubWedge() xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() xsDataIndexingInput = XSDataIndexingInput() xsDataIndexingInput.setDataCollection(xsDataCollection) xsDataIndexingInput.setExperimentalCondition(xsDataExperimentalCondition) xsDataDiffractionPlan = xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup() if xsDataStringForcedSpaceGroup is not None: xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataIndexingInput.setCrystal(xsDataCrystal) self.edPluginIndexing.setDataInput(xsDataIndexingInput) # Populate characterisation object self.xsDataResultCharacterisationv2_0 = XSDataResultCharacterisationv2_0() self.xsDataResultCharacterisation = XSDataResultCharacterisation() self.xsDataResultCharacterisationv2_0.setMxv1ResultCharacterisation(self.xsDataResultCharacterisation) self.xsDataResultCharacterisation.setDataCollection( XSDataCollection.parseString(xsDataCollection.marshal()) )
def testDefaultChemicalComposition(self): edPluginStrategy = self.createPlugin() xsDataSampleCrystalMM = XSDataSampleCrystalMM() xsDataCrystal = XSDataCrystal() xsDataCell = XSDataCell(angle_alpha=XSDataAngle(90.0), angle_beta=XSDataAngle(90.0), angle_gamma=XSDataAngle(90.0), length_a=XSDataLength(78.9), length_b=XSDataLength(95.162), length_c=XSDataLength(104.087)) xsDataCrystal.setCell(xsDataCell) xsDataSampleCrystalMM.setCrystal(xsDataCrystal) inumOperators = 4 xsDataSample2 = edPluginStrategy.getDefaultChemicalComposition(xsDataSampleCrystalMM, inumOperators) pyStrChainType = xsDataSample2.getStructure().getChain()[0].getType() EDAssert.equal("protein", pyStrChainType.getValue())
def generateXSDataIndexingResult(_xsDataResultLabelitIndexing, _xsDataExperimentalCondition=None): EDVerbose.DEBUG("EDHandlerXSDataLabelitv1_1.generateXSDataIndexingOutput") xsDataLabelitScreenOutput = _xsDataResultLabelitIndexing.screenOutput xsDataLabelitMosflmScriptsOutput = _xsDataResultLabelitIndexing.mosflmScriptsOutput iSelectedSolutionNumber = xsDataLabelitScreenOutput.getSelectedSolutionNumber().getValue() xsDataIndexingResult = XSDataIndexingResult() xsDataIndexingSolutionSelected = None for xsDataLabelitSolution in xsDataLabelitScreenOutput.getLabelitScreenSolution(): xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() edStringSpaceGroupName = EDUtilsSymmetry.getMinimumSymmetrySpaceGroupFromBravaisLattice(xsDataLabelitSolution.getBravaisLattice().getValue()) xsDataSpaceGroup.setName(XSDataString(edStringSpaceGroupName)) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataCrystal.setCell(xsDataLabelitSolution.getUnitCell()) xsDataIndexingSolution = XSDataIndexingSolution() xsDataIndexingSolution.setCrystal(xsDataCrystal) iIndex = xsDataLabelitSolution.getSolutionNumber().getValue() xsDataIndexingSolution.setNumber(XSDataInteger(iIndex)) xsDataIndexingResult.addSolution(xsDataIndexingSolution) if (iIndex == iSelectedSolutionNumber): xsDataIndexingSolutionSelected = XSDataIndexingSolutionSelected() xsDataIndexingSolutionSelected.setNumber(XSDataInteger(iIndex)) edStringSelectedSpaceGroupName = edStringSpaceGroupName xsDataCellSelected = xsDataLabelitSolution.getUnitCell() fRmsdSelected = xsDataLabelitSolution.getRmsd().getValue() iNumberOfSpotsSelected = xsDataLabelitSolution.getNumberOfSpots().getValue() xsDataCrystalSelected = XSDataCrystal() xsDataSpaceGroupSelected = XSDataSpaceGroup() xsDataSpaceGroupSelected.setName(XSDataString(edStringSelectedSpaceGroupName)) xsDataSpaceGroupSelected.setITNumber(XSDataInteger(EDUtilsSymmetry.getITNumberFromSpaceGroupName(edStringSelectedSpaceGroupName))) xsDataCrystalSelected.setSpaceGroup(xsDataSpaceGroupSelected) xsDataCrystalSelected.setCell(xsDataCellSelected) xsDataCrystalSelected.setMosaicity(XSDataDouble(xsDataLabelitScreenOutput.getMosaicity().getValue())) xsDataIndexingSolutionSelected.setCrystal(xsDataCrystalSelected) xsDataOrientation = XSDataOrientation() xsDataOrientation.setMatrixA(xsDataLabelitMosflmScriptsOutput.getAMatrix()) xsDataOrientation.setMatrixU(xsDataLabelitMosflmScriptsOutput.getUMatrix()) xsDataIndexingSolutionSelected.setOrientation(xsDataOrientation) xsDataStatisticsIndexing = XSDataStatisticsIndexing() if (_xsDataExperimentalCondition is not None): fBeamPositionXOrig = _xsDataExperimentalCondition.getDetector().getBeamPositionX().getValue() fBeamPositionYOrig = _xsDataExperimentalCondition.getDetector().getBeamPositionY().getValue() fBeamPositionXNew = xsDataLabelitScreenOutput.getBeamCentreX().getValue() fBeamPositionYNew = xsDataLabelitScreenOutput.getBeamCentreY().getValue() xsDataStatisticsIndexing.setBeamPositionShiftX(XSDataLength(fBeamPositionXOrig - fBeamPositionXNew)) xsDataStatisticsIndexing.setBeamPositionShiftY(XSDataLength(fBeamPositionYOrig - fBeamPositionYNew)) # xsDataStatisticsIndexing.setSpotDeviXSDataLength( dDistanceRefinedationAngular( XSDataAngle( dDeviationAngular ) ) xsDataStatisticsIndexing.setSpotDeviationPositional(XSDataLength(fRmsdSelected)) xsDataStatisticsIndexing.setSpotsUsed(XSDataInteger(iNumberOfSpotsSelected)) xsDataStatisticsIndexing.setSpotsTotal(XSDataInteger(iNumberOfSpotsSelected)) xsDataIndexingSolutionSelected.setStatistics(xsDataStatisticsIndexing) xsDataExperimentalConditionRefined = None if (_xsDataExperimentalCondition is None): xsDataExperimentalConditionRefined = XSDataExperimentalCondition() else: # Copy the incoming experimental condition xmlExperimentalCondition = _xsDataExperimentalCondition.marshal() xsDataExperimentalConditionRefined = XSDataExperimentalCondition.parseString(xmlExperimentalCondition) xsDataDetector = xsDataExperimentalConditionRefined.getDetector() if (xsDataDetector is None): xsDataDetector = XSDataDetector() xsDataDetector.setBeamPositionX(xsDataLabelitScreenOutput.getBeamCentreX()) xsDataDetector.setBeamPositionY(xsDataLabelitScreenOutput.getBeamCentreY()) xsDataDetector.setDistance(xsDataLabelitScreenOutput.getDistance()) xsDataExperimentalConditionRefined.setDetector(xsDataDetector) xsDataIndexingSolutionSelected.setExperimentalConditionRefined(xsDataExperimentalConditionRefined) xsDataIndexingResult.setSelectedSolution(xsDataIndexingSolutionSelected) xsDataIndexingResult.setIndexingLogFile(xsDataLabelitScreenOutput.getPathToLogFile()) return xsDataIndexingResult
class EDPluginControlCharacterisationv1_4(EDPluginControl): """ [To be replaced with a description of EDPluginControlTemplatev10] """ def __init__(self): EDPluginControl.__init__(self) self.setXSDataInputClass(XSDataInputCharacterisation) self._strPluginControlIndexingIndicators = "EDPluginControlIndexingIndicatorsv1_1" self._strPluginExecEvaluationIndexing = "EDPluginExecEvaluationIndexingv10" self._strPluginControlIndexingMOSFLM = "EDPluginControlIndexingMOSFLMv10" self._strPluginControlGeneratePrediction = "EDPluginControlGeneratePredictionv10" self._strPluginControlIntegration = "EDPluginControlIntegrationv10" self._strPluginControlXDSGenerateBackgroundImage = "EDPluginControlXDSGenerateBackgroundImagev1_0" self._strPluginControlStrategy = "EDPluginControlStrategyv1_2" self._strPluginGenerateThumbnailName = "EDPluginMXThumbnailv1_1" self._strPluginControlKappaName = "EDPluginControlKappav1_0" self._listPluginGenerateThumbnail = [] self._edPluginControlIndexingIndicators = None self._edPluginExecEvaluationIndexingMOSFLM = None self._edPluginExecEvaluationIndexingLABELIT = None self._edPluginControlGeneratePrediction = None self._edPluginControlIntegration = None self._edPluginControlXDSGenerateBackgroundImage = None self._edPluginControlStrategy = None self._edPluginControlKappa = None self._xsDataCollection = None self._xsDataResultCharacterisation = None self._xsDataIndexingResultMOSFLM = None self._xsDataCrystal = None self._strCharacterisationShortSummary = "" self._strStatusMessage = "" self._xsDataFileXdsBackgroundImage = None self._bDoStrategyCalculation = True self._fMinTransmission = 10 # % self._iNoReferenceImages = None self._iNoImagesWithDozorScore = None self._strMxCuBE_URI = None self._oServerProxy = None self._runKappa = False self._bDoOnlyMoslmfIndexing = False def checkParameters(self): """ Checks the mandatory parameters. """ self.DEBUG("EDPluginControlCharacterisationv1_4.checkParameters") self.checkMandatoryParameters(self.getDataInput(), "Data Input is None") self.checkMandatoryParameters(self.getDataInput().getDataCollection(), "dataCollection") self.checkMandatoryParameters( self.getDataInput().getDataCollection().getDiffractionPlan(), "diffractionPlan") def configure(self): """ Gets the configuration parameters (if any). """ EDPluginControl.configure(self) self.DEBUG("EDPluginControlCharacterisationv1_4.configure") self._strMxCuBE_URI = self.config.get("mxCuBE_URI", None) if self._strMxCuBE_URI is not None and "mxCuBE_XMLRPC_log" in os.environ.keys( ): self.DEBUG( "Enabling sending messages to mxCuBE via URI {0}".format( self._strMxCuBE_URI)) self._oServerProxy = ServerProxy(self._strMxCuBE_URI) self._runKappa = self.config.get("runKappa", False) self._fMinTransmission = self.config.get("minTransmissionWarning", self._fMinTransmission) self._bDoOnlyMoslmfIndexing = self.config.get("doOnlyMosflmIndexing", False) def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlCharacterisationv1_4.preProcess") self._xsDataResultCharacterisation = XSDataResultCharacterisation() # Load the plugins self._edPluginControlIndexingIndicators = self.loadPlugin(self._strPluginControlIndexingIndicators, \ "Indexing") self._edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self._edPluginControlIndexingMOSFLM = self.loadPlugin(self._strPluginControlIndexingMOSFLM, \ "IndexingMOSFLM") self._edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self._edPluginControlGeneratePrediction = self.loadPlugin(self._strPluginControlGeneratePrediction, \ "GeneratePrediction") self._edPluginControlIntegration = self.loadPlugin(self._strPluginControlIntegration, \ "Integration") self._edPluginControlXDSGenerateBackgroundImage = self.loadPlugin(self._strPluginControlXDSGenerateBackgroundImage, \ "ControlXDSGenerateBackgroundImage") self._edPluginControlStrategy = self.loadPlugin(self._strPluginControlStrategy, \ "Strategy") if self._runKappa: self._edPluginControlKappa = self.loadPlugin( self._strPluginControlKappaName, "Kappa") if (self._edPluginControlIndexingIndicators is not None): self.DEBUG("EDPluginControlCharacterisationv1_4.preProcess: " + self._strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self._xsDataCollection = xsDataInputCharacterisation.getDataCollection( ) # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = self._xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition( ).getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: strWarningMessageBanner = "^" * 80 strWarningMessage1 = "WARNING! Transmission for characterisation set to %.1f %%" % fTransmission strWarningMessage2 = "Please consider re-characterising with transmission set to 100 %" self.warning(strWarningMessageBanner) self.warning(strWarningMessage1) self.warning(strWarningMessage2) self.warning(strWarningMessageBanner) self.addWarningMessage(strWarningMessageBanner) self.addWarningMessage(strWarningMessage1) self.addWarningMessage(strWarningMessage2) self.addWarningMessage(strWarningMessageBanner) self.sendMessageToMXCuBE(strWarningMessage1, "warning") self.sendMessageToMXCuBE(strWarningMessage2, "warning") xsDataCrystal = None xsDataSubWedgeList = self._xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_4.preProcess: No subwedges in input data." self.ERROR(strError) self.setFailure() else: # Load the thumbnail plugins self._iNoReferenceImages = 0 for subWedge in xsDataInputCharacterisation.dataCollection.subWedge: for image in subWedge.image: self._iNoReferenceImages += 1 edPluginJpeg = self.loadPlugin( self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(1024) xsDataInputMXThumbnail.width = XSDataInteger(1024) jpegFilename = os.path.splitext( os.path.basename(image.path.value))[0] + ".jpg" xsDataInputMXThumbnail.outputPath = XSDataFile( XSDataString( os.path.join(self.getWorkingDirectory(), jpegFilename))) edPluginJpeg.dataInput = xsDataInputMXThumbnail edPluginThumnail = self.loadPlugin( self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(256) xsDataInputMXThumbnail.width = XSDataInteger(256) thumbnailFilename = os.path.splitext( os.path.basename( image.path.value))[0] + ".thumbnail.jpg" xsDataInputMXThumbnail.outputPath = XSDataFile( XSDataString( os.path.join(self.getWorkingDirectory(), thumbnailFilename))) edPluginThumnail.dataInput = xsDataInputMXThumbnail self._listPluginGenerateThumbnail.append( (image, edPluginJpeg, edPluginThumnail)) edPluginJpeg.execute() edPluginThumnail.execute() xsDataExperimentalCondition = xsDataSubWedgeList[ 0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam( ).getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage( "EDPluginControlCharacterisationv1_4.preProcess ERROR: " + strErrorMessage) # self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self._xsDataCollection.getDiffractionPlan( ) xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup( ) if (xsDataStringForcedSpaceGroup is not None): self._xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self._xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self._edPluginControlIndexingIndicators.setDataInput( self._xsDataCollection, "dataCollection") if self._xsDataCrystal is not None: self._edPluginControlIndexingIndicators.setDataInput( self._xsDataCrystal, "crystal") # Populate characterisation object self._xsDataResultCharacterisation.setDataCollection( XSDataCollection.parseString( self._xsDataCollection.marshal())) def process(self, _edObject=None): EDPluginControl.process(self) self.DEBUG("EDPluginControlCharacterisationv1_4.process") self._edPluginControlIndexingIndicators.connectSUCCESS( self.doSuccessIndexingIndicators) self._edPluginControlIndexingIndicators.connectFAILURE( self.doFailureIndexingIndicators) self._edPluginExecEvaluationIndexingLABELIT.connectSUCCESS( self.doSuccessEvaluationIndexingLABELIT) self._edPluginExecEvaluationIndexingLABELIT.connectFAILURE( self.doFailureEvaluationIndexingLABELIT) self._edPluginControlIndexingMOSFLM.connectSUCCESS( self.doSuccessIndexingMOSFLM) self._edPluginControlIndexingMOSFLM.connectFAILURE( self.doFailureIndexingMOSFLM) self._edPluginExecEvaluationIndexingMOSFLM.connectSUCCESS( self.doSuccessEvaluationIndexingMOSFLM) self._edPluginExecEvaluationIndexingMOSFLM.connectFAILURE( self.doFailureEvaluationIndexingMOSFLM) self._edPluginControlGeneratePrediction.connectSUCCESS( self.doSuccessGeneratePrediction) self._edPluginControlGeneratePrediction.connectFAILURE( self.doFailureGeneratePrediction) self._edPluginControlIntegration.connectSUCCESS( self.doSuccessIntegration) self._edPluginControlIntegration.connectFAILURE( self.doFailureIntegration) self._edPluginControlXDSGenerateBackgroundImage.connectSUCCESS( self.doSuccessXDSGenerateBackgroundImage) self._edPluginControlXDSGenerateBackgroundImage.connectFAILURE( self.doFailureXDSGenerateBackgroundImage) self._edPluginControlStrategy.connectSUCCESS(self.doSuccessStrategy) self._edPluginControlStrategy.connectFAILURE(self.doFailureStrategy) self.executePluginSynchronous(self._edPluginControlIndexingIndicators) def finallyProcess(self, _edObject=None): EDPluginControl.finallyProcess(self) self.DEBUG("EDPluginControlCharacterisationv1_4.finallyProcess") # Synchronize thumbnail plugins for tuplePlugin in self._listPluginGenerateThumbnail: image = tuplePlugin[0] tuplePlugin[1].synchronize() jpegImage = image.copy() jpegImage.path = tuplePlugin[1].dataOutput.thumbnail.path self._xsDataResultCharacterisation.addJpegImage(jpegImage) tuplePlugin[2].synchronize() thumbnailImage = image.copy() thumbnailImage.path = tuplePlugin[2].dataOutput.thumbnail.path self._xsDataResultCharacterisation.addThumbnailImage( thumbnailImage) if self._edPluginControlGeneratePrediction.isRunning(): self._edPluginControlGeneratePrediction.synchronize() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self._xsDataResultCharacterisation.setStatusMessage( XSDataString(self._strStatusMessage)) if self._strCharacterisationShortSummary != None: self.setDataOutput( XSDataString(self._strCharacterisationShortSummary), "shortSummary") self._xsDataResultCharacterisation.setShortSummary( XSDataString(self._strCharacterisationShortSummary)) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) if self.isFailure(): self.sendMessageToMXCuBE("Ended with error messages", "error") def doSuccessIndexingIndicators(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doSuccessIndexingIndicators") # self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_4.doSuccessIndexingIndicators") if self._edPluginControlIndexingIndicators.hasDataOutput( "indexingResult"): xsDataIndexingResult = self._edPluginControlIndexingIndicators.getDataOutput( "indexingResult")[0] # self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) self._edPluginExecEvaluationIndexingLABELIT.setDataInput( xsDataIndexingResult, "indexingResult") if self._edPluginControlIndexingIndicators.hasDataOutput( "imageQualityIndicators"): listXSDataImageQualityIndicators = self._edPluginControlIndexingIndicators.getDataOutput( "imageQualityIndicators") for xsDataImageQualityIndicators in listXSDataImageQualityIndicators: if xsDataImageQualityIndicators.dozor_score: if self._iNoImagesWithDozorScore is None: self._iNoImagesWithDozorScore = 0 if xsDataImageQualityIndicators.dozor_score.value > 0.001: self._iNoImagesWithDozorScore += 1 self._xsDataResultCharacterisation.addImageQualityIndicators( xsDataImageQualityIndicators) self._edPluginExecEvaluationIndexingLABELIT.setDataInput( xsDataImageQualityIndicators, "imageQualityIndicators") if self._edPluginControlIndexingIndicators.hasDataOutput( "indicatorsShortSummary"): indicatorsShortSummary = self._edPluginControlIndexingIndicators.getDataOutput( "indicatorsShortSummary")[0].getValue() self._strCharacterisationShortSummary += indicatorsShortSummary self.sendMessageToMXCuBE(indicatorsShortSummary) self.executePluginSynchronous( self._edPluginExecEvaluationIndexingLABELIT) def doFailureIndexingIndicators(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doFailureIndexingIndicators") # If more than two reference images try to index with MOSFLM: if self._edPluginControlIndexingIndicators.hasDataOutput( "indicatorsShortSummary"): indicatorsShortSummary = self._edPluginControlIndexingIndicators.getDataOutput( "indicatorsShortSummary")[0].getValue() self._strCharacterisationShortSummary += indicatorsShortSummary self.sendMessageToMXCuBE(indicatorsShortSummary) if self._iNoImagesWithDozorScore > 0: if not self._bDoOnlyMoslmfIndexing: strWarningMessage = "Execution of Indexing and Indicators plugin failed - trying to index with MOSFLM." self.WARNING(strWarningMessage) self.sendMessageToMXCuBE(strWarningMessage, "warning") self.addWarningMessage(strWarningMessage) xsDataIndexingInput = XSDataIndexingInput() xsDataIndexingInput.dataCollection = self._xsDataCollection xsDataIndexingInput.experimentalCondition = self._xsDataCollection.subWedge[ 0].experimentalCondition xsDataIndexingInput.crystal = self._xsDataCrystal self._edPluginControlIndexingMOSFLM.dataInput = xsDataIndexingInput self.executePluginSynchronous(self._edPluginControlIndexingMOSFLM) else: strErrorMessage = "Execution of Indexing and Indicators plugin failed. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.generateExecutiveSummary(self) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessIndexingMOSFLM(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doSuccessIndexingMOSFLM") xsDataIndexingResult = self._edPluginControlIndexingMOSFLM.dataOutput self._edPluginExecEvaluationIndexingMOSFLM.setDataInput( xsDataIndexingResult, "indexingResult") self.executePluginSynchronous( self._edPluginExecEvaluationIndexingMOSFLM) def doFailureIndexingMOSFLM(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doFailureIndexingMOSFLM") strErrorMessage = "Indexing with MOSFLM failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.executePluginSynchronous( self._edPluginExecEvaluationIndexingMOSFLM) def doSuccessEvaluationIndexingLABELIT(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doSuccessEvaluationIndexingLABELIT" ) self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_4.doSuccessEvaluationIndexingLABELIT" ) # Retrieve status messages (if any) if self._edPluginExecEvaluationIndexingLABELIT.hasDataOutput( "statusMessageIndexing"): self.addStatusMessage( "Labelit: " + self._edPluginExecEvaluationIndexingLABELIT.getDataOutput( "statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexingSuccess = self._edPluginExecEvaluationIndexingLABELIT.getDataOutput( "indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self._edPluginExecEvaluationIndexingLABELIT.getDataOutput( "indexingResult")[0] self._xsDataResultCharacterisation.setIndexingResult( xsDataIndexingResult) xsDataCollection = self._xsDataResultCharacterisation.getDataCollection( ) xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection( XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution( XSDataIndexingSolutionSelected.parseString( xsDataIndexingResult.getSelectedSolution().marshal())) self._edPluginControlGeneratePrediction.setDataInput( xsDataGeneratePredictionInput) if self._edPluginControlIndexingIndicators.hasDataOutput( "indexingShortSummary"): indexingShortSummary = self._edPluginControlIndexingIndicators.getDataOutput( "indexingShortSummary")[0].getValue() self._strCharacterisationShortSummary += indexingShortSummary self.sendMessageToMXCuBE(indexingShortSummary) # Start the generation of prediction images - we synchronize in the post-process self._edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() else: if self._iNoImagesWithDozorScore > 0: if not self._bDoOnlyMoslmfIndexing: strWarningMessage = "Execution of Indexing and Indicators plugin failed - trying to index with MOSFLM." self.WARNING(strWarningMessage) self.sendMessageToMXCuBE(strWarningMessage, "warning") self.addWarningMessage(strWarningMessage) xsDataIndexingInput = XSDataIndexingInput() xsDataIndexingInput.dataCollection = self._xsDataCollection xsDataIndexingInput.experimentalCondition = self._xsDataCollection.subWedge[ 0].experimentalCondition xsDataIndexingInput.crystal = self._xsDataCrystal self._edPluginControlIndexingMOSFLM.setDataInput( xsDataIndexingInput) self.executePluginSynchronous( self._edPluginControlIndexingMOSFLM) else: strErrorMessage = "Execution of indexing with Labelit failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.setFailure() self.generateExecutiveSummary(self) if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessEvaluationIndexingMOSFLM(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doSuccessEvaluationIndexingMOSFLM" ) self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_4.doSuccessEvaluationIndexingMOSFLM" ) # Retrieve status messages (if any) if self._edPluginExecEvaluationIndexingMOSFLM.hasDataOutput( "statusMessageIndexing"): self.addStatusMessage( "MOSFLM: " + self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput( "statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexingSuccess = self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput( "indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput( "indexingResult")[0] self._xsDataResultCharacterisation.setIndexingResult( xsDataIndexingResult) self._strCharacterisationShortSummary += self.generateIndexingShortSummary( xsDataIndexingResult) xsDataCollection = self._xsDataResultCharacterisation.getDataCollection( ) xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection( XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution( XSDataIndexingSolutionSelected.parseString( xsDataIndexingResult.getSelectedSolution().marshal())) self._edPluginControlGeneratePrediction.setDataInput( xsDataGeneratePredictionInput) if self._edPluginControlIndexingIndicators.hasDataOutput( "indexingShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingIndicators.getDataOutput( "indexingShortSummary")[0].getValue() # Start the generation of prediction images - we synchronize in the post-process self._edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() else: strErrorMessage = "Execution of indexing with MOSFLM failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.setFailure() self.generateExecutiveSummary(self) if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def generateIndexingShortSummary(self, _xsDataIndexingResult): """ Generates a very short summary of the indexing """ strIndexingShortSummary = "" if self.hasDataInput("crystal"): xsDataCrystal = self.getDataInput("crystal")[0] if xsDataCrystal.getSpaceGroup() is not None: strForcedSpaceGroup = xsDataCrystal.getSpaceGroup().getName( ).getValue().upper() if xsDataCrystal.getSpaceGroup().getName().getValue() != "": strIndexingShortSummary += "Forced space group: %s\n" % strForcedSpaceGroup if _xsDataIndexingResult is not None: # Indexing solution xsDataSelectedSolution = _xsDataIndexingResult.getSelectedSolution( ) xsDataCrystal = xsDataSelectedSolution.getCrystal() # Refined cell parameters xsDataCell = xsDataCrystal.getCell() fA = xsDataCell.getLength_a().getValue() fB = xsDataCell.getLength_b().getValue() fC = xsDataCell.getLength_c().getValue() fAlpha = xsDataCell.getAngle_alpha().getValue() fBeta = xsDataCell.getAngle_beta().getValue() fGamma = xsDataCell.getAngle_gamma().getValue() # Estimated mosaicity fEstimatedMosaicity = xsDataCrystal.getMosaicity().getValue() # Space group strSpaceGroup = xsDataCrystal.getSpaceGroup().getName().getValue() # Spot deviation xsDataStatisticsIndexing = xsDataSelectedSolution.getStatistics() fSpotDeviationPositional = xsDataStatisticsIndexing.getSpotDeviationPositional( ).getValue() strIndexingShortSummary += "Indexing: laue/space group %s, mosaicity %.2f [degree], " % ( strSpaceGroup, fEstimatedMosaicity) strIndexingShortSummary += "RMS dev pos %.2f [mm]" % fSpotDeviationPositional if xsDataStatisticsIndexing.getSpotDeviationAngular() is not None: fSpotDeviationAngular = xsDataStatisticsIndexing.getSpotDeviationAngular( ).getValue() strIndexingShortSummary += " ang %.2f [degree]" % fSpotDeviationAngular strIndexingShortSummary += "\n" strIndexingShortSummary += "Indexing: refined Cell: %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n" % ( fA, fB, fC, fAlpha, fBeta, fGamma) else: strIndexingShortSummary += "Indexing failed." return strIndexingShortSummary def indexingToIntegration(self, _edPlugin=None): # Run Kappa if configured if self._runKappa: xsDataInputControlKappa = XSDataInputControlKappa() xsDataInputControlKappa.dataCollection = self._xsDataCollection xsDataInputControlKappa.selectedSolution = self._xsDataResultCharacterisation.indexingResult.selectedSolution self._edPluginControlKappa.dataInput = xsDataInputControlKappa self.executePluginSynchronous(self._edPluginControlKappa) if not self._edPluginControlKappa.isFailure(): self._xsDataResultCharacterisation.kappaReorientation = self._edPluginControlKappa.dataOutput # Create the XDS background image xsDataInputControlXDSGenerateBackgroundImage = XSDataInputControlXDSGenerateBackgroundImage( ) xsDataInputControlXDSGenerateBackgroundImage.setDataCollection( self._xsDataCollection) self._edPluginControlXDSGenerateBackgroundImage.setDataInput( xsDataInputControlXDSGenerateBackgroundImage) self._edPluginControlXDSGenerateBackgroundImage.execute() # Integrate the reference images xsDataIntegrationInput = XSDataIntegrationInput() xsDataIntegrationInput.setDataCollection( self._xsDataResultCharacterisation.getDataCollection()) xsDataIndexingResult = self._xsDataResultCharacterisation.getIndexingResult( ) xsDataExperimentalConditionRefinded = xsDataIndexingResult.getSelectedSolution( ).getExperimentalConditionRefined() xsDataIntegrationInput.setExperimentalConditionRefined( xsDataExperimentalConditionRefinded) xsDataIntegrationInput.setSelectedIndexingSolution( xsDataIndexingResult.getSelectedSolution()) self._edPluginControlIntegration.setDataInput(xsDataIntegrationInput) self.executePluginSynchronous(self._edPluginControlIntegration) def doFailureEvaluationIndexingLABELIT(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doFailureEvaluationIndexing") strErrorMessage = "Execution of indexing evaluation plugin failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.generateExecutiveSummary(self) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doFailureEvaluationIndexingMOSFLM(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doFailureEvaluationIndexingMOSFLM" ) strErrorMessage = "Execution of indexing evaluation plugin failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.generateExecutiveSummary(self) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessGeneratePrediction(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doSuccessGeneratePrediction") self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_4.doSuccessGeneratePrediction") xsDataGeneratePredictionResult = _edPlugin.getDataOutput() xsDataIndexingResult = self._xsDataResultCharacterisation.getIndexingResult( ) xsDataIndexingResult.setPredictionResult( xsDataGeneratePredictionResult) def doFailureGeneratePrediction(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doFailureGeneratePrediction") strWarningMessage = "Execution of generate prediction plugin failed." self.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) # self.addComment("warning: no prediction images") def doSuccessIntegration(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_4.doSuccessIntegration") self.retrieveSuccessMessages( self._edPluginControlIntegration, "EDPluginControlCharacterisationv1_4.doSuccessIntegration") # Wait for XDS plugin if necessary self._edPluginControlXDSGenerateBackgroundImage.synchronize() self.addStatusMessage("Integration successful.") xsDataIntegrationOutput = self._edPluginControlIntegration.getDataOutput( ) self._xsDataResultCharacterisation.setIntegrationResult( xsDataIntegrationOutput) # Integration short summary if self._edPluginControlIntegration.hasDataOutput( "integrationShortSummary"): integrationShortSummary = self._edPluginControlIntegration.getDataOutput( "integrationShortSummary")[0].getValue() self._strCharacterisationShortSummary += integrationShortSummary self.sendMessageToMXCuBE(integrationShortSummary) # self.DEBUG( self._xsDataExperimentCharacterisation.marshal() ) if self._bDoStrategyCalculation: xsDataInputStrategy = XSDataInputStrategy() xsDataSolutionSelected = self._xsDataResultCharacterisation.getIndexingResult( ).getSelectedSolution() xsDataInputStrategy.setCrystalRefined( xsDataSolutionSelected.getCrystal()) xsDataInputStrategy.setSample(self._xsDataResultCharacterisation. getDataCollection().getSample()) xsDataIntegrationSubWedgeResultList = xsDataIntegrationOutput.getIntegrationSubWedgeResult( ) bFirst = True for xsDataIntegrationSubWedgeResult in xsDataIntegrationSubWedgeResultList: if xsDataIntegrationSubWedgeResult.getBestfileHKL( ) is not None: xsDataInputStrategy.addBestFileContentHKL( xsDataIntegrationSubWedgeResult.getBestfileHKL()) if bFirst: xsDataInputStrategy.setBestFileContentDat( xsDataIntegrationSubWedgeResult.getBestfileDat()) xsDataInputStrategy.setBestFileContentPar( xsDataIntegrationSubWedgeResult.getBestfilePar()) xsDataInputStrategy.setExperimentalCondition( xsDataIntegrationSubWedgeResult. getExperimentalConditionRefined()) bFirst = False xsDataInputStrategy.setXdsBackgroundImage( self._xsDataFileXdsBackgroundImage) xsDataInputStrategy.setDataCollection(self._xsDataCollection) xsDataInputStrategy.setDiffractionPlan( self._xsDataResultCharacterisation.getDataCollection( ).getDiffractionPlan()) self._edPluginControlStrategy.setDataInput(xsDataInputStrategy) self.executePluginSynchronous(self._edPluginControlStrategy) def doFailureIntegration(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_4.doFailureIntegration") strErrorMessage = "Execution of integration failed." self.addStatusMessage("Integration FAILURE.") self.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) # self.addComment("integration failure") if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.generateExecutiveSummary(self) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessXDSGenerateBackgroundImage(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doSuccessXDSGenerateBackgroundImage" ) self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_4.doSuccessXDSGenerateBackgroundImage" ) self._xsDataFileXdsBackgroundImage = self._edPluginControlXDSGenerateBackgroundImage.getDataOutput( ).getXdsBackgroundImage() self._xsDataResultCharacterisation.setXdsBackgroundImage( self._xsDataFileXdsBackgroundImage) def doFailureXDSGenerateBackgroundImage(self, _edPlugin=None): self.DEBUG( "EDPluginControlCharacterisationv1_4.doFailureXDSGenerateBackgroundImage" ) def doSuccessStrategy(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_4.doSuccessStrategy") self.retrieveSuccessMessages( self._edPluginControlStrategy, "EDPluginControlCharacterisationv1_4.doSuccessStrategy") xsDataStrategyResult = self._edPluginControlStrategy.getDataOutput() self._xsDataResultCharacterisation.setStrategyResult( xsDataStrategyResult) if self._edPluginControlStrategy.hasDataOutput("strategyShortSummary"): strategyShortSummary = self._edPluginControlStrategy.getDataOutput( "strategyShortSummary")[0].getValue() self._strCharacterisationShortSummary += strategyShortSummary self.sendMessageToMXCuBE(strategyShortSummary) self.addStatusMessage("Strategy calculation successful.") def doFailureStrategy(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_4.doFailureStrategy") strErrorMessage = "Strategy calculation FAILURE." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) xsDataStrategyResult = self._edPluginControlStrategy.getDataOutput() self._xsDataResultCharacterisation.setStrategyResult( xsDataStrategyResult) if self._edPluginControlStrategy.hasDataOutput("strategyShortSummary"): strategyShortSummary = self._edPluginControlStrategy.getDataOutput( "strategyShortSummary")[0].getValue() self._strCharacterisationShortSummary += strategyShortSummary self.sendMessageToMXCuBE(strategyShortSummary) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.addStatusMessage("Strategy calculation FAILURE.") self.generateExecutiveSummary(self) if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() self.setFailure() def generateExecutiveSummary(self, _edPlugin): """ Generates a summary of the execution of the plugin. """ self.DEBUG( "EDPluginControlCharacterisationv1_4.generateExecutiveSummary") self.addExecutiveSummaryLine("Summary of characterisation:") xsDataInputStrategy = self.getDataInput() xsDataCollection = xsDataInputStrategy.getDataCollection() # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition().getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: self.addExecutiveSummaryLine("^" * 80) self.addExecutiveSummaryLine("^" * 80) self.addExecutiveSummaryLine("") self.addExecutiveSummaryLine( "WARNING! Transmission for characterisation set to %.1f %%" % fTransmission) self.addExecutiveSummaryLine( "Please consider re-characterising with transmission set to 100 %" ) self.addExecutiveSummaryLine("") self.addExecutiveSummaryLine("^" * 80) self.addExecutiveSummaryLine("^" * 80) xsDataDiffractionPlan = xsDataCollection.getDiffractionPlan() self.addExecutiveSummaryLine("Diffraction plan:") if (xsDataDiffractionPlan.getComplexity() is not None): self.addExecutiveSummaryLine( "BEST complexity : %s" % xsDataDiffractionPlan.getComplexity().getValue()) if (xsDataDiffractionPlan.getAimedCompleteness() is not None): self.addExecutiveSummaryLine( "Aimed completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getAimedCompleteness().getValue())) if (xsDataDiffractionPlan.getRequiredCompleteness() is not None): self.addExecutiveSummaryLine( "Required completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getRequiredCompleteness().getValue())) if (xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution() is not None): self.addExecutiveSummaryLine( "Aimed I/sigma at highest resolution : %6.1f" % xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution( ).getValue()) if (xsDataDiffractionPlan.getAimedResolution() is not None): self.addExecutiveSummaryLine( "Aimed resolution : %6.1f [A]" % xsDataDiffractionPlan.getAimedResolution().getValue()) if (xsDataDiffractionPlan.getRequiredResolution() is not None): self.addExecutiveSummaryLine( "Required resolution : %6.1f [A]" % xsDataDiffractionPlan.getRequiredResolution().getValue()) if (xsDataDiffractionPlan.getAimedMultiplicity() is not None): self.addExecutiveSummaryLine( "Aimed multiplicity : %6.1f" % xsDataDiffractionPlan.getAimedMultiplicity().getValue()) if (xsDataDiffractionPlan.getRequiredMultiplicity() is not None): self.addExecutiveSummaryLine( "Required multiplicity : %6.1f" % xsDataDiffractionPlan.getRequiredMultiplicity().getValue()) if (xsDataDiffractionPlan.getForcedSpaceGroup() is not None): self.addExecutiveSummaryLine( "Forced space group : %6s" % xsDataDiffractionPlan.getForcedSpaceGroup().getValue()) if (xsDataDiffractionPlan.getMaxExposureTimePerDataCollection() is not None): self.addExecutiveSummaryLine( "Max exposure time per data collection : %6.1f [s]" % xsDataDiffractionPlan.getMaxExposureTimePerDataCollection( ).getValue()) self.addExecutiveSummarySeparator() if self._edPluginControlIndexingIndicators is not None: self.appendExecutiveSummary( self._edPluginControlIndexingIndicators, "") if self._edPluginControlIntegration is not None: self.appendExecutiveSummary(self._edPluginControlIntegration, "") if self._edPluginControlStrategy is not None: self.appendExecutiveSummary(self._edPluginControlStrategy, "") self.addExecutiveSummarySeparator() if self._strCharacterisationShortSummary is not None: self.addExecutiveSummaryLine("Characterisation short summary:") self.addExecutiveSummaryLine("") if self._strStatusMessage != None: for strLine in self._strStatusMessage.split(". "): if strLine.endswith("."): self.addExecutiveSummaryLine(strLine) else: self.addExecutiveSummaryLine(strLine + ".") self.addExecutiveSummaryLine("") for strLine in self._strCharacterisationShortSummary.split("\n"): if strLine != "\n": self.addExecutiveSummaryLine(strLine) self.addErrorWarningMessagesToExecutiveSummary( "Characterisation error and warning messages: ") self.addExecutiveSummarySeparator() def getPluginStrategyName(self): return self._strPluginControlStrategy def addStatusMessage(self, _strStatusMessage): if self._strStatusMessage != "": self._strStatusMessage += " " self._strStatusMessage += _strStatusMessage self.sendMessageToMXCuBE(_strStatusMessage) def doStrategyCalculation(self, _bValue): self._bDoStrategyCalculation = _bValue def sendMessageToMXCuBE(self, _strMessage, level="info"): # Only for mxCuBE if self._strMxCuBE_URI is not None: self.DEBUG("Sending message to mxCuBE: {0}".format(_strMessage)) try: for strMessage in _strMessage.split("\n"): if strMessage != "": self._oServerProxy.log_message( "Characterisation: " + strMessage, level) except: self.DEBUG("Sending message to mxCuBE failed!")
class EDPluginControlCharacterisationv1_3(EDPluginControl): """ [To be replaced with a description of EDPluginControlTemplatev10] """ def __init__(self): EDPluginControl.__init__(self) self.setXSDataInputClass(XSDataInputCharacterisation) self._strPluginControlIndexingIndicators = "EDPluginControlIndexingIndicatorsv10" self._strPluginControlIndexingLabelit = "EDPluginControlIndexingLabelitv10" self._strPluginExecEvaluationIndexing = "EDPluginExecEvaluationIndexingv10" self._strPluginControlGeneratePrediction = "EDPluginControlGeneratePredictionv10" self._strPluginControlIntegration = "EDPluginControlIntegrationv10" self._strPluginControlXDSGenerateBackgroundImage = "EDPluginControlXDSGenerateBackgroundImagev1_0" self._strPluginControlStrategy = "EDPluginControlStrategyv1_2" self._strPluginGenerateThumbnailName = "EDPluginMXThumbnailv1_1" self._listPluginGenerateThumbnail = [] self._edPluginControlIndexingIndicators = None self._edPluginControlIndexingLabelit = None self._edPluginExecEvaluationIndexingMOSFLM = None self._edPluginExecEvaluationIndexingLABELIT = None self._edPluginControlGeneratePrediction = None self._edPluginControlIntegration = None self._edPluginControlXDSGenerateBackgroundImage = None self._edPluginControlStrategy = None self._xsDataCollection = None self._xsDataResultCharacterisation = None self._xsDataIndexingResultMOSFLM = None self._xsDataCrystal = None self._strCharacterisationShortSummary = "" self._strStatusMessage = "" self._xsDataFileXdsBackgroundImage = None self._bDoStrategyCalculation = True self._fMinTransmission = 10 # % def checkParameters(self): """ Checks the mandatory parameters. """ self.DEBUG("EDPluginControlCharacterisationv1_3.checkParameters") self.checkMandatoryParameters(self.getDataInput(), "Data Input is None") self.checkMandatoryParameters(self.getDataInput().getDataCollection(), "dataCollection") self.checkMandatoryParameters(self.getDataInput().getDataCollection().getDiffractionPlan(), "diffractionPlan") def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlCharacterisationv1_3.preProcess") # Load the plugins self._edPluginControlIndexingIndicators = self.loadPlugin(self._strPluginControlIndexingIndicators, \ "Indexing") self._edPluginControlIndexingLabelit = self.loadPlugin(self._strPluginControlIndexingLabelit, \ "IndexingLabelit") self._edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self._edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self._edPluginControlGeneratePrediction = self.loadPlugin(self._strPluginControlGeneratePrediction, \ "GeneratePrediction") self._edPluginControlIntegration = self.loadPlugin(self._strPluginControlIntegration, \ "Integration") self._edPluginControlXDSGenerateBackgroundImage = self.loadPlugin(self._strPluginControlXDSGenerateBackgroundImage, \ "ControlXDSGenerateBackgroundImage") self._edPluginControlStrategy = self.loadPlugin(self._strPluginControlStrategy, \ "Strategy") if (self._edPluginControlIndexingIndicators is not None): self.DEBUG("EDPluginControlCharacterisationv1_3.preProcess: " + self._strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self._xsDataCollection = xsDataInputCharacterisation.getDataCollection() # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = self._xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition().getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: strWarningMessageBanner = "^"*80 strWarningMessage1 = "WARNING! Transmission for characterisation set to %.1f %%" % fTransmission strWarningMessage2 = "Please consider re-characterising with transmission set to 100 %" self.warning(strWarningMessageBanner) self.warning(strWarningMessage1) self.warning(strWarningMessage2) self.warning(strWarningMessageBanner) self.addWarningMessage(strWarningMessageBanner) self.addWarningMessage(strWarningMessage1) self.addWarningMessage(strWarningMessage2) self.addWarningMessage(strWarningMessageBanner) xsDataCrystal = None xsDataSubWedgeList = self._xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_3.preProcess: No subwedges in input data." self.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam().getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.addErrorMessage("EDPluginControlCharacterisationv1_3.preProcess ERROR: " + strErrorMessage) #self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self._xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup() if (xsDataStringForcedSpaceGroup is not None): self._xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self._xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCollection, "dataCollection") if self._xsDataCrystal is not None: self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCrystal, "crystal") # Populate characterisation object self._xsDataResultCharacterisation = XSDataResultCharacterisation() self._xsDataResultCharacterisation.setDataCollection(XSDataCollection.parseString(self._xsDataCollection.marshal())) # Load the thumbnail plugins for subWedge in xsDataInputCharacterisation.dataCollection.subWedge: for image in subWedge.image: edPluginJpeg = self.loadPlugin(self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(1024) xsDataInputMXThumbnail.width = XSDataInteger(1024) jpegFilename = os.path.splitext(os.path.basename(image.path.value))[0]+".jpg" xsDataInputMXThumbnail.outputPath = XSDataFile(XSDataString(os.path.join(self.getWorkingDirectory(), jpegFilename))) edPluginJpeg.dataInput = xsDataInputMXThumbnail edPluginThumnail = self.loadPlugin(self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(256) xsDataInputMXThumbnail.width = XSDataInteger(256) thumbnailFilename = os.path.splitext(os.path.basename(image.path.value))[0]+".thumbnail.jpg" xsDataInputMXThumbnail.outputPath = XSDataFile(XSDataString(os.path.join(self.getWorkingDirectory(), thumbnailFilename))) edPluginThumnail.dataInput = xsDataInputMXThumbnail self._listPluginGenerateThumbnail.append((image, edPluginJpeg, edPluginThumnail)) def process(self, _edObject=None): EDPluginControl.process(self) self.DEBUG("EDPluginControlCharacterisationv1_3.process") self._edPluginControlIndexingIndicators.connectSUCCESS(self.doSuccessIndexingIndicators) self._edPluginControlIndexingIndicators.connectFAILURE(self.doFailureIndexingIndicators) self._edPluginControlIndexingLabelit.connectSUCCESS(self.doSuccessIndexingLabelit) self._edPluginControlIndexingLabelit.connectFAILURE(self.doFailureIndexingLabelit) self._edPluginExecEvaluationIndexingMOSFLM.connectSUCCESS(self.doSuccessEvaluationIndexingMOSFLM) self._edPluginExecEvaluationIndexingMOSFLM.connectFAILURE(self.doFailureEvaluationIndexingMOSFLM) self._edPluginExecEvaluationIndexingLABELIT.connectSUCCESS(self.doSuccessEvaluationIndexingLABELIT) self._edPluginExecEvaluationIndexingLABELIT.connectFAILURE(self.doFailureEvaluationIndexingLABELIT) self._edPluginControlGeneratePrediction.connectSUCCESS(self.doSuccessGeneratePrediction) self._edPluginControlGeneratePrediction.connectFAILURE(self.doFailureGeneratePrediction) self._edPluginControlIntegration.connectSUCCESS(self.doSuccessIntegration) self._edPluginControlIntegration.connectFAILURE(self.doFailureIntegration) self._edPluginControlXDSGenerateBackgroundImage.connectSUCCESS(self.doSuccessXDSGenerateBackgroundImage) self._edPluginControlXDSGenerateBackgroundImage.connectFAILURE(self.doFailureXDSGenerateBackgroundImage) self._edPluginControlStrategy.connectSUCCESS(self.doSuccessStrategy) self._edPluginControlStrategy.connectFAILURE(self.doFailureStrategy) self.executePluginSynchronous(self._edPluginControlIndexingIndicators) def finallyProcess(self, _edObject=None): EDPluginControl.finallyProcess(self) self.DEBUG("EDPluginControlCharacterisationv1_3.finallyProcess") # Synchronize thumbnail plugins for tuplePlugin in self._listPluginGenerateThumbnail: image = tuplePlugin[0] tuplePlugin[1].synchronize() jpegImage = image.copy() jpegImage.path = tuplePlugin[1].dataOutput.thumbnail.path self._xsDataResultCharacterisation.addJpegImage(jpegImage) tuplePlugin[2].synchronize() thumbnailImage = image.copy() thumbnailImage.path = tuplePlugin[2].dataOutput.thumbnail.path self._xsDataResultCharacterisation.addThumbnailImage(thumbnailImage) if self._edPluginControlGeneratePrediction.isRunning(): self._edPluginControlGeneratePrediction.synchronize() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self._xsDataResultCharacterisation.setStatusMessage(XSDataString(self._strStatusMessage)) if self._strCharacterisationShortSummary != None: self.setDataOutput(XSDataString(self._strCharacterisationShortSummary), "shortSummary") self._xsDataResultCharacterisation.setShortSummary(XSDataString(self._strCharacterisationShortSummary)) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) def doSuccessIndexingIndicators(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessIndexingIndicators") #self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessIndexingIndicators") if self._edPluginControlIndexingIndicators.hasDataOutput("indexingResult"): xsDataIndexingResult = self._edPluginControlIndexingIndicators.getDataOutput("indexingResult")[0] #self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) self._edPluginExecEvaluationIndexingMOSFLM.setDataInput(xsDataIndexingResult, "indexingResult") if self._edPluginControlIndexingIndicators.hasDataOutput("imageQualityIndicators"): listXSDataImageQualityIndicators = self._edPluginControlIndexingIndicators.getDataOutput("imageQualityIndicators") for xsDataImageQualityIndicators in listXSDataImageQualityIndicators: self._xsDataResultCharacterisation.addImageQualityIndicators(xsDataImageQualityIndicators) self._edPluginExecEvaluationIndexingMOSFLM.setDataInput(xsDataImageQualityIndicators, "imageQualityIndicators") if self._edPluginControlIndexingIndicators.hasDataOutput("indicatorsShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingIndicators.getDataOutput("indicatorsShortSummary")[0].getValue() for tuplePlugin in self._listPluginGenerateThumbnail: tuplePlugin[1].execute() tuplePlugin[2].execute() self.executePluginSynchronous(self._edPluginExecEvaluationIndexingMOSFLM) def doFailureIndexingIndicators(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doFailureIndexingIndicators") strErrorMessage = "Execution of Indexing and Indicators plugin failed. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() # def doSuccessIndexingLabelit(self, _edPlugin=None): # self.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessIndexingLabelit") # self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessIndexingLabelit") # # Retrieve the indexing result # xsDataIndexingResult = self._edPluginControlIndexingLabelit.getDataOutput() # self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) # if self._edPluginControlIndexingLabelit.hasDataOutput("indexingShortSummary"): # self._strCharacterisationShortSummary += self._edPluginControlIndexingLabelit.getDataOutput("indexingShortSummary")[0].getValue() # # Then start the integration of the reference images # self.indexingToIntegration() def doSuccessIndexingLabelit(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessIndexingLabelit") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessIndexingLabelit") if self._edPluginControlIndexingLabelit.hasDataOutput("indexingShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingLabelit.getDataOutput("indexingShortSummary")[0].getValue() # Check the indexing results xsDataIndexingResult = self._edPluginControlIndexingLabelit.getDataOutput() self._edPluginExecEvaluationIndexingLABELIT.setDataInput(xsDataIndexingResult, "indexingResult") xsDataImageQualityIndicators = self._xsDataResultCharacterisation.getImageQualityIndicators()[0] self._edPluginExecEvaluationIndexingLABELIT.setDataInput(xsDataImageQualityIndicators, "imageQualityIndicators") self.executePluginSynchronous(self._edPluginExecEvaluationIndexingLABELIT) def doFailureIndexingLabelit(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doFailureIndexingLabelit") self.addStatusMessage("Labelit: Indexing FAILURE.") if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) if self._xsDataIndexingResultMOSFLM == None: strErrorMessage = "Execution of indexing with both MOSFLM and Labelit failed. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) self.generateExecutiveSummary(self) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() else: # Use the MOSFLM indexing results - even if it's P1 self._xsDataResultCharacterisation.setIndexingResult(self._xsDataIndexingResultMOSFLM) xsDataCollection = self._xsDataResultCharacterisation.getDataCollection() xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection(XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution(XSDataIndexingSolutionSelected.parseString(self._xsDataIndexingResultMOSFLM.getSelectedSolution().marshal())) self._edPluginControlGeneratePrediction.setDataInput(xsDataGeneratePredictionInput) if self._edPluginControlIndexingIndicators.hasDataOutput("indexingShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingIndicators.getDataOutput("indexingShortSummary")[0].getValue() # Start the generation of prediction images - we synchronize in the post-process self._edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() def doSuccessEvaluationIndexingMOSFLM(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessEvaluationIndexingMOSFLM") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessEvaluationIndexing") # Retrieve status messages (if any) if self._edPluginExecEvaluationIndexingMOSFLM.hasDataOutput("statusMessageImageQualityIndicators"): self.addStatusMessage(self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput("statusMessageImageQualityIndicators")[0].getValue()) if self._edPluginExecEvaluationIndexingMOSFLM.hasDataOutput("statusMessageIndexing"): self.addStatusMessage("MOSFLM: " + self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput("statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexWithLabelit = False bIndexingSuccess = self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput("indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput("indexingResult")[0] self._xsDataIndexingResultMOSFLM = xsDataIndexingResult # Check if space group is P1 - if yes run Labelit indexing xsDataIndexingSolutionSelected = xsDataIndexingResult.getSelectedSolution() xsDataCrystal = xsDataIndexingSolutionSelected.getCrystal() xsDataSpaceGroup = xsDataCrystal.getSpaceGroup() strSpaceGroupName = xsDataSpaceGroup.getName().getValue().upper() # Check if MOSFLM has indexed in P1 if strSpaceGroupName == "P1": # Check if the user maybe asked for P1! bIndexWithLabelit = True if self._xsDataCollection.getDiffractionPlan() is not None: if self._xsDataCollection.getDiffractionPlan().getForcedSpaceGroup() is not None: if self._xsDataCollection.getDiffractionPlan().getForcedSpaceGroup().getValue().upper() == "P1": self.screen("P1 space forced by diffraction plan") bIndexWithLabelit = False if bIndexWithLabelit: self.screen("P1 space group choosed - reindexing with Labelit") else: self.screen("MOSFLM indexing successful!") if self._edPluginControlIndexingIndicators.hasDataOutput("indexingShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingIndicators.getDataOutput("indexingShortSummary")[0].getValue() # Generate prediction images xsDataCollection = self._xsDataResultCharacterisation.getDataCollection() self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection(XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution(XSDataIndexingSolutionSelected.parseString(xsDataIndexingResult.getSelectedSolution().marshal())) self._edPluginControlGeneratePrediction.setDataInput(xsDataGeneratePredictionInput) # Start the generation of prediction images - we synchronize in the post-process self._edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() else: self.screen("Indexing with MOSFLM failed!") bIndexWithLabelit = True if bIndexWithLabelit: # Execute Labelit indexing self.screen("Now trying to index with Labelit - please be patient...") xsDataIndexingInput = XSDataIndexingInput() xsDataSubWedgeList = self._xsDataCollection.getSubWedge() xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() xsDataIndexingInput.setDataCollection(self._xsDataCollection) xsDataIndexingInput.setExperimentalCondition(xsDataExperimentalCondition) if self._xsDataCrystal != None: xsDataIndexingInput.setCrystal(self._xsDataCrystal) self._edPluginControlIndexingLabelit.setDataInput(xsDataIndexingInput) self.executePluginSynchronous(self._edPluginControlIndexingLabelit) def doSuccessEvaluationIndexingLABELIT(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessEvaluationIndexingLABELIT") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessEvaluationIndexingLABELIT") # Retrieve status messages (if any) if self._edPluginExecEvaluationIndexingLABELIT.hasDataOutput("statusMessageIndexing"): self.addStatusMessage("Labelit: " + self._edPluginExecEvaluationIndexingLABELIT.getDataOutput("statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexingSuccess = self._edPluginExecEvaluationIndexingLABELIT.getDataOutput("indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self._edPluginExecEvaluationIndexingLABELIT.getDataOutput("indexingResult")[0] self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) # Then start the integration of the reference images self.indexingToIntegration() else: self.screen("Indexing with LABELIT failed!") self.setFailure() def indexingToIntegration(self, _edPlugin=None): # Create the XDS background image xsDataInputControlXDSGenerateBackgroundImage = XSDataInputControlXDSGenerateBackgroundImage() xsDataInputControlXDSGenerateBackgroundImage.setDataCollection(self._xsDataCollection) self._edPluginControlXDSGenerateBackgroundImage.setDataInput(xsDataInputControlXDSGenerateBackgroundImage) self._edPluginControlXDSGenerateBackgroundImage.execute() # Integrate the reference images xsDataIntegrationInput = XSDataIntegrationInput() xsDataIntegrationInput.setDataCollection(self._xsDataResultCharacterisation.getDataCollection()) xsDataIndexingResult = self._xsDataResultCharacterisation.getIndexingResult() xsDataExperimentalConditionRefinded = xsDataIndexingResult.getSelectedSolution().getExperimentalConditionRefined() xsDataIntegrationInput.setExperimentalConditionRefined(xsDataExperimentalConditionRefinded) xsDataIntegrationInput.setSelectedIndexingSolution(xsDataIndexingResult.getSelectedSolution()) self._edPluginControlIntegration.setDataInput(xsDataIntegrationInput) self.executePluginSynchronous(self._edPluginControlIntegration) def doFailureEvaluationIndexingMOSFLM(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doFailureEvaluationIndexing") strWarningMessage = "Execution of indexing evaluation plugin failed." self.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) def doFailureEvaluationIndexingLABELIT(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doFailureEvaluationIndexing") strWarningMessage = "Execution of indexing evaluation plugin failed." self.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) def doSuccessGeneratePrediction(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessGeneratePrediction") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessGeneratePrediction") xsDataGeneratePredictionResult = _edPlugin.getDataOutput() xsDataIndexingResult = self._xsDataResultCharacterisation.getIndexingResult() xsDataIndexingResult.setPredictionResult(xsDataGeneratePredictionResult) def doFailureGeneratePrediction(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doFailureGeneratePrediction") strWarningMessage = "Execution of generate prediction plugin failed." self.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) #self.addComment("warning: no prediction images") def doSuccessIntegration(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessIntegration") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessIntegration") # Wait for XDS plugin if necessary self._edPluginControlXDSGenerateBackgroundImage.synchronize() self.addStatusMessage("Integration successful.") xsDataIntegrationOutput = self._edPluginControlIntegration.getDataOutput() self._xsDataResultCharacterisation.setIntegrationResult(xsDataIntegrationOutput) # Integration short summary if self._edPluginControlIntegration.hasDataOutput("integrationShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIntegration.getDataOutput("integrationShortSummary")[0].getValue() #self.DEBUG( self._xsDataExperimentCharacterisation.marshal() ) if self._bDoStrategyCalculation: xsDataInputStrategy = XSDataInputStrategy() xsDataSolutionSelected = self._xsDataResultCharacterisation.getIndexingResult().getSelectedSolution() xsDataInputStrategy.setCrystalRefined(xsDataSolutionSelected.getCrystal()) xsDataInputStrategy.setSample(self._xsDataResultCharacterisation.getDataCollection().getSample()) xsDataIntegrationSubWedgeResultList = xsDataIntegrationOutput.getIntegrationSubWedgeResult() xsDataInputStrategy.setBestFileContentDat(xsDataIntegrationSubWedgeResultList[0].getBestfileDat()) xsDataInputStrategy.setBestFileContentPar(xsDataIntegrationSubWedgeResultList[0].getBestfilePar()) xsDataInputStrategy.setExperimentalCondition(xsDataIntegrationSubWedgeResultList[0].getExperimentalConditionRefined()) xsDataInputStrategy.setXdsBackgroundImage(self._xsDataFileXdsBackgroundImage) xsDataInputStrategy.setDataCollection(self._xsDataCollection) for xsDataIntegrationSubWedgeResult in xsDataIntegrationSubWedgeResultList: xsDataInputStrategy.addBestFileContentHKL(xsDataIntegrationSubWedgeResult.getBestfileHKL()) xsDataInputStrategy.setDiffractionPlan(self._xsDataResultCharacterisation.getDataCollection().getDiffractionPlan()) self._edPluginControlStrategy.setDataInput(xsDataInputStrategy) self.executePluginSynchronous(self._edPluginControlStrategy) def doFailureIntegration(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doFailureIntegration") strErrorMessage = "Execution of integration plugin failed." self.addStatusMessage("Integration FAILURE.") self.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) #self.addComment("integration failure") if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.generateExecutiveSummary(self) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessXDSGenerateBackgroundImage(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessXDSGenerateBackgroundImage") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessXDSGenerateBackgroundImage") self._xsDataFileXdsBackgroundImage = self._edPluginControlXDSGenerateBackgroundImage.getDataOutput().getXdsBackgroundImage() self._xsDataResultCharacterisation.setXdsBackgroundImage(self._xsDataFileXdsBackgroundImage) def doFailureXDSGenerateBackgroundImage(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doFailureXDSGenerateBackgroundImage") def doSuccessStrategy(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessStrategy") self.retrieveSuccessMessages(self._edPluginControlStrategy, "EDPluginControlCharacterisationv1_3.doSuccessStrategy") xsDataStrategyResult = self._edPluginControlStrategy.getDataOutput() self._xsDataResultCharacterisation.setStrategyResult(xsDataStrategyResult) if self._edPluginControlStrategy.hasDataOutput("strategyShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlStrategy.getDataOutput("strategyShortSummary")[0].getValue() self.addStatusMessage("Strategy calculation successful.") def doFailureStrategy(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_3.doFailureStrategy") strErrorMessage = "Strategy calculation FAILURE." self.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) xsDataStrategyResult = self._edPluginControlStrategy.getDataOutput() self._xsDataResultCharacterisation.setStrategyResult(xsDataStrategyResult) if self._edPluginControlStrategy.hasDataOutput("strategyShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlStrategy.getDataOutput("strategyShortSummary")[0].getValue() if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.addStatusMessage("Strategy calculation FAILURE.") self.generateExecutiveSummary(self) if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() self.setFailure() def generateExecutiveSummary(self, _edPlugin): """ Generates a summary of the execution of the plugin. """ self.DEBUG("EDPluginControlCharacterisationv1_3.generateExecutiveSummary") self.addExecutiveSummaryLine("Summary of characterisation:") xsDataInputStrategy = self.getDataInput() xsDataCollection = xsDataInputStrategy.getDataCollection() # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition().getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: self.addExecutiveSummaryLine("^"*80) self.addExecutiveSummaryLine("^"*80) self.addExecutiveSummaryLine("") self.addExecutiveSummaryLine("WARNING! Transmission for characterisation set to %.1f %%" % fTransmission) self.addExecutiveSummaryLine("Please consider re-characterising with transmission set to 100 %") self.addExecutiveSummaryLine("") self.addExecutiveSummaryLine("^"*80) self.addExecutiveSummaryLine("^"*80) xsDataDiffractionPlan = xsDataCollection.getDiffractionPlan() self.addExecutiveSummaryLine("Diffraction plan:") if (xsDataDiffractionPlan.getComplexity() is not None): self.addExecutiveSummaryLine("BEST complexity : %s" % xsDataDiffractionPlan.getComplexity().getValue()) if (xsDataDiffractionPlan.getAimedCompleteness() is not None): self.addExecutiveSummaryLine("Aimed completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getAimedCompleteness().getValue())) if (xsDataDiffractionPlan.getRequiredCompleteness() is not None): self.addExecutiveSummaryLine("Required completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getRequiredCompleteness().getValue())) if (xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution() is not None): self.addExecutiveSummaryLine("Aimed I/sigma at highest resolution : %6.1f" % xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution().getValue()) if (xsDataDiffractionPlan.getAimedResolution() is not None): self.addExecutiveSummaryLine("Aimed resolution : %6.1f [A]" % xsDataDiffractionPlan.getAimedResolution().getValue()) if (xsDataDiffractionPlan.getRequiredResolution() is not None): self.addExecutiveSummaryLine("Required resolution : %6.1f [A]" % xsDataDiffractionPlan.getRequiredResolution().getValue()) if (xsDataDiffractionPlan.getAimedMultiplicity() is not None): self.addExecutiveSummaryLine("Aimed multiplicity : %6.1f" % xsDataDiffractionPlan.getAimedMultiplicity().getValue()) if (xsDataDiffractionPlan.getRequiredMultiplicity() is not None): self.addExecutiveSummaryLine("Required multiplicity : %6.1f" % xsDataDiffractionPlan.getRequiredMultiplicity().getValue()) if (xsDataDiffractionPlan.getForcedSpaceGroup() is not None): self.addExecutiveSummaryLine("Forced space group : %6s" % xsDataDiffractionPlan.getForcedSpaceGroup().getValue()) if (xsDataDiffractionPlan.getMaxExposureTimePerDataCollection() is not None): self.addExecutiveSummaryLine("Max exposure time per data collection : %6.1f [s]" % xsDataDiffractionPlan.getMaxExposureTimePerDataCollection().getValue()) self.addExecutiveSummarySeparator() if self._edPluginControlIndexingIndicators is not None: self.appendExecutiveSummary(self._edPluginControlIndexingIndicators, "") if self._edPluginControlIndexingLabelit is not None: self.appendExecutiveSummary(self._edPluginControlIndexingLabelit, "") if self._edPluginControlIntegration is not None: self.appendExecutiveSummary(self._edPluginControlIntegration, "") if self._edPluginControlStrategy is not None: self.appendExecutiveSummary(self._edPluginControlStrategy, "") self.addExecutiveSummarySeparator() if self._strCharacterisationShortSummary is not None: self.addExecutiveSummaryLine("Characterisation short summary:") self.addExecutiveSummaryLine("") if self._strStatusMessage != None: for strLine in self._strStatusMessage.split(". "): if strLine.endswith("."): self.addExecutiveSummaryLine(strLine) else: self.addExecutiveSummaryLine(strLine + ".") self.addExecutiveSummaryLine("") for strLine in self._strCharacterisationShortSummary.split("\n"): if strLine != "\n": self.addExecutiveSummaryLine(strLine) self.addErrorWarningMessagesToExecutiveSummary("Characterisation error and warning messages: ") self.addExecutiveSummarySeparator() def getPluginStrategyName(self): return self._strPluginControlStrategy def addStatusMessage(self, _strStatusMessage): if self._strStatusMessage != "": self._strStatusMessage += " " self._strStatusMessage += _strStatusMessage def doStrategyCalculation(self, _bValue): self._bDoStrategyCalculation = _bValue
def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.preProcess") # Load the plugins self._edPluginControlIndexingIndicators = self.loadPlugin(self._strPluginControlIndexingIndicators, \ "Indexing") self._edPluginControlIndexingLabelit = self.loadPlugin(self._strPluginControlIndexingLabelit, \ "IndexingLabelit") self._edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self._edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self._edPluginControlGeneratePrediction = self.loadPlugin(self._strPluginControlGeneratePrediction, \ "GeneratePrediction") self._edPluginControlIntegration = self.loadPlugin(self._strPluginControlIntegration, \ "Integration") self._edPluginControlXDSGenerateBackgroundImage = self.loadPlugin(self._strPluginControlXDSGenerateBackgroundImage, \ "ControlXDSGenerateBackgroundImage") self._edPluginControlStrategy = self.loadPlugin(self._strPluginControlStrategy, \ "Strategy") if (self._edPluginControlIndexingIndicators is not None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.preProcess: " + self._strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self._xsDataCollection = xsDataInputCharacterisation.getDataCollection( ) # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = self._xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition( ).getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: strWarningMessageBanner = "^" * 80 strWarningMessage1 = "WARNING! Transmission for characterisation set to %.1f %%" % fTransmission strWarningMessage2 = "Please consider re-characterising with transmission set to 100 %" self.warning(strWarningMessageBanner) self.warning(strWarningMessage1) self.warning(strWarningMessage2) self.warning(strWarningMessageBanner) self.addWarningMessage(strWarningMessageBanner) self.addWarningMessage(strWarningMessage1) self.addWarningMessage(strWarningMessage2) self.addWarningMessage(strWarningMessageBanner) xsDataCrystal = None xsDataSubWedgeList = self._xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_3.preProcess: No subwedges in input data." EDVerbose.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[ 0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam( ).getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage( "EDPluginControlCharacterisationv1_3.preProcess ERROR: " + strErrorMessage) #self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self._xsDataCollection.getDiffractionPlan( ) xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup( ) if (xsDataStringForcedSpaceGroup is not None): self._xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self._xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self._edPluginControlIndexingIndicators.setDataInput( self._xsDataCollection, "dataCollection") if self._xsDataCrystal is not None: self._edPluginControlIndexingIndicators.setDataInput( self._xsDataCrystal, "crystal") # Populate characterisation object self._xsDataResultCharacterisation = XSDataResultCharacterisation( ) self._xsDataResultCharacterisation.setDataCollection( XSDataCollection.parseString( self._xsDataCollection.marshal()))
def generateXSDataIndexingResult(_xsDataMOSFLMIndexingOutput, _xsDataExperimentalCondition=None): """ Translation from XSDataMOSFLMIndexingOutput to XSDataIndexingResult. """ EDVerbose.DEBUG( "EDHandlerXSDataMOSFLMv10.generateXSDataIndexingOutput") xsDataMOSFLMBeamPositionRefined = _xsDataMOSFLMIndexingOutput.getRefinedBeam( ) xsDataMOSFLMBeamPositionShift = _xsDataMOSFLMIndexingOutput.getBeamShift( ) dDeviationAngular = _xsDataMOSFLMIndexingOutput.getDeviationAngular( ).getValue() dDeviationPositional = _xsDataMOSFLMIndexingOutput.getDeviationPositional( ).getValue() dMosaicityEstimation = _xsDataMOSFLMIndexingOutput.getMosaicityEstimation( ).getValue() dDistanceRefined = _xsDataMOSFLMIndexingOutput.getRefinedDistance( ).getValue() iSelectedSolution = _xsDataMOSFLMIndexingOutput.getSelectedSolutionNumber( ).getValue() iSpotsTotal = _xsDataMOSFLMIndexingOutput.getSpotsTotal().getValue() iSpotsUsed = _xsDataMOSFLMIndexingOutput.getSpotsUsed().getValue() xsDataCellRefined = _xsDataMOSFLMIndexingOutput.getRefinedNewmat( ).getRefinedCell() xsDataMatrixA = _xsDataMOSFLMIndexingOutput.getRefinedNewmat( ).getAMatrix() xsDataMatrixU = _xsDataMOSFLMIndexingOutput.getRefinedNewmat( ).getUMatrix() strSelectedSpaceGroupName = _xsDataMOSFLMIndexingOutput.getSelectedSolutionSpaceGroup( ).getValue() iSelectedSpaceGroupNumber = _xsDataMOSFLMIndexingOutput.getSelectedSolutionSpaceGroupNumber( ).getValue() xsDataIndexingResult = XSDataIndexingResult() xsDataIndexingSolutionSelected = None for possibleSolutions in _xsDataMOSFLMIndexingOutput.getPossibleSolutions( ): xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName( XSDataString(possibleSolutions.getLattice().getValue())) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataCrystal.setCell(possibleSolutions.getCell()) xsDataIndexingSolution = XSDataIndexingSolution() xsDataIndexingSolution.setCrystal(xsDataCrystal) iIndex = possibleSolutions.getIndex().getValue() xsDataIndexingSolution.setNumber(XSDataInteger(iIndex)) xsDataIndexingSolution.setPenalty( XSDataFloat(possibleSolutions.getPenalty().getValue())) xsDataIndexingResult.addSolution(xsDataIndexingSolution) if (iIndex == iSelectedSolution): xsDataIndexingSolutionSelected = XSDataIndexingSolutionSelected( ) xsDataIndexingSolutionSelected.setNumber(XSDataInteger(iIndex)) xsDataIndexingSolutionSelected.setPenalty( XSDataFloat(possibleSolutions.getPenalty().getValue())) xsDataCrystalSelected = XSDataCrystal() xsDataSpaceGroupSelected = XSDataSpaceGroup() xsDataSpaceGroupSelected.setName( XSDataString(strSelectedSpaceGroupName)) xsDataSpaceGroupSelected.setITNumber( XSDataInteger(iSelectedSpaceGroupNumber)) xsDataCrystalSelected.setSpaceGroup(xsDataSpaceGroupSelected) xsDataCrystalSelected.setCell(xsDataCellRefined) xsDataCrystalSelected.setMosaicity(XSDataDouble(dMosaicityEstimation)) xsDataIndexingSolutionSelected.setCrystal(xsDataCrystalSelected) xsDataOrientation = XSDataOrientation() xsDataOrientation.setMatrixA(xsDataMatrixA) xsDataOrientation.setMatrixU(xsDataMatrixU) xsDataIndexingSolutionSelected.setOrientation(xsDataOrientation) xsDataStatisticsIndexing = XSDataStatisticsIndexing() xsDataStatisticsIndexing.setBeamPositionShiftX( XSDataLength(xsDataMOSFLMBeamPositionShift.getX().getValue())) xsDataStatisticsIndexing.setBeamPositionShiftY( XSDataLength(xsDataMOSFLMBeamPositionShift.getY().getValue())) xsDataStatisticsIndexing.setSpotDeviationAngular( XSDataAngle(dDeviationAngular)) xsDataStatisticsIndexing.setSpotDeviationPositional( XSDataLength(dDeviationPositional)) xsDataStatisticsIndexing.setSpotsUsed(XSDataInteger(iSpotsUsed)) xsDataStatisticsIndexing.setSpotsTotal(XSDataInteger(iSpotsTotal)) xsDataIndexingSolutionSelected.setStatistics(xsDataStatisticsIndexing) xsDataExperimentalConditionRefined = None if (_xsDataExperimentalCondition is None): xsDataExperimentalConditionRefined = XSDataExperimentalCondition() else: # Copy the incoming experimental condition xmlExperimentalCondition = _xsDataExperimentalCondition.marshal() xsDataExperimentalConditionRefined = XSDataExperimentalCondition.parseString( xmlExperimentalCondition) xsDataDetector = xsDataExperimentalConditionRefined.getDetector() if (xsDataDetector is None): xsDataDetector = XSDataDetector() xsDataDetector.setBeamPositionX( XSDataLength(xsDataMOSFLMBeamPositionRefined.getX().getValue())) xsDataDetector.setBeamPositionY( XSDataLength(xsDataMOSFLMBeamPositionRefined.getY().getValue())) xsDataDetector.setDistance(XSDataLength(dDistanceRefined)) xsDataExperimentalConditionRefined.setDetector(xsDataDetector) xsDataIndexingSolutionSelected.setExperimentalConditionRefined( xsDataExperimentalConditionRefined) xsDataIndexingResult.setSelectedSolution( xsDataIndexingSolutionSelected) xsDataIndexingResult.setIndexingLogFile( _xsDataMOSFLMIndexingOutput.getPathToLogFile()) return xsDataIndexingResult
def generateXSDataIndexingResult(_xsDataLabelitScreenOutput, _xsDataLabelitMosflmScriptsOutput, \ _xsDataExperimentalCondition=None): EDVerbose.DEBUG( "EDHandlerXSDataLabelitv1_1.generateXSDataIndexingOutput") iSelectedSolutionNumber = _xsDataLabelitScreenOutput.getSelectedSolutionNumber( ).getValue() xsDataIndexingResult = XSDataIndexingResult() xsDataIndexingSolutionSelected = None for xsDataLabelitSolution in _xsDataLabelitScreenOutput.getLabelitScreenSolution( ): xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() edStringSpaceGroupName = EDUtilsSymmetry.getMinimumSymmetrySpaceGroupFromBravaisLattice( xsDataLabelitSolution.getBravaisLattice().getValue()) xsDataSpaceGroup.setName(XSDataString(edStringSpaceGroupName)) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataCrystal.setCell(xsDataLabelitSolution.getUnitCell()) xsDataIndexingSolution = XSDataIndexingSolution() xsDataIndexingSolution.setCrystal(xsDataCrystal) iIndex = xsDataLabelitSolution.getSolutionNumber().getValue() xsDataIndexingSolution.setNumber(XSDataInteger(iIndex)) xsDataIndexingResult.addSolution(xsDataIndexingSolution) if (iIndex == iSelectedSolutionNumber): xsDataIndexingSolutionSelected = XSDataIndexingSolutionSelected( ) xsDataIndexingSolutionSelected.setNumber(XSDataInteger(iIndex)) edStringSelectedSpaceGroupName = edStringSpaceGroupName xsDataCellSelected = xsDataLabelitSolution.getUnitCell() fRmsdSelected = xsDataLabelitSolution.getRmsd().getValue() iNumberOfSpotsSelected = xsDataLabelitSolution.getNumberOfSpots( ).getValue() xsDataCrystalSelected = XSDataCrystal() xsDataSpaceGroupSelected = XSDataSpaceGroup() xsDataSpaceGroupSelected.setName( XSDataString(edStringSelectedSpaceGroupName)) #xsDataSpaceGroupSelected.setITNumber( XSDataInteger( iSelectedSpaceGroupNumber ) ) xsDataCrystalSelected.setSpaceGroup(xsDataSpaceGroupSelected) xsDataCrystalSelected.setCell(xsDataCellSelected) xsDataCrystalSelected.setMosaicity( XSDataDouble(_xsDataLabelitScreenOutput.getMosaicity().getValue())) xsDataIndexingSolutionSelected.setCrystal(xsDataCrystalSelected) xsDataOrientation = XSDataOrientation() xsDataOrientation.setMatrixA( _xsDataLabelitMosflmScriptsOutput.getAMatrix()) xsDataOrientation.setMatrixU( _xsDataLabelitMosflmScriptsOutput.getUMatrix()) xsDataIndexingSolutionSelected.setOrientation(xsDataOrientation) xsDataStatisticsIndexing = XSDataStatisticsIndexing() if (_xsDataExperimentalCondition is not None): fBeamPositionXOrig = _xsDataExperimentalCondition.getDetector( ).getBeamPositionX().getValue() fBeamPositionYOrig = _xsDataExperimentalCondition.getDetector( ).getBeamPositionY().getValue() fBeamPositionXNew = _xsDataLabelitScreenOutput.getBeamCentreX( ).getValue() fBeamPositionYNew = _xsDataLabelitScreenOutput.getBeamCentreY( ).getValue() xsDataStatisticsIndexing.setBeamPositionShiftX( XSDataLength(fBeamPositionXOrig - fBeamPositionXNew)) xsDataStatisticsIndexing.setBeamPositionShiftY( XSDataLength(fBeamPositionYOrig - fBeamPositionYNew)) #xsDataStatisticsIndexing.setSpotDeviXSDataLength( dDistanceRefinedationAngular( XSDataAngle( dDeviationAngular ) ) xsDataStatisticsIndexing.setSpotDeviationPositional( XSDataLength(fRmsdSelected)) xsDataStatisticsIndexing.setSpotsUsed( XSDataInteger(iNumberOfSpotsSelected)) xsDataStatisticsIndexing.setSpotsTotal( XSDataInteger(iNumberOfSpotsSelected)) xsDataIndexingSolutionSelected.setStatistics(xsDataStatisticsIndexing) xsDataExperimentalConditionRefined = None if (_xsDataExperimentalCondition is None): xsDataExperimentalConditionRefined = XSDataExperimentalCondition() else: # Copy the incoming experimental condition xmlExperimentalCondition = _xsDataExperimentalCondition.marshal() xsDataExperimentalConditionRefined = XSDataExperimentalCondition.parseString( xmlExperimentalCondition) xsDataDetector = xsDataExperimentalConditionRefined.getDetector() if (xsDataDetector is None): xsDataDetector = XSDataDetector() xsDataDetector.setBeamPositionX( _xsDataLabelitScreenOutput.getBeamCentreX()) xsDataDetector.setBeamPositionY( _xsDataLabelitScreenOutput.getBeamCentreY()) xsDataDetector.setDistance(_xsDataLabelitScreenOutput.getDistance()) xsDataExperimentalConditionRefined.setDetector(xsDataDetector) xsDataIndexingSolutionSelected.setExperimentalConditionRefined( xsDataExperimentalConditionRefined) xsDataIndexingResult.setSelectedSolution( xsDataIndexingSolutionSelected) xsDataIndexingResult.setIndexingLogFile( _xsDataLabelitScreenOutput.getPathToLogFile()) return xsDataIndexingResult
def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.preProcess") # Load the plugins self._edPluginControlIndexingIndicators = self.loadPlugin(self._strPluginControlIndexingIndicators, \ "Indexing") self._edPluginControlIndexingLabelit = self.loadPlugin(self._strPluginControlIndexingLabelit, \ "IndexingLabelit") self._edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self._edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self._edPluginControlGeneratePrediction = self.loadPlugin(self._strPluginControlGeneratePrediction, \ "GeneratePrediction") self._edPluginControlIntegration = self.loadPlugin(self._strPluginControlIntegration, \ "Integration") self._edPluginControlXDSGenerateBackgroundImage = self.loadPlugin(self._strPluginControlXDSGenerateBackgroundImage, \ "ControlXDSGenerateBackgroundImage") self._edPluginControlStrategy = self.loadPlugin(self._strPluginControlStrategy, \ "Strategy") if (self._edPluginControlIndexingIndicators is not None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.preProcess: " + self._strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self._xsDataCollection = xsDataInputCharacterisation.getDataCollection() # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = self._xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition().getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: strWarningMessageBanner = "^"*80 strWarningMessage1 = "WARNING! Transmission for characterisation set to %.1f %%" % fTransmission strWarningMessage2 = "Please consider re-characterising with transmission set to 100 %" self.warning(strWarningMessageBanner) self.warning(strWarningMessage1) self.warning(strWarningMessage2) self.warning(strWarningMessageBanner) self.addWarningMessage(strWarningMessageBanner) self.addWarningMessage(strWarningMessage1) self.addWarningMessage(strWarningMessage2) self.addWarningMessage(strWarningMessageBanner) xsDataCrystal = None xsDataSubWedgeList = self._xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_3.preProcess: No subwedges in input data." EDVerbose.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam().getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage("EDPluginControlCharacterisationv1_3.preProcess ERROR: " + strErrorMessage) #self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self._xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup() if (xsDataStringForcedSpaceGroup is not None): self._xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self._xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCollection, "dataCollection") if self._xsDataCrystal is not None: self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCrystal, "crystal") # Populate characterisation object self._xsDataResultCharacterisation = XSDataResultCharacterisation() self._xsDataResultCharacterisation.setDataCollection(XSDataCollection.parseString(self._xsDataCollection.marshal()))
def testGetXSDataRaddoseInput(self): """ """ from XSDataCommon import XSDataLength from XSDataCommon import XSDataWavelength from XSDataCommon import XSDataFlux from XSDataCommon import XSDataSize from XSDataCommon import XSDataDouble from XSDataCommon import XSDataString from XSDataCommon import XSDataAngle from XSDataCommon import XSDataTime from XSDataCommon import XSDataInteger from XSDataMXv1 import XSDataBeam from XSDataMXv1 import XSDataStructure from XSDataMXv1 import XSDataChain from XSDataMXv1 import XSDataAtom from XSDataMXv1 import XSDataLigand from XSDataMXv1 import XSDataCrystal from XSDataMXv1 import XSDataSpaceGroup from XSDataMXv1 import XSDataSampleCrystalMM from XSDataMXv1 import XSDataChemicalCompositionMM from XSDataMXv1 import XSDataAtomicComposition from XSDataMXv1 import XSDataSolvent from XSDataMXv1 import XSDataCell from EDHandlerXSDataRaddosev10 import EDHandlerXSDataRaddosev10 EDFactoryPluginStatic.loadModule("XSDataRaddosev10") from XSDataRaddosev10 import XSDataRaddoseInput xsDataBeam = XSDataBeam() xsDataBeam.setSize(XSDataSize(x=XSDataLength(0.1), y=XSDataLength(0.1))) xsDataBeam.setWavelength(XSDataWavelength(2.41)) xsDataBeam.setFlux(XSDataFlux(1e+12)) xsDataBeam.setExposureTime(XSDataTime(0.037)) xsDataSample = XSDataSampleCrystalMM() xsDataStructure = XSDataStructure() xsDataComposition = XSDataChemicalCompositionMM() xsDataChain = XSDataChain() xsDataChain.setType(XSDataString("protein")) xsDataChain.setNumberOfCopies(XSDataDouble(2)) xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom1 = XSDataAtom() xsDataAtom1.setSymbol(XSDataString("Se")) xsDataAtom1.setNumberOf(XSDataDouble(4)) xsDataAtomicComposition.addAtom(xsDataAtom1) xsDataAtom2 = XSDataAtom() xsDataAtom2.setSymbol(XSDataString("S")) xsDataAtom2.setNumberOf(XSDataDouble(5)) xsDataAtomicComposition.addAtom(xsDataAtom2) xsDataChain.setHeavyAtoms(xsDataAtomicComposition) xsDataChain.setNumberOfMonomers(XSDataDouble(100)) xsDataStructure.addChain(xsDataChain) xsDataChain2 = XSDataChain() xsDataChain2.setType(XSDataString("rna")) xsDataChain2.setNumberOfCopies(XSDataDouble(1)) xsDataChain2.setNumberOfMonomers(XSDataDouble(60)) xsDataStructure.addChain(xsDataChain2) xsDataLigand = XSDataLigand() xsDataLigand.setNumberOfCopies(XSDataDouble(2)) xsDataLigand.setNumberOfLightAtoms(XSDataDouble(42)) xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom3 = XSDataAtom() xsDataAtom3.setSymbol(XSDataString("Fe")) xsDataAtom3.setNumberOf(XSDataDouble(1)) xsDataAtomicComposition.addAtom(xsDataAtom3) xsDataLigand.setHeavyAtoms(xsDataAtomicComposition) xsDataStructure.addLigand(xsDataLigand) xsDataStructure.setNumberOfCopiesInAsymmetricUnit(XSDataDouble(0.25)) xsDataSolvent = XSDataSolvent() xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtomNa = XSDataAtom() xsDataAtomNa.setSymbol(XSDataString("Na")) xsDataAtomNa.setConcentration(XSDataDouble(1000)) xsDataAtomicComposition.addAtom(xsDataAtomNa) xsDataAtomCl = XSDataAtom() xsDataAtomCl.setSymbol(XSDataString("Cl")) xsDataAtomCl.setConcentration(XSDataDouble(1000)) xsDataAtomicComposition.addAtom(xsDataAtomCl) xsDataSolvent.setAtoms(xsDataAtomicComposition) xsDataComposition.setStructure(xsDataStructure) xsDataComposition.setSolvent(xsDataSolvent) xsDataSample.setChemicalComposition(xsDataComposition) xsDataSample.setSize( XSDataSize(XSDataLength(0.1), XSDataLength(0.1), XSDataLength(0.1))) xsDataCell = XSDataCell(angle_alpha=XSDataAngle(90.0), angle_beta=XSDataAngle(90.0), angle_gamma=XSDataAngle(90.0), length_a=XSDataLength(78.9), length_b=XSDataLength(95.162), length_c=XSDataLength(104.087)) xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataCrystal.setCell(xsDataCell) xsDataSpaceGroup.setITNumber(XSDataInteger(16)) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataSample.setCrystal(xsDataCrystal) iNumSymOperators = 4 iNumberOfImages = 2 xsDataRaddosev01Input = EDHandlerXSDataRaddosev10( ).getXSDataRaddoseInput(xsDataBeam, xsDataSample, iNumSymOperators, iNumberOfImages) xsDataRaddosev01Input.exportToFile(self.strObtainedInputFile2) strExpectedInput = EDUtilsTest.readAndParseFile( self.strReferenceInputFile2) strObtainedInput = EDUtilsTest.readAndParseFile( self.strObtainedInputFile2) xsDataInputExpected = XSDataRaddoseInput.parseString(strExpectedInput) xsDataInputObtained = XSDataRaddoseInput.parseString(strObtainedInput) EDAssert.equal(xsDataInputExpected.marshal(), xsDataInputObtained.marshal())
def testSetDataModelInput(self): edPluginStrategy = self.createPlugin() strPathToTestConfigFile = os.path.join(self.getPluginTestsDataHome(), "XSConfiguration_ESRF.xml") edConfiguration = EDConfiguration(strPathToTestConfigFile) dictItem = edConfiguration.get(edPluginStrategy.getPluginName()) edPluginStrategy.setConfig(dictItem) edPluginStrategy.configure() xsDataStrategy = XSDataInputStrategy() # Beam xsExperimentalCondition = XSDataExperimentalCondition() xsBeam = XSDataBeam() xsBeam.setFlux(XSDataFlux(1e+12)) xsBeam.setWavelength(XSDataWavelength(2.41)) xsBeam.setSize(XSDataSize(x=XSDataLength(0.1), y=XSDataLength(0.1))) xsBeam.setExposureTime(XSDataTime(1)) xsExperimentalCondition.setBeam(xsBeam) # Detector and Exposure Time xsDataDetector = XSDataDetector() xsDataDetector.setType(XSDataString("q210-2x")) xsExperimentalCondition.setDetector(xsDataDetector) xsDataGoniostat = XSDataGoniostat() xsDataGoniostat.setRotationAxis(XSDataString("phi")) xsExperimentalCondition.setGoniostat(xsDataGoniostat) xsDataStrategy.setExperimentalCondition(xsExperimentalCondition) # Best Files bestFileContentDat = EDUtilsFile.readFile(os.path.join(self.strDataPath, "bestfile.dat")) xsDataStrategy.setBestFileContentDat(XSDataString(bestFileContentDat)) bestFileContentPar = EDUtilsFile.readFile(os.path.join(self.strDataPath, "bestfile.par")) xsDataStrategy.setBestFileContentPar(XSDataString(bestFileContentPar)) bestFileContentHKL = EDUtilsFile.readFile(os.path.join(self.strDataPath, "bestfile1.hkl")) xsDataStrategy.addBestFileContentHKL(XSDataString(bestFileContentHKL)) # Crystal xsDataSampleCrystalMM = XSDataSampleCrystalMM() xsDataStructure = XSDataStructure() xsDataComposition = XSDataChemicalCompositionMM() xsDataChain = XSDataChain() xsDataChain.setType(XSDataString("protein")) xsDataChain.setNumberOfCopies(XSDataDouble(2)) xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom1 = XSDataAtom() xsDataAtom1.setSymbol(XSDataString("Se")) xsDataAtom1.setNumberOf(XSDataDouble(4)) xsDataAtomicComposition.addAtom(xsDataAtom1) xsDataChain.setHeavyAtoms(xsDataAtomicComposition) xsDataChain.setNumberOfMonomers(XSDataDouble(100)) xsDataStructure.addChain(xsDataChain) xsDataChain2 = XSDataChain() xsDataChain2.setType(XSDataString("rna")) xsDataChain2.setNumberOfCopies(XSDataDouble(1)) xsDataChain2.setNumberOfMonomers(XSDataDouble(60)) xsDataStructure.addChain(xsDataChain2) xsDataLigand = XSDataLigand() xsDataLigand.setNumberOfCopies(XSDataDouble(2)) xsDataLigand.setNumberOfLightAtoms(XSDataDouble(42)) xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom2 = XSDataAtom() xsDataAtom2.setSymbol(XSDataString("Fe")) xsDataAtom2.setNumberOf(XSDataDouble(1)) xsDataAtomicComposition.addAtom(xsDataAtom2) xsDataLigand.setHeavyAtoms(xsDataAtomicComposition) xsDataStructure.addLigand(xsDataLigand) xsDataStructure.setNumberOfCopiesInAsymmetricUnit(XSDataDouble(0.25)) xsDataSolvent = XSDataSolvent() xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom3 = XSDataAtom() xsDataAtom3.setSymbol(XSDataString("Na")) xsDataAtom3.setConcentration(XSDataDouble(1000)) xsDataAtom4 = XSDataAtom() xsDataAtom4.setSymbol(XSDataString("Cl")) xsDataAtom4.setConcentration(XSDataDouble(1000)) xsDataAtomicComposition.addAtom(xsDataAtom3) xsDataAtomicComposition.addAtom(xsDataAtom4) xsDataSolvent.setAtoms(xsDataAtomicComposition) xsDataComposition.setStructure(xsDataStructure) xsDataComposition.setSolvent(xsDataSolvent) xsDataSampleCrystalMM.setChemicalComposition(xsDataComposition) xsDataSampleCrystalMM.setSize(XSDataSize(XSDataLength(0.1), XSDataLength(0.1), XSDataLength(0.1))) xsDataCrystal = XSDataCrystal() xsDataCell = XSDataCell(angle_alpha=XSDataAngle(90.0), angle_beta=XSDataAngle(90.0), angle_gamma=XSDataAngle(90.0), length_a=XSDataLength(78.9), length_b=XSDataLength(95.162), length_c=XSDataLength(104.087)) xsDataCrystal.setCell(xsDataCell) xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setITNumber(XSDataInteger(16)) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataSampleCrystalMM.setSusceptibility(XSDataDouble(1.5)) xsDataStrategy.setCrystalRefined(xsDataCrystal) xsDataStrategy.setSample(xsDataSampleCrystalMM) xsDataStrategy.exportToFile(self.strObtainedInputFile) pyStrExpectedInput = self.readAndParseFile (self.strReferenceInputFile) pyStrObtainedInput = self.readAndParseFile (self.strObtainedInputFile) xsDataInputExpected = XSDataInputStrategy.parseString(pyStrExpectedInput) xsDataInputObtained = XSDataInputStrategy.parseString(pyStrObtainedInput) EDAssert.equal(xsDataInputExpected.marshal(), xsDataInputObtained.marshal())
def generateXSDataIndexingResult(_xsDataMOSFLMIndexingOutput, _xsDataExperimentalCondition=None): """ Translation from XSDataMOSFLMIndexingOutput to XSDataIndexingResult. """ EDVerbose.DEBUG("EDHandlerXSDataMOSFLMv10.generateXSDataIndexingOutput") xsDataMOSFLMBeamPositionRefined = _xsDataMOSFLMIndexingOutput.getRefinedBeam() xsDataMOSFLMBeamPositionShift = _xsDataMOSFLMIndexingOutput.getBeamShift() dDeviationAngular = _xsDataMOSFLMIndexingOutput.getDeviationAngular().getValue() dDeviationPositional = _xsDataMOSFLMIndexingOutput.getDeviationPositional().getValue() dMosaicityEstimation = _xsDataMOSFLMIndexingOutput.getMosaicityEstimation().getValue() dDistanceRefined = _xsDataMOSFLMIndexingOutput.getRefinedDistance().getValue() iSelectedSolution = _xsDataMOSFLMIndexingOutput.getSelectedSolutionNumber().getValue() iSpotsTotal = _xsDataMOSFLMIndexingOutput.getSpotsTotal().getValue() iSpotsUsed = _xsDataMOSFLMIndexingOutput.getSpotsUsed().getValue() xsDataCellRefined = _xsDataMOSFLMIndexingOutput.getRefinedNewmat().getRefinedCell() xsDataMatrixA = _xsDataMOSFLMIndexingOutput.getRefinedNewmat().getAMatrix() xsDataMatrixU = _xsDataMOSFLMIndexingOutput.getRefinedNewmat().getUMatrix() strSelectedSpaceGroupName = _xsDataMOSFLMIndexingOutput.getSelectedSolutionSpaceGroup().getValue() iSelectedSpaceGroupNumber = _xsDataMOSFLMIndexingOutput.getSelectedSolutionSpaceGroupNumber().getValue() xsDataIndexingResult = XSDataIndexingResult() xsDataIndexingSolutionSelected = None for possibleSolutions in _xsDataMOSFLMIndexingOutput.getPossibleSolutions(): xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(XSDataString(possibleSolutions.getLattice().getValue())) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataCrystal.setCell(possibleSolutions.getCell()) xsDataIndexingSolution = XSDataIndexingSolution() xsDataIndexingSolution.setCrystal(xsDataCrystal) iIndex = possibleSolutions.getIndex().getValue() xsDataIndexingSolution.setNumber(XSDataInteger(iIndex)) xsDataIndexingSolution.setPenalty(XSDataFloat(possibleSolutions.getPenalty().getValue())) xsDataIndexingResult.addSolution(xsDataIndexingSolution) if (iIndex == iSelectedSolution): xsDataIndexingSolutionSelected = XSDataIndexingSolutionSelected() xsDataIndexingSolutionSelected.setNumber(XSDataInteger(iIndex)) xsDataIndexingSolutionSelected.setPenalty(XSDataFloat(possibleSolutions.getPenalty().getValue())) xsDataCrystalSelected = XSDataCrystal() xsDataSpaceGroupSelected = XSDataSpaceGroup() xsDataSpaceGroupSelected.setName(XSDataString(strSelectedSpaceGroupName)) xsDataSpaceGroupSelected.setITNumber(XSDataInteger(iSelectedSpaceGroupNumber)) xsDataCrystalSelected.setSpaceGroup(xsDataSpaceGroupSelected) xsDataCrystalSelected.setCell(xsDataCellRefined) xsDataCrystalSelected.setMosaicity(XSDataDouble(dMosaicityEstimation)) xsDataIndexingSolutionSelected.setCrystal(xsDataCrystalSelected) xsDataOrientation = XSDataOrientation() xsDataOrientation.setMatrixA(xsDataMatrixA) xsDataOrientation.setMatrixU(xsDataMatrixU) xsDataIndexingSolutionSelected.setOrientation(xsDataOrientation) xsDataStatisticsIndexing = XSDataStatisticsIndexing() xsDataStatisticsIndexing.setBeamPositionShiftX(XSDataLength(xsDataMOSFLMBeamPositionShift.getX().getValue())) xsDataStatisticsIndexing.setBeamPositionShiftY(XSDataLength(xsDataMOSFLMBeamPositionShift.getY().getValue())) xsDataStatisticsIndexing.setSpotDeviationAngular(XSDataAngle(dDeviationAngular)) xsDataStatisticsIndexing.setSpotDeviationPositional(XSDataLength(dDeviationPositional)) xsDataStatisticsIndexing.setSpotsUsed(XSDataInteger(iSpotsUsed)) xsDataStatisticsIndexing.setSpotsTotal(XSDataInteger(iSpotsTotal)) xsDataIndexingSolutionSelected.setStatistics(xsDataStatisticsIndexing) xsDataExperimentalConditionRefined = None if (_xsDataExperimentalCondition is None): xsDataExperimentalConditionRefined = XSDataExperimentalCondition() else: # Copy the incoming experimental condition xmlExperimentalCondition = _xsDataExperimentalCondition.marshal() xsDataExperimentalConditionRefined = XSDataExperimentalCondition.parseString(xmlExperimentalCondition) xsDataDetector = xsDataExperimentalConditionRefined.getDetector() if (xsDataDetector is None): xsDataDetector = XSDataDetector() xsDataDetector.setBeamPositionX(XSDataLength(xsDataMOSFLMBeamPositionRefined.getX().getValue())) xsDataDetector.setBeamPositionY(XSDataLength(xsDataMOSFLMBeamPositionRefined.getY().getValue())) xsDataDetector.setDistance(XSDataLength(dDistanceRefined)) xsDataExperimentalConditionRefined.setDetector(xsDataDetector) xsDataIndexingSolutionSelected.setExperimentalConditionRefined(xsDataExperimentalConditionRefined) xsDataIndexingResult.setSelectedSolution(xsDataIndexingSolutionSelected) return xsDataIndexingResult
class EDPluginControlCharacterisationv1_3(EDPluginControl): """ [To be replaced with a description of EDPluginControlTemplatev10] """ def __init__(self): EDPluginControl.__init__(self) self.setXSDataInputClass(XSDataInputCharacterisation) self._strPluginControlIndexingIndicators = "EDPluginControlIndexingIndicatorsv10" self._strPluginControlIndexingLabelit = "EDPluginControlIndexingLabelitv10" self._strPluginExecEvaluationIndexing = "EDPluginExecEvaluationIndexingv10" self._strPluginControlGeneratePrediction = "EDPluginControlGeneratePredictionv10" self._strPluginControlIntegration = "EDPluginControlIntegrationv10" self._strPluginControlXDSGenerateBackgroundImage = "EDPluginControlXDSGenerateBackgroundImagev1_0" self._strPluginControlStrategy = "EDPluginControlStrategyv1_2" self._edPluginControlIndexingIndicators = None self._edPluginControlIndexingLabelit = None self._edPluginExecEvaluationIndexingMOSFLM = None self._edPluginExecEvaluationIndexingLABELIT = None self._edPluginControlGeneratePrediction = None self._edPluginControlIntegration = None self._edPluginControlXDSGenerateBackgroundImage = None self._edPluginControlStrategy = None self._xsDataCollection = None self._xsDataResultCharacterisation = None self._xsDataIndexingResultMOSFLM = None self._xsDataCrystal = None self._strCharacterisationShortSummary = "" self._strStatusMessage = "" self._xsDataFileXdsBackgroundImage = None self._bDoStrategyCalculation = True def checkParameters(self): """ Checks the mandatory parameters. """ EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.checkParameters") self.checkMandatoryParameters(self.getDataInput(), "Data Input is None") self.checkMandatoryParameters(self.getDataInput().getDataCollection(), "dataCollection") self.checkMandatoryParameters( self.getDataInput().getDataCollection().getDiffractionPlan(), "diffractionPlan") def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.preProcess") # Load the plugins self._edPluginControlIndexingIndicators = self.loadPlugin(self._strPluginControlIndexingIndicators, \ "Indexing") self._edPluginControlIndexingLabelit = self.loadPlugin(self._strPluginControlIndexingLabelit, \ "IndexingLabelit") self._edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self._edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self._edPluginControlGeneratePrediction = self.loadPlugin(self._strPluginControlGeneratePrediction, \ "GeneratePrediction") self._edPluginControlIntegration = self.loadPlugin(self._strPluginControlIntegration, \ "Integration") self._edPluginControlXDSGenerateBackgroundImage = self.loadPlugin(self._strPluginControlXDSGenerateBackgroundImage, \ "ControlXDSGenerateBackgroundImage") self._edPluginControlStrategy = self.loadPlugin(self._strPluginControlStrategy, \ "Strategy") if (self._edPluginControlIndexingIndicators is not None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.preProcess: " + self._strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self._xsDataCollection = xsDataInputCharacterisation.getDataCollection( ) xsDataCrystal = None xsDataSubWedgeList = self._xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_3.preProcess: No subwedges in input data." EDVerbose.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[ 0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam( ).getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage( "EDPluginControlCharacterisationv1_3.preProcess ERROR: " + strErrorMessage) #self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self._xsDataCollection.getDiffractionPlan( ) xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup( ) if (xsDataStringForcedSpaceGroup is not None): self._xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self._xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self._edPluginControlIndexingIndicators.setDataInput( self._xsDataCollection, "dataCollection") if self._xsDataCrystal is not None: self._edPluginControlIndexingIndicators.setDataInput( self._xsDataCrystal, "crystal") # Populate characterisation object self._xsDataResultCharacterisation = XSDataResultCharacterisation( ) self._xsDataResultCharacterisation.setDataCollection( XSDataCollection.parseString( self._xsDataCollection.marshal())) def process(self, _edObject=None): EDPluginControl.process(self) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.process") self._edPluginControlIndexingIndicators.connectSUCCESS( self.doSuccessIndexingIndicators) self._edPluginControlIndexingIndicators.connectFAILURE( self.doFailureIndexingIndicators) self._edPluginControlIndexingLabelit.connectSUCCESS( self.doSuccessIndexingLabelit) self._edPluginControlIndexingLabelit.connectFAILURE( self.doFailureIndexingLabelit) self._edPluginExecEvaluationIndexingMOSFLM.connectSUCCESS( self.doSuccessEvaluationIndexingMOSFLM) self._edPluginExecEvaluationIndexingMOSFLM.connectFAILURE( self.doFailureEvaluationIndexingMOSFLM) self._edPluginExecEvaluationIndexingLABELIT.connectSUCCESS( self.doSuccessEvaluationIndexingLABELIT) self._edPluginExecEvaluationIndexingLABELIT.connectFAILURE( self.doFailureEvaluationIndexingLABELIT) self._edPluginControlGeneratePrediction.connectSUCCESS( self.doSuccessGeneratePrediction) self._edPluginControlGeneratePrediction.connectFAILURE( self.doFailureGeneratePrediction) self._edPluginControlIntegration.connectSUCCESS( self.doSuccessIntegration) self._edPluginControlIntegration.connectFAILURE( self.doFailureIntegration) self._edPluginControlXDSGenerateBackgroundImage.connectSUCCESS( self.doSuccessXDSGenerateBackgroundImage) self._edPluginControlXDSGenerateBackgroundImage.connectFAILURE( self.doFailureXDSGenerateBackgroundImage) self._edPluginControlStrategy.connectSUCCESS(self.doSuccessStrategy) self._edPluginControlStrategy.connectFAILURE(self.doFailureStrategy) self.executePluginSynchronous(self._edPluginControlIndexingIndicators) def finallyProcess(self, _edObject=None): EDPluginControl.finallyProcess(self) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.finallyProcess") if self._edPluginControlGeneratePrediction.isRunning(): self._edPluginControlGeneratePrediction.synchronize() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self._xsDataResultCharacterisation.setStatusMessage( XSDataString(self._strStatusMessage)) if self._strCharacterisationShortSummary != None: self.setDataOutput( XSDataString(self._strCharacterisationShortSummary), "shortSummary") self._xsDataResultCharacterisation.setShortSummary( XSDataString(self._strCharacterisationShortSummary)) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) def doSuccessIndexingIndicators(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doSuccessIndexingIndicators") #self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessIndexingIndicators") if self._edPluginControlIndexingIndicators.hasDataOutput( "indexingResult"): xsDataIndexingResult = self._edPluginControlIndexingIndicators.getDataOutput( "indexingResult")[0] #self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) self._edPluginExecEvaluationIndexingMOSFLM.setDataInput( xsDataIndexingResult, "indexingResult") if self._edPluginControlIndexingIndicators.hasDataOutput( "imageQualityIndicators"): listXSDataImageQualityIndicators = self._edPluginControlIndexingIndicators.getDataOutput( "imageQualityIndicators") for xsDataImageQualityIndicators in listXSDataImageQualityIndicators: self._xsDataResultCharacterisation.addImageQualityIndicators( xsDataImageQualityIndicators) self._edPluginExecEvaluationIndexingMOSFLM.setDataInput( xsDataImageQualityIndicators, "imageQualityIndicators") if self._edPluginControlIndexingIndicators.hasDataOutput( "indicatorsShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingIndicators.getDataOutput( "indicatorsShortSummary")[0].getValue() self.executePluginSynchronous( self._edPluginExecEvaluationIndexingMOSFLM) def doFailureIndexingIndicators(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doFailureIndexingIndicators") strErrorMessage = "Execution of Indexing and Indicators plugin failed. Execution of characterisation aborted." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() # def doSuccessIndexingLabelit(self, _edPlugin=None): # EDVerbose.DEBUG("EDPluginControlCharacterisationv1_3.doSuccessIndexingLabelit") # self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessIndexingLabelit") # # Retrieve the indexing result # xsDataIndexingResult = self._edPluginControlIndexingLabelit.getDataOutput() # self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) # if self._edPluginControlIndexingLabelit.hasDataOutput("indexingShortSummary"): # self._strCharacterisationShortSummary += self._edPluginControlIndexingLabelit.getDataOutput("indexingShortSummary")[0].getValue() # # Then start the integration of the reference images # self.indexingToIntegration() def doSuccessIndexingLabelit(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doSuccessIndexingLabelit") self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessIndexingLabelit") if self._edPluginControlIndexingLabelit.hasDataOutput( "indexingShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingLabelit.getDataOutput( "indexingShortSummary")[0].getValue() # Check the indexing results xsDataIndexingResult = self._edPluginControlIndexingLabelit.getDataOutput( ) self._edPluginExecEvaluationIndexingLABELIT.setDataInput( xsDataIndexingResult, "indexingResult") xsDataImageQualityIndicators = self._xsDataResultCharacterisation.getImageQualityIndicators( )[0] self._edPluginExecEvaluationIndexingLABELIT.setDataInput( xsDataImageQualityIndicators, "imageQualityIndicators") self.executePluginSynchronous( self._edPluginExecEvaluationIndexingLABELIT) def doFailureIndexingLabelit(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doFailureIndexingLabelit") self.addStatusMessage("Labelit: Indexing FAILURE.") if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) if self._xsDataIndexingResultMOSFLM == None: strErrorMessage = "Execution of indexing with both MOSFLM and Labelit failed. Execution of characterisation aborted." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) self.generateExecutiveSummary(self) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() else: # Use the MOSFLM indexing results - even if it's P1 self._xsDataResultCharacterisation.setIndexingResult( self._xsDataIndexingResultMOSFLM) xsDataCollection = self._xsDataResultCharacterisation.getDataCollection( ) xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection( XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution( XSDataIndexingSolutionSelected.parseString( self._xsDataIndexingResultMOSFLM.getSelectedSolution( ).marshal())) self._edPluginControlGeneratePrediction.setDataInput( xsDataGeneratePredictionInput) if self._edPluginControlIndexingIndicators.hasDataOutput( "indexingShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingIndicators.getDataOutput( "indexingShortSummary")[0].getValue() # Start the generation of prediction images - we synchronize in the post-process self._edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() def doSuccessEvaluationIndexingMOSFLM(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doSuccessEvaluationIndexingMOSFLM" ) self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessEvaluationIndexing") # Retrieve status messages (if any) if self._edPluginExecEvaluationIndexingMOSFLM.hasDataOutput( "statusMessageImageQualityIndicators"): self.addStatusMessage( self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput( "statusMessageImageQualityIndicators")[0].getValue()) if self._edPluginExecEvaluationIndexingMOSFLM.hasDataOutput( "statusMessageIndexing"): self.addStatusMessage( "MOSFLM: " + self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput( "statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexWithLabelit = False bIndexingSuccess = self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput( "indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput( "indexingResult")[0] self._xsDataIndexingResultMOSFLM = xsDataIndexingResult # Check if space group is P1 - if yes run Labelit indexing xsDataIndexingSolutionSelected = xsDataIndexingResult.getSelectedSolution( ) xsDataCrystal = xsDataIndexingSolutionSelected.getCrystal() xsDataSpaceGroup = xsDataCrystal.getSpaceGroup() strSpaceGroupName = xsDataSpaceGroup.getName().getValue().upper() # Check if MOSFLM has indexed in P1 if strSpaceGroupName == "P1": # Check if the user maybe asked for P1! bIndexWithLabelit = True if self._xsDataCollection.getDiffractionPlan() is not None: if self._xsDataCollection.getDiffractionPlan( ).getForcedSpaceGroup() is not None: if self._xsDataCollection.getDiffractionPlan( ).getForcedSpaceGroup().getValue().upper() == "P1": EDVerbose.screen( "P1 space forced by diffraction plan") bIndexWithLabelit = False if bIndexWithLabelit: EDVerbose.screen( "P1 space group choosed - reindexing with Labelit") else: EDVerbose.screen("MOSFLM indexing successful!") if self._edPluginControlIndexingIndicators.hasDataOutput( "indexingShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingIndicators.getDataOutput( "indexingShortSummary")[0].getValue() # Generate prediction images xsDataCollection = self._xsDataResultCharacterisation.getDataCollection( ) self._xsDataResultCharacterisation.setIndexingResult( xsDataIndexingResult) xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection( XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution( XSDataIndexingSolutionSelected.parseString( xsDataIndexingResult.getSelectedSolution().marshal())) self._edPluginControlGeneratePrediction.setDataInput( xsDataGeneratePredictionInput) # Start the generation of prediction images - we synchronize in the post-process self._edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() else: EDVerbose.screen("Indexing with MOSFLM failed!") bIndexWithLabelit = True if bIndexWithLabelit: # Execute Labelit indexing EDVerbose.screen( "Now trying to index with Labelit - please be patient...") xsDataIndexingInput = XSDataIndexingInput() xsDataSubWedgeList = self._xsDataCollection.getSubWedge() xsDataExperimentalCondition = xsDataSubWedgeList[ 0].getExperimentalCondition() xsDataIndexingInput.setDataCollection(self._xsDataCollection) xsDataIndexingInput.setExperimentalCondition( xsDataExperimentalCondition) if self._xsDataCrystal != None: xsDataIndexingInput.setCrystal(self._xsDataCrystal) self._edPluginControlIndexingLabelit.setDataInput( xsDataIndexingInput) self.executePluginSynchronous(self._edPluginControlIndexingLabelit) def doSuccessEvaluationIndexingLABELIT(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doSuccessEvaluationIndexingLABELIT" ) self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessEvaluationIndexingLABELIT" ) # Retrieve status messages (if any) if self._edPluginExecEvaluationIndexingLABELIT.hasDataOutput( "statusMessageIndexing"): self.addStatusMessage( "Labelit: " + self._edPluginExecEvaluationIndexingLABELIT.getDataOutput( "statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexingSuccess = self._edPluginExecEvaluationIndexingLABELIT.getDataOutput( "indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self._edPluginExecEvaluationIndexingLABELIT.getDataOutput( "indexingResult")[0] self._xsDataResultCharacterisation.setIndexingResult( xsDataIndexingResult) # Then start the integration of the reference images self.indexingToIntegration() else: EDVerbose.screen("Indexing with LABELIT failed!") self.setFailure() def indexingToIntegration(self, _edPlugin=None): # Create the XDS background image xsDataInputControlXDSGenerateBackgroundImage = XSDataInputControlXDSGenerateBackgroundImage( ) xsDataInputControlXDSGenerateBackgroundImage.setDataCollection( self._xsDataCollection) self._edPluginControlXDSGenerateBackgroundImage.setDataInput( xsDataInputControlXDSGenerateBackgroundImage) self._edPluginControlXDSGenerateBackgroundImage.execute() # Integrate the reference images xsDataIntegrationInput = XSDataIntegrationInput() xsDataIntegrationInput.setDataCollection( self._xsDataResultCharacterisation.getDataCollection()) xsDataIndexingResult = self._xsDataResultCharacterisation.getIndexingResult( ) xsDataExperimentalConditionRefinded = xsDataIndexingResult.getSelectedSolution( ).getExperimentalConditionRefined() xsDataIntegrationInput.setExperimentalConditionRefined( xsDataExperimentalConditionRefinded) xsDataIntegrationInput.setSelectedIndexingSolution( xsDataIndexingResult.getSelectedSolution()) self._edPluginControlIntegration.setDataInput(xsDataIntegrationInput) self.executePluginSynchronous(self._edPluginControlIntegration) def doFailureEvaluationIndexingMOSFLM(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doFailureEvaluationIndexing") strWarningMessage = "Execution of indexing evaluation plugin failed." EDVerbose.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) def doFailureEvaluationIndexingLABELIT(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doFailureEvaluationIndexing") strWarningMessage = "Execution of indexing evaluation plugin failed." EDVerbose.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) def doSuccessGeneratePrediction(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doSuccessGeneratePrediction") self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessGeneratePrediction") xsDataGeneratePredictionResult = _edPlugin.getDataOutput() xsDataIndexingResult = self._xsDataResultCharacterisation.getIndexingResult( ) xsDataIndexingResult.setPredictionResult( xsDataGeneratePredictionResult) def doFailureGeneratePrediction(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doFailureGeneratePrediction") strWarningMessage = "Execution of generate prediction plugin failed." EDVerbose.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) #self.addComment("warning: no prediction images") def doSuccessIntegration(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doSuccessIntegration") self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessIntegration") # Wait for XDS plugin if necessary self._edPluginControlXDSGenerateBackgroundImage.synchronize() self.addStatusMessage("Integration successful.") xsDataIntegrationOutput = self._edPluginControlIntegration.getDataOutput( ) self._xsDataResultCharacterisation.setIntegrationResult( xsDataIntegrationOutput) # Integration short summary if self._edPluginControlIntegration.hasDataOutput( "integrationShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIntegration.getDataOutput( "integrationShortSummary")[0].getValue() #EDVerbose.DEBUG( self._xsDataExperimentCharacterisation.marshal() ) if self._bDoStrategyCalculation: xsDataInputStrategy = XSDataInputStrategy() xsDataSolutionSelected = self._xsDataResultCharacterisation.getIndexingResult( ).getSelectedSolution() xsDataInputStrategy.setCrystalRefined( xsDataSolutionSelected.getCrystal()) xsDataInputStrategy.setSample(self._xsDataResultCharacterisation. getDataCollection().getSample()) xsDataIntegrationSubWedgeResultList = xsDataIntegrationOutput.getIntegrationSubWedgeResult( ) xsDataInputStrategy.setBestFileContentDat( xsDataIntegrationSubWedgeResultList[0].getBestfileDat()) xsDataInputStrategy.setBestFileContentPar( xsDataIntegrationSubWedgeResultList[0].getBestfilePar()) xsDataInputStrategy.setExperimentalCondition( xsDataIntegrationSubWedgeResultList[0]. getExperimentalConditionRefined()) xsDataInputStrategy.setXdsBackgroundImage( self._xsDataFileXdsBackgroundImage) for xsDataIntegrationSubWedgeResult in xsDataIntegrationSubWedgeResultList: xsDataInputStrategy.addBestFileContentHKL( xsDataIntegrationSubWedgeResult.getBestfileHKL()) xsDataInputStrategy.setDiffractionPlan( self._xsDataResultCharacterisation.getDataCollection( ).getDiffractionPlan()) self._edPluginControlStrategy.setDataInput(xsDataInputStrategy) self.executePluginSynchronous(self._edPluginControlStrategy) def doFailureIntegration(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doFailureIntegration") strErrorMessage = "Execution of integration plugin failed." self.addStatusMessage("Integration FAILURE.") EDVerbose.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) #self.addComment("integration failure") if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.generateExecutiveSummary(self) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessXDSGenerateBackgroundImage(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doSuccessXDSGenerateBackgroundImage" ) self.retrieveSuccessMessages( _edPlugin, "EDPluginControlCharacterisationv1_3.doSuccessXDSGenerateBackgroundImage" ) self._xsDataFileXdsBackgroundImage = self._edPluginControlXDSGenerateBackgroundImage.getDataOutput( ).getXdsBackgroundImage() self._xsDataResultCharacterisation.setXdsBackgroundImage( self._xsDataFileXdsBackgroundImage) def doFailureXDSGenerateBackgroundImage(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doFailureXDSGenerateBackgroundImage" ) def doSuccessStrategy(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doSuccessStrategy") self.retrieveSuccessMessages( self._edPluginControlStrategy, "EDPluginControlCharacterisationv1_3.doSuccessStrategy") xsDataStrategyResult = self._edPluginControlStrategy.getDataOutput() self._xsDataResultCharacterisation.setStrategyResult( xsDataStrategyResult) if self._edPluginControlStrategy.hasDataOutput("strategyShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlStrategy.getDataOutput( "strategyShortSummary")[0].getValue() self.addStatusMessage("Strategy calculation successful.") def doFailureStrategy(self, _edPlugin=None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.doFailureStrategy") strErrorMessage = "Execution of strategy plugin failed." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.addStatusMessage("Strategy calculation FAILURE.") self.generateExecutiveSummary(self) if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() self.setFailure() def generateExecutiveSummary(self, _edPlugin): """ Generates a summary of the execution of the plugin. """ EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_3.generateExecutiveSummary") self.addExecutiveSummaryLine("Summary of characterisation:") xsDataInputStrategy = self.getDataInput() xsDataCollection = xsDataInputStrategy.getDataCollection() xsDataDiffractionPlan = xsDataCollection.getDiffractionPlan() self.addExecutiveSummaryLine("Diffraction plan:") if (xsDataDiffractionPlan.getComplexity() is not None): self.addExecutiveSummaryLine( "BEST complexity : %s" % xsDataDiffractionPlan.getComplexity().getValue()) if (xsDataDiffractionPlan.getAimedCompleteness() is not None): self.addExecutiveSummaryLine( "Aimed completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getAimedCompleteness().getValue())) if (xsDataDiffractionPlan.getRequiredCompleteness() is not None): self.addExecutiveSummaryLine( "Required completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getRequiredCompleteness().getValue())) if (xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution() is not None): self.addExecutiveSummaryLine( "Aimed I/sigma at highest resolution : %6.1f" % xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution( ).getValue()) if (xsDataDiffractionPlan.getAimedResolution() is not None): self.addExecutiveSummaryLine( "Aimed resolution : %6.1f [A]" % xsDataDiffractionPlan.getAimedResolution().getValue()) if (xsDataDiffractionPlan.getRequiredResolution() is not None): self.addExecutiveSummaryLine( "Required resolution : %6.1f [A]" % xsDataDiffractionPlan.getRequiredResolution().getValue()) if (xsDataDiffractionPlan.getAimedMultiplicity() is not None): self.addExecutiveSummaryLine( "Aimed multiplicity : %6.1f" % xsDataDiffractionPlan.getAimedMultiplicity().getValue()) if (xsDataDiffractionPlan.getRequiredMultiplicity() is not None): self.addExecutiveSummaryLine( "Required multiplicity : %6.1f" % xsDataDiffractionPlan.getRequiredMultiplicity().getValue()) if (xsDataDiffractionPlan.getForcedSpaceGroup() is not None): self.addExecutiveSummaryLine( "Forced space group : %6s" % xsDataDiffractionPlan.getForcedSpaceGroup().getValue()) if (xsDataDiffractionPlan.getMaxExposureTimePerDataCollection() is not None): self.addExecutiveSummaryLine( "Max exposure time per data collection : %6.1f [s]" % xsDataDiffractionPlan.getMaxExposureTimePerDataCollection( ).getValue()) self.addExecutiveSummarySeparator() if self._edPluginControlIndexingIndicators is not None: self.appendExecutiveSummary( self._edPluginControlIndexingIndicators, "") if self._edPluginControlIndexingLabelit is not None: self.appendExecutiveSummary(self._edPluginControlIndexingLabelit, "") if self._edPluginControlIntegration is not None: self.appendExecutiveSummary(self._edPluginControlIntegration, "") if self._edPluginControlStrategy is not None: self.appendExecutiveSummary(self._edPluginControlStrategy, "") self.addExecutiveSummarySeparator() if self._strCharacterisationShortSummary is not None: self.addExecutiveSummaryLine("Characterisation short summary:") self.addExecutiveSummaryLine("") if self._strStatusMessage != None: for strLine in self._strStatusMessage.split(". "): if strLine.endswith("."): self.addExecutiveSummaryLine(strLine) else: self.addExecutiveSummaryLine(strLine + ".") self.addExecutiveSummaryLine("") for strLine in self._strCharacterisationShortSummary.split("\n"): if strLine != "\n": self.addExecutiveSummaryLine(strLine) self.addErrorWarningMessagesToExecutiveSummary( "Characterisation error and warning messages: ") self.addExecutiveSummarySeparator() def getPluginStrategyName(self): return self._strPluginControlStrategy def addStatusMessage(self, _strStatusMessage): if self._strStatusMessage != "": self._strStatusMessage += " " self._strStatusMessage += _strStatusMessage def doStrategyCalculation(self, _bValue): self._bDoStrategyCalculation = _bValue
def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlCharacterisationv1_5.preProcess") self._xsDataResultCharacterisation = XSDataResultCharacterisation() # Load the plugins self._edPluginControlIndexingIndicators = self.loadPlugin(self._strPluginControlIndexingIndicators, \ "Indexing") self._edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self._edPluginControlIndexingMOSFLM = self.loadPlugin(self._strPluginControlIndexingMOSFLM, \ "IndexingMOSFLM") self._edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self._edPluginControlGeneratePrediction = self.loadPlugin(self._strPluginControlGeneratePrediction, \ "GeneratePrediction") self._edPluginControlIntegration = self.loadPlugin(self._strPluginControlIntegration, \ "Integration") self._edPluginControlXDSGenerateBackgroundImage = self.loadPlugin(self._strPluginControlXDSGenerateBackgroundImage, \ "ControlXDSGenerateBackgroundImage") self._edPluginControlStrategy = self.loadPlugin(self._strPluginControlStrategy, \ "Strategy") if self._runKappa: self._edPluginControlKappa = self.loadPlugin(self._strPluginControlKappaName, "Kappa") if (self._edPluginControlIndexingIndicators is not None): self.DEBUG("EDPluginControlCharacterisationv1_5.preProcess: " + self._strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self._xsDataCollection = xsDataInputCharacterisation.getDataCollection() # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = self._xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition().getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: strWarningMessageBanner = "^"*80 strWarningMessage1 = "WARNING! Transmission for characterisation set to %.1f %%" % fTransmission strWarningMessage2 = "Please consider re-characterising with transmission set to 100 %" self.warning(strWarningMessageBanner) self.warning(strWarningMessage1) self.warning(strWarningMessage2) self.warning(strWarningMessageBanner) self.addWarningMessage(strWarningMessageBanner) self.addWarningMessage(strWarningMessage1) self.addWarningMessage(strWarningMessage2) self.addWarningMessage(strWarningMessageBanner) self.sendMessageToMXCuBE(strWarningMessage1, "warning") self.sendMessageToMXCuBE(strWarningMessage2, "warning") xsDataCrystal = None xsDataSubWedgeList = self._xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_5.preProcess: No subwedges in input data." self.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam().getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage("EDPluginControlCharacterisationv1_5.preProcess ERROR: " + strErrorMessage) # self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self._xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup() if (xsDataStringForcedSpaceGroup is not None): self._xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self._xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCollection, "dataCollection") if self._xsDataCrystal is not None: self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCrystal, "crystal") # Populate characterisation object self._xsDataResultCharacterisation.setDataCollection(XSDataCollection.parseString(self._xsDataCollection.marshal())) # Load the thumbnail plugins self._iNoReferenceImages = 0 if not self.isFailure(): for subWedge in xsDataInputCharacterisation.dataCollection.subWedge: for image in subWedge.image: self._iNoReferenceImages += 1 edPluginJpeg = self.loadPlugin(self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(1024) xsDataInputMXThumbnail.width = XSDataInteger(1024) jpegFilename = os.path.splitext(os.path.basename(image.path.value))[0] + ".jpg" xsDataInputMXThumbnail.outputPath = XSDataFile(XSDataString(os.path.join(self.getWorkingDirectory(), jpegFilename))) edPluginJpeg.dataInput = xsDataInputMXThumbnail edPluginThumnail = self.loadPlugin(self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(256) xsDataInputMXThumbnail.width = XSDataInteger(256) thumbnailFilename = os.path.splitext(os.path.basename(image.path.value))[0] + ".thumbnail.jpg" xsDataInputMXThumbnail.outputPath = XSDataFile(XSDataString(os.path.join(self.getWorkingDirectory(), thumbnailFilename))) edPluginThumnail.dataInput = xsDataInputMXThumbnail self._listPluginGenerateThumbnail.append((image, edPluginJpeg, edPluginThumnail))
def testSetDataModelInput(self): edPluginStrategy = self.createPlugin() strPathToTestConfigFile = os.path.join(self.getPluginTestsDataHome(), "XSConfiguration_ESRF.xml") edConfiguration = EDConfiguration(strPathToTestConfigFile) dictItem = edConfiguration.get(edPluginStrategy.getPluginName()) edPluginStrategy.setConfig(dictItem) edPluginStrategy.configure() xsDataStrategy = XSDataInputStrategy() # Beam xsExperimentalCondition = XSDataExperimentalCondition() xsBeam = XSDataBeam() xsBeam.setFlux(XSDataFlux(1e+12)) xsBeam.setWavelength(XSDataWavelength(2.41)) xsBeam.setSize(XSDataSize(x=XSDataLength(0.1), y=XSDataLength(0.1))) xsBeam.setExposureTime(XSDataTime(1)) xsExperimentalCondition.setBeam(xsBeam) # Detector and Exposure Time xsDataDetector = XSDataDetector() xsDataDetector.setType(XSDataString("q210-2x")) xsExperimentalCondition.setDetector(xsDataDetector) xsDataGoniostat = XSDataGoniostat() xsDataGoniostat.setRotationAxis(XSDataString("phi")) xsExperimentalCondition.setGoniostat(xsDataGoniostat) xsDataStrategy.setExperimentalCondition(xsExperimentalCondition) # Best Files bestFileContentDat = EDUtilsFile.readFile( os.path.join(self.strDataPath, "bestfile.dat")) xsDataStrategy.setBestFileContentDat(XSDataString(bestFileContentDat)) bestFileContentPar = EDUtilsFile.readFile( os.path.join(self.strDataPath, "bestfile.par")) xsDataStrategy.setBestFileContentPar(XSDataString(bestFileContentPar)) bestFileContentHKL = EDUtilsFile.readFile( os.path.join(self.strDataPath, "bestfile1.hkl")) xsDataStrategy.addBestFileContentHKL(XSDataString(bestFileContentHKL)) # Crystal xsDataSampleCrystalMM = XSDataSampleCrystalMM() xsDataStructure = XSDataStructure() xsDataComposition = XSDataChemicalCompositionMM() xsDataChain = XSDataChain() xsDataChain.setType(XSDataString("protein")) xsDataChain.setNumberOfCopies(XSDataDouble(2)) xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom1 = XSDataAtom() xsDataAtom1.setSymbol(XSDataString("Se")) xsDataAtom1.setNumberOf(XSDataDouble(4)) xsDataAtomicComposition.addAtom(xsDataAtom1) xsDataChain.setHeavyAtoms(xsDataAtomicComposition) xsDataChain.setNumberOfMonomers(XSDataDouble(100)) xsDataStructure.addChain(xsDataChain) xsDataChain2 = XSDataChain() xsDataChain2.setType(XSDataString("rna")) xsDataChain2.setNumberOfCopies(XSDataDouble(1)) xsDataChain2.setNumberOfMonomers(XSDataDouble(60)) xsDataStructure.addChain(xsDataChain2) xsDataLigand = XSDataLigand() xsDataLigand.setNumberOfCopies(XSDataDouble(2)) xsDataLigand.setNumberOfLightAtoms(XSDataDouble(42)) xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom2 = XSDataAtom() xsDataAtom2.setSymbol(XSDataString("Fe")) xsDataAtom2.setNumberOf(XSDataDouble(1)) xsDataAtomicComposition.addAtom(xsDataAtom2) xsDataLigand.setHeavyAtoms(xsDataAtomicComposition) xsDataStructure.addLigand(xsDataLigand) xsDataStructure.setNumberOfCopiesInAsymmetricUnit(XSDataDouble(0.25)) xsDataSolvent = XSDataSolvent() xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom3 = XSDataAtom() xsDataAtom3.setSymbol(XSDataString("Na")) xsDataAtom3.setConcentration(XSDataDouble(1000)) xsDataAtom4 = XSDataAtom() xsDataAtom4.setSymbol(XSDataString("Cl")) xsDataAtom4.setConcentration(XSDataDouble(1000)) xsDataAtomicComposition.addAtom(xsDataAtom3) xsDataAtomicComposition.addAtom(xsDataAtom4) xsDataSolvent.setAtoms(xsDataAtomicComposition) xsDataComposition.setStructure(xsDataStructure) xsDataComposition.setSolvent(xsDataSolvent) xsDataSampleCrystalMM.setChemicalComposition(xsDataComposition) xsDataSampleCrystalMM.setSize( XSDataSize(XSDataLength(0.1), XSDataLength(0.1), XSDataLength(0.1))) xsDataCrystal = XSDataCrystal() xsDataCell = XSDataCell(angle_alpha=XSDataAngle(90.0), angle_beta=XSDataAngle(90.0), angle_gamma=XSDataAngle(90.0), length_a=XSDataLength(78.9), length_b=XSDataLength(95.162), length_c=XSDataLength(104.087)) xsDataCrystal.setCell(xsDataCell) xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setITNumber(XSDataInteger(16)) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataSampleCrystalMM.setSusceptibility(XSDataDouble(1.5)) xsDataStrategy.setCrystalRefined(xsDataCrystal) xsDataStrategy.setSample(xsDataSampleCrystalMM) xsDataStrategy.exportToFile(self.strObtainedInputFile) pyStrExpectedInput = self.readAndParseFile(self.strReferenceInputFile) pyStrObtainedInput = self.readAndParseFile(self.strObtainedInputFile) xsDataInputExpected = XSDataInputStrategy.parseString( pyStrExpectedInput) xsDataInputObtained = XSDataInputStrategy.parseString( pyStrObtainedInput) EDAssert.equal(xsDataInputExpected.marshal(), xsDataInputObtained.marshal())
class EDPluginControlCharacterisationv1_5(EDPluginControl): """ [To be replaced with a description of EDPluginControlTemplatev10] """ def __init__(self): EDPluginControl.__init__(self) self.setXSDataInputClass(XSDataInputCharacterisation) self._strPluginControlIndexingIndicators = "EDPluginControlIndexingIndicatorsv1_1" self._strPluginExecEvaluationIndexing = "EDPluginExecEvaluationIndexingv10" self._strPluginControlIndexingMOSFLM = "EDPluginControlIndexingMOSFLMv10" self._strPluginControlGeneratePrediction = "EDPluginControlGeneratePredictionv10" self._strPluginControlIntegration = "EDPluginControlIntegrationv10" self._strPluginControlXDSGenerateBackgroundImage = "EDPluginControlXDSGenerateBackgroundImagev1_0" self._strPluginControlStrategy = "EDPluginControlStrategyv1_3" self._strPluginGenerateThumbnailName = "EDPluginMXThumbnailv1_1" self._strPluginControlKappaName = "EDPluginControlKappav1_0" self._listPluginGenerateThumbnail = [] self._edPluginControlIndexingIndicators = None self._edPluginExecEvaluationIndexingMOSFLM = None self._edPluginExecEvaluationIndexingLABELIT = None self._edPluginControlGeneratePrediction = None self._edPluginControlIntegration = None self._edPluginControlXDSGenerateBackgroundImage = None self._edPluginControlStrategy = None self._edPluginControlKappa = None self._xsDataCollection = None self._xsDataResultCharacterisation = None self._xsDataIndexingResultMOSFLM = None self._xsDataCrystal = None self._strCharacterisationShortSummary = "" self._strStatusMessage = "" self._xsDataFileXdsBackgroundImage = None self._bDoStrategyCalculation = True self._fMinTransmission = 10 # % self._iNoReferenceImages = None self._iNoImagesWithDozorScore = None self._strMxCuBE_URI = None self._oServerProxy = None self._runKappa = False def checkParameters(self): """ Checks the mandatory parameters. """ self.DEBUG("EDPluginControlCharacterisationv1_5.checkParameters") self.checkMandatoryParameters(self.getDataInput(), "Data Input is None") self.checkMandatoryParameters(self.getDataInput().getDataCollection(), "dataCollection") self.checkMandatoryParameters(self.getDataInput().getDataCollection().getDiffractionPlan(), "diffractionPlan") def configure(self): """ Gets the configuration parameters (if any). """ EDPluginControl.configure(self) self.DEBUG("EDPluginControlCharacterisationv1_5.configure") self._strMxCuBE_URI = self.config.get("mxCuBE_URI", None) if self._strMxCuBE_URI is not None and "mxCuBE_XMLRPC_log" in os.environ.keys(): self.DEBUG("Enabling sending messages to mxCuBE via URI {0}".format(self._strMxCuBE_URI)) self._oServerProxy = xmlrpclib.ServerProxy(self._strMxCuBE_URI) self._runKappa = self.config.get("runKappa", False) self._fMinTransmission = self.config.get("minTransmissionWarning", self._fMinTransmission) def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlCharacterisationv1_5.preProcess") self._xsDataResultCharacterisation = XSDataResultCharacterisation() # Load the plugins self._edPluginControlIndexingIndicators = self.loadPlugin(self._strPluginControlIndexingIndicators, \ "Indexing") self._edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self._edPluginControlIndexingMOSFLM = self.loadPlugin(self._strPluginControlIndexingMOSFLM, \ "IndexingMOSFLM") self._edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self._edPluginControlGeneratePrediction = self.loadPlugin(self._strPluginControlGeneratePrediction, \ "GeneratePrediction") self._edPluginControlIntegration = self.loadPlugin(self._strPluginControlIntegration, \ "Integration") self._edPluginControlXDSGenerateBackgroundImage = self.loadPlugin(self._strPluginControlXDSGenerateBackgroundImage, \ "ControlXDSGenerateBackgroundImage") self._edPluginControlStrategy = self.loadPlugin(self._strPluginControlStrategy, \ "Strategy") if self._runKappa: self._edPluginControlKappa = self.loadPlugin(self._strPluginControlKappaName, "Kappa") if (self._edPluginControlIndexingIndicators is not None): self.DEBUG("EDPluginControlCharacterisationv1_5.preProcess: " + self._strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self._xsDataCollection = xsDataInputCharacterisation.getDataCollection() # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = self._xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition().getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: strWarningMessageBanner = "^"*80 strWarningMessage1 = "WARNING! Transmission for characterisation set to %.1f %%" % fTransmission strWarningMessage2 = "Please consider re-characterising with transmission set to 100 %" self.warning(strWarningMessageBanner) self.warning(strWarningMessage1) self.warning(strWarningMessage2) self.warning(strWarningMessageBanner) self.addWarningMessage(strWarningMessageBanner) self.addWarningMessage(strWarningMessage1) self.addWarningMessage(strWarningMessage2) self.addWarningMessage(strWarningMessageBanner) self.sendMessageToMXCuBE(strWarningMessage1, "warning") self.sendMessageToMXCuBE(strWarningMessage2, "warning") xsDataCrystal = None xsDataSubWedgeList = self._xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_5.preProcess: No subwedges in input data." self.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam().getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage("EDPluginControlCharacterisationv1_5.preProcess ERROR: " + strErrorMessage) # self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self._xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup() if (xsDataStringForcedSpaceGroup is not None): self._xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self._xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCollection, "dataCollection") if self._xsDataCrystal is not None: self._edPluginControlIndexingIndicators.setDataInput(self._xsDataCrystal, "crystal") # Populate characterisation object self._xsDataResultCharacterisation.setDataCollection(XSDataCollection.parseString(self._xsDataCollection.marshal())) # Load the thumbnail plugins self._iNoReferenceImages = 0 if not self.isFailure(): for subWedge in xsDataInputCharacterisation.dataCollection.subWedge: for image in subWedge.image: self._iNoReferenceImages += 1 edPluginJpeg = self.loadPlugin(self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(1024) xsDataInputMXThumbnail.width = XSDataInteger(1024) jpegFilename = os.path.splitext(os.path.basename(image.path.value))[0] + ".jpg" xsDataInputMXThumbnail.outputPath = XSDataFile(XSDataString(os.path.join(self.getWorkingDirectory(), jpegFilename))) edPluginJpeg.dataInput = xsDataInputMXThumbnail edPluginThumnail = self.loadPlugin(self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(256) xsDataInputMXThumbnail.width = XSDataInteger(256) thumbnailFilename = os.path.splitext(os.path.basename(image.path.value))[0] + ".thumbnail.jpg" xsDataInputMXThumbnail.outputPath = XSDataFile(XSDataString(os.path.join(self.getWorkingDirectory(), thumbnailFilename))) edPluginThumnail.dataInput = xsDataInputMXThumbnail self._listPluginGenerateThumbnail.append((image, edPluginJpeg, edPluginThumnail)) def process(self, _edObject=None): EDPluginControl.process(self) self.DEBUG("EDPluginControlCharacterisationv1_5.process") self._edPluginControlIndexingIndicators.connectSUCCESS(self.doSuccessIndexingIndicators) self._edPluginControlIndexingIndicators.connectFAILURE(self.doFailureIndexingIndicators) self._edPluginExecEvaluationIndexingLABELIT.connectSUCCESS(self.doSuccessEvaluationIndexingLABELIT) self._edPluginExecEvaluationIndexingLABELIT.connectFAILURE(self.doFailureEvaluationIndexingLABELIT) self._edPluginControlIndexingMOSFLM.connectSUCCESS(self.doSuccessIndexingMOSFLM) self._edPluginControlIndexingMOSFLM.connectFAILURE(self.doFailureIndexingMOSFLM) self._edPluginExecEvaluationIndexingMOSFLM.connectSUCCESS(self.doSuccessEvaluationIndexingMOSFLM) self._edPluginExecEvaluationIndexingMOSFLM.connectFAILURE(self.doFailureEvaluationIndexingMOSFLM) self._edPluginControlGeneratePrediction.connectSUCCESS(self.doSuccessGeneratePrediction) self._edPluginControlGeneratePrediction.connectFAILURE(self.doFailureGeneratePrediction) self._edPluginControlIntegration.connectSUCCESS(self.doSuccessIntegration) self._edPluginControlIntegration.connectFAILURE(self.doFailureIntegration) self._edPluginControlXDSGenerateBackgroundImage.connectSUCCESS(self.doSuccessXDSGenerateBackgroundImage) self._edPluginControlXDSGenerateBackgroundImage.connectFAILURE(self.doFailureXDSGenerateBackgroundImage) self._edPluginControlStrategy.connectSUCCESS(self.doSuccessStrategy) self._edPluginControlStrategy.connectFAILURE(self.doFailureStrategy) self.executePluginSynchronous(self._edPluginControlIndexingIndicators) def finallyProcess(self, _edObject=None): EDPluginControl.finallyProcess(self) self.DEBUG("EDPluginControlCharacterisationv1_5.finallyProcess") # Synchronize thumbnail plugins for tuplePlugin in self._listPluginGenerateThumbnail: image = tuplePlugin[0] tuplePlugin[1].synchronize() jpegImage = image.copy() jpegImage.path = tuplePlugin[1].dataOutput.thumbnail.path self._xsDataResultCharacterisation.addJpegImage(jpegImage) tuplePlugin[2].synchronize() thumbnailImage = image.copy() thumbnailImage.path = tuplePlugin[2].dataOutput.thumbnail.path self._xsDataResultCharacterisation.addThumbnailImage(thumbnailImage) if self._edPluginControlGeneratePrediction.isRunning(): self._edPluginControlGeneratePrediction.synchronize() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self._xsDataResultCharacterisation.setStatusMessage(XSDataString(self._strStatusMessage)) if self._strCharacterisationShortSummary != None: self.setDataOutput(XSDataString(self._strCharacterisationShortSummary), "shortSummary") self._xsDataResultCharacterisation.setShortSummary(XSDataString(self._strCharacterisationShortSummary)) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) if self.isFailure(): self.sendMessageToMXCuBE("Ended with error messages", "error") def doSuccessIndexingIndicators(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doSuccessIndexingIndicators") # self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_5.doSuccessIndexingIndicators") if self._edPluginControlIndexingIndicators.hasDataOutput("indexingResult"): xsDataIndexingResult = self._edPluginControlIndexingIndicators.getDataOutput("indexingResult")[0] # self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) self._edPluginExecEvaluationIndexingLABELIT.setDataInput(xsDataIndexingResult, "indexingResult") if self._edPluginControlIndexingIndicators.hasDataOutput("imageQualityIndicators"): listXSDataImageQualityIndicators = self._edPluginControlIndexingIndicators.getDataOutput("imageQualityIndicators") for xsDataImageQualityIndicators in listXSDataImageQualityIndicators: if xsDataImageQualityIndicators.dozor_score: if self._iNoImagesWithDozorScore is None: self._iNoImagesWithDozorScore = 0 if xsDataImageQualityIndicators.dozor_score.value > 0.001: self._iNoImagesWithDozorScore += 1 self._xsDataResultCharacterisation.addImageQualityIndicators(xsDataImageQualityIndicators) self._edPluginExecEvaluationIndexingLABELIT.setDataInput(xsDataImageQualityIndicators, "imageQualityIndicators") if self._edPluginControlIndexingIndicators.hasDataOutput("indicatorsShortSummary"): indicatorsShortSummary = self._edPluginControlIndexingIndicators.getDataOutput("indicatorsShortSummary")[0].getValue() self._strCharacterisationShortSummary += indicatorsShortSummary self.sendMessageToMXCuBE(indicatorsShortSummary) for tuplePlugin in self._listPluginGenerateThumbnail: tuplePlugin[1].execute() tuplePlugin[2].execute() self.executePluginSynchronous(self._edPluginExecEvaluationIndexingLABELIT) def doFailureIndexingIndicators(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doFailureIndexingIndicators") # If more than two reference images try to index with MOSFLM: if self._edPluginControlIndexingIndicators.hasDataOutput("indicatorsShortSummary"): indicatorsShortSummary = self._edPluginControlIndexingIndicators.getDataOutput("indicatorsShortSummary")[0].getValue() self._strCharacterisationShortSummary += indicatorsShortSummary self.sendMessageToMXCuBE(indicatorsShortSummary) if self._iNoImagesWithDozorScore > 0: strWarningMessage = "Execution of Indexing and Indicators plugin failed - trying to index with MOSFLM." self.WARNING(strWarningMessage) self.sendMessageToMXCuBE(strWarningMessage, "warning") self.addWarningMessage(strWarningMessage) xsDataIndexingInput = XSDataIndexingInput() xsDataIndexingInput.dataCollection = self._xsDataCollection xsDataIndexingInput.experimentalCondition = self._xsDataCollection.subWedge[0].experimentalCondition xsDataIndexingInput.crystal = self._xsDataCrystal self._edPluginControlIndexingMOSFLM.dataInput = xsDataIndexingInput self.executePluginSynchronous(self._edPluginControlIndexingMOSFLM) else: strErrorMessage = "Execution of Indexing and Indicators plugin failed. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.generateExecutiveSummary(self) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessIndexingMOSFLM(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doSuccessIndexingMOSFLM") xsDataIndexingResult = self._edPluginControlIndexingMOSFLM.dataOutput self._edPluginExecEvaluationIndexingMOSFLM.setDataInput(xsDataIndexingResult, "indexingResult") self.executePluginSynchronous(self._edPluginExecEvaluationIndexingMOSFLM) def doFailureIndexingMOSFLM(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doFailureIndexingMOSFLM") strErrorMessage = "Indexing with MOSFLM failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.executePluginSynchronous(self._edPluginExecEvaluationIndexingMOSFLM) def doSuccessEvaluationIndexingLABELIT(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doSuccessEvaluationIndexingLABELIT") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_5.doSuccessEvaluationIndexingLABELIT") # Retrieve status messages (if any) if self._edPluginExecEvaluationIndexingLABELIT.hasDataOutput("statusMessageIndexing"): self.addStatusMessage("Labelit: " + self._edPluginExecEvaluationIndexingLABELIT.getDataOutput("statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexingSuccess = self._edPluginExecEvaluationIndexingLABELIT.getDataOutput("indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self._edPluginExecEvaluationIndexingLABELIT.getDataOutput("indexingResult")[0] self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) if self._edPluginControlIndexingIndicators.hasDataOutput("indexingShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingIndicators.getDataOutput("indexingShortSummary")[0].getValue() xsDataCollection = self._xsDataResultCharacterisation.getDataCollection() xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection(XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution(XSDataIndexingSolutionSelected.parseString(xsDataIndexingResult.getSelectedSolution().marshal())) self._edPluginControlGeneratePrediction.setDataInput(xsDataGeneratePredictionInput) if self._edPluginControlIndexingIndicators.hasDataOutput("indexingShortSummary"): indexingShortSummary = self._edPluginControlIndexingIndicators.getDataOutput("indexingShortSummary")[0].getValue() self._strCharacterisationShortSummary += indexingShortSummary self.sendMessageToMXCuBE(indexingShortSummary) # Start the generation of prediction images - we synchronize in the post-process self._edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() else: if self._iNoImagesWithDozorScore > 0: strWarningMessage = "Execution of Indexing and Indicators plugin failed - trying to index with MOSFLM." self.WARNING(strWarningMessage) self.sendMessageToMXCuBE(strWarningMessage, "warning") self.addWarningMessage(strWarningMessage) xsDataIndexingInput = XSDataIndexingInput() xsDataIndexingInput.dataCollection = self._xsDataCollection xsDataIndexingInput.experimentalCondition = self._xsDataCollection.subWedge[0].experimentalCondition xsDataIndexingInput.crystal = self._xsDataCrystal self._edPluginControlIndexingMOSFLM.setDataInput(xsDataIndexingInput) self.executePluginSynchronous(self._edPluginControlIndexingMOSFLM) else: strErrorMessage = "Execution of indexing with Labelit failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.setFailure() self.generateExecutiveSummary(self) if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessEvaluationIndexingMOSFLM(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doSuccessEvaluationIndexingMOSFLM") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_5.doSuccessEvaluationIndexingMOSFLM") # Retrieve status messages (if any) if self._edPluginExecEvaluationIndexingMOSFLM.hasDataOutput("statusMessageIndexing"): self.addStatusMessage("MOSFLM: " + self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput("statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexingSuccess = self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput("indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self._edPluginExecEvaluationIndexingMOSFLM.getDataOutput("indexingResult")[0] self._xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) self._strCharacterisationShortSummary += self.generateIndexingShortSummary(xsDataIndexingResult) xsDataCollection = self._xsDataResultCharacterisation.getDataCollection() xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection(XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution(XSDataIndexingSolutionSelected.parseString(xsDataIndexingResult.getSelectedSolution().marshal())) self._edPluginControlGeneratePrediction.setDataInput(xsDataGeneratePredictionInput) if self._edPluginControlIndexingIndicators.hasDataOutput("indexingShortSummary"): self._strCharacterisationShortSummary += self._edPluginControlIndexingIndicators.getDataOutput("indexingShortSummary")[0].getValue() # Start the generation of prediction images - we synchronize in the post-process self._edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() else: strErrorMessage = "Execution of indexing with MOSFLM failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.setFailure() self.generateExecutiveSummary(self) if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def generateIndexingShortSummary(self, _xsDataIndexingResult): """ Generates a very short summary of the indexing """ strIndexingShortSummary = "" if self.hasDataInput("crystal"): xsDataCrystal = self.getDataInput("crystal")[0] if xsDataCrystal.getSpaceGroup() is not None: strForcedSpaceGroup = xsDataCrystal.getSpaceGroup().getName().getValue().upper() if xsDataCrystal.getSpaceGroup().getName().getValue() != "": strIndexingShortSummary += "Forced space group: %s\n" % strForcedSpaceGroup if _xsDataIndexingResult is not None: # Indexing solution xsDataSelectedSolution = _xsDataIndexingResult.getSelectedSolution() xsDataCrystal = xsDataSelectedSolution.getCrystal() # Refined cell parameters xsDataCell = xsDataCrystal.getCell() fA = xsDataCell.getLength_a().getValue() fB = xsDataCell.getLength_b().getValue() fC = xsDataCell.getLength_c().getValue() fAlpha = xsDataCell.getAngle_alpha().getValue() fBeta = xsDataCell.getAngle_beta().getValue() fGamma = xsDataCell.getAngle_gamma().getValue() # Estimated mosaicity fEstimatedMosaicity = xsDataCrystal.getMosaicity().getValue() # Space group strSpaceGroup = xsDataCrystal.getSpaceGroup().getName().getValue() # Spot deviation xsDataStatisticsIndexing = xsDataSelectedSolution.getStatistics() fSpotDeviationPositional = xsDataStatisticsIndexing.getSpotDeviationPositional().getValue() strIndexingShortSummary += "Indexing: laue/space group %s, mosaicity %.2f [degree], " % (strSpaceGroup, fEstimatedMosaicity) strIndexingShortSummary += "RMS dev pos %.2f [mm]" % fSpotDeviationPositional if xsDataStatisticsIndexing.getSpotDeviationAngular() is not None: fSpotDeviationAngular = xsDataStatisticsIndexing.getSpotDeviationAngular().getValue() strIndexingShortSummary += " ang %.2f [degree]" % fSpotDeviationAngular strIndexingShortSummary += "\n" strIndexingShortSummary += "Indexing: refined Cell: %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n" % (fA, fB, fC, fAlpha, fBeta, fGamma) else: strIndexingShortSummary += "Indexing failed." return strIndexingShortSummary def indexingToIntegration(self, _edPlugin=None): # Run Kappa if configured if self._runKappa: xsDataInputControlKappa = XSDataInputControlKappa() xsDataInputControlKappa.dataCollection = self._xsDataCollection xsDataInputControlKappa.selectedSolution = self._xsDataResultCharacterisation.indexingResult.selectedSolution self._edPluginControlKappa.dataInput = xsDataInputControlKappa self.executePluginSynchronous(self._edPluginControlKappa) if not self._edPluginControlKappa.isFailure(): self._xsDataResultCharacterisation.kappaReorientation = self._edPluginControlKappa.dataOutput # Create the XDS background image xsDataInputControlXDSGenerateBackgroundImage = XSDataInputControlXDSGenerateBackgroundImage() xsDataInputControlXDSGenerateBackgroundImage.setDataCollection(self._xsDataCollection) self._edPluginControlXDSGenerateBackgroundImage.setDataInput(xsDataInputControlXDSGenerateBackgroundImage) self._edPluginControlXDSGenerateBackgroundImage.execute() # Integrate the reference images xsDataIntegrationInput = XSDataIntegrationInput() xsDataIntegrationInput.setDataCollection(self._xsDataResultCharacterisation.getDataCollection()) xsDataIndexingResult = self._xsDataResultCharacterisation.getIndexingResult() xsDataExperimentalConditionRefinded = xsDataIndexingResult.getSelectedSolution().getExperimentalConditionRefined() xsDataIntegrationInput.setExperimentalConditionRefined(xsDataExperimentalConditionRefinded) xsDataIntegrationInput.setSelectedIndexingSolution(xsDataIndexingResult.getSelectedSolution()) self._edPluginControlIntegration.setDataInput(xsDataIntegrationInput) self.executePluginSynchronous(self._edPluginControlIntegration) def doFailureEvaluationIndexingLABELIT(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doFailureEvaluationIndexing") strErrorMessage = "Execution of indexing evaluation plugin failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.generateExecutiveSummary(self) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doFailureEvaluationIndexingMOSFLM(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doFailureEvaluationIndexingMOSFLM") strErrorMessage = "Execution of indexing evaluation plugin failed." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) self.generateExecutiveSummary(self) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessGeneratePrediction(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doSuccessGeneratePrediction") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_5.doSuccessGeneratePrediction") xsDataGeneratePredictionResult = _edPlugin.getDataOutput() xsDataIndexingResult = self._xsDataResultCharacterisation.getIndexingResult() xsDataIndexingResult.setPredictionResult(xsDataGeneratePredictionResult) def doFailureGeneratePrediction(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doFailureGeneratePrediction") strWarningMessage = "Execution of generate prediction plugin failed." self.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) # self.addComment("warning: no prediction images") def doSuccessIntegration(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doSuccessIntegration") self.retrieveSuccessMessages(self._edPluginControlIntegration, "EDPluginControlCharacterisationv1_5.doSuccessIntegration") # Wait for XDS plugin if necessary self._edPluginControlXDSGenerateBackgroundImage.synchronize() self.addStatusMessage("Integration successful.") xsDataIntegrationOutput = self._edPluginControlIntegration.getDataOutput() self._xsDataResultCharacterisation.setIntegrationResult(xsDataIntegrationOutput) # Integration short summary if self._edPluginControlIntegration.hasDataOutput("integrationShortSummary"): integrationShortSummary = self._edPluginControlIntegration.getDataOutput("integrationShortSummary")[0].getValue() self._strCharacterisationShortSummary += integrationShortSummary self.sendMessageToMXCuBE(integrationShortSummary) # self.DEBUG( self._xsDataExperimentCharacterisation.marshal() ) if self._bDoStrategyCalculation: xsDataInputStrategy = XSDataInputStrategy() xsDataSolutionSelected = self._xsDataResultCharacterisation.getIndexingResult().getSelectedSolution() xsDataInputStrategy.setCrystalRefined(xsDataSolutionSelected.getCrystal()) xsDataInputStrategy.setSample(self._xsDataResultCharacterisation.getDataCollection().getSample()) xsDataIntegrationSubWedgeResultList = xsDataIntegrationOutput.getIntegrationSubWedgeResult() bFirst = True for xsDataIntegrationSubWedgeResult in xsDataIntegrationSubWedgeResultList: if xsDataIntegrationSubWedgeResult.getBestfileHKL() is not None: xsDataInputStrategy.addBestFileContentHKL(xsDataIntegrationSubWedgeResult.getBestfileHKL()) if bFirst: xsDataInputStrategy.setBestFileContentDat(xsDataIntegrationSubWedgeResult.getBestfileDat()) xsDataInputStrategy.setBestFileContentPar(xsDataIntegrationSubWedgeResult.getBestfilePar()) xsDataInputStrategy.setExperimentalCondition(xsDataIntegrationSubWedgeResult.getExperimentalConditionRefined()) bFirst = False xsDataInputStrategy.setXdsBackgroundImage(self._xsDataFileXdsBackgroundImage) xsDataInputStrategy.setDataCollection(self._xsDataCollection) xsDataInputStrategy.setDiffractionPlan(self._xsDataResultCharacterisation.getDataCollection().getDiffractionPlan()) self._edPluginControlStrategy.setDataInput(xsDataInputStrategy) self.executePluginSynchronous(self._edPluginControlStrategy) def doFailureIntegration(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doFailureIntegration") strErrorMessage = "Execution of integration failed." self.addStatusMessage("Integration FAILURE.") self.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) # self.addComment("integration failure") if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.generateExecutiveSummary(self) self.setFailure() if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessXDSGenerateBackgroundImage(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doSuccessXDSGenerateBackgroundImage") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_5.doSuccessXDSGenerateBackgroundImage") self._xsDataFileXdsBackgroundImage = self._edPluginControlXDSGenerateBackgroundImage.getDataOutput().getXdsBackgroundImage() self._xsDataResultCharacterisation.setXdsBackgroundImage(self._xsDataFileXdsBackgroundImage) def doFailureXDSGenerateBackgroundImage(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doFailureXDSGenerateBackgroundImage") def doSuccessStrategy(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doSuccessStrategy") self.retrieveSuccessMessages(self._edPluginControlStrategy, "EDPluginControlCharacterisationv1_5.doSuccessStrategy") xsDataStrategyResult = self._edPluginControlStrategy.getDataOutput() self._xsDataResultCharacterisation.setStrategyResult(xsDataStrategyResult) if self._edPluginControlStrategy.hasDataOutput("strategyShortSummary"): strategyShortSummary = self._edPluginControlStrategy.getDataOutput("strategyShortSummary")[0].getValue() self._strCharacterisationShortSummary += strategyShortSummary self.sendMessageToMXCuBE(strategyShortSummary) self.addStatusMessage("Strategy calculation successful.") def doFailureStrategy(self, _edPlugin=None): self.DEBUG("EDPluginControlCharacterisationv1_5.doFailureStrategy") strErrorMessage = "Strategy calculation FAILURE." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage(strErrorMessage) xsDataStrategyResult = self._edPluginControlStrategy.getDataOutput() self._xsDataResultCharacterisation.setStrategyResult(xsDataStrategyResult) if self._edPluginControlStrategy.hasDataOutput("strategyShortSummary"): strategyShortSummary = self._edPluginControlStrategy.getDataOutput("strategyShortSummary")[0].getValue() self._strCharacterisationShortSummary += strategyShortSummary self.sendMessageToMXCuBE(strategyShortSummary) if self._xsDataResultCharacterisation is not None: self.setDataOutput(self._xsDataResultCharacterisation) self.addStatusMessage("Strategy calculation FAILURE.") self.generateExecutiveSummary(self) if self._strStatusMessage != None: self.setDataOutput(XSDataString(self._strStatusMessage), "statusMessage") self.writeDataOutput() self.setFailure() def generateExecutiveSummary(self, _edPlugin): """ Generates a summary of the execution of the plugin. """ self.DEBUG("EDPluginControlCharacterisationv1_5.generateExecutiveSummary") self.addExecutiveSummaryLine("Summary of characterisation:") xsDataInputStrategy = self.getDataInput() xsDataCollection = xsDataInputStrategy.getDataCollection() # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition().getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: self.addExecutiveSummaryLine("^"*80) self.addExecutiveSummaryLine("^"*80) self.addExecutiveSummaryLine("") self.addExecutiveSummaryLine("WARNING! Transmission for characterisation set to %.1f %%" % fTransmission) self.addExecutiveSummaryLine("Please consider re-characterising with transmission set to 100 %") self.addExecutiveSummaryLine("") self.addExecutiveSummaryLine("^"*80) self.addExecutiveSummaryLine("^"*80) xsDataDiffractionPlan = xsDataCollection.getDiffractionPlan() self.addExecutiveSummaryLine("Diffraction plan:") if (xsDataDiffractionPlan.getComplexity() is not None): self.addExecutiveSummaryLine("BEST complexity : %s" % xsDataDiffractionPlan.getComplexity().getValue()) if (xsDataDiffractionPlan.getAimedCompleteness() is not None): self.addExecutiveSummaryLine("Aimed completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getAimedCompleteness().getValue())) if (xsDataDiffractionPlan.getRequiredCompleteness() is not None): self.addExecutiveSummaryLine("Required completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getRequiredCompleteness().getValue())) if (xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution() is not None): self.addExecutiveSummaryLine("Aimed I/sigma at highest resolution : %6.1f" % xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution().getValue()) if (xsDataDiffractionPlan.getAimedResolution() is not None): self.addExecutiveSummaryLine("Aimed resolution : %6.1f [A]" % xsDataDiffractionPlan.getAimedResolution().getValue()) if (xsDataDiffractionPlan.getRequiredResolution() is not None): self.addExecutiveSummaryLine("Required resolution : %6.1f [A]" % xsDataDiffractionPlan.getRequiredResolution().getValue()) if (xsDataDiffractionPlan.getAimedMultiplicity() is not None): self.addExecutiveSummaryLine("Aimed multiplicity : %6.1f" % xsDataDiffractionPlan.getAimedMultiplicity().getValue()) if (xsDataDiffractionPlan.getRequiredMultiplicity() is not None): self.addExecutiveSummaryLine("Required multiplicity : %6.1f" % xsDataDiffractionPlan.getRequiredMultiplicity().getValue()) if (xsDataDiffractionPlan.getForcedSpaceGroup() is not None): self.addExecutiveSummaryLine("Forced space group : %6s" % xsDataDiffractionPlan.getForcedSpaceGroup().getValue()) if (xsDataDiffractionPlan.getMaxExposureTimePerDataCollection() is not None): self.addExecutiveSummaryLine("Max exposure time per data collection : %6.1f [s]" % xsDataDiffractionPlan.getMaxExposureTimePerDataCollection().getValue()) self.addExecutiveSummarySeparator() if self._edPluginControlIndexingIndicators is not None: self.appendExecutiveSummary(self._edPluginControlIndexingIndicators, "") if self._edPluginControlIntegration is not None: self.appendExecutiveSummary(self._edPluginControlIntegration, "") if self._edPluginControlStrategy is not None: self.appendExecutiveSummary(self._edPluginControlStrategy, "") self.addExecutiveSummarySeparator() if self._strCharacterisationShortSummary is not None: self.addExecutiveSummaryLine("Characterisation short summary:") self.addExecutiveSummaryLine("") if self._strStatusMessage != None: for strLine in self._strStatusMessage.split(". "): if strLine.endswith("."): self.addExecutiveSummaryLine(strLine) else: self.addExecutiveSummaryLine(strLine + ".") self.addExecutiveSummaryLine("") for strLine in self._strCharacterisationShortSummary.split("\n"): if strLine != "\n": self.addExecutiveSummaryLine(strLine) self.addErrorWarningMessagesToExecutiveSummary("Characterisation error and warning messages: ") self.addExecutiveSummarySeparator() def getPluginStrategyName(self): return self._strPluginControlStrategy def addStatusMessage(self, _strStatusMessage): if self._strStatusMessage != "": self._strStatusMessage += " " self._strStatusMessage += _strStatusMessage self.sendMessageToMXCuBE(_strStatusMessage) def doStrategyCalculation(self, _bValue): self._bDoStrategyCalculation = _bValue def sendMessageToMXCuBE(self, _strMessage, level="info"): # Only for mxCuBE if self._strMxCuBE_URI is not None: self.DEBUG("Sending message to mxCuBE: {0}".format(_strMessage)) try: for strMessage in _strMessage.split("\n"): if strMessage != "": self._oServerProxy.log_message("Characterisation: " + strMessage, level) except: self.DEBUG("Sending message to mxCuBE failed!")
def testGetXSDataRaddoseInput(self): """ """ from XSDataCommon import XSDataLength from XSDataCommon import XSDataWavelength from XSDataCommon import XSDataFlux from XSDataCommon import XSDataSize from XSDataCommon import XSDataDouble from XSDataCommon import XSDataString from XSDataCommon import XSDataAngle from XSDataCommon import XSDataTime from XSDataCommon import XSDataInteger from XSDataMXv1 import XSDataBeam from XSDataMXv1 import XSDataStructure from XSDataMXv1 import XSDataChain from XSDataMXv1 import XSDataAtom from XSDataMXv1 import XSDataLigand from XSDataMXv1 import XSDataCrystal from XSDataMXv1 import XSDataSpaceGroup from XSDataMXv1 import XSDataSampleCrystalMM from XSDataMXv1 import XSDataChemicalCompositionMM from XSDataMXv1 import XSDataAtomicComposition from XSDataMXv1 import XSDataSolvent from XSDataMXv1 import XSDataCell from EDHandlerXSDataRaddosev10 import EDHandlerXSDataRaddosev10 EDFactoryPluginStatic.loadModule("XSDataRaddosev10") from XSDataRaddosev10 import XSDataRaddoseInput xsDataBeam = XSDataBeam() xsDataBeam.setSize(XSDataSize(x=XSDataLength(0.1), y=XSDataLength(0.1))) xsDataBeam.setWavelength(XSDataWavelength(2.41)) xsDataBeam.setFlux(XSDataFlux(1e+12)) xsDataSample = XSDataSampleCrystalMM() xsDataStructure = XSDataStructure() xsDataComposition = XSDataChemicalCompositionMM() xsDataChain = XSDataChain() xsDataChain.setType(XSDataString("protein")) xsDataChain.setNumberOfCopies(XSDataDouble(2)) xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom1 = XSDataAtom() xsDataAtom1.setSymbol(XSDataString("Se")) xsDataAtom1.setNumberOf(XSDataDouble(4)) xsDataAtomicComposition.addAtom(xsDataAtom1) xsDataAtom2 = XSDataAtom() xsDataAtom2.setSymbol(XSDataString("S")) xsDataAtom2.setNumberOf(XSDataDouble(5)) xsDataAtomicComposition.addAtom(xsDataAtom2) xsDataChain.setHeavyAtoms(xsDataAtomicComposition) xsDataChain.setNumberOfMonomers(XSDataDouble(100)) xsDataStructure.addChain(xsDataChain) xsDataChain2 = XSDataChain() xsDataChain2.setType(XSDataString("rna")) xsDataChain2.setNumberOfCopies(XSDataDouble(1)) xsDataChain2.setNumberOfMonomers(XSDataDouble(60)) xsDataStructure.addChain(xsDataChain2) xsDataLigand = XSDataLigand() xsDataLigand.setNumberOfCopies(XSDataDouble(2)) xsDataLigand.setNumberOfLightAtoms(XSDataDouble(42)) xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtom3 = XSDataAtom() xsDataAtom3.setSymbol(XSDataString("Fe")) xsDataAtom3.setNumberOf(XSDataDouble(1)) xsDataAtomicComposition.addAtom(xsDataAtom3) xsDataLigand.setHeavyAtoms(xsDataAtomicComposition) xsDataStructure.addLigand(xsDataLigand) xsDataStructure.setNumberOfCopiesInAsymmetricUnit(XSDataDouble(0.25)) xsDataSolvent = XSDataSolvent() xsDataAtomicComposition = XSDataAtomicComposition() xsDataAtomNa = XSDataAtom() xsDataAtomNa.setSymbol(XSDataString("Na")) xsDataAtomNa.setConcentration(XSDataDouble(1000)) xsDataAtomicComposition.addAtom(xsDataAtomNa) xsDataAtomCl = XSDataAtom() xsDataAtomCl.setSymbol(XSDataString("Cl")) xsDataAtomCl.setConcentration(XSDataDouble(1000)) xsDataAtomicComposition.addAtom(xsDataAtomCl) xsDataSolvent.setAtoms(xsDataAtomicComposition) xsDataComposition.setStructure(xsDataStructure) xsDataComposition.setSolvent(xsDataSolvent) xsDataSample.setChemicalComposition(xsDataComposition) xsDataSample.setSize(XSDataSize(XSDataLength(0.1), XSDataLength(0.1), XSDataLength(0.1))) xsDataCell = XSDataCell(angle_alpha=XSDataAngle(90.0), angle_beta=XSDataAngle(90.0), angle_gamma=XSDataAngle(90.0), length_a=XSDataLength(78.9), length_b=XSDataLength(95.162), length_c=XSDataLength(104.087)) xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataCrystal.setCell(xsDataCell) xsDataSpaceGroup.setITNumber(XSDataInteger(16)) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataSample.setCrystal(xsDataCrystal) iNumSymOperators = 4 xsDataRaddosev01Input = EDHandlerXSDataRaddosev10().getXSDataRaddoseInput(xsDataBeam, xsDataSample, iNumSymOperators) xsDataRaddosev01Input.exportToFile(self.strObtainedInputFile2) strExpectedInput = EDUtilsTest.readAndParseFile (self.strReferenceInputFile2) strObtainedInput = EDUtilsTest.readAndParseFile (self.strObtainedInputFile2) xsDataInputExpected = XSDataRaddoseInput.parseString(strExpectedInput) xsDataInputObtained = XSDataRaddoseInput.parseString(strObtainedInput) EDAssert.equal(xsDataInputExpected.marshal(), xsDataInputObtained.marshal())
def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) self.DEBUG("EDPluginControlCharacterisationv1_4.preProcess") self._xsDataResultCharacterisation = XSDataResultCharacterisation() # Load the plugins self._edPluginControlIndexingIndicators = self.loadPlugin(self._strPluginControlIndexingIndicators, \ "Indexing") self._edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self._edPluginControlIndexingMOSFLM = self.loadPlugin(self._strPluginControlIndexingMOSFLM, \ "IndexingMOSFLM") self._edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self._strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self._edPluginControlGeneratePrediction = self.loadPlugin(self._strPluginControlGeneratePrediction, \ "GeneratePrediction") self._edPluginControlIntegration = self.loadPlugin(self._strPluginControlIntegration, \ "Integration") self._edPluginControlXDSGenerateBackgroundImage = self.loadPlugin(self._strPluginControlXDSGenerateBackgroundImage, \ "ControlXDSGenerateBackgroundImage") self._edPluginControlStrategy = self.loadPlugin(self._strPluginControlStrategy, \ "Strategy") if self._runKappa: self._edPluginControlKappa = self.loadPlugin( self._strPluginControlKappaName, "Kappa") if (self._edPluginControlIndexingIndicators is not None): self.DEBUG("EDPluginControlCharacterisationv1_4.preProcess: " + self._strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self._xsDataCollection = xsDataInputCharacterisation.getDataCollection( ) # MXSUP-1445: Check if transmission is less than 10% and warn if it's the case xsDataFirstSubWedge = self._xsDataCollection.getSubWedge()[0] xsDataBeam = xsDataFirstSubWedge.getExperimentalCondition( ).getBeam() if xsDataBeam.getTransmission() is not None: fTransmission = xsDataBeam.getTransmission().getValue() if fTransmission < self._fMinTransmission: strWarningMessageBanner = "^" * 80 strWarningMessage1 = "WARNING! Transmission for characterisation set to %.1f %%" % fTransmission strWarningMessage2 = "Please consider re-characterising with transmission set to 100 %" self.warning(strWarningMessageBanner) self.warning(strWarningMessage1) self.warning(strWarningMessage2) self.warning(strWarningMessageBanner) self.addWarningMessage(strWarningMessageBanner) self.addWarningMessage(strWarningMessage1) self.addWarningMessage(strWarningMessage2) self.addWarningMessage(strWarningMessageBanner) self.sendMessageToMXCuBE(strWarningMessage1, "warning") self.sendMessageToMXCuBE(strWarningMessage2, "warning") xsDataCrystal = None xsDataSubWedgeList = self._xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_4.preProcess: No subwedges in input data." self.ERROR(strError) self.setFailure() else: # Load the thumbnail plugins self._iNoReferenceImages = 0 for subWedge in xsDataInputCharacterisation.dataCollection.subWedge: for image in subWedge.image: self._iNoReferenceImages += 1 edPluginJpeg = self.loadPlugin( self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(1024) xsDataInputMXThumbnail.width = XSDataInteger(1024) jpegFilename = os.path.splitext( os.path.basename(image.path.value))[0] + ".jpg" xsDataInputMXThumbnail.outputPath = XSDataFile( XSDataString( os.path.join(self.getWorkingDirectory(), jpegFilename))) edPluginJpeg.dataInput = xsDataInputMXThumbnail edPluginThumnail = self.loadPlugin( self._strPluginGenerateThumbnailName) xsDataInputMXThumbnail = XSDataInputMXThumbnail() xsDataInputMXThumbnail.image = XSDataFile(image.path) xsDataInputMXThumbnail.height = XSDataInteger(256) xsDataInputMXThumbnail.width = XSDataInteger(256) thumbnailFilename = os.path.splitext( os.path.basename( image.path.value))[0] + ".thumbnail.jpg" xsDataInputMXThumbnail.outputPath = XSDataFile( XSDataString( os.path.join(self.getWorkingDirectory(), thumbnailFilename))) edPluginThumnail.dataInput = xsDataInputMXThumbnail self._listPluginGenerateThumbnail.append( (image, edPluginJpeg, edPluginThumnail)) edPluginJpeg.execute() edPluginThumnail.execute() xsDataExperimentalCondition = xsDataSubWedgeList[ 0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam( ).getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." self.ERROR(strErrorMessage) self.sendMessageToMXCuBE(strErrorMessage, "error") self.addErrorMessage( "EDPluginControlCharacterisationv1_4.preProcess ERROR: " + strErrorMessage) # self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self._xsDataCollection.getDiffractionPlan( ) xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup( ) if (xsDataStringForcedSpaceGroup is not None): self._xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self._xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self._edPluginControlIndexingIndicators.setDataInput( self._xsDataCollection, "dataCollection") if self._xsDataCrystal is not None: self._edPluginControlIndexingIndicators.setDataInput( self._xsDataCrystal, "crystal") # Populate characterisation object self._xsDataResultCharacterisation.setDataCollection( XSDataCollection.parseString( self._xsDataCollection.marshal()))
class EDPluginControlCharacterisationv1_2(EDPluginControl): """ [To be replaced with a description of EDPluginControlTemplatev10] """ def __init__(self): EDPluginControl.__init__(self) self.setXSDataInputClass(XSDataInputCharacterisation) self.__strPluginControlIndexingIndicators = "EDPluginControlIndexingIndicatorsv10" self.__strPluginControlIndexingLabelit = "EDPluginControlIndexingLabelitv10" self.__strPluginExecEvaluationIndexing = "EDPluginExecEvaluationIndexingv10" self.__strPluginControlGeneratePrediction = "EDPluginControlGeneratePredictionv10" self.__strPluginControlIntegration = "EDPluginControlIntegrationv10" self.__strPluginControlStrategy = "EDPluginControlStrategyv1_2" self.__edPluginControlIndexingIndicators = None self.__edPluginControlIndexingLabelit = None self.__edPluginExecEvaluationIndexingMOSFLM = None self.__edPluginExecEvaluationIndexingLABELIT = None self.__edPluginControlGeneratePrediction = None self.__edPluginControlIntegration = None self.__edPluginControlStrategy = None self.__xsDataCollection = None self.__xsDataResultCharacterisation = None self.__xsDataIndexingResultMOSFLM = None self.__xsDataCrystal = None self.__strCharacterisationShortSummary = "" self.__strStatusMessage = "" self.__bDoStrategyCalculation = True def checkParameters(self): """ Checks the mandatory parameters. """ EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.checkParameters") self.checkMandatoryParameters(self.getDataInput(), "Data Input is None") self.checkMandatoryParameters(self.getDataInput().getDataCollection(), "dataCollection") self.checkMandatoryParameters(self.getDataInput().getDataCollection().getDiffractionPlan(), "diffractionPlan") def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.preProcess") # Load the plugins self.__edPluginControlIndexingIndicators = self.loadPlugin(self.__strPluginControlIndexingIndicators, \ "Indexing") self.__edPluginControlIndexingLabelit = self.loadPlugin(self.__strPluginControlIndexingLabelit, \ "IndexingLabelit") self.__edPluginExecEvaluationIndexingMOSFLM = self.loadPlugin(self.__strPluginExecEvaluationIndexing, \ "IndexingEvalualtionMOSFLM") self.__edPluginExecEvaluationIndexingLABELIT = self.loadPlugin(self.__strPluginExecEvaluationIndexing, \ "IndexingEvalualtionLABELIT") self.__edPluginControlGeneratePrediction = self.loadPlugin(self.__strPluginControlGeneratePrediction, \ "GeneratePrediction") self.__edPluginControlIntegration = self.loadPlugin(self.__strPluginControlIntegration, \ "Integration") self.__edPluginControlStrategy = self.loadPlugin(self.__strPluginControlStrategy, \ "Strategy") if (self.__edPluginControlIndexingIndicators is not None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.preProcess: " + self.__strPluginControlIndexingIndicators + " Found... setting Data Input") # create Data Input for indexing xsDataInputCharacterisation = self.getDataInput() self.__xsDataCollection = xsDataInputCharacterisation.getDataCollection() xsDataCrystal = None xsDataSubWedgeList = self.__xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_2.preProcess: No subwedges in input data." EDVerbose.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam().getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): strErrorMessage = "Input flux is negative or close to zero. Execution of characterisation aborted." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage("EDPluginControlCharacterisationv1_2.preProcess ERROR: " + strErrorMessage) #self.addComment(strErrorMessage) self.setFailure() xsDataDiffractionPlan = self.__xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup() if (xsDataStringForcedSpaceGroup is not None): self.__xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) self.__xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) self.__edPluginControlIndexingIndicators.setDataInput(self.__xsDataCollection, "dataCollection") if self.__xsDataCrystal is not None: self.__edPluginControlIndexingIndicators.setDataInput(self.__xsDataCrystal, "crystal") # Populate characterisation object self.__xsDataResultCharacterisation = XSDataResultCharacterisation() self.__xsDataResultCharacterisation.setDataCollection(XSDataCollection.parseString(self.__xsDataCollection.marshal())) def process(self, _edObject=None): EDPluginControl.process(self) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.process") self.__edPluginControlIndexingIndicators.connectSUCCESS(self.doSuccessIndexingIndicators) self.__edPluginControlIndexingIndicators.connectFAILURE(self.doFailureIndexingIndicators) self.__edPluginControlIndexingLabelit.connectSUCCESS(self.doSuccessIndexingLabelit) self.__edPluginControlIndexingLabelit.connectFAILURE(self.doFailureIndexingLabelit) self.__edPluginExecEvaluationIndexingMOSFLM.connectSUCCESS(self.doSuccessEvaluationIndexingMOSFLM) self.__edPluginExecEvaluationIndexingMOSFLM.connectFAILURE(self.doFailureEvaluationIndexingMOSFLM) self.__edPluginExecEvaluationIndexingLABELIT.connectSUCCESS(self.doSuccessEvaluationIndexingLABELIT) self.__edPluginExecEvaluationIndexingLABELIT.connectFAILURE(self.doFailureEvaluationIndexingLABELIT) self.__edPluginControlGeneratePrediction.connectSUCCESS(self.doSuccessGeneratePrediction) self.__edPluginControlGeneratePrediction.connectFAILURE(self.doFailureGeneratePrediction) self.__edPluginControlIntegration.connectSUCCESS(self.doSuccessIntegration) self.__edPluginControlIntegration.connectFAILURE(self.doFailureIntegration) self.__edPluginControlStrategy.connectSUCCESS(self.doSuccessStrategy) self.__edPluginControlStrategy.connectFAILURE(self.doFailureStrategy) self.__edPluginControlIndexingIndicators.executeSynchronous() def finallyProcess(self, _edObject=None): EDPluginControl.finallyProcess(self) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.finallyProcess") if self.__edPluginControlGeneratePrediction.isRunning(): self.__edPluginControlGeneratePrediction.synchronize() if self.__strStatusMessage != None: self.setDataOutput(XSDataString(self.__strStatusMessage), "statusMessage") self.__xsDataResultCharacterisation.setStatusMessage(XSDataString(self.__strStatusMessage)) if self.__strCharacterisationShortSummary != None: self.setDataOutput(XSDataString(self.__strCharacterisationShortSummary), "shortSummary") self.__xsDataResultCharacterisation.setShortSummary(XSDataString(self.__strCharacterisationShortSummary)) if self.__xsDataResultCharacterisation is not None: self.setDataOutput(self.__xsDataResultCharacterisation) def doSuccessIndexingIndicators(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doSuccessIndexingIndicators") #self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_2.doSuccessIndexingIndicators") if self.__edPluginControlIndexingIndicators.hasDataOutput("indexingResult"): xsDataIndexingResult = self.__edPluginControlIndexingIndicators.getDataOutput("indexingResult")[0] #self.__xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) self.__edPluginExecEvaluationIndexingMOSFLM.setDataInput(xsDataIndexingResult, "indexingResult") if self.__edPluginControlIndexingIndicators.hasDataOutput("imageQualityIndicators"): listXSDataImageQualityIndicators = self.__edPluginControlIndexingIndicators.getDataOutput("imageQualityIndicators") for xsDataImageQualityIndicators in listXSDataImageQualityIndicators: self.__xsDataResultCharacterisation.addImageQualityIndicators(xsDataImageQualityIndicators) self.__edPluginExecEvaluationIndexingMOSFLM.setDataInput(xsDataImageQualityIndicators, "imageQualityIndicators") if self.__edPluginControlIndexingIndicators.hasDataOutput("indicatorsShortSummary"): self.__strCharacterisationShortSummary += self.__edPluginControlIndexingIndicators.getDataOutput("indicatorsShortSummary")[0].getValue() self.__edPluginExecEvaluationIndexingMOSFLM.executeSynchronous() def doFailureIndexingIndicators(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doFailureIndexingIndicators") strErrorMessage = "Execution of Indexing and Indicators plugin failed. Execution of characterisation aborted." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) if self.__xsDataResultCharacterisation is not None: self.setDataOutput(self.__xsDataResultCharacterisation) self.setFailure() if self.__strStatusMessage != None: self.setDataOutput(XSDataString(self.__strStatusMessage), "statusMessage") self.writeDataOutput() # def doSuccessIndexingLabelit(self, _edPlugin=None): # EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doSuccessIndexingLabelit") # self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_2.doSuccessIndexingLabelit") # # Retrieve the indexing result # xsDataIndexingResult = self.__edPluginControlIndexingLabelit.getDataOutput() # self.__xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) # if self.__edPluginControlIndexingLabelit.hasDataOutput("indexingShortSummary"): # self.__strCharacterisationShortSummary += self.__edPluginControlIndexingLabelit.getDataOutput("indexingShortSummary")[0].getValue() # # Then start the integration of the reference images # self.indexingToIntegration() def doSuccessIndexingLabelit(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doSuccessIndexingLabelit") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_2.doSuccessIndexingLabelit") if self.__edPluginControlIndexingLabelit.hasDataOutput("indexingShortSummary"): self.__strCharacterisationShortSummary += self.__edPluginControlIndexingLabelit.getDataOutput("indexingShortSummary")[0].getValue() # Check the indexing results xsDataIndexingResult = self.__edPluginControlIndexingLabelit.getDataOutput() self.__edPluginExecEvaluationIndexingLABELIT.setDataInput(xsDataIndexingResult, "indexingResult") xsDataImageQualityIndicators = self.__xsDataResultCharacterisation.getImageQualityIndicators()[0] self.__edPluginExecEvaluationIndexingLABELIT.setDataInput(xsDataImageQualityIndicators, "imageQualityIndicators") self.__edPluginExecEvaluationIndexingLABELIT.executeSynchronous() def doFailureIndexingLabelit(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doFailureIndexingLabelit") self.addStatusMessage("Labelit: Indexing FAILURE.") if self.__xsDataResultCharacterisation is not None: self.setDataOutput(self.__xsDataResultCharacterisation) if self.__xsDataIndexingResultMOSFLM == None: strErrorMessage = "Execution of indexing with both MOSFLM and Labelit failed. Execution of characterisation aborted." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) self.generateExecutiveSummary(self) self.setFailure() if self.__strStatusMessage != None: self.setDataOutput(XSDataString(self.__strStatusMessage), "statusMessage") self.writeDataOutput() else: # Use the MOSFLM indexing results - even if it's P1 self.__xsDataResultCharacterisation.setIndexingResult(self.__xsDataIndexingResultMOSFLM) xsDataCollection = self.__xsDataResultCharacterisation.getDataCollection() xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection(XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution(XSDataIndexingSolutionSelected.parseString(self.__xsDataIndexingResultMOSFLM.getSelectedSolution().marshal())) self.__edPluginControlGeneratePrediction.setDataInput(xsDataGeneratePredictionInput) if self.__edPluginControlIndexingIndicators.hasDataOutput("indexingShortSummary"): self.__strCharacterisationShortSummary += self.__edPluginControlIndexingIndicators.getDataOutput("indexingShortSummary")[0].getValue() # Start the generation of prediction images - we synchronize in the post-process self.__edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() def doSuccessEvaluationIndexingMOSFLM(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doSuccessEvaluationIndexingMOSFLM") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_2.doSuccessEvaluationIndexing") # Retrieve status messages (if any) if self.__edPluginExecEvaluationIndexingMOSFLM.hasDataOutput("statusMessageImageQualityIndicators"): self.addStatusMessage(self.__edPluginExecEvaluationIndexingMOSFLM.getDataOutput("statusMessageImageQualityIndicators")[0].getValue()) if self.__edPluginExecEvaluationIndexingMOSFLM.hasDataOutput("statusMessageIndexing"): self.addStatusMessage("MOSFLM: " + self.__edPluginExecEvaluationIndexingMOSFLM.getDataOutput("statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexWithLabelit = False bIndexingSuccess = self.__edPluginExecEvaluationIndexingMOSFLM.getDataOutput("indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self.__edPluginExecEvaluationIndexingMOSFLM.getDataOutput("indexingResult")[0] self.__xsDataIndexingResultMOSFLM = xsDataIndexingResult # Check if space group is P1 - if yes run Labelit indexing xsDataIndexingSolutionSelected = xsDataIndexingResult.getSelectedSolution() xsDataCrystal = xsDataIndexingSolutionSelected.getCrystal() xsDataSpaceGroup = xsDataCrystal.getSpaceGroup() strSpaceGroupName = xsDataSpaceGroup.getName().getValue().upper() # Check if MOSFLM has indexed in P1 if strSpaceGroupName == "P1": # Check if the user maybe asked for P1! bIndexWithLabelit = True if self.__xsDataCollection.getDiffractionPlan() is not None: if self.__xsDataCollection.getDiffractionPlan().getForcedSpaceGroup() is not None: if self.__xsDataCollection.getDiffractionPlan().getForcedSpaceGroup().getValue().upper() == "P1": EDVerbose.screen("P1 space forced by diffraction plan") bIndexWithLabelit = False if bIndexWithLabelit: EDVerbose.screen("P1 space group choosed - reindexing with Labelit") else: EDVerbose.screen("MOSFLM indexing successful!") if self.__edPluginControlIndexingIndicators.hasDataOutput("indexingShortSummary"): self.__strCharacterisationShortSummary += self.__edPluginControlIndexingIndicators.getDataOutput("indexingShortSummary")[0].getValue() # Generate prediction images xsDataCollection = self.__xsDataResultCharacterisation.getDataCollection() self.__xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) xsDataGeneratePredictionInput = XSDataGeneratePredictionInput() xsDataGeneratePredictionInput.setDataCollection(XSDataCollection.parseString(xsDataCollection.marshal())) xsDataGeneratePredictionInput.setSelectedIndexingSolution(XSDataIndexingSolutionSelected.parseString(xsDataIndexingResult.getSelectedSolution().marshal())) self.__edPluginControlGeneratePrediction.setDataInput(xsDataGeneratePredictionInput) # Start the generation of prediction images - we synchronize in the post-process self.__edPluginControlGeneratePrediction.execute() # Then start the integration of the reference images self.indexingToIntegration() else: EDVerbose.screen("Indexing with MOSFLM failed!") bIndexWithLabelit = True if bIndexWithLabelit: # Execute Labelit indexing EDVerbose.screen("Now trying to index with Labelit - please be patient...") xsDataIndexingInput = XSDataIndexingInput() xsDataSubWedgeList = self.__xsDataCollection.getSubWedge() xsDataExperimentalCondition = xsDataSubWedgeList[0].getExperimentalCondition() xsDataIndexingInput.setDataCollection(self.__xsDataCollection) xsDataIndexingInput.setExperimentalCondition(xsDataExperimentalCondition) if self.__xsDataCrystal != None: xsDataIndexingInput.setCrystal(self.__xsDataCrystal) self.__edPluginControlIndexingLabelit.setDataInput(xsDataIndexingInput) self.__edPluginControlIndexingLabelit.executeSynchronous() def doSuccessEvaluationIndexingLABELIT(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doSuccessEvaluationIndexingLABELIT") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_2.doSuccessEvaluationIndexingLABELIT") # Retrieve status messages (if any) if self.__edPluginExecEvaluationIndexingLABELIT.hasDataOutput("statusMessageIndexing"): self.addStatusMessage("Labelit: " + self.__edPluginExecEvaluationIndexingLABELIT.getDataOutput("statusMessageIndexing")[0].getValue()) # Check if indexing was successful bIndexingSuccess = self.__edPluginExecEvaluationIndexingLABELIT.getDataOutput("indexingSuccess")[0].getValue() if bIndexingSuccess: xsDataIndexingResult = self.__edPluginExecEvaluationIndexingLABELIT.getDataOutput("indexingResult")[0] self.__xsDataResultCharacterisation.setIndexingResult(xsDataIndexingResult) # Then start the integration of the reference images self.indexingToIntegration() else: EDVerbose.screen("Indexing with LABELIT failed!") self.setFailure() def indexingToIntegration(self, _edPlugin=None): # Integrate the reference images xsDataIntegrationInput = XSDataIntegrationInput() xsDataIntegrationInput.setDataCollection(self.__xsDataResultCharacterisation.getDataCollection()) xsDataIndexingResult = self.__xsDataResultCharacterisation.getIndexingResult() xsDataExperimentalConditionRefinded = xsDataIndexingResult.getSelectedSolution().getExperimentalConditionRefined() xsDataIntegrationInput.setExperimentalConditionRefined(xsDataExperimentalConditionRefinded) xsDataIntegrationInput.setSelectedIndexingSolution(xsDataIndexingResult.getSelectedSolution()) self.__edPluginControlIntegration.setDataInput(xsDataIntegrationInput) self.__edPluginControlIntegration.executeSynchronous() def doFailureEvaluationIndexingMOSFLM(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doFailureEvaluationIndexing") strWarningMessage = "Execution of indexing evaluation plugin failed." EDVerbose.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self.__xsDataResultCharacterisation is not None: self.setDataOutput(self.__xsDataResultCharacterisation) def doFailureEvaluationIndexingLABELIT(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doFailureEvaluationIndexing") strWarningMessage = "Execution of indexing evaluation plugin failed." EDVerbose.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self.__xsDataResultCharacterisation is not None: self.setDataOutput(self.__xsDataResultCharacterisation) def doSuccessGeneratePrediction(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doSuccessGeneratePrediction") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_2.doSuccessGeneratePrediction") xsDataGeneratePredictionResult = _edPlugin.getDataOutput() xsDataIndexingResult = self.__xsDataResultCharacterisation.getIndexingResult() xsDataIndexingResult.setPredictionResult(xsDataGeneratePredictionResult) def doFailureGeneratePrediction(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doFailureGeneratePrediction") strWarningMessage = "Execution of generate prediction plugin failed." EDVerbose.WARNING(strWarningMessage) self.addWarningMessage(strWarningMessage) if self.__xsDataResultCharacterisation is not None: self.setDataOutput(self.__xsDataResultCharacterisation) #self.addComment("warning: no prediction images") def doSuccessIntegration(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doSuccessIntegration") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlCharacterisationv1_2.doSuccessIntegration") self.addStatusMessage("Integration successful.") xsDataIntegrationOutput = self.__edPluginControlIntegration.getDataOutput() self.__xsDataResultCharacterisation.setIntegrationResult(xsDataIntegrationOutput) # Integration short summary if self.__edPluginControlIntegration.hasDataOutput("integrationShortSummary"): self.__strCharacterisationShortSummary += self.__edPluginControlIntegration.getDataOutput("integrationShortSummary")[0].getValue() #EDVerbose.DEBUG( self.__xsDataExperimentCharacterisation.marshal() ) if self.__bDoStrategyCalculation: xsDataInputStrategy = XSDataInputStrategy() xsDataSolutionSelected = self.__xsDataResultCharacterisation.getIndexingResult().getSelectedSolution() xsDataInputStrategy.setCrystalRefined(xsDataSolutionSelected.getCrystal()) xsDataInputStrategy.setSample(self.__xsDataResultCharacterisation.getDataCollection().getSample()) xsDataIntegrationSubWedgeResultList = xsDataIntegrationOutput.getIntegrationSubWedgeResult() xsDataInputStrategy.setBestFileContentDat(xsDataIntegrationSubWedgeResultList[0].getBestfileDat()) xsDataInputStrategy.setBestFileContentPar(xsDataIntegrationSubWedgeResultList[0].getBestfilePar()) xsDataInputStrategy.setExperimentalCondition(xsDataIntegrationSubWedgeResultList[0].getExperimentalConditionRefined()) for xsDataIntegrationSubWedgeResult in xsDataIntegrationSubWedgeResultList: xsDataInputStrategy.addBestFileContentHKL(xsDataIntegrationSubWedgeResult.getBestfileHKL()) xsDataInputStrategy.setDiffractionPlan(self.__xsDataResultCharacterisation.getDataCollection().getDiffractionPlan()) self.__edPluginControlStrategy.setDataInput(xsDataInputStrategy) self.__edPluginControlStrategy.executeSynchronous() def doFailureIntegration(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doFailureIntegration") strErrorMessage = "Execution of integration plugin failed." self.addStatusMessage("Integration FAILURE.") EDVerbose.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) #self.addComment("integration failure") if self.__xsDataResultCharacterisation is not None: self.setDataOutput(self.__xsDataResultCharacterisation) self.generateExecutiveSummary(self) self.setFailure() if self.__strStatusMessage != None: self.setDataOutput(XSDataString(self.__strStatusMessage), "statusMessage") self.writeDataOutput() def doSuccessStrategy(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doSuccessStrategy") self.retrieveSuccessMessages(self.__edPluginControlStrategy, "EDPluginControlCharacterisationv1_2.doSuccessStrategy") xsDataStrategyResult = self.__edPluginControlStrategy.getDataOutput() self.__xsDataResultCharacterisation.setStrategyResult(xsDataStrategyResult) if self.__edPluginControlStrategy.hasDataOutput("strategyShortSummary"): self.__strCharacterisationShortSummary += self.__edPluginControlStrategy.getDataOutput("strategyShortSummary")[0].getValue() self.addStatusMessage("Strategy calculation successful.") def doFailureStrategy(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.doFailureStrategy") strErrorMessage = "Execution of strategy plugin failed." EDVerbose.ERROR(strErrorMessage) self.addErrorMessage(strErrorMessage) if self.__xsDataResultCharacterisation is not None: self.setDataOutput(self.__xsDataResultCharacterisation) self.addStatusMessage("Strategy calculation FAILURE.") self.generateExecutiveSummary(self) if self.__strStatusMessage != None: self.setDataOutput(XSDataString(self.__strStatusMessage), "statusMessage") self.writeDataOutput() self.setFailure() def generateExecutiveSummary(self, _edPlugin): """ Generates a summary of the execution of the plugin. """ EDVerbose.DEBUG("EDPluginControlCharacterisationv1_2.generateExecutiveSummary") self.addExecutiveSummaryLine("Summary of characterisation:") xsDataInputStrategy = self.getDataInput() xsDataCollection = xsDataInputStrategy.getDataCollection() xsDataDiffractionPlan = xsDataCollection.getDiffractionPlan() self.addExecutiveSummaryLine("Diffraction plan:") if (xsDataDiffractionPlan.getComplexity() is not None): self.addExecutiveSummaryLine("BEST complexity : %s" % xsDataDiffractionPlan.getComplexity().getValue()) if (xsDataDiffractionPlan.getAimedCompleteness() is not None): self.addExecutiveSummaryLine("Aimed completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getAimedCompleteness().getValue())) if (xsDataDiffractionPlan.getRequiredCompleteness() is not None): self.addExecutiveSummaryLine("Required completeness : %6.1f [%%]" % (100.0 * xsDataDiffractionPlan.getRequiredCompleteness().getValue())) if (xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution() is not None): self.addExecutiveSummaryLine("Aimed I/sigma at highest resolution : %6.1f" % xsDataDiffractionPlan.getAimedIOverSigmaAtHighestResolution().getValue()) if (xsDataDiffractionPlan.getAimedResolution() is not None): self.addExecutiveSummaryLine("Aimed resolution : %6.1f [A]" % xsDataDiffractionPlan.getAimedResolution().getValue()) if (xsDataDiffractionPlan.getRequiredResolution() is not None): self.addExecutiveSummaryLine("Required resolution : %6.1f [A]" % xsDataDiffractionPlan.getRequiredResolution().getValue()) if (xsDataDiffractionPlan.getAimedMultiplicity() is not None): self.addExecutiveSummaryLine("Aimed multiplicity : %6.1f" % xsDataDiffractionPlan.getAimedMultiplicity().getValue()) if (xsDataDiffractionPlan.getRequiredMultiplicity() is not None): self.addExecutiveSummaryLine("Required multiplicity : %6.1f" % xsDataDiffractionPlan.getRequiredMultiplicity().getValue()) if (xsDataDiffractionPlan.getForcedSpaceGroup() is not None): self.addExecutiveSummaryLine("Forced space group : %6s" % xsDataDiffractionPlan.getForcedSpaceGroup().getValue()) if (xsDataDiffractionPlan.getMaxExposureTimePerDataCollection() is not None): self.addExecutiveSummaryLine("Max exposure time per data collection : %6.1f [s]" % xsDataDiffractionPlan.getMaxExposureTimePerDataCollection().getValue()) self.addExecutiveSummarySeparator() if self.__edPluginControlIndexingIndicators is not None: self.appendExecutiveSummary(self.__edPluginControlIndexingIndicators, "") if self.__edPluginControlIndexingLabelit is not None: self.appendExecutiveSummary(self.__edPluginControlIndexingLabelit, "") if self.__edPluginControlIntegration is not None: self.appendExecutiveSummary(self.__edPluginControlIntegration, "") if self.__edPluginControlStrategy is not None: self.appendExecutiveSummary(self.__edPluginControlStrategy, "") self.addExecutiveSummarySeparator() if self.__strCharacterisationShortSummary is not None: self.addExecutiveSummaryLine("Characterisation short summary:") self.addExecutiveSummaryLine("") if self.__strStatusMessage != None: for strLine in self.__strStatusMessage.split(". "): if strLine.endswith("."): self.addExecutiveSummaryLine(strLine) else: self.addExecutiveSummaryLine(strLine+".") self.addExecutiveSummaryLine("") for strLine in self.__strCharacterisationShortSummary.split("\n"): if strLine != "\n": self.addExecutiveSummaryLine(strLine) self.addErrorWarningMessagesToExecutiveSummary("Characterisation error and warning messages: ") self.addExecutiveSummarySeparator() def getPluginStrategyName(self): return self.__strPluginControlStrategy def addStatusMessage(self, _strStatusMessage): if self.__strStatusMessage != "": self.__strStatusMessage += " " self.__strStatusMessage += _strStatusMessage def doStrategyCalculation(self, _bValue): self.__bDoStrategyCalculation = _bValue
def preProcess(self, _edObject=None): """ Gets the Configuration Parameters, if found, overrides default parameters """ EDPluginControl.preProcess(self, _edObject) EDVerbose.DEBUG("EDPluginControlCharacterisationv1_1.preProcess...") self.__edPluginIndexing = self.loadPlugin(self.__strPluginIndexingName, "Indexing") self.__edPluginIntegration = self.loadPlugin( self.__strPluginIntegrationName, "Integration") self.__edPluginStrategy = self.loadPlugin(self.__strPluginStrategyName, "Strategy") if (self.__edPluginIndexing is not None): EDVerbose.DEBUG( "EDPluginControlCharacterisationv1_1.preProcess: " + self.__strPluginIndexingName + " Found... setting Data Input") # create Data Input for indexing xsDataInputStrategy = self.getDataInput() xsDataCollection = xsDataInputStrategy.getDataCollection() xsDataSample = xsDataCollection.getSample() xsDataSubWedgeList = xsDataCollection.getSubWedge() if ((xsDataSubWedgeList is None) or (xsDataSubWedgeList == [])): strError = "EDPluginControlCharacterisationv1_1.preProcess: No subwedges in input data." EDVerbose.ERROR(strError) self.setFailure() else: xsDataExperimentalCondition = xsDataSubWedgeList[ 0].getExperimentalCondition() # Fix for bug 431: if the flux is zero raise an error xsDataDoubleFlux = xsDataExperimentalCondition.getBeam( ).getFlux() if (xsDataDoubleFlux is not None): if (xsDataDoubleFlux.getValue() < 0.1): pyStrErrorMessage = "EDPluginControlCharacterisationv1_1.preProcess ERROR: Input flux is negative or close to zero. Execution of characterisation aborted." EDVerbose.ERROR(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) self.setFailure() xsDataIndexingInput = XSDataIndexingInput() xsDataIndexingInput.setDataCollection(xsDataCollection) xsDataIndexingInput.setExperimentalCondition( xsDataExperimentalCondition) xsDataDiffractionPlan = xsDataCollection.getDiffractionPlan() xsDataStringForcedSpaceGroup = xsDataDiffractionPlan.getForcedSpaceGroup( ) if (xsDataStringForcedSpaceGroup is not None): xsDataCrystal = XSDataCrystal() xsDataSpaceGroup = XSDataSpaceGroup() xsDataSpaceGroup.setName(xsDataStringForcedSpaceGroup) xsDataCrystal.setSpaceGroup(xsDataSpaceGroup) xsDataIndexingInput.setCrystal(xsDataCrystal) self.__edPluginIndexing.setDataInput(xsDataIndexingInput) # Populate characterisation object self.__xsDataResultCharacterisation = XSDataResultCharacterisation( ) self.__xsDataResultCharacterisation.setDataCollection( XSDataCollection.parseString(xsDataCollection.marshal()))