def calculate_em(self, wlen='171', dz=100, model=False): """ Calculate an approximation of the coronal EmissionMeasure using a given TemperatureMap object and a particular AIA channel. Parameters ---------- tmap : CoronaTemps.temperature.TemperatureMap A TemperatureMap instance containing coronal temperature data wlen : {'94' | '131' | '171' | '193' | '211' | '335'} AIA wavelength used to approximate the emission measure. '171', '193' and '211' are most likely to provide reliable results. Use of other channels is not recommended. """ # Load the appropriate temperature response function tresp = read('/imaps/holly/home/ajl7/CoronaTemps/aia_tresp') resp = tresp['resp{}'.format(wlen)] # Get some information from the TemperatureMap and set up filenames, etc tempdata = self.data.copy() tempdata[np.isnan(tempdata)] = 0.0 date = sunpy.time.parse_time(self.date) if not model: data_dir = self.data_dir fits_dir = path.join(data_dir, '{:%Y/%m/%d}/{}'.format(date, wlen)) filename = path.join(fits_dir, '*{0:%Y?%m?%d}?{0:%H?%M}*fits'.format(date)) if wlen == '94': filename = filename.replace('94', '094') # Load and appropriately process AIA data filelist = glob.glob(filename) if filelist == []: print 'AIA data not found :(' return aiamap = Map(filename) aiamap.data /= aiamap.exposure_time aiamap = aiaprep(aiamap) aiamap = aiamap.submap(self.xrange, self.yrange) else: fname = '/imaps/holly/home/ajl7/CoronaTemps/data/synthetic/{}/model.fits'.format(wlen) if wlen == '94': fname = fname.replace('94', '094') aiamap = Map(fname) # Create new Map and put EM values in it emmap = Map(self.data.copy(), self.meta.copy()) indices = np.round((tempdata - 4.0) / 0.05).astype(int) indices[indices < 0] = 0 indices[indices > 100] = 100 #print emmap.shape, indices.shape, tempdata.shape, aiamap.shape, resp.shape emmap.data = np.log10(aiamap.data / resp[indices]) #emmap.data = aiamap.data / resp[indices] emmapcubehelix = _cm.cubehelix(s=2.8, r=-0.7, h=1.4, gamma=1.0) cm.register_cmap(name='emhelix', data=emmapcubehelix) emmap.cmap = cm.get_cmap('emhelix') return emmap
def load_temp_responses(n_wlens=6, corrections=True): resp = np.zeros((n_wlens, 301)) try: tresp = read(home + 'aia_tresp') except IOError: tresp = read('/imaps/holly/home/ajl7/aia_tresp') resp[0, 80:181] = tresp['resp94'] resp[1, 80:181] = tresp['resp131'] resp[2, 80:181] = tresp['resp171'] resp[3, 80:181] = tresp['resp193'] resp[4, 80:181] = tresp['resp211'] resp[5, 80:181] = tresp['resp335'] if n_wlens > 6: resp[6, 80:181] = tresp['resp304'] if corrections: # Add empirical correction factor for 9.4nm response function below log(T)=6.3 # (see Aschwanden et al 2011) resp[0:126, 0] = resp[0:126, 0] * 6.7 return resp
def load_temp_responses(n_wlens=6, corrections=True): resp = np.zeros((n_wlens, 301)) try: tresp = read(home + 'aia_tresp') except IOError: tresp = read('/imaps/holly/home/ajl7/aia_tresp') resp[0, 80:181] = tresp['resp94'] resp[1, 80:181] = tresp['resp131'] resp[2, 80:181] = tresp['resp171'] resp[3, 80:181] = tresp['resp193'] resp[4, 80:181] = tresp['resp211'] resp[5, 80:181] = tresp['resp335'] if n_wlens > 6: resp[6, 80:181] = tresp['resp304'] if corrections: # Add empirical correction factor for 9.4nm response function below log(T)=6.3 # (see Aschwanden et al 2011) resp[0:126, 0] = resp[0:126, 0]*6.7 return resp
def load_temp_responses(n_wlens=6, corrections=True): resp = np.zeros((n_wlens, 301)) tresp = read(expanduser('~/CoronaTemps/aia_tresp')) resp[0, 80:181] = tresp['resp94'] resp[1, 80:181] = tresp['resp131'] resp[2, 80:181] = tresp['resp171'] resp[3, 80:181] = tresp['resp193'] resp[4, 80:181] = tresp['resp211'] resp[5, 80:181] = tresp['resp335'] if n_wlens > 6: resp[6, 80:181] = tresp['resp304'] if corrections: # Add empirical correction factor for 9.4nm response function below log(T)=6.3 # (see Aschwanden et al 2011) resp[0:126, 0] = resp[0:126, 0]*6.7 return resp
plt.colorbar(orientation="horizontal") diff_im = testarr - rotmap_test print "SunPy back rotation difference range: {!s}.".format(diff_im.max() - diff_im.min()) diff = fig.add_subplot(236) plt.imshow(diff_im, cmap=cm.coolwarm) diff.set_title("Difference between images") plt.colorbar(orientation="horizontal") plt.show() """ ========== Same test for IDL's rot() function. ========== """ idl_arrs = read("idl_fullrot_test") fig = plt.figure("Core IDL rot() function") original = fig.add_subplot(231) plt.imshow(idl_arrs["array"], cmap=cm.coolwarm) original.set_title("Original image") plt.colorbar(orientation="horizontal") rotated = fig.add_subplot(232) plt.imshow(idl_arrs["fullrot"], cmap=cm.coolwarm) rotated.set_title("Image rotated 360 degrees") plt.colorbar(orientation="horizontal") diff = fig.add_subplot(233) diff_im = idl_arrs["fullrot_diff"] print "IDL rot() full rotation difference range: {!s}.".format(diff_im.max() - diff_im.min()) plt.imshow(idl_arrs["fullrot_diff"], cmap=cm.coolwarm)