def augment_data(self, flux, stdDevMean=0.05, stdDevStdDev=0.05): minIndex, maxIndex = ProcessingTools().min_max_index(flux, outerVal=0.5) noise = np.zeros(self.nw) stdDev = abs(np.random.normal(stdDevMean, stdDevStdDev)) # randomised standard deviation noise[minIndex:maxIndex] = np.random.normal(0, stdDev, maxIndex - minIndex) # # Add white noise to regions outside minIndex to maxIndex # noise[0:minIndex] = np.random.uniform(0.0, 1.0, minIndex) # noise[maxIndex:] = np.random.uniform(0.0, 1.0, self.nw-maxIndex) augmentedFlux = flux + noise augmentedFlux = normalise_spectrum(augmentedFlux) augmentedFlux = zero_non_overlap_part(augmentedFlux, minIndex, maxIndex, outerVal=0.5) return augmentedFlux
def __init__(self, filename, w0, w1, nw): self.filename = filename self.w0 = w0 self.w1 = w1 self.nw = nw self.numSplinePoints = 13 self.processingTools = ProcessingTools() self.readSpectrumFile = ReadSpectrumFile(filename, w0, w1, nw) self.preProcess = PreProcessSpectrum(w0, w1, nw) self.spectrum = self.readSpectrumFile.file_extension() if len(self.spectrum) == 3: self.redshiftFromFile = True else: self.redshiftFromFile = False
class CombineSnAndHost(object): def __init__(self, snInfo, galInfo, w0, w1, nw): self.snInfo = snInfo self.galInfo = galInfo self.processingTools = ProcessingTools() self.numSplinePoints = 13 self.preProcess = PreProcessSpectrum(w0, w1, nw) def overlapped_spectra(self): snWave, snFlux, snMinIndex, snMaxIndex = self.snInfo galWave, galFlux, galMinIndex, galMaxIndex = self.galInfo minIndex = max(snMinIndex, galMinIndex) maxIndex = min(snMaxIndex, galMaxIndex) snFlux = zero_non_overlap_part(snFlux, minIndex, maxIndex) galFlux = zero_non_overlap_part(galFlux, minIndex, maxIndex) return snWave, snFlux, galWave, galFlux, minIndex, maxIndex def sn_plus_gal(self, snCoeff, galCoeff): snWave, snFlux, galWave, galFlux, minIndex, maxIndex = self.overlapped_spectra( ) combinedFlux = (snCoeff * snFlux) + (galCoeff * galFlux) return snWave, combinedFlux, minIndex, maxIndex def template_data(self, snCoeff, galCoeff, z): wave, flux, minIndex, maxIndex = self.sn_plus_gal(snCoeff, galCoeff) wave, flux = self.processingTools.redshift_spectrum(wave, flux, z) flux = zero_non_overlap_part(flux, minIndex, maxIndex, outerVal=0) binnedWave, binnedFlux, minIndex, maxIndex = self.preProcess.log_wavelength( wave[minIndex:maxIndex + 1], flux[minIndex:maxIndex + 1]) newFlux, continuum = self.preProcess.continuum_removal( binnedWave, binnedFlux, self.numSplinePoints, minIndex, maxIndex) meanZero = self.preProcess.mean_zero(newFlux, minIndex, maxIndex) apodized = self.preProcess.apodize(meanZero, minIndex, maxIndex) fluxNorm = normalise_spectrum(apodized) fluxNorm = zero_non_overlap_part(fluxNorm, minIndex, maxIndex, outerVal=0.5) # Could median filter here, but trying without it now return binnedWave, fluxNorm, (minIndex, maxIndex)
def __init__(self, snInfo, galInfo, w0, w1, nw): self.snInfo = snInfo self.galInfo = galInfo self.processingTools = ProcessingTools() self.numSplinePoints = 13 self.preProcess = PreProcessSpectrum(w0, w1, nw)