We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
AIA FITS headers have inaccurate HGS coordinates
AIA FITS headers apparently have inaccurate Heliographic Stonyhurst (HGS) coordinates (`HGLN_OBS` and `HGLT_OBS`).  For example, the distance from Earth center does not match the orbit radius.  We currently use these keywords to generate the `observer_coordinate` for an AIA map, so we provide an inaccurate observer location.

The headers also have Heliographic Aries Ecliptic (HAE) coordinates (`HAEX_OBS`, `HAEY_OBS`, and `HAEZ_OBS`), and the HAE coordinates are inconsistent with the HGS coordinates in the same header.  We have previously verified the accuracy of SunPy's transformation from HAE to HGS (e.g., https://github.com/sunpy/sunpy/issues/2445#issuecomment-364531159).   The HAE coordinates appear to be credible, and likely should be trusted over the HGS coordinates.

My recommendation is for `AIAMap` to override the generation of `observer_coordinate` to use the HAE coordinates.  Discuss.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `sunpy/map/sources/sdo.py`
Content:
```
1 """SDO Map subclass definitions"""
2 #pylint: disable=W0221,W0222,E1101,E1121
3 
4 __author__ = "Keith Hughitt"
5 __email__ = "keith.hughitt@nasa.gov"
6 
7 import matplotlib.pyplot as plt
8 
9 from astropy.visualization.mpl_normalize import ImageNormalize
10 from astropy.visualization import AsinhStretch
11 
12 from sunpy.map import GenericMap
13 from sunpy.map.sources.source_type import source_stretch
14 
15 __all__ = ['AIAMap', 'HMIMap']
16 
17 
18 class AIAMap(GenericMap):
19     """AIA Image Map.
20 
21     The Atmospheric Imaging Assembly is a set of four telescopes that employ
22     normal-incidence, multi-layer coated optics to provide narrow-band imaging
23     of the Sun. It provides high resolution full-disk images of the corona and
24     transition region up to 0.5 solar radii above the solar limb with 1.5
25     arcsecond angular resolution and 12-second temporal resolution. It observes
26     the Sun in the following seven extreme ultraviolet bandpasses: 94 A
27     (Fe XVIII), 131 A (Fe VIII, XXI), 171 A (Fe IX), 193 A (Fe XII, XXIV),
28     211 A (Fe XIV), 304 A (He II), 335 A (Fe XVI). One telescope observes
29     in the visible 1600 A (C IV) and the nearby continuun (1700 A).
30 
31     References
32     ----------
33     * `SDO Mission Page <https://sdo.gsfc.nasa.gov/>`_
34     * `Instrument Page <https://aia.lmsal.com>`_
35     * `Fits Header keywords <http://jsoc.stanford.edu/doc/keywords/AIA/AIA02840_A_AIA-SDO_FITS_Keyword_Documents.pdf>`_
36     * `Analysis Guide <https://www.lmsal.com/sdodocs/doc/dcur/SDOD0060.zip/zip/entry/>`_
37     * `Instrument Paper <https://doi.org/10.1007/s11207-011-9776-8>`_
38     * `wavelengths and temperature response reference <https://www.lmsal.com/sdodocs/doc/dcur/SDOD0060.zip/zip/entry/figures/aia_tel_resp.png>`_
39     """
40 
41     def __init__(self, data, header, **kwargs):
42         GenericMap.__init__(self, data, header, **kwargs)
43 
44         # Fill in some missing info
45         self.meta['detector'] = "AIA"
46         self._nickname = self.detector
47         self.plot_settings['cmap'] = plt.get_cmap(self._get_cmap_name())
48         self.plot_settings['norm'] = ImageNormalize(stretch=source_stretch(self.meta, AsinhStretch(0.01)))
49 
50     @property
51     def observatory(self):
52         """
53         Returns the observatory.
54         """
55         return self.meta['telescop'].split('/')[0]
56 
57     @classmethod
58     def is_datasource_for(cls, data, header, **kwargs):
59         """Determines if header corresponds to an AIA image"""
60         return header.get('instrume', '').startswith('AIA')
61 
62 
63 class HMIMap(GenericMap):
64     """HMI Image Map.
65 
66     HMI consists of a refracting telescope, a polarization selector,
67     an image stabilization system, a narrow band tunable filter
68     and two 4096 pixel CCD cameras. It observes the full solar disk in the Fe I
69     absorption line at 6173 Angstrom with a resolution of 1 arc-second.
70     HMI takes images in a sequence of tuning and polarizations at a 4-second
71     cadence for each camera. One camera is dedicated to a 45 s Doppler and
72     line-of-sight field sequence while the other to a 90 s vector field
73     sequence.
74 
75     References
76     ----------
77     * `SDO Mission Page <https://sdo.gsfc.nasa.gov/>`_
78     * `Instrument Page <http://hmi.stanford.edu>`_
79     * `Analysis Guide <http://hmi.stanford.edu/doc/magnetic/guide.pdf>`_
80     """
81     def __init__(self, data, header, **kwargs):
82 
83         GenericMap.__init__(self, data, header, **kwargs)
84 
85         self.meta['detector'] = "HMI"
86 #        self.meta['instrme'] = "HMI"
87 #        self.meta['obsrvtry'] = "SDO"
88         self._nickname = self.detector
89 
90     @property
91     def measurement(self):
92         """
93         Returns the measurement type.
94         """
95         return self.meta['content'].split(" ")[0].lower()
96 
97     @property
98     def observatory(self):
99         """
100         Returns the observatory.
101         """
102         return self.meta['telescop'].split('/')[0]
103 
104     @classmethod
105     def is_datasource_for(cls, data, header, **kwargs):
106         """Determines if header corresponds to an HMI image"""
107         return header.get('instrume', '').startswith('HMI')
108
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/sunpy/map/sources/sdo.py b/sunpy/map/sources/sdo.py
--- a/sunpy/map/sources/sdo.py
+++ b/sunpy/map/sources/sdo.py
@@ -6,6 +6,14 @@
 
 import matplotlib.pyplot as plt
 
+from astropy.coordinates import CartesianRepresentation, SkyCoord
+# Versions of Astropy that do not have HeliocentricMeanEcliptic have the same frame
+# with the incorrect name HeliocentricTrueEcliptic
+try:
+    from astropy.coordinates import HeliocentricMeanEcliptic
+except ImportError:
+    from astropy.coordinates import HeliocentricTrueEcliptic as HeliocentricMeanEcliptic
+import astropy.units as u
 from astropy.visualization.mpl_normalize import ImageNormalize
 from astropy.visualization import AsinhStretch
 
@@ -28,6 +36,13 @@
     211 A (Fe XIV), 304 A (He II), 335 A (Fe XVI). One telescope observes
     in the visible 1600 A (C IV) and the nearby continuun (1700 A).
 
+    Notes
+    -----
+    Observer location: The standard AIA FITS header provides the spacecraft location in multiple
+    coordinate systems, including Heliocentric Aries Ecliptic (HAE) and Heliographic Stonyhurst
+    (HGS).  SunPy uses the provided HAE coordinates due to accuracy concerns with the provided
+    HGS coordinates, but other software packages may make different choices.
+
     References
     ----------
     * `SDO Mission Page <https://sdo.gsfc.nasa.gov/>`_
@@ -47,6 +62,45 @@
         self.plot_settings['cmap'] = plt.get_cmap(self._get_cmap_name())
         self.plot_settings['norm'] = ImageNormalize(stretch=source_stretch(self.meta, AsinhStretch(0.01)))
 
+    @property
+    def observer_coordinate(self):
+        """
+        The Heliographic Stonyhurst Coordinate of the observer.
+
+        This coordinate is determined using the Heliocentric Aries Ecliptic (HAE) coordinates
+        in the header.
+        """
+        vector = CartesianRepresentation(self.meta['haex_obs'],
+                                         self.meta['haey_obs'],
+                                         self.meta['haez_obs'])
+        coord = SkyCoord(vector * u.m, frame=HeliocentricMeanEcliptic, obstime=self.date)
+        return coord.heliographic_stonyhurst
+
+    @property
+    def heliographic_latitude(self):
+        """Heliographic latitude."""
+        return self.observer_coordinate.lat
+
+    @property
+    def heliographic_longitude(self):
+        """Heliographic longitude."""
+        return self.observer_coordinate.lon
+
+    @property
+    def carrington_latitude(self):
+        """Carrington latitude."""
+        return self.observer_coordinate.heliographic_carrington.lat
+
+    @property
+    def carrington_longitude(self):
+        """Carrington longitude."""
+        return self.observer_coordinate.heliographic_carrington.lon
+
+    @property
+    def dsun(self):
+        """The observer distance from the Sun."""
+        return self.observer_coordinate.radius.to('m')
+
     @property
     def observatory(self):
         """

{"golden_diff": "diff --git a/sunpy/map/sources/sdo.py b/sunpy/map/sources/sdo.py\n--- a/sunpy/map/sources/sdo.py\n+++ b/sunpy/map/sources/sdo.py\n@@ -6,6 +6,14 @@\n \n import matplotlib.pyplot as plt\n \n+from astropy.coordinates import CartesianRepresentation, SkyCoord\n+# Versions of Astropy that do not have HeliocentricMeanEcliptic have the same frame\n+# with the incorrect name HeliocentricTrueEcliptic\n+try:\n+    from astropy.coordinates import HeliocentricMeanEcliptic\n+except ImportError:\n+    from astropy.coordinates import HeliocentricTrueEcliptic as HeliocentricMeanEcliptic\n+import astropy.units as u\n from astropy.visualization.mpl_normalize import ImageNormalize\n from astropy.visualization import AsinhStretch\n \n@@ -28,6 +36,13 @@\n     211 A (Fe XIV), 304 A (He II), 335 A (Fe XVI). One telescope observes\n     in the visible 1600 A (C IV) and the nearby continuun (1700 A).\n \n+    Notes\n+    -----\n+    Observer location: The standard AIA FITS header provides the spacecraft location in multiple\n+    coordinate systems, including Heliocentric Aries Ecliptic (HAE) and Heliographic Stonyhurst\n+    (HGS).  SunPy uses the provided HAE coordinates due to accuracy concerns with the provided\n+    HGS coordinates, but other software packages may make different choices.\n+\n     References\n     ----------\n     * `SDO Mission Page <https://sdo.gsfc.nasa.gov/>`_\n@@ -47,6 +62,45 @@\n         self.plot_settings['cmap'] = plt.get_cmap(self._get_cmap_name())\n         self.plot_settings['norm'] = ImageNormalize(stretch=source_stretch(self.meta, AsinhStretch(0.01)))\n \n+    @property\n+    def observer_coordinate(self):\n+        \"\"\"\n+        The Heliographic Stonyhurst Coordinate of the observer.\n+\n+        This coordinate is determined using the Heliocentric Aries Ecliptic (HAE) coordinates\n+        in the header.\n+        \"\"\"\n+        vector = CartesianRepresentation(self.meta['haex_obs'],\n+                                         self.meta['haey_obs'],\n+                                         self.meta['haez_obs'])\n+        coord = SkyCoord(vector * u.m, frame=HeliocentricMeanEcliptic, obstime=self.date)\n+        return coord.heliographic_stonyhurst\n+\n+    @property\n+    def heliographic_latitude(self):\n+        \"\"\"Heliographic latitude.\"\"\"\n+        return self.observer_coordinate.lat\n+\n+    @property\n+    def heliographic_longitude(self):\n+        \"\"\"Heliographic longitude.\"\"\"\n+        return self.observer_coordinate.lon\n+\n+    @property\n+    def carrington_latitude(self):\n+        \"\"\"Carrington latitude.\"\"\"\n+        return self.observer_coordinate.heliographic_carrington.lat\n+\n+    @property\n+    def carrington_longitude(self):\n+        \"\"\"Carrington longitude.\"\"\"\n+        return self.observer_coordinate.heliographic_carrington.lon\n+\n+    @property\n+    def dsun(self):\n+        \"\"\"The observer distance from the Sun.\"\"\"\n+        return self.observer_coordinate.radius.to('m')\n+\n     @property\n     def observatory(self):\n         \"\"\"\n", "issue": "AIA FITS headers have inaccurate HGS coordinates\nAIA FITS headers apparently have inaccurate Heliographic Stonyhurst (HGS) coordinates (`HGLN_OBS` and `HGLT_OBS`).  For example, the distance from Earth center does not match the orbit radius.  We currently use these keywords to generate the `observer_coordinate` for an AIA map, so we provide an inaccurate observer location.\r\n\r\nThe headers also have Heliographic Aries Ecliptic (HAE) coordinates (`HAEX_OBS`, `HAEY_OBS`, and `HAEZ_OBS`), and the HAE coordinates are inconsistent with the HGS coordinates in the same header.  We have previously verified the accuracy of SunPy's transformation from HAE to HGS (e.g., https://github.com/sunpy/sunpy/issues/2445#issuecomment-364531159).   The HAE coordinates appear to be credible, and likely should be trusted over the HGS coordinates.\r\n\r\nMy recommendation is for `AIAMap` to override the generation of `observer_coordinate` to use the HAE coordinates.  Discuss.\n", "before_files": [{"content": "\"\"\"SDO Map subclass definitions\"\"\"\n#pylint: disable=W0221,W0222,E1101,E1121\n\n__author__ = \"Keith Hughitt\"\n__email__ = \"keith.hughitt@nasa.gov\"\n\nimport matplotlib.pyplot as plt\n\nfrom astropy.visualization.mpl_normalize import ImageNormalize\nfrom astropy.visualization import AsinhStretch\n\nfrom sunpy.map import GenericMap\nfrom sunpy.map.sources.source_type import source_stretch\n\n__all__ = ['AIAMap', 'HMIMap']\n\n\nclass AIAMap(GenericMap):\n    \"\"\"AIA Image Map.\n\n    The Atmospheric Imaging Assembly is a set of four telescopes that employ\n    normal-incidence, multi-layer coated optics to provide narrow-band imaging\n    of the Sun. It provides high resolution full-disk images of the corona and\n    transition region up to 0.5 solar radii above the solar limb with 1.5\n    arcsecond angular resolution and 12-second temporal resolution. It observes\n    the Sun in the following seven extreme ultraviolet bandpasses: 94 A\n    (Fe XVIII), 131 A (Fe VIII, XXI), 171 A (Fe IX), 193 A (Fe XII, XXIV),\n    211 A (Fe XIV), 304 A (He II), 335 A (Fe XVI). One telescope observes\n    in the visible 1600 A (C IV) and the nearby continuun (1700 A).\n\n    References\n    ----------\n    * `SDO Mission Page <https://sdo.gsfc.nasa.gov/>`_\n    * `Instrument Page <https://aia.lmsal.com>`_\n    * `Fits Header keywords <http://jsoc.stanford.edu/doc/keywords/AIA/AIA02840_A_AIA-SDO_FITS_Keyword_Documents.pdf>`_\n    * `Analysis Guide <https://www.lmsal.com/sdodocs/doc/dcur/SDOD0060.zip/zip/entry/>`_\n    * `Instrument Paper <https://doi.org/10.1007/s11207-011-9776-8>`_\n    * `wavelengths and temperature response reference <https://www.lmsal.com/sdodocs/doc/dcur/SDOD0060.zip/zip/entry/figures/aia_tel_resp.png>`_\n    \"\"\"\n\n    def __init__(self, data, header, **kwargs):\n        GenericMap.__init__(self, data, header, **kwargs)\n\n        # Fill in some missing info\n        self.meta['detector'] = \"AIA\"\n        self._nickname = self.detector\n        self.plot_settings['cmap'] = plt.get_cmap(self._get_cmap_name())\n        self.plot_settings['norm'] = ImageNormalize(stretch=source_stretch(self.meta, AsinhStretch(0.01)))\n\n    @property\n    def observatory(self):\n        \"\"\"\n        Returns the observatory.\n        \"\"\"\n        return self.meta['telescop'].split('/')[0]\n\n    @classmethod\n    def is_datasource_for(cls, data, header, **kwargs):\n        \"\"\"Determines if header corresponds to an AIA image\"\"\"\n        return header.get('instrume', '').startswith('AIA')\n\n\nclass HMIMap(GenericMap):\n    \"\"\"HMI Image Map.\n\n    HMI consists of a refracting telescope, a polarization selector,\n    an image stabilization system, a narrow band tunable filter\n    and two 4096 pixel CCD cameras. It observes the full solar disk in the Fe I\n    absorption line at 6173 Angstrom with a resolution of 1 arc-second.\n    HMI takes images in a sequence of tuning and polarizations at a 4-second\n    cadence for each camera. One camera is dedicated to a 45 s Doppler and\n    line-of-sight field sequence while the other to a 90 s vector field\n    sequence.\n\n    References\n    ----------\n    * `SDO Mission Page <https://sdo.gsfc.nasa.gov/>`_\n    * `Instrument Page <http://hmi.stanford.edu>`_\n    * `Analysis Guide <http://hmi.stanford.edu/doc/magnetic/guide.pdf>`_\n    \"\"\"\n    def __init__(self, data, header, **kwargs):\n\n        GenericMap.__init__(self, data, header, **kwargs)\n\n        self.meta['detector'] = \"HMI\"\n#        self.meta['instrme'] = \"HMI\"\n#        self.meta['obsrvtry'] = \"SDO\"\n        self._nickname = self.detector\n\n    @property\n    def measurement(self):\n        \"\"\"\n        Returns the measurement type.\n        \"\"\"\n        return self.meta['content'].split(\" \")[0].lower()\n\n    @property\n    def observatory(self):\n        \"\"\"\n        Returns the observatory.\n        \"\"\"\n        return self.meta['telescop'].split('/')[0]\n\n    @classmethod\n    def is_datasource_for(cls, data, header, **kwargs):\n        \"\"\"Determines if header corresponds to an HMI image\"\"\"\n        return header.get('instrume', '').startswith('HMI')\n", "path": "sunpy/map/sources/sdo.py"}], "after_files": [{"content": "\"\"\"SDO Map subclass definitions\"\"\"\n#pylint: disable=W0221,W0222,E1101,E1121\n\n__author__ = \"Keith Hughitt\"\n__email__ = \"keith.hughitt@nasa.gov\"\n\nimport matplotlib.pyplot as plt\n\nfrom astropy.coordinates import CartesianRepresentation, SkyCoord\n# Versions of Astropy that do not have HeliocentricMeanEcliptic have the same frame\n# with the incorrect name HeliocentricTrueEcliptic\ntry:\n    from astropy.coordinates import HeliocentricMeanEcliptic\nexcept ImportError:\n    from astropy.coordinates import HeliocentricTrueEcliptic as HeliocentricMeanEcliptic\nimport astropy.units as u\nfrom astropy.visualization.mpl_normalize import ImageNormalize\nfrom astropy.visualization import AsinhStretch\n\nfrom sunpy.map import GenericMap\nfrom sunpy.map.sources.source_type import source_stretch\n\n__all__ = ['AIAMap', 'HMIMap']\n\n\nclass AIAMap(GenericMap):\n    \"\"\"AIA Image Map.\n\n    The Atmospheric Imaging Assembly is a set of four telescopes that employ\n    normal-incidence, multi-layer coated optics to provide narrow-band imaging\n    of the Sun. It provides high resolution full-disk images of the corona and\n    transition region up to 0.5 solar radii above the solar limb with 1.5\n    arcsecond angular resolution and 12-second temporal resolution. It observes\n    the Sun in the following seven extreme ultraviolet bandpasses: 94 A\n    (Fe XVIII), 131 A (Fe VIII, XXI), 171 A (Fe IX), 193 A (Fe XII, XXIV),\n    211 A (Fe XIV), 304 A (He II), 335 A (Fe XVI). One telescope observes\n    in the visible 1600 A (C IV) and the nearby continuun (1700 A).\n\n    Notes\n    -----\n    Observer location: The standard AIA FITS header provides the spacecraft location in multiple\n    coordinate systems, including Heliocentric Aries Ecliptic (HAE) and Heliographic Stonyhurst\n    (HGS).  SunPy uses the provided HAE coordinates due to accuracy concerns with the provided\n    HGS coordinates, but other software packages may make different choices.\n\n    References\n    ----------\n    * `SDO Mission Page <https://sdo.gsfc.nasa.gov/>`_\n    * `Instrument Page <https://aia.lmsal.com>`_\n    * `Fits Header keywords <http://jsoc.stanford.edu/doc/keywords/AIA/AIA02840_A_AIA-SDO_FITS_Keyword_Documents.pdf>`_\n    * `Analysis Guide <https://www.lmsal.com/sdodocs/doc/dcur/SDOD0060.zip/zip/entry/>`_\n    * `Instrument Paper <https://doi.org/10.1007/s11207-011-9776-8>`_\n    * `wavelengths and temperature response reference <https://www.lmsal.com/sdodocs/doc/dcur/SDOD0060.zip/zip/entry/figures/aia_tel_resp.png>`_\n    \"\"\"\n\n    def __init__(self, data, header, **kwargs):\n        GenericMap.__init__(self, data, header, **kwargs)\n\n        # Fill in some missing info\n        self.meta['detector'] = \"AIA\"\n        self._nickname = self.detector\n        self.plot_settings['cmap'] = plt.get_cmap(self._get_cmap_name())\n        self.plot_settings['norm'] = ImageNormalize(stretch=source_stretch(self.meta, AsinhStretch(0.01)))\n\n    @property\n    def observer_coordinate(self):\n        \"\"\"\n        The Heliographic Stonyhurst Coordinate of the observer.\n\n        This coordinate is determined using the Heliocentric Aries Ecliptic (HAE) coordinates\n        in the header.\n        \"\"\"\n        vector = CartesianRepresentation(self.meta['haex_obs'],\n                                         self.meta['haey_obs'],\n                                         self.meta['haez_obs'])\n        coord = SkyCoord(vector * u.m, frame=HeliocentricMeanEcliptic, obstime=self.date)\n        return coord.heliographic_stonyhurst\n\n    @property\n    def heliographic_latitude(self):\n        \"\"\"Heliographic latitude.\"\"\"\n        return self.observer_coordinate.lat\n\n    @property\n    def heliographic_longitude(self):\n        \"\"\"Heliographic longitude.\"\"\"\n        return self.observer_coordinate.lon\n\n    @property\n    def carrington_latitude(self):\n        \"\"\"Carrington latitude.\"\"\"\n        return self.observer_coordinate.heliographic_carrington.lat\n\n    @property\n    def carrington_longitude(self):\n        \"\"\"Carrington longitude.\"\"\"\n        return self.observer_coordinate.heliographic_carrington.lon\n\n    @property\n    def dsun(self):\n        \"\"\"The observer distance from the Sun.\"\"\"\n        return self.observer_coordinate.radius.to('m')\n\n    @property\n    def observatory(self):\n        \"\"\"\n        Returns the observatory.\n        \"\"\"\n        return self.meta['telescop'].split('/')[0]\n\n    @classmethod\n    def is_datasource_for(cls, data, header, **kwargs):\n        \"\"\"Determines if header corresponds to an AIA image\"\"\"\n        return header.get('instrume', '').startswith('AIA')\n\n\nclass HMIMap(GenericMap):\n    \"\"\"HMI Image Map.\n\n    HMI consists of a refracting telescope, a polarization selector,\n    an image stabilization system, a narrow band tunable filter\n    and two 4096 pixel CCD cameras. It observes the full solar disk in the Fe I\n    absorption line at 6173 Angstrom with a resolution of 1 arc-second.\n    HMI takes images in a sequence of tuning and polarizations at a 4-second\n    cadence for each camera. One camera is dedicated to a 45 s Doppler and\n    line-of-sight field sequence while the other to a 90 s vector field\n    sequence.\n\n    References\n    ----------\n    * `SDO Mission Page <https://sdo.gsfc.nasa.gov/>`_\n    * `Instrument Page <http://hmi.stanford.edu>`_\n    * `Analysis Guide <http://hmi.stanford.edu/doc/magnetic/guide.pdf>`_\n    \"\"\"\n    def __init__(self, data, header, **kwargs):\n\n        GenericMap.__init__(self, data, header, **kwargs)\n\n        self.meta['detector'] = \"HMI\"\n#        self.meta['instrme'] = \"HMI\"\n#        self.meta['obsrvtry'] = \"SDO\"\n        self._nickname = self.detector\n\n    @property\n    def measurement(self):\n        \"\"\"\n        Returns the measurement type.\n        \"\"\"\n        return self.meta['content'].split(\" \")[0].lower()\n\n    @property\n    def observatory(self):\n        \"\"\"\n        Returns the observatory.\n        \"\"\"\n        return self.meta['telescop'].split('/')[0]\n\n    @classmethod\n    def is_datasource_for(cls, data, header, **kwargs):\n        \"\"\"Determines if header corresponds to an HMI image\"\"\"\n        return header.get('instrume', '').startswith('HMI')\n", "path": "sunpy/map/sources/sdo.py"}]}