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))
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))