[{"data":1,"prerenderedAt":45},["ShallowReactive",2],{"analysis-playbook-hinode-sot-sp-level0-map":3},{"@context":4,"@type":5,"name":6,"description":7,"proficiencyLevel":8,"dependencies":9,"programmingLanguage":15,"keywords":16,"citation":24,"about":40,"articleBody":44},"https:\u002F\u002Fschema.org","TechArticle","Hinode\u002FSOT-SP Level-0 Map Visualization","Visualize Hinode Solar Optical Telescope Spectro-Polarimeter (SOT\u002FSP) Level-0 map data. Lists scan maps by date from DARTS, reads the 2D spatial-map FITS product, and displays intensity images with WCS coordinates using matplotlib or sunpy.","beginner",[10,11,12,13,14],"sunpy","astropy","matplotlib","numpy","requests","Python",[17,18,19,20,21,22,23],"Hinode","SOT","Solar Optical Telescope","spectropolarimeter","photosphere","magnetic field","FITS",[25,29,33,36],{"@type":26,"url":27,"name":28},"WebPage","https:\u002F\u002Fdarts.isas.jaxa.jp\u002Fdatasets\u002Fdarts:hinode-sot-sp-level0-map\u002F","Hinode SOT-SP Level-0 Map dataset at DARTS",{"@type":30,"url":31,"name":32},"ScholarlyArticle","https:\u002F\u002Fdoi.org\u002F10.1007\u002Fs11207-007-9014-6","The Hinode (Solar-B) Mission: An Overview",{"@type":30,"url":34,"name":35},"https:\u002F\u002Fdoi.org\u002F10.1007\u002Fs11207-008-9174-z","The Solar Optical Telescope for the Hinode Mission: An Overview",{"@type":37,"url":38,"name":39},"SoftwareApplication","https:\u002F\u002Fsunpy.org\u002F","SunPy",[41],{"@type":42,"name":43},"Dataset","darts:hinode-sot-sp-level0-map","## Hinode\u002FSOT-SP Level-0 Map Visualization\n\nHinode Solar Optical Telescope Spectro-Polarimeter (SOT\u002FSP) Level-0 map data are 2D spatial intensity maps\nderived from raw spectropolarimetric scans of the solar photosphere (2006–present).\nEach file covers one raster scan and records the total intensity summed over the Fe I 630 nm spectral region.\nThe dataset page is at [DARTS](https:\u002F\u002Fdarts.isas.jaxa.jp\u002Fdatasets\u002Fdarts:hinode-sot-sp-level0-map\u002F).\n\n---\n\n### Data Files\n\nFiles are organized by observation start time under:\n\n```\nhttps:\u002F\u002Fdata.darts.isas.jaxa.jp\u002Fpub\u002Fhinode\u002Fdarts\u002Fspmap\u002Flevel0\u002F{YYYY}\u002F{MM}\u002F{DD}\u002F\n```\n\nEach scan map consists of a FITS image and a companion text file:\n\n```\nsprsf{YYYYMMDD}_{HHMMSS}_{SEQNUM}.fits   ← 2D intensity map\nsprsf{YYYYMMDD}_{HHMMSS}_{SEQNUM}.txt    ← list of constituent raw SP4D files\n```\n\nThe FITS image has dimensions `NAXIS1 × NAXIS2` = scan steps × slit pixels\n(typically on the order of a few hundred to ~2000 × 512 pixels at ~0.15 arcsec\u002Fpixel).\n\n#### Key FITS header keywords\n\n| Keyword    | Example value               | Description |\n|------------|-----------------------------|-------------|\n| `DATE_OBS` | `2017-10-12T00:46:36.936`   | Observation start time (UTC) |\n| `DATE_END` | `2017-10-12T03:40:15.498`   | Observation end time (UTC) |\n| `XCEN`     | `138.4`                     | FOV center Solar-X (arcsec) |\n| `YCEN`     | `-722.0`                    | FOV center Solar-Y (arcsec) |\n| `FOVX`     | `297.4`                     | Field of view in X (arcsec) |\n| `FOVY`     | `81.2`                      | Field of view in Y (arcsec) |\n| `CDELT1`   | `0.1476`                    | Step size in X (arcsec\u002Fpixel) |\n| `CDELT2`   | `0.1585`                    | Pixel scale in Y (arcsec\u002Fpixel) |\n| `TR_MODE`  | `TR3`                       | Transfer mode |\n| `SPNINT`   | `6`                         | Number of integrations summed |\n| `DATA_LEV` | `0.1`                       | Processing level |\n\n---\n\n### Visualization with Python\n\n#### Requirements\n\n```\npip install \"sunpy[map]\" astropy matplotlib numpy requests\n```\n\n#### Helper functions\n\n```python\nimport re\nimport requests\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom astropy.io import fits\nfrom astropy.utils.data import download_file\n\nBASE = \"https:\u002F\u002Fdata.darts.isas.jaxa.jp\u002Fpub\u002Fhinode\u002Fdarts\u002Fspmap\u002Flevel0\"\n\ndef list_sot_sp_files(year, month, day):\n    \"\"\"Return list of (fits_url, txt_url) tuples for a given date.\"\"\"\n    date_url = f\"{BASE}\u002F{year:04d}\u002F{month:02d}\u002F{day:02d}\u002F\"\n    resp = requests.get(date_url, timeout=30, verify=False)\n    if resp.status_code != 200:\n        return []\n    names = re.findall(r'href=\"(sprsf\\w+\\.fits)\"', resp.text)\n    return [(date_url + n, date_url + n.replace(\".fits\", \".txt\")) for n in names]\n```\n\n#### Example 1: Display a single scan map with matplotlib\n\n```python\npairs = list_sot_sp_files(2017, 10, 12)\nprint(f\"{len(pairs)} scan maps found\")\n\nfits_url, _ = pairs[0]\nlocal = download_file(fits_url, cache=True, allow_insecure=True)\n\nwith fits.open(local) as hdul:\n    image = hdul[0].data.astype(float)\n    header = hdul[0].header\n\nprint(f\"Date:  {header['DATE_OBS']}  →  {header['DATE_END']}\")\nprint(f\"Center: ({header['XCEN']:.1f}\\\", {header['YCEN']:.1f}\\\")\")\nprint(f\"FOV:   {header['FOVX']:.1f}\\\" × {header['FOVY']:.1f}\\\"\")\nprint(f\"Shape: {image.shape}  ({header['CDELT1']:.4f}\\\"\u002Fpx × {header['CDELT2']:.4f}\\\"\u002Fpx)\")\n\n# Build simple extent (arcsec)\nny, nx = image.shape\ndx, dy = header['CDELT1'], header['CDELT2']\nxcen, ycen = header['XCEN'], header['YCEN']\nextent = [xcen - nx\u002F2*dx, xcen + nx\u002F2*dx,\n          ycen - ny\u002F2*dy, ycen + ny\u002F2*dy]\n\nvmin, vmax = np.percentile(image, [1, 99])\n\nfig, ax = plt.subplots(figsize=(10, 4))\nim = ax.imshow(image, origin=\"lower\", cmap=\"gray\",\n               vmin=vmin, vmax=vmax, extent=extent, aspect=\"equal\")\nfig.colorbar(im, ax=ax, label=\"Intensity (raw counts)\")\nax.set_xlabel(\"Solar-X (arcsec)\")\nax.set_ylabel(\"Solar-Y (arcsec)\")\nax.set_title(f\"Hinode\u002FSOT-SP  {header['DATE_OBS'][:19]}\")\nplt.tight_layout()\nplt.savefig(\"hinode_sot_sp_map.png\", dpi=150, bbox_inches=\"tight\")\nplt.close()\n```\n\n#### Example 2: Display with sunpy.map (WCS-aware)\n\nsunpy can load SOT-SP map FITS files and apply helioprojective coordinates automatically.\n\n```python\nimport sunpy.map\n\nfits_url, _ = list_sot_sp_files(2017, 10, 12)[0]\nlocal = download_file(fits_url, cache=True, allow_insecure=True)\n\nsmap = sunpy.map.Map(local)\nprint(f\"Date: {smap.date}\")\nprint(f\"Scale: {smap.scale[0]:.4f}\u002Fpix, {smap.scale[1]:.4f}\u002Fpix\")\n\nfig = plt.figure(figsize=(10, 4))\nax = fig.add_subplot(projection=smap)\nsmap.plot(axes=ax, cmap=\"gray\")\nsmap.draw_limb(axes=ax)\nsmap.draw_grid(axes=ax)\nplt.title(f\"Hinode\u002FSOT-SP  {smap.date}\")\nplt.tight_layout()\nplt.savefig(\"hinode_sot_sp_sunpy.png\", dpi=150, bbox_inches=\"tight\")\nplt.close()\n```\n\n#### Example 3: Browse multiple scan maps as a thumbnail grid\n\n```python\npairs = list_sot_sp_files(2017, 10, 12)\nstep = max(1, len(pairs) \u002F\u002F 6)\nselected = pairs[::step][:6]\n\nfig, axes = plt.subplots(2, 3, figsize=(14, 6))\nfor ax, (fits_url, _) in zip(axes.flat, selected):\n    local = download_file(fits_url, cache=True, allow_insecure=True)\n    with fits.open(local) as hdul:\n        image = hdul[0].data.astype(float)\n        t = hdul[0].header['DATE_OBS'][11:19]\n    vmin, vmax = np.percentile(image, [1, 99])\n    ax.imshow(image, origin=\"lower\", cmap=\"gray\", vmin=vmin, vmax=vmax, aspect=\"auto\")\n    ax.set_title(t, fontsize=9)\n    ax.set_axis_off()\n\nfig.suptitle(\"Hinode\u002FSOT-SP 2017-10-12 (sample)\")\nplt.tight_layout()\nplt.savefig(\"hinode_sot_sp_grid.png\", dpi=150, bbox_inches=\"tight\")\nplt.close()\n```\n\n---\n\n### Notes\n\n- These are Level-0 map products generated at DARTS from raw SP4D telemetry files. The companion `.txt` file lists the constituent raw files for each scan.\n- The intensity values are raw uncalibrated counts. For polarimetric science (Stokes I\u002FQ\u002FU\u002FV, vector magnetic fields), use the Level-1 or Level-2 data products.\n- The pixel scale (~0.15 arcsec\u002Fpixel) gives much finer spatial resolution than XRT (~8 arcsec\u002Fpixel), suited for studying photospheric magnetic structures.\n- The `SPNINT` keyword records how many on-chip integrations were summed per slit position.\n- SSL certificate verification may fail for `data.darts.isas.jaxa.jp`; pass `verify=False` (requests) or `allow_insecure=True` (astropy) as a workaround.\n\n---\n\n### Acknowledgement\n\nWhen using this data in publications, please follow the [Hinode data use guidelines](https:\u002F\u002Fdarts.isas.jaxa.jp\u002Fmissions\u002Fhinode\u002Fguidelines.html) and cite:\n\n- Kosugi, T. et al. (2007), Sol. Phys., 243, 3. [doi:10.1007\u002Fs11207-007-9014-6](https:\u002F\u002Fdoi.org\u002F10.1007\u002Fs11207-007-9014-6) — Hinode mission\n- Tsuneta, S. et al. (2008), Sol. Phys., 249, 167. [doi:10.1007\u002Fs11207-008-9174-z](https:\u002F\u002Fdoi.org\u002F10.1007\u002Fs11207-008-9174-z) — SOT instrument\n",1780296758155]