Animating PUNCH data#

How to animate PUNCH data using built-in plotting tools

First we’ll load a set of libraries. This is minimal, but will give us the tools to query a sample of data to download and animate.

from datetime import datetime

from sunpy.net import Fido, attrs

from punchbowl.data.visualize import animate_punch

Next we’ll query a sample of data to animate. Note that you can modify the time range, the product code, and the data version code.

start_time, end_time = datetime(2025, 10, 31, 2, 0, 0), datetime(2025, 10, 31, 3, 0, 0)
product_code = "L3_CIM"
version_code = "v0i"

result = Fido.search(
                attrs.Time(start_time, end_time),
                attrs.Source("PUNCH-MOSAIC"),
                attrs.Instrument("Unpolarized")
            )

result = result[0][[i for i, r in enumerate(result[0]['fileid']) if product_code in r and version_code in r]]

result
VSOQueryResponseTable length=8
Start TimeEnd TimeSourceInstrumentProviderPhysobsExtent XExtent YExtent WidthExtent LengthExtent TypeSize
Mibyte
TimeTimestr12str11str10str9str1str1str17str16str6float64
2025-10-31 02:00:29.0002025-10-31 02:00:29.000PUNCH-MOSAICUnpolarizedSDAC_PUNCHintensity000.72000002861022992.1600036621094CORONA15.57617
2025-10-31 02:08:29.0002025-10-31 02:08:29.000PUNCH-MOSAICUnpolarizedSDAC_PUNCHintensity000.72000002861022992.1600036621094CORONA15.6084
2025-10-31 02:16:29.0002025-10-31 02:16:29.000PUNCH-MOSAICUnpolarizedSDAC_PUNCHintensity000.72000002861022992.1600036621094CORONA15.59473
2025-10-31 02:24:29.0002025-10-31 02:24:29.000PUNCH-MOSAICUnpolarizedSDAC_PUNCHintensity000.72000002861022992.1600036621094CORONA15.61719
2025-10-31 02:32:29.0002025-10-31 02:32:29.000PUNCH-MOSAICUnpolarizedSDAC_PUNCHintensity000.72000002861022992.1600036621094CORONA15.60059
2025-10-31 02:40:29.0002025-10-31 02:40:29.000PUNCH-MOSAICUnpolarizedSDAC_PUNCHintensity000.72000002861022992.1600036621094CORONA15.57324
2025-10-31 02:48:29.0002025-10-31 02:48:29.000PUNCH-MOSAICUnpolarizedSDAC_PUNCHintensity000.72000002861022992.1600036621094CORONA10.68652
2025-10-31 02:56:29.0002025-10-31 02:56:29.000PUNCH-MOSAICUnpolarizedSDAC_PUNCHintensity000.72000002861022992.1600036621094CORONA15.53711


The resulting files can then be downloaded.

files = Fido.fetch(result)
Files Downloaded:   0%|          | 0/8 [00:00<?, ?file/s]

PUNCH_L3_CIM_20251031020029_v0i.fits:   0%|          | 0.00/16.3M [00:00<?, ?B/s]


PUNCH_L3_CIM_20251031020829_v0i.fits:   0%|          | 0.00/16.4M [00:00<?, ?B/s]




PUNCH_L3_CIM_20251031022429_v0i.fits:   0%|          | 0.00/16.4M [00:00<?, ?B/s]





PUNCH_L3_CIM_20251031023229_v0i.fits:   0%|          | 0.00/16.4M [00:00<?, ?B/s]



PUNCH_L3_CIM_20251031021629_v0i.fits:   0%|          | 0.00/16.4M [00:00<?, ?B/s]


PUNCH_L3_CIM_20251031020829_v0i.fits:   0%|          | 1.02k/16.4M [00:00<27:41, 9.85kB/s]

PUNCH_L3_CIM_20251031020029_v0i.fits:   0%|          | 1.02k/16.3M [00:00<28:37, 9.51kB/s]




PUNCH_L3_CIM_20251031022429_v0i.fits:   0%|          | 16.7k/16.4M [00:00<01:40, 163kB/s]



PUNCH_L3_CIM_20251031021629_v0i.fits:   0%|          | 1.02k/16.4M [00:00<27:12, 10.0kB/s]





PUNCH_L3_CIM_20251031023229_v0i.fits:   0%|          | 8.85k/16.4M [00:00<03:25, 79.5kB/s]


PUNCH_L3_CIM_20251031020829_v0i.fits:   8%|▊         | 1.27M/16.4M [00:00<00:02, 7.33MB/s]




PUNCH_L3_CIM_20251031022429_v0i.fits:  10%|▉         | 1.62M/16.4M [00:00<00:01, 9.42MB/s]



PUNCH_L3_CIM_20251031021629_v0i.fits:   9%|▊         | 1.39M/16.4M [00:00<00:01, 7.96MB/s]

PUNCH_L3_CIM_20251031020029_v0i.fits:   8%|▊         | 1.34M/16.3M [00:00<00:02, 7.17MB/s]





PUNCH_L3_CIM_20251031023229_v0i.fits:  10%|▉         | 1.56M/16.4M [00:00<00:01, 8.35MB/s]



PUNCH_L3_CIM_20251031021629_v0i.fits:  20%|██        | 3.30M/16.4M [00:00<00:01, 12.9MB/s]


PUNCH_L3_CIM_20251031020829_v0i.fits:  20%|██        | 3.33M/16.4M [00:00<00:01, 12.6MB/s]




PUNCH_L3_CIM_20251031022429_v0i.fits:  23%|██▎       | 3.73M/16.4M [00:00<00:00, 13.9MB/s]

PUNCH_L3_CIM_20251031020029_v0i.fits:  20%|██        | 3.27M/16.3M [00:00<00:01, 12.2MB/s]





PUNCH_L3_CIM_20251031023229_v0i.fits:  22%|██▏       | 3.59M/16.4M [00:00<00:00, 13.3MB/s]


PUNCH_L3_CIM_20251031020829_v0i.fits:  32%|███▏      | 5.29M/16.4M [00:00<00:00, 15.3MB/s]




PUNCH_L3_CIM_20251031022429_v0i.fits:  35%|███▍      | 5.66M/16.4M [00:00<00:00, 15.9MB/s]





PUNCH_L3_CIM_20251031023229_v0i.fits:  35%|███▌      | 5.76M/16.4M [00:00<00:00, 16.5MB/s]



PUNCH_L3_CIM_20251031021629_v0i.fits:  35%|███▌      | 5.78M/16.4M [00:00<00:00, 16.3MB/s]

PUNCH_L3_CIM_20251031020029_v0i.fits:  34%|███▍      | 5.61M/16.3M [00:00<00:00, 15.5MB/s]


PUNCH_L3_CIM_20251031020829_v0i.fits:  45%|████▌     | 7.37M/16.4M [00:00<00:00, 17.1MB/s]




PUNCH_L3_CIM_20251031022429_v0i.fits:  48%|████▊     | 7.86M/16.4M [00:00<00:00, 18.0MB/s]





PUNCH_L3_CIM_20251031023229_v0i.fits:  49%|████▉     | 8.00M/16.4M [00:00<00:00, 18.3MB/s]



PUNCH_L3_CIM_20251031021629_v0i.fits:  48%|████▊     | 7.78M/16.4M [00:00<00:00, 17.3MB/s]

PUNCH_L3_CIM_20251031020029_v0i.fits:  48%|████▊     | 7.83M/16.3M [00:00<00:00, 17.4MB/s]


PUNCH_L3_CIM_20251031020829_v0i.fits:  60%|██████    | 9.88M/16.4M [00:00<00:00, 18.6MB/s]




PUNCH_L3_CIM_20251031022429_v0i.fits:  63%|██████▎   | 10.4M/16.4M [00:00<00:00, 19.0MB/s]





PUNCH_L3_CIM_20251031023229_v0i.fits:  65%|██████▍   | 10.6M/16.4M [00:00<00:00, 19.4MB/s]



PUNCH_L3_CIM_20251031021629_v0i.fits:  62%|██████▏   | 10.2M/16.4M [00:00<00:00, 18.2MB/s]

PUNCH_L3_CIM_20251031020029_v0i.fits:  63%|██████▎   | 10.4M/16.3M [00:00<00:00, 18.6MB/s]


PUNCH_L3_CIM_20251031020829_v0i.fits:  77%|███████▋  | 12.6M/16.4M [00:00<00:00, 21.3MB/s]




PUNCH_L3_CIM_20251031022429_v0i.fits:  79%|███████▊  | 12.9M/16.4M [00:00<00:00, 21.0MB/s]





PUNCH_L3_CIM_20251031023229_v0i.fits:  79%|███████▉  | 13.0M/16.4M [00:00<00:00, 20.9MB/s]



PUNCH_L3_CIM_20251031021629_v0i.fits:  78%|███████▊  | 12.8M/16.4M [00:00<00:00, 20.5MB/s]

PUNCH_L3_CIM_20251031020029_v0i.fits:  80%|████████  | 13.1M/16.3M [00:00<00:00, 21.3MB/s]


PUNCH_L3_CIM_20251031020829_v0i.fits:  90%|█████████ | 14.7M/16.4M [00:00<00:00, 21.1MB/s]




PUNCH_L3_CIM_20251031022429_v0i.fits:  92%|█████████▏| 15.0M/16.4M [00:00<00:00, 20.7MB/s]





PUNCH_L3_CIM_20251031023229_v0i.fits:  92%|█████████▏| 15.1M/16.4M [00:00<00:00, 20.7MB/s]



PUNCH_L3_CIM_20251031021629_v0i.fits:  92%|█████████▏| 15.0M/16.4M [00:00<00:00, 20.9MB/s]

PUNCH_L3_CIM_20251031020029_v0i.fits:  95%|█████████▌| 15.5M/16.3M [00:00<00:00, 22.1MB/s]


















Files Downloaded:  12%|█▎        | 1/8 [00:00<00:06,  1.04file/s]






PUNCH_L3_CIM_20251031024829_v0i.fits:   0%|          | 0.00/11.2M [00:00<?, ?B/s]





PUNCH_L3_CIM_20251031025629_v0i.fits:   0%|          | 0.00/16.3M [00:00<?, ?B/s]



PUNCH_L3_CIM_20251031024029_v0i.fits:   0%|          | 0.00/16.3M [00:00<?, ?B/s]




PUNCH_L3_CIM_20251031024829_v0i.fits:   4%|▍         | 472k/11.2M [00:00<00:02, 4.64MB/s]





PUNCH_L3_CIM_20251031025629_v0i.fits:   3%|▎         | 448k/16.3M [00:00<00:03, 4.43MB/s]



PUNCH_L3_CIM_20251031024029_v0i.fits:   2%|▏         | 352k/16.3M [00:00<00:04, 3.52MB/s]




PUNCH_L3_CIM_20251031024829_v0i.fits:  36%|███▌      | 4.02M/11.2M [00:00<00:00, 22.3MB/s]





PUNCH_L3_CIM_20251031025629_v0i.fits:  24%|██▎       | 3.83M/16.3M [00:00<00:00, 21.4MB/s]



PUNCH_L3_CIM_20251031024029_v0i.fits:  21%|██        | 3.38M/16.3M [00:00<00:00, 19.2MB/s]




PUNCH_L3_CIM_20251031024829_v0i.fits:  68%|██████▊   | 7.58M/11.2M [00:00<00:00, 28.0MB/s]





PUNCH_L3_CIM_20251031025629_v0i.fits:  45%|████▌     | 7.38M/16.3M [00:00<00:00, 27.6MB/s]



PUNCH_L3_CIM_20251031024029_v0i.fits:  43%|████▎     | 6.94M/16.3M [00:00<00:00, 26.3MB/s]




PUNCH_L3_CIM_20251031024829_v0i.fits:  97%|█████████▋| 10.9M/11.2M [00:00<00:00, 29.6MB/s]





PUNCH_L3_CIM_20251031025629_v0i.fits:  69%|██████▊   | 11.2M/16.3M [00:00<00:00, 31.4MB/s]








PUNCH_L3_CIM_20251031024029_v0i.fits:  66%|██████▌   | 10.8M/16.3M [00:00<00:00, 30.9MB/s]
Files Downloaded:  75%|███████▌  | 6/8 [00:01<00:00,  4.86file/s]









PUNCH_L3_CIM_20251031024029_v0i.fits: 100%|█████████▉| 16.3M/16.3M [00:00<00:00, 38.9MB/s]




Files Downloaded: 100%|██████████| 8/8 [00:01<00:00,  6.49file/s]
Files Downloaded: 100%|██████████| 8/8 [00:01<00:00,  5.11file/s]

That file list is then passed into the animator function, along with an output filename.

animate_punch(files, output_path="PUNCH_CIM.mp4")
  0%|          | 0/8 [00:00<?, ?it/s]
 12%|█▎        | 1/8 [00:04<00:33,  4.76s/it]
 25%|██▌       | 2/8 [00:04<00:12,  2.08s/it]
 38%|███▊      | 3/8 [00:08<00:13,  2.77s/it]
 50%|█████     | 4/8 [00:08<00:07,  1.82s/it]
 62%|██████▎   | 5/8 [00:12<00:07,  2.48s/it]
 75%|███████▌  | 6/8 [00:12<00:03,  1.78s/it]
 88%|████████▊ | 7/8 [00:16<00:02,  2.41s/it]
100%|██████████| 8/8 [00:17<00:00,  1.89s/it]
100%|██████████| 8/8 [00:17<00:00,  2.18s/it]

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

Gallery generated by Sphinx-Gallery