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 sunpy.map
import sunpy.data.sample
import matplotlib.pyplot as plt

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

swap_map = sunpy.map.Map(sunpy.data.sample.SWAP_LEVEL1_IMAGE)

This has resolution and ranges of:

print(swap_map.dimensions)
print(swap_map.data)

Out:

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:

print(swap_map.meta)

Out:

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 [email protected]-------------------------'), ('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   swap_dark_coefs_20110101_000000.save 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', {'PGA_OFFS': 'PGA offset', 'COMPRESS': '(off,lzw,jpeg) on-board compression algorithm', 'FILTER': 'Aluminum filter', 'LAST_ROW': 'last  read-out detector row', 'HASSTDBY': 'HAS detector standby mode', 'ARTEFX': '(off,on,cosmic rays) on-board artefact removal', 'PAV_ROT0': 'commanded paving rotation component 0', 'PAV_ROT1': 'commanded paving rotation component 1', 'P2_X0': '[deg] s/c yaw', 'TRANTIME': '[OBET] transferring time', 'DATE': 'UTC time of FITS file creation', 'WAVELNTH': '[Angstrom] bandpass peak response', 'CTYPE1': 'WCS axis X', 'FIRSTROW': 'first read-out detector row', 'BUNIT': 'unit of physical value', 'OBS_MODE': 'sun_cen, fix_off, var_off, cme_track', 'GSEY_OBS': '[m]   s/c Geocentric   Solar Ecliptic Y', 'CDELT2': '[arcsec] average pixel scale along axis 2', 'LEVEL': 'data processing level', 'TTEMP1': 'UTC time of detector temp 1st sample', 'HGLN_OBS': '[deg] s/c heliographic longitude', 'SWYCEN': '[pixel] axis 2 location of solar center in lv0', 'REBIN': 'on-board rebin (2x2 pixel average)', 'CUNIT2': 'WCS axis Y units', 'CROTA2': '[deg] axis 2 to WCS rotation angle', 'GEOD_LAT': '[deg] s/c sub-point geodetic latitude', 'GSEX_OBS': '[m]   s/c Geocentric   Solar Ecliptic X', 'CD2_2': 'WCS coordinate description matrix', 'LED_POW': 'calibration LED power', 'FILE_RAW': 'raw telemetry filename', 'LANG_ROT': 'commanded large angle rotation component', 'CRVAL2': '[arcsec] reference point WCS axis Y', 'DETECTOR': 'HAS CMOS detector 1024x1024 pixels', 'SOLAR_EP': '[deg] s/c ecliptic North to solar North angle', 'RECBIAS': 'recoding lower limit', 'GEOD_ALT': '[m]   s/c WGS84 altitude', 'FILE_TMR': 'SWTMR filename', 'CD2_1': 'WCS coordinate description matrix', 'FILE_TAR': 'raw telemetry package', 'NAXIS2': 'length of data axis 2', 'SWAVINT': '[DN/s] average intensity in calibrated image', 'DSUN_OBS': '[m]   s/c distance from Sun', 'EXPTIME': '[s] commanded exposure time', 'SWXCEN': '[pixel] axis 1 location of solar center in lv0', 'CTYPE2': 'WCS axis Y', 'TRAPELEC': '[ct/cm^2/s] AE-8 MAX >  1MeV @ 725km model', 'LONPOLE': '[deg] native longitude of the celestial pole', 'LAST_COL': 'last  read-out detector column', 'TEMP1DET': '[Celsius] detector temperature (SW HK T CF)', 'BITPIX': 'number of bits per data pixel', 'CROTA1': '[deg] axis 1 to WCS rotation angle', 'SIZCOMPI': 'size of on-board compressed image', 'DATASUM': 'data unit checksum updated 2011-11-22T19:48:23', 'LOS_ALT': '[m]   s/c LOS altitude (1000000=no atmosphere)', 'NPRESLZW': '# preserved pixels - LZW decorrelation', 'SACQTIME': '[OBET] start acquisition time', 'NPRESCR': '# preserved pixels - cosmic rays', 'CUNIT1': 'WCS axis X units', 'P2_Y0': '[deg] s/c pitch', 'DATAMAX': 'maximum valid physical value', 'HEEY_OBS': '[m]   s/c Heliocentric Earth Ecliptic Y', 'TELESCOP': 'satellite name', 'WCSNAME': 'aligned with solar North', 'ORIGIN': 'Royal Observatory of Belgium', 'NAXIS': 'number of data axes', 'SIMPLE': 'Written by IDL:  Tue Nov 22 19:48:23 2011', 'CD1_2': 'WCS coordinate description matrix', 'LED_SEL': 'calibration LED selection', 'CDELT1': '[arcsec] average pixel scale along axis 1', 'TTEMP2': 'UTC time of detector temp 2nd sample', 'HEEX_OBS': '[m]   s/c Heliocentric Earth Ecliptic X', 'LZWDECOR': 'LZW decorrelation', 'CRVAL1': '[arcsec] reference point WCS axis X', 'PN': 'on-board priority number', 'CRPIX2': '[pixel] reference point axis 2', 'IS_PROC': 'on-board image processing', 'TEMPDARK': '[Celsius] temperature used in dark subtraction', 'INSTRUME': 'instrument name', 'BZERO': 'physical value for the array value 0', 'OBJECT': 'object observed', 'RECNUM': 'recoding upper limit', 'HGLT_OBS': '[deg] s/c heliographic latitude', 'RECODING': '(off,fixed,adaptive) on-board recoding', 'HASOFFST': 'HAS detector offset level', 'BSCALE': 'ratio of physical to array value at 0 offset', 'DATAMIN': 'minimum valid physical value', 'TEMP2DET': '[Celsius] detector temperature (SW HK T CF)', 'HEEZ_OBS': '[m]   s/c Heliocentric Earth Ecliptic Z', 'DTPLAR2': '[s] predicted time to next large angle rotation', 'PGA_GAIN': 'PGA gain', 'FILENAME': 'FITS filename', 'DATE-OBS': 'UTC time of observation', 'GSEZ_OBS': '[m]   s/c Geocentric   Solar Ecliptic Z', 'HASBLACK': 'HAS detector black  level', 'RSUN_ARC': '[arcsec] photospheric solar radius', 'CRPIX1': '[pixel] reference point axis 1', 'CHECKSUM': 'HDU checksum updated 2011-11-22T19:48:23', 'FIRSTCOL': 'first read-out detector column', 'P2_ROLL': '[deg] s/c roll', 'EACQTIME': '[OBET] end   acquisition time', 'NAXIS1': 'length of data axis 1', 'TRAPPROT': '[ct/cm^2/s] AP-8 MAX > 10MeV @ 725km model', 'CREATOR': 'FITS creation software', 'CAP_MODE': '(DS,CDS) capture mode', 'DTPLAR1': '[s] predicted time to prev large angle rotation', 'CD1_1': 'WCS coordinate description matrix', 'READRDIV': 'read-out rate divider', 'GEOD_LON': '[deg] s/c sub-point longitude'}), ('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)
plt.tight_layout(pad=1.00)
plt.show()
../../../_images/sphx_glr_submaps_and_cropping_001.png

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

Gallery generated by Sphinx-Gallery