def platform_changed(self): logger.debug("platform_changed") if ocl is None: self.do_OpenCL.setChecked(0) return platform = ocl.get_platform(str(self.platform.currentText())) for i in range(self.device.count())[-1::-1]: self.device.removeItem(i) self.device.addItems([i.name for i in platform.devices])
def proceed(self): with self._sem: out = None self.dump() logger.debug("Let's work a bit") self.set_ai() # Default Keyword arguments kwarg = {"unit": "2th_deg", "dummy": None, "delta_dummy": None, "method": "lut", "polarization_factor":0, "filename": None, "safe": False, } if self.q_nm.isChecked(): kwarg["unit"] = "q_nm^-1" elif self.tth_deg.isChecked(): kwarg["unit"] = "2th_deg" elif self.r_mm.isChecked(): kwarg["unit"] = "r_mm" else: logger.warning("Undefined unit !!! falling back on 2th_deg") if bool(self.do_dummy.isChecked()): kwarg["dummy"] = float_(self.val_dummy.text()) delta_dummy = str(self.delta_dummy.text()) if delta_dummy: kwarg["delta_dummy"] = float(delta_dummy) else: kwarg["delta_dummy"] = None if bool(self.do_polarization.isChecked()): kwarg["polarization_factor"] = float(self.polarization_factor.value()) kwarg["nbPt_rad"] = int(str(self.rad_pt.text()).strip()) if self.do_2D.isChecked(): kwarg["nbPt_azim"] = int(str(self.rad_pt.text()).strip()) if self.do_OpenCL.isChecked(): platform = ocl.get_platform(self.platform.currentText()) pid = platform.id did = platform.get_device(self.device.currentText()).id if (pid is not None) and (did is not None): kwarg["method"] = "lut_ocl_%i,%i" % (pid, did) else: kwarg["method"] = "lut_ocl" if self.do_radial_range: try: rad_min = float_(self.radial_range_min.text()) rad_max = float_(self.radial_range_max.text()) except ValueError as error: logger.error("error in parsing radial range: %s" % error) else: kwarg["radial_range"] = (rad_min, rad_max) if self.do_azimuthal_range: try: azim_min = float_(self.azimuth_range_min.text()) azim_max = float_(self.azimuth_range_max.text()) except ValueError as error: logger.error("error in parsing azimuthal range: %s" % error) else: kwarg["azimuth_range"] = (azim_min, azim_max) logger.info("Parameters for integration:%s%s" % (os.linesep, os.linesep.join(["\t%s:\t%s" % (k, v) for k, v in kwarg.items()]))) logger.debug("processing %s" % self.input_data) start_time = time.time() if self.input_data in [None, []]: logger.warning("No input data to process") return elif "ndim" in dir(self.input_data) and (self.input_data.ndim == 3): # We have a numpy array of dim3 if "nbPt_azim" in kwarg: out = numpy.zeros((self.input_data.shape[0], kwarg["nbPt_azim"], kwarg["nbPt_rad"]), dtype=numpy.float32) for i in range(self.input_data.shape[0]): self.progressBar.setValue(100.0 * i / self.input_data.shape[0]) kwarg["data"] = self.input_data[i] out[i] = self.ai.integrate2d(kwarg)[0] else: out = numpy.zeros((self.input_data.shape[0], kwarg["nbPt_rad"]), dtype=numpy.float32) for i in range(self.input_data.shape[0]): self.progressBar.setValue(100.0 * i / self.input_data.shape[0]) kwarg["data"] = self.input_data[i] out[i] = self.ai.integrate1d(**kwarg)[1] elif "__len__" in dir(self.input_data): out = [] for i, item in enumerate(self.input_data): self.progressBar.setValue(100.0 * i / len(self.input_data)) logger.debug("processing %s" % item) if (type(item) in types.StringTypes) and op.exists(item): kwarg["data"] = fabio.open(item).data if "nbPt_azim" in kwarg: kwarg["filename"] = op.splitext(item)[0] + ".azim" else: kwarg["filename"] = op.splitext(item)[0] + ".dat" else: logger.warning("item is not a file ... guessing it is a numpy array") kwarg["data"] = item kwarg["filename"] = None if "nbPt_azim" in kwarg: out.append(self.ai.integrate2d(**kwarg)[0]) else: out.append(self.ai.integrate1d(**kwarg)[0]) logger.info("Processing Done in %.3fs !" % (time.time() - start_time)) self.progressBar.setValue(100) self.die() return out
def proceed(self): with self._sem: out = None self.dump() logger.debug("Let's work a bit") self.set_ai() # Default Keyword arguments kwarg = { "unit": "2th_deg", "dummy": None, "delta_dummy": None, "method": "lut", "polarization_factor": None, "filename": None, "safe": False, } if self.q_nm.isChecked(): kwarg["unit"] = "q_nm^-1" elif self.tth_deg.isChecked(): kwarg["unit"] = "2th_deg" elif self.tth_rad.isChecked(): kwarg["unit"] = "2th_rad" elif self.r_mm.isChecked(): kwarg["unit"] = "r_mm" elif self.q_A.isChecked(): kwarg["unit"] = "q_A^-1" else: logger.warning("Undefined unit !!! falling back on 2th_deg") kwarg["correctSolidAngle"] = bool(self.do_solid_angle.isChecked()) if bool(self.do_dummy.isChecked()): kwarg["dummy"] = float_(self.val_dummy.text()) delta_dummy = str(self.delta_dummy.text()) if delta_dummy: kwarg["delta_dummy"] = float(delta_dummy) else: kwarg["delta_dummy"] = None if bool(self.do_polarization.isChecked()): kwarg["polarization_factor"] = float( self.polarization_factor.value()) else: kwarg["polarization_factor"] = None kwarg["nbPt_rad"] = int(str(self.rad_pt.text()).strip()) if self.do_2D.isChecked(): kwarg["nbPt_azim"] = int(str(self.azim_pt.text()).strip()) if self.do_OpenCL.isChecked(): platform = ocl.get_platform(self.platform.currentText()) pid = platform.id did = platform.get_device(self.device.currentText()).id if (pid is not None) and (did is not None): kwarg["method"] = "lut_ocl_%i,%i" % (pid, did) else: kwarg["method"] = "lut_ocl" if self.do_radial_range.isChecked(): try: rad_min = float_(self.radial_range_min.text()) rad_max = float_(self.radial_range_max.text()) except ValueError as error: logger.error("error in parsing radial range: %s" % error) else: kwarg["radial_range"] = (rad_min, rad_max) if kwarg["radial_range"] == (None, None): kwarg["radial_range"] = None if self.do_azimuthal_range.isChecked(): try: azim_min = float_(self.azimuth_range_min.text()) azim_max = float_(self.azimuth_range_max.text()) except ValueError as error: logger.error("error in parsing azimuthal range: %s" % error) else: kwarg["azimuth_range"] = (azim_min, azim_max) if kwarg["azimuth_range"] == (None, None): kwarg["azimuth_range"] = None if self.do_poisson.isChecked(): kwarg["error_model"] = "poisson" else: kwarg["error_model"] = None logger.info("Parameters for integration:%s%s" % (os.linesep, os.linesep.join( ["\t%s:\t%s" % (k, v) for k, v in kwarg.items()]))) logger.debug("processing %s" % self.input_data) start_time = time.time() if self.input_data in [None, []]: logger.warning("No input data to process") return elif "ndim" in dir(self.input_data) and (self.input_data.ndim == 3): # We have a numpy array of dim3 if "nbPt_azim" in kwarg: out = numpy.zeros((self.input_data.shape[0], kwarg["nbPt_azim"], kwarg["nbPt_rad"]), dtype=numpy.float32) for i in range(self.input_data.shape[0]): self.progressBar.setValue(100.0 * i / self.input_data.shape[0]) kwarg["data"] = self.input_data[i] out[i] = self.ai.integrate2d(**kwarg)[0] else: if "nbPt_rad" in kwarg: # convert nbPt_rad -> nbPt kwarg["nbPt"] = kwarg.pop("nbPt_rad") out = numpy.zeros( (self.input_data.shape[0], kwarg["nbPt"]), dtype=numpy.float32) for i in range(self.input_data.shape[0]): self.progressBar.setValue(100.0 * i / self.input_data.shape[0]) kwarg["data"] = self.input_data[i] out[i] = self.ai.integrate1d(**kwarg)[1] elif "__len__" in dir(self.input_data): out = [] if self.hdf5_path: import h5py hdf5 = h5py.File(self.output_path) if self.fast_dim: if "nbPt_azim" in kwarg: ds = hdf5.create_dataset( "diffraction", (1, self.fast_dim, kwarg["nbPt_azim"], kwarg["nbPt_rad"]), dtype=numpy.float32, chunks=(1, self.fast_dim, kwarg["nbPt_azim"], kwarg["nbPt_rad"]), maxshape=(None, self.fast_dim, kwarg["nbPt_azim"], kwarg["nbPt_rad"])) else: ds = hdf5.create_dataset( "diffraction", (1, self.fast_dim, kwarg["nbPt_rad"]), dtype=numpy.float32, chunks=(1, self.fast_dim, kwarg["nbPt_rad"]), maxshape=(None, self.fast_dim, kwarg["nbPt_rad"])) else: if "nbPt_azim" in kwarg: ds = hdf5.create_dataset( "diffraction", (1, kwarg["nbPt_azim"], kwarg["nbPt_rad"]), dtype=numpy.float32, chunks=(1, kwarg["nbPt_azim"], kwarg["nbPt_rad"]), maxshape=(None, kwarg["nbPt_azim"], kwarg["nbPt_rad"])) else: ds = hdf5.create_dataset( "diffraction", (1, kwarg["nbPt_rad"]), dtype=numpy.float32, chunks=(1, kwarg["nbPt_rad"]), maxshape=(None, kwarg["nbPt_rad"])) for i, item in enumerate(self.input_data): self.progressBar.setValue(100.0 * i / len(self.input_data)) logger.debug("processing %s" % item) if (type(item) in types.StringTypes) and op.exists(item): kwarg["data"] = fabio.open(item).data if self.hdf5_path is None: if self.output_path and op.isdir(self.output_path): outpath = op.join( self.output_path, op.splitext(op.basename(item))[0]) else: outpath = op.splitext(item)[0] if "nbPt_azim" in kwarg: kwarg["filename"] = outpath + ".azim" else: kwarg["filename"] = outpath + ".dat" else: logger.warning( "item is not a file ... guessing it is a numpy array" ) kwarg["data"] = item kwarg["filename"] = None if kwarg.get("nbPt_azim"): res = self.ai.integrate2d(**kwarg)[0] else: if "nbPt_rad" in kwarg: # convert nbPt_rad -> nbPt kwarg["nbPt"] = kwarg.pop("nbPt_rad") res = self.ai.integrate1d(**kwarg)[0] out.append(res) #TODO manage HDF5 stuff !!! logger.info("Processing Done in %.3fs !" % (time.time() - start_time)) self.progressBar.setValue(100) self.die() return out
def proceed(self): with self._sem: out = None self.dump() logger.debug("Let's work a bit") self.set_ai() # Default Keyword arguments kwarg = {"unit": "2th_deg", "dummy": None, "delta_dummy": None, "method": "lut", "polarization_factor":None, "filename": None, "safe": False, } if self.q_nm.isChecked(): kwarg["unit"] = "q_nm^-1" elif self.tth_deg.isChecked(): kwarg["unit"] = "2th_deg" elif self.tth_rad.isChecked(): kwarg["unit"] = "2th_rad" elif self.r_mm.isChecked(): kwarg["unit"] = "r_mm" elif self.q_A.isChecked(): kwarg["unit"] = "q_A^-1" else: logger.warning("Undefined unit !!! falling back on 2th_deg") kwarg["correctSolidAngle"] = bool(self.do_solid_angle.isChecked()) if bool(self.do_dummy.isChecked()): kwarg["dummy"] = float_(self.val_dummy.text()) delta_dummy = str(self.delta_dummy.text()) if delta_dummy: kwarg["delta_dummy"] = float(delta_dummy) else: kwarg["delta_dummy"] = None if bool(self.do_polarization.isChecked()): kwarg["polarization_factor"] = float(self.polarization_factor.value()) else: kwarg["polarization_factor"] = None kwarg["nbPt_rad"] = int(str(self.rad_pt.text()).strip()) if self.do_2D.isChecked(): kwarg["nbPt_azim"] = int(str(self.azim_pt.text()).strip()) if self.do_OpenCL.isChecked(): platform = ocl.get_platform(self.platform.currentText()) pid = platform.id did = platform.get_device(self.device.currentText()).id if (pid is not None) and (did is not None): kwarg["method"] = "lut_ocl_%i,%i" % (pid, did) else: kwarg["method"] = "lut_ocl" if self.do_radial_range.isChecked(): try: rad_min = float_(self.radial_range_min.text()) rad_max = float_(self.radial_range_max.text()) except ValueError as error: logger.error("error in parsing radial range: %s" % error) else: kwarg["radial_range"] = (rad_min, rad_max) if kwarg["radial_range"] == (None, None): kwarg["radial_range"] = None if self.do_azimuthal_range.isChecked(): try: azim_min = float_(self.azimuth_range_min.text()) azim_max = float_(self.azimuth_range_max.text()) except ValueError as error: logger.error("error in parsing azimuthal range: %s" % error) else: kwarg["azimuth_range"] = (azim_min, azim_max) if kwarg["azimuth_range"] == (None, None): kwarg["azimuth_range"] = None if self.do_poisson.isChecked(): kwarg["error_model"] = "poisson" else: kwarg["error_model"] = None logger.info("Parameters for integration:%s%s" % (os.linesep, os.linesep.join(["\t%s:\t%s" % (k, v) for k, v in kwarg.items()]))) logger.debug("processing %s" % self.input_data) start_time = time.time() if self.input_data in [None, []]: logger.warning("No input data to process") return elif "ndim" in dir(self.input_data) and (self.input_data.ndim == 3): # We have a numpy array of dim3 if "nbPt_azim" in kwarg: out = numpy.zeros((self.input_data.shape[0], kwarg["nbPt_azim"], kwarg["nbPt_rad"]), dtype=numpy.float32) for i in range(self.input_data.shape[0]): self.progressBar.setValue(100.0 * i / self.input_data.shape[0]) kwarg["data"] = self.input_data[i] out[i] = self.ai.integrate2d(**kwarg)[0] else: if "nbPt_rad" in kwarg: # convert nbPt_rad -> nbPt kwarg["nbPt"] = kwarg.pop("nbPt_rad") out = numpy.zeros((self.input_data.shape[0], kwarg["nbPt"]), dtype=numpy.float32) for i in range(self.input_data.shape[0]): self.progressBar.setValue(100.0 * i / self.input_data.shape[0]) kwarg["data"] = self.input_data[i] out[i] = self.ai.integrate1d(**kwarg)[1] elif "__len__" in dir(self.input_data): out = [] if self.hdf5_path: import h5py hdf5 = h5py.File(self.output_path) if self.fast_dim: if "nbPt_azim" in kwarg: ds = hdf5.create_dataset("diffraction",(1,self.fast_dim,kwarg["nbPt_azim"],kwarg["nbPt_rad"]), dtype = numpy.float32, chunks=(1,self.fast_dim,kwarg["nbPt_azim"],kwarg["nbPt_rad"]), maxshape=(None,self.fast_dim,kwarg["nbPt_azim"],kwarg["nbPt_rad"])) else: ds = hdf5.create_dataset("diffraction",(1,self.fast_dim,kwarg["nbPt_rad"]), dtype = numpy.float32, chunks=(1,self.fast_dim,kwarg["nbPt_rad"]), maxshape=(None,self.fast_dim,kwarg["nbPt_rad"])) else: if "nbPt_azim" in kwarg: ds = hdf5.create_dataset("diffraction",(1,kwarg["nbPt_azim"],kwarg["nbPt_rad"]), dtype = numpy.float32, chunks=(1,kwarg["nbPt_azim"],kwarg["nbPt_rad"]), maxshape=(None,kwarg["nbPt_azim"],kwarg["nbPt_rad"])) else: ds = hdf5.create_dataset("diffraction",(1,kwarg["nbPt_rad"]), dtype = numpy.float32, chunks=(1,kwarg["nbPt_rad"]), maxshape=(None,kwarg["nbPt_rad"])) for i, item in enumerate(self.input_data): self.progressBar.setValue(100.0 * i / len(self.input_data)) logger.debug("processing %s" % item) if (type(item) in types.StringTypes) and op.exists(item): kwarg["data"] = fabio.open(item).data if self.hdf5_path is None: if self.output_path and op.isdir(self.output_path): outpath = op.join(self.output_path,op.splitext(op.basename(item))[0]) else: outpath = op.splitext(item)[0] if "nbPt_azim" in kwarg: kwarg["filename"] = outpath + ".azim" else: kwarg["filename"] = outpath + ".dat" else: logger.warning("item is not a file ... guessing it is a numpy array") kwarg["data"] = item kwarg["filename"] = None if kwarg.get("nbPt_azim"): res=self.ai.integrate2d(**kwarg)[0] else: if "nbPt_rad" in kwarg: # convert nbPt_rad -> nbPt kwarg["nbPt"] = kwarg.pop("nbPt_rad") res=self.ai.integrate1d(**kwarg)[0] out.append(res) #TODO manage HDF5 stuff !!! logger.info("Processing Done in %.3fs !" % (time.time() - start_time)) self.progressBar.setValue(100) self.die() return out