Ejemplo n.º 1
0
    def run(self, inData):
        listImagePath = inData["imagePath"]
        prefix = UtilsImage.getPrefix(listImagePath[0])
        listSubWedge = self.getListSubWedge(inData)
        diffractionPlan = inData.get("diffractionPlan", {})
        sample = inData.get("sample", {})
        # Check if flux is present
        flux = None
        absorbedDoseRate = None
        experimentalCondition = inData.get("experimentalCondition", None)
        if experimentalCondition is not None:
            beam = experimentalCondition.get("beam", None)
            if beam is not None:
                flux = beam.get("flux", None)
                # if not "size" in beam:
                #     beam["size"] = listSubWedge[0]["experimentalCondition"]["beam"]["size"]
                beam["exposureTime"] = listSubWedge[0][
                    "experimentalCondition"]["beam"]["exposureTime"]
                beam["wavelength"] = listSubWedge[0]["experimentalCondition"][
                    "beam"]["wavelength"]
        # Convert images to CBF
        firstImage = listSubWedge[0]["image"][0]["path"]
        import os
        import pprint

        listH5ToCBF = []
        suffix = os.path.splitext(firstImage)[1]
        if suffix == ".h5":
            for subWedge in listSubWedge:
                imageList = subWedge["image"]
                for image in imageList:
                    imagePath = image["path"]
                    hdf5ImageNumber = UtilsImage.getImageNumber(imagePath)
                    inDataH5ToCBF = {
                        "hdf5File": imagePath,
                        "hdf5ImageNumber": hdf5ImageNumber,
                        "imageNumber": 1,
                        "forcedOutputDirectory":
                        str(self.getWorkingDirectory()),
                        "forcedOutputImageNumber": hdf5ImageNumber,
                    }
                    h5ToCBF = H5ToCBFTask(inData=inDataH5ToCBF)
                    h5ToCBF.start()
                    listH5ToCBF.append((image, h5ToCBF))
        # Join CBF creation
        for image, h5ToCBF in listH5ToCBF:
            h5ToCBF.join()
            image["path"] = h5ToCBF.outData["outputCBFFile"]
        pprint.pprint(listSubWedge)
        # Start indexing
        outDataIndexing, outDataGB, listSubWedge = self.indexing(
            prefix, listSubWedge, self.getWorkingDirectory())
        if outDataIndexing is not None and outDataGB is not None:
            listXdsAsciiHkl, correctLp, bkgpixCbf = self.integration(
                prefix, listSubWedge, outDataIndexing, outDataGB)
            if listXdsAsciiHkl is not None:
                # Check if Raddose should be run
                estimateRadiationDamage = self.checkEstimateRadiationDamage(
                    inData, flux)
                if estimateRadiationDamage:
                    # Check if forced space group
                    forcedSpaceGroup = None
                    numOperators = None
                    cell = None
                    if ("diffractionPlan" in inData and "forcedSpaceGroup"
                            in inData["diffractionPlan"]):
                        forcedSpaceGroup = inData["diffractionPlan"][
                            "forcedSpaceGroup"]
                        if forcedSpaceGroup is not None:
                            if forcedSpaceGroup != "":
                                forcedSpaceGroup = forcedSpaceGroup.replace(
                                    " ", "")
                                numOperators = UtilsSymmetry.getNumberOfSymmetryOperatorsFromSpaceGroupName(
                                    forcedSpaceGroup)
                            else:
                                forcedSpaceGroup = None
                    if forcedSpaceGroup is None:
                        # Get indexing space group IT number
                        if "resultIndexing" in outDataIndexing:
                            resultIndexing = outDataIndexing["resultIndexing"]
                            cell = resultIndexing["cell"]
                            if "spaceGroupNumber" in resultIndexing:
                                spaceGroupNumber = resultIndexing[
                                    "spaceGroupNumber"]
                                numOperators = UtilsSymmetry.getNumberOfSymmetryOperatorsFromSpaceGroupITNumber(
                                    spaceGroupNumber)
                    if numOperators is None:
                        raise RuntimeError(
                            "Error when trying to determine number of symmetry operators!"
                        )
                    chemicalComposition = self.getDefaultChemicalComposition(
                        cell, numOperators)
                    numberOfImages = self.getNumberOfImages(listSubWedge)
                    sample = inData["sample"]
                    inDataRaddose = {
                        "experimentalCondition": experimentalCondition,
                        "chemicalComposition": chemicalComposition,
                        "sample": sample,
                        "cell": cell,
                        "numberOfImages": numberOfImages,
                        "numOperators": numOperators,
                    }
                    # import pprint
                    # pprint.pprint(inDataRaddose)
                    raddose = Raddose(inData=inDataRaddose,
                                      workingDirectorySuffix=prefix)
                    raddose.execute()
                    if raddose.isSuccess():
                        absorbedDoseRate = raddose.outData["absorbedDoseRate"]
                inDataBest = {
                    "diffractionPlan": diffractionPlan,
                    "sample": sample,
                    "subWedge": listSubWedge,
                    "xdsAsciiHkl": listXdsAsciiHkl,
                    "bkgpixCbf": bkgpixCbf,
                    "correctLp": correctLp,
                    "crystalAbsorbedDoseRate": absorbedDoseRate,
                }
                bestTask = Best(inData=inDataBest,
                                workingDirectorySuffix=prefix)
                bestTask.execute()
Ejemplo n.º 2
0
 def run(self, inData):
     outData = {}
     listImagePath = inData["imagePath"]
     prefix = UtilsImage.getPrefix(listImagePath[0])
     listSubWedge = self.getListSubWedge(inData)
     diffractionPlan = inData.get("diffractionPlan", {})
     sample = inData.get("sample", {})
     # Check if flux is present
     flux = None
     absorbedDoseRate = None
     experimentalCondition = inData.get("experimentalCondition", None)
     if experimentalCondition is not None:
         beam = experimentalCondition.get("beam", None)
         if beam is not None:
             flux = beam.get("flux", None)
             # if not "size" in beam:
             #     beam["size"] = listSubWedge[0]["experimentalCondition"]["beam"]["size"]
             beam["exposureTime"] = listSubWedge[0]["experimentalCondition"]["beam"]["exposureTime"]
             beam["wavelength"] = listSubWedge[0]["experimentalCondition"]["beam"]["wavelength"]
     # Start indexing
     outDataIndexing, outDataGB = self.indexing(prefix, listSubWedge)
     if outDataIndexing is not None and outDataGB is not None:
         listXdsAsciiHkl, correctLp, bkgpixCbf = self.integration(
             prefix, listSubWedge, outDataIndexing, outDataGB)
         if listXdsAsciiHkl is not None:
             # Check if Raddose should be run
             estimateRadiationDamage = self.checkEstimateRadiationDamage(inData, flux)
             if estimateRadiationDamage:
                 # Check if forced space group
                 forcedSpaceGroup = None
                 numOperators = None
                 cell = None
                 if "diffractionPlan" in inData and "forcedSpaceGroup" in inData["diffractionPlan"]:
                     forcedSpaceGroup = inData["diffractionPlan"]["forcedSpaceGroup"]
                     if forcedSpaceGroup is not None:
                         if forcedSpaceGroup != "":
                             forcedSpaceGroup = forcedSpaceGroup.replace(" ", "")
                             numOperators = UtilsSymmetry.getNumberOfSymmetryOperatorsFromSpaceGroupName(forcedSpaceGroup)
                         else:
                             forcedSpaceGroup = None
                 if forcedSpaceGroup is None:
                     # Get indexing space group IT number
                     if "resultIndexing" in outDataIndexing:
                         resultIndexing = outDataIndexing["resultIndexing"]
                         cell = resultIndexing["cell"]
                         if "spaceGroupNumber" in resultIndexing:
                             spaceGroupNumber = resultIndexing["spaceGroupNumber"]
                             numOperators = UtilsSymmetry.getNumberOfSymmetryOperatorsFromSpaceGroupITNumber(spaceGroupNumber)
                 if numOperators is None:
                     raise RuntimeError("Error when trying to determine number of symmetry operators!")
                 chemicalComposition = self.getDefaultChemicalComposition(cell, numOperators)
                 numberOfImages = self.getNumberOfImages(listSubWedge)
                 sample = inData["sample"]
                 inDataRaddose = {
                     "experimentalCondition": experimentalCondition,
                     "chemicalComposition": chemicalComposition,
                     "sample": sample,
                     "cell": cell,
                     "numberOfImages": numberOfImages,
                     "numOperators": numOperators
                 }
                 # import pprint
                 # pprint.pprint(inDataRaddose)
                 raddose = Raddose(
                     inData=inDataRaddose,
                     workingDirectorySuffix=prefix)
                 raddose.execute()
                 if raddose.isSuccess():
                     absorbedDoseRate = raddose.outData["absorbedDoseRate"]
             inDataBest = {
                 "diffractionPlan": diffractionPlan,
                 "sample": sample,
                 "subWedge": listSubWedge,
                 "xdsAsciiHkl": listXdsAsciiHkl,
                 "bkgpixCbf": bkgpixCbf,
                 "correctLp": correctLp,
                 "crystalAbsorbedDoseRate": absorbedDoseRate
             }
             bestTask = Best(
                 inData=inDataBest,
                 workingDirectorySuffix=prefix
             )
             bestTask.execute()