def correctMask(self):
        """
        Apply spline and tilt correction to the mask if provided in fit2d format.
        """
        self.DEBUG("EDPluginSPDCakev1_5.correctMask")
        EDPluginSPDCakev1_5.__semaphore.acquire()
        t0 = time.time()
#        self.screen("%s: preCalc Mask file is in %s" % (self.getId(), self.dictGeometry["MaskFile"]))
        if (self.dictGeometry["MaskFile"] not in EDPluginSPDCakev1_5.__dictMask):
            strUnCorrectedEdfMask = self.dictGeometry["MaskFile"]
            unCorrectedMask = fabio.open(strUnCorrectedEdfMask)
            basename = os.path.join(self.getSPDCommonDirectory(), os.path.splitext(os.path.basename(strUnCorrectedEdfMask))[0])

            if self.bCorrectTiltMask:
                if not isinstance(unCorrectedMask, fabio.edfimage.edfimage):
                    strUnCorrectedEdfMask = os.path.join(self.getSPDCommonDirectory(),
                                                         os.path.splitext(os.path.basename(self.dictGeometry["MaskFile"]))[0] + ".edf")
                    unCorrectedEdfMask = fabio.edfimage.edfimage(header={}, data=unCorrectedMask.data.astype("float32"))
                    unCorrectedEdfMask.write(strUnCorrectedEdfMask)

                imgConfig = self.getSPDConfig()
                mskConfig = " ".join([i for i in imgConfig.split() \
                                    if not (i.startswith("mask_file=") or i.startswith("azim_")\
                                    or i.startswith("flood_file=") or i.startswith("dark_file="))] + ["do_dark=0", "dummy=1"])
                worker = SPDworker()
                worker.setExecutable(self.getExecutable())
                worker.setLogFilename(os.path.join(self.getSPDCommonDirectory(), "worker-mask.log"))
                worker.initialize(mskConfig)
                worker.setTimeOut(self.getTimeOut())
                dictLog = worker.process("outdir=%s/ %s" % (self.getSPDCommonDirectory(), strUnCorrectedEdfMask))
                for oneLog in dictLog:
                    self.DEBUG("EDPluginSPDCakev1_5.correctMask %s: %s" % (oneLog, dictLog[oneLog]))
                worker.kill(gentle=True)
                worker = None
                npaCorrected = -(fabio.open(basename + ".cor").data + 0.5).astype("int8")
            else:
                npaCorrected = -(unCorrectedMask.data).astype("int8")
            strCorrectedMask = basename + ".msk"
            fabio.edfimage.edfimage(data=npaCorrected, header={"Dummy":"-1"}).write(strCorrectedMask)
            EDPluginSPDCakev1_5.__dictMask[self.dictGeometry["MaskFile"]] = strCorrectedMask

        EDPluginSPDCakev1_5.__semaphore.release()
        newConfig = []
        for key in self.getSPDConfig().split():
            if key.startswith("mask_file="):
                newConfig.append('mask_file=%s' % os.path.abspath(EDPluginSPDCakev1_5.__dictMask[self.dictGeometry["MaskFile"]]))
            else:
                newConfig.append(key)
        self.setSPDConfig(" ".join(newConfig))
#        self.worker.setConfig(self.getSPDConfig())
        self.DEBUG("%s updating mask %s took %.3fs " % (self.getId(), self.dictGeometry["MaskFile"], time.time() - t0))
Exemple #2
0
    def correctMask(self):
        """
        Apply spline and tilt correction to the mask if provided in fit2d format.
        """
        self.DEBUG("EDPluginSPDCakev1_5.correctMask")
        EDPluginSPDCakev1_5.__semaphore.acquire()
        t0 = time.time()
        #        self.screen("%s: preCalc Mask file is in %s" % (self.getId(), self.dictGeometry["MaskFile"]))
        if (self.dictGeometry["MaskFile"]
                not in EDPluginSPDCakev1_5.__dictMask):
            strUnCorrectedEdfMask = self.dictGeometry["MaskFile"]
            unCorrectedMask = fabio.open(strUnCorrectedEdfMask)
            basename = os.path.join(
                self.getSPDCommonDirectory(),
                os.path.splitext(os.path.basename(strUnCorrectedEdfMask))[0])

            if self.bCorrectTiltMask:
                if not isinstance(unCorrectedMask, fabio.edfimage.edfimage):
                    strUnCorrectedEdfMask = os.path.join(
                        self.getSPDCommonDirectory(),
                        os.path.splitext(
                            os.path.basename(self.dictGeometry["MaskFile"]))[0]
                        + ".edf")
                    unCorrectedEdfMask = fabio.edfimage.edfimage(
                        header={}, data=unCorrectedMask.data.astype("float32"))
                    unCorrectedEdfMask.write(strUnCorrectedEdfMask)

                imgConfig = self.getSPDConfig()
                mskConfig = " ".join([i for i in imgConfig.split() \
                                    if not (i.startswith("mask_file=") or i.startswith("azim_")\
                                    or i.startswith("flood_file=") or i.startswith("dark_file="))] + ["do_dark=0", "dummy=1"])
                worker = SPDworker()
                worker.setExecutable(self.getExecutable())
                worker.setLogFilename(
                    os.path.join(self.getSPDCommonDirectory(),
                                 "worker-mask.log"))
                worker.initialize(mskConfig)
                worker.setTimeOut(self.getTimeOut())
                dictLog = worker.process(
                    "outdir=%s/ %s" %
                    (self.getSPDCommonDirectory(), strUnCorrectedEdfMask))
                for oneLog in dictLog:
                    self.DEBUG("EDPluginSPDCakev1_5.correctMask %s: %s" %
                               (oneLog, dictLog[oneLog]))
                worker.kill(gentle=True)
                worker = None
                npaCorrected = -(fabio.open(basename + ".cor").data +
                                 0.5).astype("int8")
            else:
                npaCorrected = -(unCorrectedMask.data).astype("int8")
            strCorrectedMask = basename + ".msk"
            fabio.edfimage.edfimage(data=npaCorrected, header={
                "Dummy": "-1"
            }).write(strCorrectedMask)
            EDPluginSPDCakev1_5.__dictMask[
                self.dictGeometry["MaskFile"]] = strCorrectedMask

        EDPluginSPDCakev1_5.__semaphore.release()
        newConfig = []
        for key in self.getSPDConfig().split():
            if key.startswith("mask_file="):
                newConfig.append(
                    'mask_file=%s' %
                    os.path.abspath(EDPluginSPDCakev1_5.__dictMask[
                        self.dictGeometry["MaskFile"]]))
            else:
                newConfig.append(key)
        self.setSPDConfig(" ".join(newConfig))
        #        self.worker.setConfig(self.getSPDConfig())
        self.DEBUG(
            "%s updating mask %s took %.3fs " %
            (self.getId(), self.dictGeometry["MaskFile"], time.time() - t0))