def params(self): " Runs through each spectrum in the sp array to calculate the parameters" useezmap = False from Sp_parameters import param import warnings print('Running Parameters') if useezmap: import ezmap from ezmap import map as zmap warnings.filterwarnings("ignore",category=RuntimeWarning,module="param") warnings.filterwarnings("ignore",category=RuntimeWarning,module="Sp_parameters.normsp") sp = self.sp wvl = self.wvl if sp.ndim == 5: w,r,t = np.mgrid[0:2,0:len(self.ref),0:len(self.tau)] if useezmap: gx = lambda a:param(sp[a[0],:,0,a[1],a[2]],wvl) args = ((aw,ar,at) for aw in w.ravel() for ar in r.ravel() for at in t.ravel()) partemp = zmap(gx,args,progress=True,ncpu=2) else: applypar = lambda w,r,t:param(sp[w,:,0,r,t],wvl) partemp = map(applypar,w.ravel(),r.ravel(),t.ravel()) par = np.reshape(partemp,[2,len(self.ref),len(self.tau),-1]) self.npar = par.shape[3] elif sp.ndim == 2: applypartime = lambda tt:param(sp[tt,:],wvl) if useezmap: par = np.array(zmap(applypartime,xrange(len(self.utc)),ncpu=2,progress=True)) else: part = map(applypartime,xrange(len(self.utc))) par = np.array(part) self.npar = par.shape[1] else: raise LookupError self.par = par return
def build_std(self): """ Function that creates a set of uncertainty for each parameter. Currently just uses white noise (gaussian) """ from Sp_parameters import param meansp = self.mean() stdsp = self.std() num_noise = 200 noise = np.random.normal(1,0.005,(num_noise,self.wvl.size)) # add 0.5% variance to signal at all wavelengths # should be at every sp in utc, but for now, use mean sp sp_arr = meansp*noise #import code; code.interact(local=locals()) par_noisy = np.array(map(lambda tt:param(sp_arr[tt,:],self.wvl),xrange(num_noise))) notaxis = tuple(np.where(par_noisy.shape != self.npar)[0]) stdpar = np.nanstd(par_noisy,axis=notaxis) self.stdpar = stdpar return stdpar