def cr_text_static(self, fname, names, waves, spec, f_width, wl_low, wl_high): #self.writeMessage("- continuum removal: " + fname) out_dir = self.outputSCRDirEntry.get() out_dir = out_dir + "/" + str(wl_low) + "-" + str(wl_high) d_norm = self.depthNormalizedIntVar.get() if not os.path.exists(out_dir): os.makedirs(out_dir) mt_out_path = out_dir + "/mt_" + fname[:fname.rfind('.')] + ".csv" cr_out_path = out_dir + "/cr_" + fname[:fname.rfind('.')] + ".csv" #self.writeMessage("- setup") CR_module.cr_text_setup(waves, f_width, mt_out_path, cr_out_path) for i in range(len(spec)): #self.writeMessage("\t - spectra " + str(i+1) + "/" + str(len(spec))) CR_module.cr_text(spec[i], waves, f_width, names[i], d_norm) CR_module.cr_text_teardown()
def deriv_text_static(self, fname, names, waves, spec, f_width, wl_low, wl_high): self.writeMessage("- derivative metrics: " + fname) window = int(self.derivWindowEntry.get()) threshold = float(self.derivThresholdEntry.get()) out_dir = self.outputDerivDirEntry.get() out_dir = out_dir + "/" + str(wl_low) + "-" + str(wl_high) run_second_deriv = True if not os.path.exists(out_dir): os.makedirs(out_dir) #deriv_out_path = out_dir + "/deriv_" + fname[:fname.rfind('.')] + ".txt" sp_out_path = out_dir + "/spectra_" + fname d1_out_path = out_dir + "/1st_deriv_" + fname d2_out_path = out_dir + "/2nd_deviv_" + fname mm_out_path = out_dir + "/min_max_" + fname if_out_path = out_dir + "/inflection_" + fname CR_module.deriv_text_setup(waves, f_width, sp_out_path, d1_out_path, d2_out_path, mm_out_path, if_out_path) for i in range(len(spec)): #self.writeMessage("\tspectra " + str(i+1) + "/" + str(len(spec))) CR_module.deriv_text_static(spec[i], waves, f_width, names[i], window, threshold) CR_module.deriv_text_teardown()
def cr_envi_static(self, in_dir, f, out_dir, waves): self.writeMessage("cr_envi_dynamic") wt = self.wave_thresh static_ranges = self.get_static_ranges() base = f[:f.rfind(".")] for static_range in static_ranges: wl_low = static_range[0] wl_high = static_range[1] if (wl_high - wl_low < wt) or (wl_high >= waves[len(waves)-1]) or (wl_low <= waves[0]): self.writeMessage("Error. Band wavelength range.") return r_out_dir = "%s/%f-%f" % (out_dir, wl_low, wl_high) if not os.path.exists(r_out_dir): os.makedirs(r_out_dir) in_hdr_path = in_dir + "/" + f + ".hdr" in_dat_path = in_dir + "/" + f + ".dat" out_hdr_path = r_out_dir + "/" + f + ".hdr" out_dat_path = r_out_dir + "/" + f + ".dat" (f_width, low_i, high_i) =\ self.compute_cr_band_extents(waves, wl_low, wl_high) self.generate_cr_header(in_hdr_path, out_hdr_path, waves, f_width, low_i, high_i) CR_module.cr_envi(in_hdr_path, in_dat_path, out_dat_path, wl_low, wl_high) self.writeMessage("Done!")
def cr_envi_dynamic(self, in_hdr_path, in_dat_path, out_hdr_path, out_dat_path, waves): self.writeMessage("cr_envi_dynamic") wt = self.wave_thresh srange_min = float(self.shortRangeStartEntry.get()) srange_max = float(self.shortRangeStopEntry.get()) lrange_min = float(self.longRangeStartEntry.get()) lrange_max = float(self.longRangeStopEntry.get()) kernel = int(self.kernelEntry.get()) if kernel % 2 == 0: self.writeMessage("Error. Kernel size must be odd.") return #validate wavelength range if (srange_max - srange_min < wt) or (lrange_min - srange_max < wt) or (lrange_max - lrange_min < wt): self.writeMessage("Error. Bad wavelength range.") return ss0 = self.shortRangeZeroIntVar.get() ss1 = self.shortRangeMinIntVar.get() ss2 = self.shortRangeMaxIntVar.get() ls0 = self.longRangeZeroIntVar.get() ls1 = self.longRangeMinIntVar.get() ls2 = self.longRangeMaxIntVar.get() if ss0 == 0 and ss1 == 0 and ss2 == 0: self.writeMessage("Error. Must select short wavelength strategy.") return if ls0 == 0 and ls1 == 0 and ls2 == 0: self.writeMessage("Error. Must select short wavelength strategy.") return s_strat = 0 if ss1 == 1: s_strat = 1 if ss2 == 1: s_strat = 2 l_strat = 0 if ls1 == 1: l_strat = 1 if ls2 == 1: l_strat = 2 (f_width, low_i, high_i) =\ self.compute_cr_band_extents(waves, srange_min, lrange_max) self.writeMessage("f_width:" + str(f_width)) self.writeMessage("low_i:" + str(low_i)) self.writeMessage("high_i:" + str(high_i)) # # generate output header # self.generate_cr_header(in_hdr_path, out_hdr_path, waves, f_width, low_i, high_i) # # compute the continuum removal # CR_module.cr_envi_dynamic(\ in_hdr_path,\ in_dat_path,\ out_dat_path,\ srange_min,\ srange_max,\ lrange_min,\ lrange_max,\ s_strat,\ l_strat,\ kernel) self.writeMessage("Done!")
def cr_text_dynamic(self, mt_out_path, cr_out_path, waves, n_waves, image, n_cols): self.writeMessage("cr_text_dynamic") wt = self.wave_thresh srange_min = float(self.shortRangeStartEntry.get()) srange_max = float(self.shortRangeStopEntry.get()) lrange_min = float(self.longRangeStartEntry.get()) lrange_max = float(self.longRangeStopEntry.get()) kernel = int(self.kernelEntry.get()) if kernel % 2 == 0: self.writeMessage("Error. Kernel size must be odd.") return # # validate # if (srange_max - srange_min < wt) or (lrange_min - srange_max < wt) or (lrange_max - lrange_min < wt): self.writeMessage("Error. Bad wavelength range.") return ss0 = self.shortRangeZeroIntVar.get() ss1 = self.shortRangeMinIntVar.get() ss2 = self.shortRangeMaxIntVar.get() ls0 = self.longRangeZeroIntVar.get() ls1 = self.longRangeMinIntVar.get() ls2 = self.longRangeMaxIntVar.get() if ss0 == 0 and ss1 == 0 and ss2 == 0: self.writeMessage("Error. Must select short wavelength strategy.") return if ls0 == 0 and ls1 == 0 and ls2 == 0: self.writeMessage("Error. Must select short wavelength strategy.") return s_strat = 0 if ss1 == 1: s_strat = 1 if ss2 == 1: s_strat = 2 l_strat = 0 if ls1 == 1: l_strat = 1 if ls2 == 1: l_strat = 2 (cr_width, low, high) = \ self.compute_cr_band_extents(waves, srange_min, lrange_max) cr_waves = waves[low:high+1] # # run # self.writeMessage("\tcr_text_setup") CR_module.cr_text_setup(cr_waves, cr_width, mt_out_path, cr_out_path) self.writeMessage("Processing:") for col in range(n_cols): #self.writeMessage("\tcolumn " + str(col+1) + "/" + str(n_cols)) spectrum = [list[col] for list in image] cr_spect = spectrum[low:high+1] (low_i, high_i) =\ CR_module.cr_dynamic_range(\ spectrum,\ waves,\ n_waves,\ s_strat,\ l_strat,\ srange_min,\ srange_max,\ lrange_min,\ lrange_max,\ kernel) if low_i < low or low_i > high: self.writeMessage("Error: low_i to high or low:" + str(low_i)) return; if high_i < low or high_i > high: self.writeMessage("Error: high_i to high or low:" + str(high_i)) return; offset = low_i - low f_width = high_i - low_i + 1 self.writeMessage("\t" + str(col+1) + "/" + str(n_cols) + "[" + str(low) + "," + str(low_i) + "," + str(high_i) + "," + str(high) + "]") #pass in the exact spectra CR_module.cr_text_dynamic(\ cr_spect,\ cr_waves,\ cr_width, f_width, offset) CR_module.cr_text_teardown() self.writeMessage("Done!")