def doSuccessWaitMultiFile(self, _edPlugin):
     """
     The file has appeared on the disk 
     """
     self.DEBUG(
         "EDPluginControlImageQualityIndicatorsv1_0.doSuccessWaitMultiFile")
     self.retrieveSuccessMessages(
         _edPlugin,
         "EDPluginControlReadImageHeaderv10.doSuccessWaitMultiFile")
     #
     listXSDataImage = self.getDataInput().getImage()
     for (iIndex, xsDataImage) in enumerate(listXSDataImage):
         edPluginPluginExecImageQualityIndicator = self.loadPlugin(self.strPluginExecImageQualityIndicatorName, \
                                                                   "%s-%d" % (self.strPluginExecImageQualityIndicatorName, iIndex + 1))
         xsDataInputDistlSignalStrength = XSDataInputDistlSignalStrength()
         xsDataInputDistlSignalStrength.setReferenceImage(xsDataImage)
         edPluginPluginExecImageQualityIndicator.setDataInput(
             xsDataInputDistlSignalStrength)
         self.listPluginExecImageQualityIndicator.append(
             edPluginPluginExecImageQualityIndicator)
     # Prepare the action cluster
     for edPluginPluginExecImageQualityIndicator in self.listPluginExecImageQualityIndicator:
         edPluginPluginExecImageQualityIndicator.connectSUCCESS(
             self.doSuccessExecPlugin)
         edPluginPluginExecImageQualityIndicator.connectFAILURE(
             self.doFailureExecPlugin)
         self.addPluginToActionCluster(
             edPluginPluginExecImageQualityIndicator)
     # Launch the cluster
     self.executeActionCluster()
     self.synchronizeActionCluster()
Example #2
0
    def testParseLabelitDistlOutput(self):
        """
        This method test the parsing of the distl.signal_strength results in the log file.
        """
        edPluginDistlSignalStrengthThinClientv1_1 = self.createPlugin()
        strPathToLabelitLogText = os.path.join(
            self.getPluginTestsDataHome(),
            "phenix.distl_thin_client_v17_650.txt")
        strLabelitLogText = self.readAndParseFile(strPathToLabelitLogText)
        xsDataImageQualityIndicators = edPluginDistlSignalStrengthThinClientv1_1.parseLabelitDistlOutput(
            strLabelitLogText)
        xmlInput1 = self.readAndParseFile(self.__strReferenceInputFile1)
        xsDataInputDistlSignalStrength = XSDataInputDistlSignalStrength.parseString(
            xmlInput1)
        xsDataImageQualityIndicators.setImage(
            xsDataInputDistlSignalStrength.getReferenceImage())

        strResultDistlSignalStrengthFile = os.path.join(
            self.getPluginTestsDataHome(),
            "XSDataResultDistlSignalStrengthThinClient_reference.xml")
        strResultDistlSignalStrength = self.readAndParseFile(
            strResultDistlSignalStrengthFile)
        xsDataResultDistlSignalStrength = XSDataResultDistlSignalStrength.parseString(
            strResultDistlSignalStrength)
        xsDataImageQualityIndicatorsReference = xsDataResultDistlSignalStrength.getImageQualityIndicators(
        )
        EDAssert.equal(xsDataImageQualityIndicatorsReference.marshal(),
                       xsDataImageQualityIndicators.marshal())
 def doSuccessWaitMultiFile(self, _edPlugin):
     """
     The file has appeared on the disk 
     """
     self.DEBUG("EDPluginControlImageQualityIndicatorsv1_0.doSuccessWaitMultiFile")
     self.retrieveSuccessMessages(_edPlugin, "EDPluginControlReadImageHeaderv10.doSuccessWaitMultiFile")
     #
     listXSDataImage = self.getDataInput().getImage()
     for (iIndex, xsDataImage) in enumerate(listXSDataImage):
         edPluginPluginExecImageQualityIndicator = self.loadPlugin(self.strPluginExecImageQualityIndicatorName, \
                                                                   "%s-%d" % (self.strPluginExecImageQualityIndicatorName, iIndex + 1))
         xsDataInputDistlSignalStrength = XSDataInputDistlSignalStrength()
         xsDataInputDistlSignalStrength.setReferenceImage(xsDataImage)
         edPluginPluginExecImageQualityIndicator.setDataInput(xsDataInputDistlSignalStrength)
         self.listPluginExecImageQualityIndicator.append(edPluginPluginExecImageQualityIndicator)
     # Prepare the action cluster
     for edPluginPluginExecImageQualityIndicator in self.listPluginExecImageQualityIndicator:
         edPluginPluginExecImageQualityIndicator.connectSUCCESS(self.doSuccessExecPlugin)
         edPluginPluginExecImageQualityIndicator.connectFAILURE(self.doFailureExecPlugin)
         self.addPluginToActionCluster(edPluginPluginExecImageQualityIndicator)
     # Launch the cluster
     self.executeActionCluster()
     self.synchronizeActionCluster()
    def testParseLabelitDistlOutput(self):
        """
        This method test the parsing of the distl.signal_strength results in the log file.
        """
        edPluginDistlSignalStrengthThinClientv1_1 = self.createPlugin()
        strPathToLabelitLogText = os.path.join(self.getPluginTestsDataHome(), "phenix.distl_thin_client_v17_650.txt")
        strLabelitLogText = self.readAndParseFile(strPathToLabelitLogText)
        xsDataImageQualityIndicators = edPluginDistlSignalStrengthThinClientv1_1.parseLabelitDistlOutput(strLabelitLogText)
        xmlInput1 = self.readAndParseFile(self.__strReferenceInputFile1)
        xsDataInputDistlSignalStrength = XSDataInputDistlSignalStrength.parseString(xmlInput1)
        xsDataImageQualityIndicators.setImage(xsDataInputDistlSignalStrength.getReferenceImage())

        strResultDistlSignalStrengthFile = os.path.join(self.getPluginTestsDataHome(), "XSDataResultDistlSignalStrengthThinClient_reference.xml")
        strResultDistlSignalStrength = self.readAndParseFile(strResultDistlSignalStrengthFile)
        xsDataResultDistlSignalStrength = XSDataResultDistlSignalStrength.parseString(strResultDistlSignalStrength)
        xsDataImageQualityIndicatorsReference = xsDataResultDistlSignalStrength.getImageQualityIndicators()
        EDAssert.equal(xsDataImageQualityIndicatorsReference.marshal(), xsDataImageQualityIndicators.marshal())
    def process(self, _edPlugin=None):
        """
        Executes the execution plugins
        """
        EDPluginControl.process(self, _edPlugin)
        EDVerbose.DEBUG("EDPluginControlImageQualityIndicatorsv1_2.process")
        EDUtilsParallel.initializeNbThread()
        # Check if we should do indexing:
        bDoIndexing = False
        if self.dataInput.doIndexing is not None:
            if self.dataInput.doIndexing.value:
                bDoIndexing = True
        # Loop through all the incoming reference images
        listXSDataImage = self.dataInput.image
        xsDataInputWaitFile = XSDataInputWaitFile()
        self.xsDataResultControlImageQualityIndicators = XSDataResultControlImageQualityIndicators(
        )
        listPlugin = []
        for xsDataImage in listXSDataImage:
            if not os.path.exists(xsDataImage.path.value):
                self.screen("Waiting for image %s" % xsDataImage.path.value)
                self.edPluginWaitFile = self.loadPlugin(
                    self.strPluginWaitFileName)
                xsDataInputWaitFile.expectedFile = XSDataFile(xsDataImage.path)
                xsDataInputWaitFile.setExpectedSize(XSDataInteger(100000))
                xsDataInputWaitFile.setTimeOut(
                    XSDataTime(self.fWaitFileTimeOut))
                self.DEBUG("Wait file timeOut set to %f" %
                           self.fWaitFileTimeOut)
                self.edPluginWaitFile.setDataInput(xsDataInputWaitFile)
                self.edPluginWaitFile.executeSynchronous()
            if not os.path.exists(xsDataImage.path.value):
                strError = "Time-out while waiting for image %s" % xsDataImage.path.value
                self.error(strError)
                self.addErrorMessage(strError)
                self.setFailure()
            else:
                if self.bUseThinClient:
                    strPluginName = self.strPluginNameThinClient
                else:
                    strPluginName = self.strPluginName
                edPluginPluginExecImageQualityIndicator = self.loadPlugin(
                    strPluginName)
                listPlugin.append(edPluginPluginExecImageQualityIndicator)
                self.listPluginExecImageQualityIndicator.append(
                    edPluginPluginExecImageQualityIndicator)
                xsDataInputDistlSignalStrength = XSDataInputDistlSignalStrength(
                )
                xsDataInputDistlSignalStrength.setReferenceImage(xsDataImage)
                edPluginPluginExecImageQualityIndicator.setDataInput(
                    xsDataInputDistlSignalStrength)
                edPluginPluginExecImageQualityIndicator.execute()
        listIndexing = []
        # Synchronize all image quality indicator plugins and upload to ISPyB
        xsDataInputStoreListOfImageQualityIndicators = XSDataInputStoreListOfImageQualityIndicators(
        )
        for edPluginPluginExecImageQualityIndicator in listPlugin:
            edPluginPluginExecImageQualityIndicator.synchronize()
            xsDataImageQualityIndicators = XSDataImageQualityIndicators.parseString( \
                                             edPluginPluginExecImageQualityIndicator.dataOutput.imageQualityIndicators.marshal())
            self.xsDataResultControlImageQualityIndicators.addImageQualityIndicators(
                xsDataImageQualityIndicators)
            xsDataISPyBImageQualityIndicators = \
                XSDataISPyBImageQualityIndicators.parseString(xsDataImageQualityIndicators.marshal())
            xsDataInputStoreListOfImageQualityIndicators.addImageQualityIndicators(
                xsDataISPyBImageQualityIndicators)
#        print xsDataInputStoreListOfImageQualityIndicators.marshal()
        self.edPluginISPyB = self.loadPlugin(self.strISPyBPluginName)
        self.edPluginISPyB.dataInput = xsDataInputStoreListOfImageQualityIndicators
        self.edPluginISPyB.execute()
        #
        if bDoIndexing:
            # Find the 5 most intensive images (TIS):
            listImage = []
            listSorted = sorted(
                self.xsDataResultControlImageQualityIndicators.
                imageQualityIndicators,
                key=lambda imageQualityIndicators: imageQualityIndicators.
                totalIntegratedSignal.value)
            for xsDataResultControlImageQualityIndicator in listSorted[-5:]:
                if xsDataResultControlImageQualityIndicator.goodBraggCandidates.value > 30:
                    xsDataInputReadImageHeader = XSDataInputReadImageHeader()
                    xsDataInputReadImageHeader.image = XSDataFile(
                        xsDataResultControlImageQualityIndicator.image.path)
                    self.edPluginReadImageHeader = self.loadPlugin(
                        self.strPluginReadImageHeaderName)
                    self.edPluginReadImageHeader.dataInput = xsDataInputReadImageHeader
                    self.edPluginReadImageHeader.executeSynchronous()
                    xsDataResultReadImageHeader = self.edPluginReadImageHeader.dataOutput
                    if xsDataResultReadImageHeader is not None:
                        xsDataSubWedge = xsDataResultReadImageHeader.subWedge
                        self.xsDataCollection = XSDataCollection()
                        self.xsDataCollection.addSubWedge(xsDataSubWedge)
                        xsDataIndexingInput = XSDataIndexingInput()
                        xsDataIndexingInput.setDataCollection(
                            self.xsDataCollection)
                        xsDataMOSFLMIndexingInput = EDHandlerXSDataMOSFLMv10.generateXSDataMOSFLMInputIndexing(
                            xsDataIndexingInput)
                        edPluginMOSFLMIndexing = self.loadPlugin(
                            self.strIndexingMOSFLMPluginName)
                        self.listPluginMOSFLM.append([
                            edPluginMOSFLMIndexing,
                            xsDataResultControlImageQualityIndicator
                        ])
                        edPluginMOSFLMIndexing.setDataInput(
                            xsDataMOSFLMIndexingInput)
                        edPluginMOSFLMIndexing.execute()
            for tupleMOSFLM in self.listPluginMOSFLM:
                edPluginMOSFLMIndexing = tupleMOSFLM[0]
                xsDataResultControlImageQualityIndicator = tupleMOSFLM[1]
                edPluginMOSFLMIndexing.synchronize()
                if not edPluginMOSFLMIndexing.isFailure():
                    xsDataMOSFLMOutput = edPluginMOSFLMIndexing.dataOutput
                    xsDataIndexingResult = EDHandlerXSDataMOSFLMv10.generateXSDataIndexingResult(
                        xsDataMOSFLMOutput)
                    selectedSolution = xsDataIndexingResult.selectedSolution
                    if selectedSolution is not None:
                        xsDataResultControlImageQualityIndicator.selectedIndexingSolution = selectedSolution
    def process(self, _edPlugin=None):
        """
        Executes the execution plugins
        """
        EDPluginControl.process(self, _edPlugin)
        EDVerbose.DEBUG("EDPluginControlImageQualityIndicatorsv1_3.process")
        EDUtilsParallel.initializeNbThread()
        # Check if we should do indexing:
        bDoIndexing = False
        if self.dataInput.doIndexing is not None:
            if self.dataInput.doIndexing.value:
                 bDoIndexing = True
        # Loop through all the incoming reference images
        listXSDataImage = self.dataInput.image
        xsDataInputWaitFile = XSDataInputWaitFile()
        self.xsDataResultControlImageQualityIndicators = XSDataResultControlImageQualityIndicators()
        listPlugin = []
        for xsDataImage in listXSDataImage:
            if not os.path.exists(xsDataImage.path.value):
                self.screen("Waiting for image %s" % xsDataImage.path.value)
                self.edPluginWaitFile = self.loadPlugin(self.strPluginWaitFileName)
                xsDataInputWaitFile.expectedFile = XSDataFile(xsDataImage.path)
                xsDataInputWaitFile.setExpectedSize(XSDataInteger(100000))
                xsDataInputWaitFile.setTimeOut(XSDataTime(self.fWaitFileTimeOut))
                self.DEBUG("Wait file timeOut set to %f" % self.fWaitFileTimeOut)
                self.edPluginWaitFile.setDataInput(xsDataInputWaitFile)
                self.edPluginWaitFile.executeSynchronous()
            if not os.path.exists(xsDataImage.path.value):
                strError = "Time-out while waiting for image %s" % xsDataImage.path.value
                self.error(strError)
                self.addErrorMessage(strError)
                self.setFailure()
            else:
                if self.bUseThinClient:
                    strPluginName = self.strPluginNameThinClient
                else:
                    strPluginName = self.strPluginName
                edPluginPluginExecImageQualityIndicator = self.loadPlugin(strPluginName)
                self.listPluginExecImageQualityIndicator.append(edPluginPluginExecImageQualityIndicator)
                xsDataInputDistlSignalStrength = XSDataInputDistlSignalStrength()
                xsDataInputDistlSignalStrength.setReferenceImage(xsDataImage)
                edPluginPluginExecImageQualityIndicator.setDataInput(xsDataInputDistlSignalStrength)
                edPluginPluginExecImageQualityIndicator.execute()
                edPluginControlBackground3D = self.loadPlugin(self.strPluginNameControlBackground3D)
                listPlugin.append([edPluginPluginExecImageQualityIndicator, edPluginControlBackground3D])
                xsDataInputControlBackground3D = XSDataInputControlBackground3D()
                xsDataInputControlBackground3D.addImage(XSDataFile(xsDataImage.path))
                edPluginControlBackground3D.dataInput = xsDataInputControlBackground3D
                edPluginControlBackground3D.execute()
        listIndexing = []
        # Synchronize all image quality indicator plugins and upload to ISPyB
        xsDataInputStoreListOfImageQualityIndicators = XSDataInputStoreListOfImageQualityIndicators()
        for pluginPair in listPlugin:
            edPluginPluginExecImageQualityIndicator = pluginPair[0]
            edPluginControlBackground3D = pluginPair[1]
            edPluginPluginExecImageQualityIndicator.synchronize()
            edPluginControlBackground3D.synchronize()
            xsDataImageQualityIndicators = XSDataImageQualityIndicators.parseString(\
                                             edPluginPluginExecImageQualityIndicator.dataOutput.imageQualityIndicators.marshal())
            if edPluginControlBackground3D.dataOutput.imageBackground != []:
                xsDataImageQualityIndicators.background3D_estimate = edPluginControlBackground3D.dataOutput.imageBackground[0].estimate
            self.xsDataResultControlImageQualityIndicators.addImageQualityIndicators(xsDataImageQualityIndicators)
            xsDataISPyBImageQualityIndicators = \
                XSDataISPyBImageQualityIndicators.parseString(xsDataImageQualityIndicators.marshal())
            xsDataInputStoreListOfImageQualityIndicators.addImageQualityIndicators(xsDataISPyBImageQualityIndicators)
#        print xsDataInputStoreListOfImageQualityIndicators.marshal()
        if self.dataInput.doUploadToIspyb is not None and self.dataInput.doUploadToIspyb.value:
            self.edPluginISPyB = self.loadPlugin(self.strISPyBPluginName)
            self.edPluginISPyB.dataInput = xsDataInputStoreListOfImageQualityIndicators
            self.edPluginISPyB.execute()
        #
        if bDoIndexing:
            # Find the 5 most intensive images (TIS):
            listImage = []
            # Check that we have background3D_estimate from all images:
            has_background3D_estimate = True
            for imageQualityIndicators in self.xsDataResultControlImageQualityIndicators.imageQualityIndicators:
                if imageQualityIndicators.background3D_estimate is None:
                    has_background3D_estimate = False
            if has_background3D_estimate:
                listSorted = sorted(self.xsDataResultControlImageQualityIndicators.imageQualityIndicators,
                                    key=lambda imageQualityIndicators: imageQualityIndicators.background3D_estimate.value)
            else:
                listSorted = sorted(self.xsDataResultControlImageQualityIndicators.imageQualityIndicators,
                                    key=lambda imageQualityIndicators: imageQualityIndicators.totalIntegratedSignal.value)
            for xsDataResultControlImageQualityIndicator in listSorted[-5:]:
                if xsDataResultControlImageQualityIndicator.goodBraggCandidates.value > 30:
                    xsDataInputReadImageHeader = XSDataInputReadImageHeader()
                    xsDataInputReadImageHeader.image = XSDataFile(xsDataResultControlImageQualityIndicator.image.path)
                    self.edPluginReadImageHeader = self.loadPlugin(self.strPluginReadImageHeaderName)
                    self.edPluginReadImageHeader.dataInput = xsDataInputReadImageHeader
                    self.edPluginReadImageHeader.executeSynchronous()
                    xsDataResultReadImageHeader = self.edPluginReadImageHeader.dataOutput
                    if xsDataResultReadImageHeader is not None:
                        xsDataSubWedge = xsDataResultReadImageHeader.subWedge
                        self.xsDataCollection = XSDataCollection()
                        self.xsDataCollection.addSubWedge(xsDataSubWedge)
                        xsDataIndexingInput = XSDataIndexingInput()
                        xsDataIndexingInput.setDataCollection(self.xsDataCollection)
                        xsDataMOSFLMIndexingInput = EDHandlerXSDataMOSFLMv10.generateXSDataMOSFLMInputIndexing(xsDataIndexingInput)
                        edPluginMOSFLMIndexing = self.loadPlugin(self.strIndexingMOSFLMPluginName)
                        self.listPluginMOSFLM.append([edPluginMOSFLMIndexing, xsDataResultControlImageQualityIndicator])
                        edPluginMOSFLMIndexing.setDataInput(xsDataMOSFLMIndexingInput)
                        edPluginMOSFLMIndexing.execute()
            for tupleMOSFLM in self.listPluginMOSFLM:
                edPluginMOSFLMIndexing = tupleMOSFLM[0]
                xsDataResultControlImageQualityIndicator = tupleMOSFLM[1]
                edPluginMOSFLMIndexing.synchronize()
                if not edPluginMOSFLMIndexing.isFailure():
                    xsDataMOSFLMOutput = edPluginMOSFLMIndexing.dataOutput
                    xsDataIndexingResult = EDHandlerXSDataMOSFLMv10.generateXSDataIndexingResult(xsDataMOSFLMOutput)
                    selectedSolution = xsDataIndexingResult.selectedSolution
                    if selectedSolution is not None:
                        xsDataResultControlImageQualityIndicator.selectedIndexingSolution = selectedSolution