Submaps and Cropping

In this example we demonstrate how to get a submap of a map.

Start by importing the necessary modules.

from __future__ import print_function, division

import astropy.units as u
from astropy.coordinates import SkyCoord

import matplotlib.pyplot as plt

Sunpy sample data contains a number of suitable maps, where the returns the location of the given FITS file.

swap_map =

This has resolution and ranges of:



PixelPair(x=<Quantity 1024. pix>, y=<Quantity 1024. pix>)
[[0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]]

To find out more specifics about this map and the instrument used, check it’s metatdata:



MetaDict([('simple', True), ('bitpix', 16), ('naxis', 2), ('naxis1', 1024), ('naxis2', 1024), ('comment', '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------$Id: swap_fits_template 3732 2010-09-28 20:42:23Z bogdan $------------------------------------------------------------------------------------------------------------------------------------------------This is a level-1 SWAP FITS file produced by p2sw_prep v1.3 at the Royal  Observatory of Belgium. If you have difficulty with this file or wish  to make suggestions for improvements, please contact the SWAP  Instrument Team via email at'), ('filename', 'swap_lv1_20110607_063329.fits'), ('file_tmr', 'swap_00823959642982_2d12fa4a.fits'), ('file_raw', 'BINSWAP201106070633430000335466PROCESSED'), ('file_tar', 'BINSWAP_4818_SVA1_2011.06.07T09.40.44.tar'), ('date', '2011-11-22T19:48:23'), ('date-obs', '2011-06-07T06:33:29.759'), ('level', 1), ('creator', 'P2SW_PREP.PRO v1.3'), ('origin', 'ROB'), ('telescop', 'PROBA2'), ('instrume', 'SWAP'), ('object', 'Sun EUV'), ('filter', 'Al'), ('detector', 'SWAP'), ('wavelnth', 174), ('obs_mode', 'Variable off-pointing'), ('cap_mode', 'CDS'), ('exptime', 10.0), ('bscale', 0.00625), ('bzero', 204.8), ('bunit', 'DN/s/pixel'), ('datamin', 0.0), ('datamax', 368.088), ('swavint', 13.4808), ('firstrow', 1), ('last_row', 1024), ('firstcol', 1), ('last_col', 1024), ('rebin', 'off'), ('wcsname', 'Helioprojective-cartesian'), ('ctype1', 'HPLN-TAN'), ('ctype2', 'HPLT-TAN'), ('cunit1', 'arcsec'), ('cunit2', 'arcsec'), ('cd1_1', 3.16227), ('cd1_2', 0.0), ('cd2_1', 0.0), ('cd2_2', 3.16227), ('cdelt1', 3.16226783969), ('cdelt2', 3.16226783969), ('crval1', 0.0), ('crval2', 0.0), ('crpix1', 512.5), ('crpix2', 512.5), ('lonpole', 180.0), ('crota1', 0.0), ('crota2', 0.0), ('swxcen', 478.45), ('swycen', 534.28), ('dtplar1', 365.0), ('dtplar2', 2000.0), ('p2_x0', 0.0124005594716), ('p2_y0', 0.0253841016749), ('p2_roll', 179.998572874), ('solar_ep', 7.25187694733), ('hglt_obs', 0.0340964722021), ('hgln_obs', -0.000849540811517), ('rsun_arc', 945.587958879), ('dsun_obs', 151820143333.0), ('heex_obs', 151820143176.0), ('heey_obs', -3056074.7792), ('heez_obs', -6183475.65411), ('gsex_obs', -1667474.1514), ('gsey_obs', 3056074.77919), ('gsez_obs', -6183475.6541), ('los_alt', 531927.560994), ('trapprot', 0.0), ('trapelec', 2.45), ('geod_alt', 733468.040583), ('geod_lat', -58.3028506576), ('geod_lon', 160.297951898), ('temp1det', 2.629999), ('temp2det', 2.629999), ('ttemp1', '2011-06-07T06:33:06.000'), ('ttemp2', '2011-06-07T06:33:36.000'), ('tempdark', 2.629999), ('is_proc', 1), ('trantime', 823959642982.0), ('sacqtime', 823959415264.0), ('eacqtime', 823959642982.0), ('lang_rot', 1.0), ('pav_rot0', 0.0), ('pav_rot1', 0.0), ('hasstdby', 0), ('readrdiv', 0), ('pga_offs', 59), ('pga_gain', 1), ('led_pow', 'off'), ('led_sel', 'a'), ('hasblack', 4), ('hasoffst', 11), ('artefx', 'on'), ('recoding', 'fixed'), ('recnum', 3600), ('recbias', 10), ('compress', 'jpeg'), ('lzwdecor', 'off'), ('pn', 131), ('sizcompi', 664256), ('nprescr', 0), ('npreslzw', 0), ('checksum', 'J9lTK7lRJ7lRJ7lR'), ('datasum', '3949782845'), ('history', 'SWTMR 10448SWEDG 10994FITSHEAD2STRUCT run at: Tue Nov 22 19:48:16 2011p2sw_hdrchk v1.3  Computed detector temp.: 2.6299990 Celsiusp2sw_pmcdiv v1.3  Reverted wrt swap_pmc_20100308_164500.fitsp2sw_pixrep v1.3  Replaced wrt swap_satcds_20100113_152800.fitsp2sw_drksub v1.3  Subtracted modeled dark with coefficients inp2sw_drksub v1.3 usingp2sw_drksub v1.3   T=275.78 K, dt=10.0000 sp2sw_pmcrep v1.3  Reverted wrt swap_pmc_20100308_164500.fitsp2sw_ffcorr v1.3  Flat-field: swap_flatcds_20100308_164500.fitsp2sw_despike v1.3  Despiked at the 6.0-sigma level (7061 pix)p2sw_imgcor v1.3  Image centred on solar disk centrep2sw_imgcor v1.3  Image scaled to square pixelsp2sw_imgcor v1.3  Image rotated to solar North upp2sw_expnorm v1.3  Exposure time normalized data (DN/s/pixel)'), ('keycomments', {'DSUN_OBS': '[m]   s/c distance from Sun', 'TRAPPROT': '[ct/cm^2/s] AP-8 MAX > 10MeV @ 725km model', 'SIMPLE': 'Written by IDL:  Tue Nov 22 19:48:23 2011', 'OBJECT': 'object observed', 'COMPRESS': '(off,lzw,jpeg) on-board compression algorithm', 'FIRSTROW': 'first read-out detector row', 'GSEZ_OBS': '[m]   s/c Geocentric   Solar Ecliptic Z', 'PGA_OFFS': 'PGA offset', 'CD1_2': 'WCS coordinate description matrix', 'CD1_1': 'WCS coordinate description matrix', 'TRAPELEC': '[ct/cm^2/s] AE-8 MAX >  1MeV @ 725km model', 'CREATOR': 'FITS creation software', 'HGLT_OBS': '[deg] s/c heliographic latitude', 'DTPLAR1': '[s] predicted time to prev large angle rotation', 'DTPLAR2': '[s] predicted time to next large angle rotation', 'PAV_ROT0': 'commanded paving rotation component 0', 'READRDIV': 'read-out rate divider', 'DATASUM': 'data unit checksum updated 2011-11-22T19:48:23', 'CUNIT1': 'WCS axis X units', 'TEMPDARK': '[Celsius] temperature used in dark subtraction', 'CUNIT2': 'WCS axis Y units', 'GEOD_LON': '[deg] s/c sub-point longitude', 'ORIGIN': 'Royal Observatory of Belgium', 'P2_Y0': '[deg] s/c pitch', 'SWXCEN': '[pixel] axis 1 location of solar center in lv0', 'LEVEL': 'data processing level', 'SWYCEN': '[pixel] axis 2 location of solar center in lv0', 'IS_PROC': 'on-board image processing', 'LED_SEL': 'calibration LED selection', 'TEMP1DET': '[Celsius] detector temperature (SW HK T CF)', 'CTYPE2': 'WCS axis Y', 'CD2_1': 'WCS coordinate description matrix', 'GSEX_OBS': '[m]   s/c Geocentric   Solar Ecliptic X', 'CD2_2': 'WCS coordinate description matrix', 'DATAMIN': 'minimum valid physical value', 'ARTEFX': '(off,on,cosmic rays) on-board artefact removal', 'SOLAR_EP': '[deg] s/c ecliptic North to solar North angle', 'CHECKSUM': 'HDU checksum updated 2011-11-22T19:48:23', 'LED_POW': 'calibration LED power', 'NPRESCR': '# preserved pixels - cosmic rays', 'CRVAL2': '[arcsec] reference point WCS axis Y', 'CRPIX1': '[pixel] reference point axis 1', 'CRPIX2': '[pixel] reference point axis 2', 'CRVAL1': '[arcsec] reference point WCS axis X', 'CAP_MODE': '(DS,CDS) capture mode', 'TELESCOP': 'satellite name', 'TRANTIME': '[OBET] transferring time', 'WAVELNTH': '[Angstrom] bandpass peak response', 'LONPOLE': '[deg] native longitude of the celestial pole', 'HASBLACK': 'HAS detector black  level', 'HEEZ_OBS': '[m]   s/c Heliocentric Earth Ecliptic Z', 'DATAMAX': 'maximum valid physical value', 'CTYPE1': 'WCS axis X', 'BZERO': 'physical value for the array value 0', 'HASSTDBY': 'HAS detector standby mode', 'RSUN_ARC': '[arcsec] photospheric solar radius', 'EXPTIME': '[s] commanded exposure time', 'TEMP2DET': '[Celsius] detector temperature (SW HK T CF)', 'WCSNAME': 'aligned with solar North', 'RECODING': '(off,fixed,adaptive) on-board recoding', 'CDELT1': '[arcsec] average pixel scale along axis 1', 'CDELT2': '[arcsec] average pixel scale along axis 2', 'P2_ROLL': '[deg] s/c roll', 'P2_X0': '[deg] s/c yaw', 'SWAVINT': '[DN/s] average intensity in calibrated image', 'GEOD_LAT': '[deg] s/c sub-point geodetic latitude', 'NAXIS': 'number of data axes', 'DATE-OBS': 'UTC time of observation', 'GSEY_OBS': '[m]   s/c Geocentric   Solar Ecliptic Y', 'HASOFFST': 'HAS detector offset level', 'DATE': 'UTC time of FITS file creation', 'REBIN': 'on-board rebin (2x2 pixel average)', 'SACQTIME': '[OBET] start acquisition time', 'HGLN_OBS': '[deg] s/c heliographic longitude', 'FILENAME': 'FITS filename', 'FILE_RAW': 'raw telemetry filename', 'NPRESLZW': '# preserved pixels - LZW decorrelation', 'LZWDECOR': 'LZW decorrelation', 'CROTA2': '[deg] axis 2 to WCS rotation angle', 'CROTA1': '[deg] axis 1 to WCS rotation angle', 'RECNUM': 'recoding upper limit', 'PN': 'on-board priority number', 'EACQTIME': '[OBET] end   acquisition time', 'HEEY_OBS': '[m]   s/c Heliocentric Earth Ecliptic Y', 'RECBIAS': 'recoding lower limit', 'NAXIS1': 'length of data axis 1', 'NAXIS2': 'length of data axis 2', 'GEOD_ALT': '[m]   s/c WGS84 altitude', 'TTEMP2': 'UTC time of detector temp 2nd sample', 'TTEMP1': 'UTC time of detector temp 1st sample', 'OBS_MODE': 'sun_cen, fix_off, var_off, cme_track', 'PGA_GAIN': 'PGA gain', 'LANG_ROT': 'commanded large angle rotation component', 'LAST_ROW': 'last  read-out detector row', 'FILE_TMR': 'SWTMR filename', 'LAST_COL': 'last  read-out detector column', 'SIZCOMPI': 'size of on-board compressed image', 'BSCALE': 'ratio of physical to array value at 0 offset', 'INSTRUME': 'instrument name', 'HEEX_OBS': '[m]   s/c Heliocentric Earth Ecliptic X', 'FILTER': 'Aluminum filter', 'PAV_ROT1': 'commanded paving rotation component 1', 'LOS_ALT': '[m]   s/c LOS altitude (1000000=no atmosphere)', 'BITPIX': 'number of bits per data pixel', 'DETECTOR': 'HAS CMOS detector 1024x1024 pixels', 'FIRSTCOL': 'first read-out detector column', 'FILE_TAR': 'raw telemetry package', 'BUNIT': 'unit of physical value'}), ('waveunit', 'Angstrom'), ('obsrvtry', 'PROBA2')])

To crop the data you create a submap, specifying the top right and bottom left as SkyCoord objects.

top_right = SkyCoord(0*u.arcsec, -200 * u.arcsec, frame=swap_map.coordinate_frame)
bottom_left = SkyCoord(-900 * u.arcsec, -900 * u.arcsec, frame=swap_map.coordinate_frame)
swap_submap = swap_map.submap(bottom_left, top_right)
swap_submap.peek(draw_limb=True, draw_grid=True)

Total running time of the script: ( 0 minutes 0.526 seconds)

Gallery generated by Sphinx-Gallery