<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?action=history&amp;feed=atom&amp;title=2D_Map_SAA_%28xfig_example%29</id>
	<title>2D Map SAA (xfig example) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?action=history&amp;feed=atom&amp;title=2D_Map_SAA_%28xfig_example%29"/>
	<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=2D_Map_SAA_(xfig_example)&amp;action=history"/>
	<updated>2026-04-11T13:59:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.7</generator>
	<entry>
		<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=2D_Map_SAA_(xfig_example)&amp;diff=1098&amp;oldid=prev</id>
		<title>Obst: Obst moved page Example: 2D Map Saa to 2D Map SAA (xfig example) without leaving a redirect</title>
		<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=2D_Map_SAA_(xfig_example)&amp;diff=1098&amp;oldid=prev"/>
		<updated>2018-04-17T08:44:42Z</updated>

		<summary type="html">&lt;p&gt;Obst moved page &lt;a href=&quot;/wiki/index.php?title=Example:_2D_Map_Saa&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Example: 2D Map Saa (page does not exist)&quot;&gt;Example: 2D Map Saa&lt;/a&gt; to &lt;a href=&quot;/wiki/index.php/2D_Map_SAA_(xfig_example)&quot; title=&quot;2D Map SAA (xfig example)&quot;&gt;2D Map SAA (xfig example)&lt;/a&gt; without leaving a redirect&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:44, 17 April 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Obst</name></author>
	</entry>
	<entry>
		<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=2D_Map_SAA_(xfig_example)&amp;diff=993&amp;oldid=prev</id>
		<title>Gokus: Created page with &quot;  Category:SLxfig ==== 2D map SAA ==== &lt;pre&gt; require(&quot;isisscripts&quot;);  % load all the maps I want to plot: % directory with electron and proton distributions variable epdir...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=2D_Map_SAA_(xfig_example)&amp;diff=993&amp;oldid=prev"/>
		<updated>2018-04-13T12:17:30Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;  &lt;a href=&quot;/wiki/index.php/Category:SLxfig&quot; title=&quot;Category:SLxfig&quot;&gt;Category:SLxfig&lt;/a&gt; ==== 2D map SAA ==== &amp;lt;pre&amp;gt; require(&amp;quot;isisscripts&amp;quot;);  % load all the maps I want to plot: % directory with electron and proton distributions variable epdir...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SLxfig]]&lt;br /&gt;
==== 2D map SAA ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require(&amp;quot;isisscripts&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
% load all the maps I want to plot:&lt;br /&gt;
% directory with electron and proton distributions&lt;br /&gt;
variable epdir = &amp;quot;/userdata/data/hell/saa_rhessi/karten/&amp;quot;;&lt;br /&gt;
% directory with the magnetic field information&lt;br /&gt;
variable magdir = &amp;quot;/userdata/data/hell/saa_rhessi/magnet/&amp;quot;;&lt;br /&gt;
% the image names&lt;br /&gt;
variable imgname = &amp;quot;/home/hell/Documents/saa_rhessi/map2003_75_570_cont&amp;quot;;&lt;br /&gt;
variable imgname_e = &amp;quot;/home/hell/Documents/saa_rhessi/map2003_75_570_cont_e&amp;quot;;&lt;br /&gt;
variable imgname_p = &amp;quot;/home/hell/Documents/saa_rhessi/map2003_75_570_cont_p&amp;quot;;&lt;br /&gt;
% load the actual data&lt;br /&gt;
variable p = fits_read_img(epdir+&amp;quot;2003_75_a570.fits\[5]&amp;quot;);&lt;br /&gt;
variable e = fits_read_img(epdir+&amp;quot;2003_75_a570.fits\[4]&amp;quot;);&lt;br /&gt;
variable ep =  fits_read_img(epdir+&amp;quot;2003_75_a570.fits\[6]&amp;quot;);&lt;br /&gt;
variable mag = fits_read_img(magdir+&amp;quot;bfield-570-2003.75.fits&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
% define the values of the contour levels for the magnetic field&lt;br /&gt;
variable levels = int( [[19e3:27.5e3:2e3],[30e3:56e3:3e3]] );&lt;br /&gt;
% calculate the contours&lt;br /&gt;
variable cont = gcontour_compute(mag,levels);&lt;br /&gt;
&lt;br /&gt;
% define a function to put the contour labels at a position in the map, &lt;br /&gt;
% where they hopefully do not look stupid, i.e., not too close to the edges&lt;br /&gt;
% of the plot or too pointy slopes of the curve.&lt;br /&gt;
% Here I go for the point of the contour which is farthest south&lt;br /&gt;
define cont_label(xf,xar,yar,level) %push xar by -180, yar by -90 !&lt;br /&gt;
{&lt;br /&gt;
   variable lx = length(xar);&lt;br /&gt;
   if( lx &amp;lt; 20)&lt;br /&gt;
     {&lt;br /&gt;
        xf.plot(xar,yar;width=1);&lt;br /&gt;
        return;&lt;br /&gt;
     }&lt;br /&gt;
   variable mx = where_min(yar);&lt;br /&gt;
   mx = mx[length(mx)/2];&lt;br /&gt;
   &lt;br /&gt;
   % leave enough space for the label, i.e., not to close to the axes&lt;br /&gt;
   if(mx &amp;lt; 10 or mx &amp;gt; lx-11) mx = where_max(yar);&lt;br /&gt;
   if(mx &amp;lt; 10 or mx &amp;gt; lx-11) mx = int(lx/4.);&lt;br /&gt;
   variable er = [mx-13:mx+14];&lt;br /&gt;
   &lt;br /&gt;
   % rotate the label such that it is parallel to the line&lt;br /&gt;
   variable x0 = xar[mx][0];&lt;br /&gt;
   variable y0 = yar[mx][0];&lt;br /&gt;
   variable rot = atan( (yar[mx-13]-yar[mx+14])/(xar[mx-13]-xar[mx+14]) ) *180./PI ;&lt;br /&gt;
   if (isnan(rot) ) rot = 0;&lt;br /&gt;
   variable label = xfig_new_text( string(level); rotate=rot, size=&amp;quot;\scriptsize&amp;quot;R);&lt;br /&gt;
   xf.add_object( label ,x0,y0,0,0 );&lt;br /&gt;
&lt;br /&gt;
   % for better legibility, draw a white rectangle between the map and the label&lt;br /&gt;
   variable xx = [0,0.95,0.95,0];&lt;br /&gt;
   variable yy = [0,0,.205,.205];&lt;br /&gt;
   variable xcorner = xx*cos(rot*PI/180.) - yy*sin(rot*PI/180.);&lt;br /&gt;
   variable ycorner = xx*sin(rot*PI/180.) + yy*cos(rot*PI/180.);&lt;br /&gt;
   xf.add_object( xfig_new_polyline( xcorner,ycorner;&lt;br /&gt;
                                     color=&amp;quot;white&amp;quot;, fillcolor=&amp;quot;white&amp;quot;),&lt;br /&gt;
                  x0,y0,0,-.05);&lt;br /&gt;
   &lt;br /&gt;
   % finally, also plot the contour&lt;br /&gt;
   xf.plot(xar,yar;width=1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% function to draw the map, the contours and the worldcoastlines, add x- and&lt;br /&gt;
% y-axes and a color scale&lt;br /&gt;
define draw_map_cont(image,cont,lev,filename, scaletitle,minv,maxv, scale)&lt;br /&gt;
{&lt;br /&gt;
   require(&amp;quot;isisscripts&amp;quot;);&lt;br /&gt;
   require(&amp;quot;xfig&amp;quot;);&lt;br /&gt;
   require(&amp;quot;png&amp;quot;);&lt;br /&gt;
   variable width = 15;&lt;br /&gt;
   variable height = 10;&lt;br /&gt;
   &lt;br /&gt;
   % define a rainbow color map, starting at white over purple-blue-green-yellow-orange to red.&lt;br /&gt;
   % array with 256 colors&lt;br /&gt;
   variable color =&lt;br /&gt;
    [&lt;br /&gt;
       0xFFFFFF, 0xD3D3FF, 0xC9C9FF, 0xC4C4FF, 0xBABAFF, 0xB5B5FF, 0xB0B0FF, 0xABABFF,&lt;br /&gt;
       0xA6A6FF, 0xA1A1FF, 0x9E9EFF, 0x9C9CFF, 0x9797FF, 0x9494FF, 0x9292FF, 0x8D8DFF,&lt;br /&gt;
       0x8A8AFF, 0x8888FF, 0x8383FF, 0x8080FF, 0x7E7EFF, 0x7979FF, 0x7676FF, 0x7474FF,&lt;br /&gt;
       0x6F6FFF, 0x6C6CFF, 0x6A6AFF, 0x6565FF, 0x6262FF, 0x6060FF, 0x5B5BFF, 0x5858FF,&lt;br /&gt;
       0x5656FF, 0x5151FF, 0x4E4EFF, 0x4C4CFF, 0x4747FF, 0x4444FF, 0x4242FF, 0x3D3DFF,&lt;br /&gt;
       0x3838FF, 0x3333FF, 0x2E2EFF, 0x2929FF, 0x2424FF, 0x1F1FFF,&lt;br /&gt;
       0x1A1AFF, 0x1515FF, 0x1010FF, 0x0B0BFF, 0x0606FF, 0x0000FF, 0x0006FF, 0x000BFF,&lt;br /&gt;
       0x0010FF, 0x0015FF, 0x001AFF, 0x001FFF, 0x0024FF, 0x0029FF, 0x002EFF, 0x0033FF,&lt;br /&gt;
       0x0038FF, 0x003DFF, 0x0042FF, 0x0047FF, 0x004CFF, 0x0051FF, 0x0056FF, 0x005BFF,&lt;br /&gt;
       0x0060FF, 0x0065FF, 0x006AFF, 0x006FFF, 0x0074FF, 0x0079FF, 0x007EFF, 0x0083FF,&lt;br /&gt;
       0x0088FF, 0x008DFF, 0x0092FF, 0x0097FF, 0x009CFF, 0x00A1FF, 0x00A6FF, 0x00ABFF,&lt;br /&gt;
       0x00B0FF, 0x00B5FF, 0x00BAFF, 0x00BFFF, 0x00C4FF, 0x00C9FF, 0x00CEFF, 0x00D3FF,&lt;br /&gt;
       0x00D8FF, 0x00DDFF, 0x00E2FF, 0x00E7FF, 0x00ECFF, 0x00F1FF, 0x00F6FF, 0x00FBFF,&lt;br /&gt;
       0x00FFFF, 0x00FFF6, 0x00FFF1, 0x00FFEC, 0x00FFE7, 0x00FFE2, 0x00FFDD, 0x00FFD8,&lt;br /&gt;
       0x00FFD3, 0x00FFCE, 0x00FFC9, 0x00FFC4, 0x00FFBF, 0x00FFBA, 0x00FFB5, 0x00FFB0,&lt;br /&gt;
       0x00FFAB, 0x00FFA6, 0x00FFA1, 0x00FF9C, 0x00FF97, 0x00FF92, 0x00FF8D, 0x00FF8D,&lt;br /&gt;
       0x00FF88, 0x00FF83, 0x00FF7E, 0x00FF79, 0x00FF74, 0x00FF6F, 0x00FF6A, 0x00FF65,&lt;br /&gt;
       0x00FF60, 0x00FF5B, 0x00FF56, 0x00FF51, 0x00FF4C, 0x00FF47, 0x00FF42, 0x00FF3D,&lt;br /&gt;
       0x00FF38, 0x00FF33, 0x00FF2E, 0x00FF29, 0x00FF24, 0x00FF1F, 0x00FF1A, 0x00FF15,&lt;br /&gt;
       0x00FF10, 0x00FF0B, 0x00FF06, 0x00FF00, 0x06FF00, 0x0BFF00, 0x10FF00, 0x15FF00,&lt;br /&gt;
       0x1AFF00, 0x1FFF00, 0x24FF00, 0x29FF00, 0x2EFF00, 0x33FF00, 0x38FF00, 0x3DFF00,&lt;br /&gt;
       0x42FF00, 0x47FF00, 0x4CFF00, 0x51FF00, 0x56FF00, 0x5BFF00, 0x60FF00, 0x65FF00,&lt;br /&gt;
      0x6AFF00, 0x6FFF00, 0x74FF00, 0x79FF00, 0x7EFF00, 0x83FF00, 0x88FF00, 0x8DFF00,&lt;br /&gt;
       0x92FF00, 0x97FF00, 0x9CFF00, 0xA1FF00, 0xA6FF00, 0xABFF00, 0xB0FF00, 0xB5FF00,&lt;br /&gt;
       0xBAFF00, 0xBFFF00, 0xC4FF00, 0xC9FF00, 0xCEFF00, 0xD3FF00, 0xD8FF00, 0xDDFF00,&lt;br /&gt;
       0xE2FF00, 0xE7FF00, 0xECFF00, 0xF1FF00, 0xF6FF00, 0xFBFF00, 0xFFFF00, 0xFFFB00,&lt;br /&gt;
       0xFFF600, 0xFFF100, 0xFFEC00, 0xFFE700, 0xFFE200, 0xFFDD00, 0xFFD800, 0xFFD300,&lt;br /&gt;
       0xFFCE00, 0xFFC900, 0xFFC400, 0xFFBF00, 0xFFBA00, 0xFFB500, 0xFFB000, 0xFFAB00,&lt;br /&gt;
       0xFFA600, 0xFFA100, 0xFF9C00, 0xFF9700, 0xFF9200, 0xFF8D00, 0xFF8800, 0xFF8300,&lt;br /&gt;
       0xFF7E00, 0xFF7900, 0xFF7400, 0xFF6F00, 0xFF6A00, 0xFF6500, 0xFF6000, 0xFF5B00,&lt;br /&gt;
       0xFF5600, 0xFF5100, 0xFF4C00, 0xFF4700, 0xFF4200, 0xFF3D00, 0xFF3800, 0xFF3300,&lt;br /&gt;
       0xFF2E00, 0xFF2900, 0xFF2400, 0xFF1F00, 0xFF1A00, 0xFF1500, 0xFF1000, 0xFF0B00,&lt;br /&gt;
       0xFF0600, 0xFF0000&lt;br /&gt;
     ];&lt;br /&gt;
   png_add_colormap (&amp;quot;rainbow_white&amp;quot;, color);&lt;br /&gt;
&lt;br /&gt;
   variable imagergb, scalearr, scalergb;&lt;br /&gt;
   variable m1 = xfig_plot_new (width, height);&lt;br /&gt;
   variable m2 = xfig_plot_new (0.5,height);&lt;br /&gt;
&lt;br /&gt;
   % number of bins in either direction of the image&lt;br /&gt;
   variable nblat = length(image[*,0]);&lt;br /&gt;
   variable nblon = length(image[0,*]);&lt;br /&gt;
   &lt;br /&gt;
   % scaling (logarithmic or linear) of the color map&lt;br /&gt;
   if (scale == &amp;quot;log&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
        % convert the values in the image to colors&lt;br /&gt;
        imagergb = png_gray_to_rgb (log10(image),&amp;quot;rainbow_white&amp;quot;;gmin = log10(minv), gmax = log10(maxv)) ;&lt;br /&gt;
        % save the image as png with png_write_flipped as the corner (0,0) of the image is top left, &lt;br /&gt;
        % but my world map scaling starts at the bottom left corner of the array (or something like that)&lt;br /&gt;
        png_write_flipped (filename+&amp;quot;.png&amp;quot;,imagergb[[0:nblat-1],[0:nblon-1]]) ;&lt;br /&gt;
&lt;br /&gt;
        % create the key for the color scale&lt;br /&gt;
        scalearr = _reshape([log10(minv):log10(maxv):#256],[256,1]);&lt;br /&gt;
        scalergb = png_gray_to_rgb (scalearr, &amp;quot;rainbow_white&amp;quot;);&lt;br /&gt;
        png_write_flipped (&amp;quot;scale.png&amp;quot;, scalergb);&lt;br /&gt;
&lt;br /&gt;
        m2.world (0, 1, minv, maxv; logy);&lt;br /&gt;
     }&lt;br /&gt;
   else if (scale == &amp;quot;lin&amp;quot;)&lt;br /&gt;
     {&lt;br /&gt;
        imagergb = png_gray_to_rgb (image,&amp;quot;rainbow_white&amp;quot;; gmin = minv, gmax = maxv) ;&lt;br /&gt;
        png_write_flipped (filename+&amp;quot;.png&amp;quot;,imagergb[[0:nblat-1],[0:nblon-1]]) ;&lt;br /&gt;
&lt;br /&gt;
        scalearr = _reshape([minv:maxv:#256],[256,1]);&lt;br /&gt;
        scalergb = png_gray_to_rgb (scalearr, &amp;quot;rainbow_white&amp;quot;);&lt;br /&gt;
        png_write_flipped (&amp;quot;scale.png&amp;quot;, scalergb);&lt;br /&gt;
&lt;br /&gt;
        m2.world (0, 1, minv, maxv);&lt;br /&gt;
        %m2.world (minv, maxv, 0, 1);&lt;br /&gt;
     }&lt;br /&gt;
   else&lt;br /&gt;
     {&lt;br /&gt;
        ()=printf(&amp;quot;Invalid scale: use \&amp;quot;log\&amp;quot; or \&amp;quot;lin\&amp;quot; \n&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
   % define the world coordinates for the image&lt;br /&gt;
   m1.world(-180,180, -90,90 ; xlin , ylin) ;&lt;br /&gt;
   m1.xlabel(&amp;quot;Longitude&amp;quot;) ;&lt;br /&gt;
   m1.ylabel(&amp;quot;Latitude&amp;quot;) ;&lt;br /&gt;
   % load the png image to frame with the coordinate system&lt;br /&gt;
   m1.plot_png(filename+&amp;quot;.png&amp;quot;) ;&lt;br /&gt;
&lt;br /&gt;
   % define horizontal lines lines to indicate the tropes and the polar regions&lt;br /&gt;
   variable fineness = 3600;&lt;br /&gt;
   variable tropics = struct{lon=[-180:179:#fineness], equat = ones(fineness)*0.,&lt;br /&gt;
                             cancer = ones(fineness)*23.43, capricorn = ones(fineness)*(-23.43),&lt;br /&gt;
                             arctic_north = ones(fineness)*66.55, arctic_south = ones(fineness)*(-66.55)};&lt;br /&gt;
&lt;br /&gt;
   xfig_new_color(&amp;quot;grey&amp;quot;,0x808080);&lt;br /&gt;
   variable cl;&lt;br /&gt;
   % plot the world coast line&lt;br /&gt;
   foreach cl(WorldCoastLine())&lt;br /&gt;
     {&lt;br /&gt;
        m1.plot(cl.x, cl.y; width = 1, color=&amp;quot;grey&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
   m1.plot(tropics.lon, tropics.equat ; width = 1, color=&amp;quot;grey&amp;quot; );&lt;br /&gt;
   m1.plot(tropics.lon, tropics.cancer ; width = 1, color=&amp;quot;grey&amp;quot; );&lt;br /&gt;
   m1.plot(tropics.lon, tropics.capricorn ; width = 1, color=&amp;quot;grey&amp;quot; );&lt;br /&gt;
   m1.plot(tropics.lon, tropics.arctic_north ; width = 1, color=&amp;quot;grey&amp;quot;);&lt;br /&gt;
   m1.plot(tropics.lon, tropics.arctic_south ; width = 1, color=&amp;quot;grey&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
   % draw the contour lines and their labels&lt;br /&gt;
   variable i,j;&lt;br /&gt;
   variable lx,mx,xar,yar,er,x0,y0,rot;&lt;br /&gt;
   _for i (0,length(cont)-1,1)&lt;br /&gt;
     {&lt;br /&gt;
        _for j (0,length(cont[i].x_list)-1,1)&lt;br /&gt;
          {&lt;br /&gt;
             cont_label(m1,cont[i].x_list[j]-180, cont[i].y_list[j]-90, lev[i]);&lt;br /&gt;
          }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
   m2.xaxis (;off);&lt;br /&gt;
   m2.yaxis (;off);&lt;br /&gt;
   m2.y2axis (;on);&lt;br /&gt;
   m2.x2axis (;off);&lt;br /&gt;
   m2.y2label(scaletitle);&lt;br /&gt;
   m2.plot_png(&amp;quot;scale.png&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   % combine the map and the key to one image&lt;br /&gt;
   xfig_new_hbox_compound (m1, m2, 0.1).render(filename+&amp;quot;.eps&amp;quot;);&lt;br /&gt;
   % get rid of the redundant png file&lt;br /&gt;
   () = remove (filename + &amp;quot;.png&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
% use the above function to plot as many SAA/magentic field maps as you wish:&lt;br /&gt;
% electron to proton ratio&lt;br /&gt;
draw_map_cont(ep, cont,levels, imgname, &amp;quot;electrons per proton&amp;quot;,0.5,50.,&amp;quot;log&amp;quot;);&lt;br /&gt;
% electrons&lt;br /&gt;
draw_map_cont(e, cont,levels, imgname_e, &amp;quot;electrons&amp;quot;,0.05,4000.,&amp;quot;log&amp;quot;);&lt;br /&gt;
%protons&lt;br /&gt;
draw_map_cont(p, cont,levels, imgname_p, &amp;quot;protons&amp;quot;,0.05,4000.,&amp;quot;log&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gokus</name></author>
	</entry>
</feed>