Sn_discoveries.gif (480 × 240像素,文件大小:3.21 MB,MIME类型:image/gif、​循环、​126帧、​38秒)


摘要

描述
English: Animated gif showing the R.A. and Dec. of supernovae discovered since 1885.
 
SCP
 
High-Z
 
LOSS
 
SDSS
 
ESSENCE
 
SNLS
 
SNfactory
 
Other
日期
来源 自己的作品
作者 RCThomas
其他版本 File:Supernovae discovered since 1885 (larger size).gif (previous version uploaded separately)

许可协议

Creative Commons CC-Zero 本作品采用知识共享CC0 1.0 通用公有领域贡献许可协议授权。
采用本宣告发表本作品的人,已在法律允许的范围内,通过在全世界放弃其对本作品拥有的著作权法规定的所有权利(包括所有相关权利),将本作品贡献至公有领域。您可以复制、修改、传播和表演本作品,将其用于商业目的,无需要求授权。

Source Code

 
本GIF 位图使用Matplotlib创作.
 
本图片使用ImageMagick创作.

This is the python script I used to generate the frames for this movie. I then made the animated gif using ImageMagick convert tool.

#!/usr/bin/env python

import numpy
import pylab

import urllib

#- Fetch the plain-text, fixed-column-width version of the Asiago Supernova
#- Catalog (ASC) from the Asiago Supernova Group website.  This group tries
#- to maintain a comprehensive list of all supernovae discovered and announced 
#- publically via IAU circulars.
#-
#- Literature reference for the ASC:
#-      [Barbon et al., 1999, A&AS, 139, 531]
#-
#- The Asiago Supernova Group website is at:
#-      [http://graspa.oapd.inaf.it/]
#-
#- Another resource is the Sternberg Supernova Catalog:
#-      [http://www.sai.msu.su/sn/sncat/]

stream = urllib.urlopen( "http://graspa.oapd.inaf.it/index.php?option=com_content&view=article&id=63&Itemid=82&dir=%2Fvar%2Fwww%2Fhtml%2Fjsmallfib_top%2Fcat&download_file=jsmallfib_top%2Fcat%2Fcat.txt" )
lines = [ line.rstrip( "\n\r" ) for line in stream ]
stream.close()

lines.pop( 0 )

#- We are interested in the supernova year, R.A. and Dec., and discoverer.  The 
#- ASC has remained consistent since 1999 in formatting its plain-text edition, 
#- so in the spirit of keeping it simple we adopt the fixed fields as we find 
#- them on this day.  Notice that we read both the coordinates of the host 
#- galaxy and the supernova in each case --- the host galaxy values are needed
#- in case the supernova coordinates are not listed.

bounds = { # The following column definitions are correct as of 2010-04-20.
        "year"      : (   2,    6 ),
        "gal_ra"    : (  32,   42 ),
        "gal_dec"   : (  42,   52 ),
        "sn_ra"     : (  52,   62 ),
        "sn_dec"    : (  62,   77 ),
        "disc"      : ( 197, None ) }

#- Process each row so that the supernova R.A. and Dec. fields are in radians.
#- This means making sure that if no supernova coordinates are recorded in the
#- ASC, we substitute in the host galaxy coordinates, which will be good enough
#- for the figure we are going to make --- the error is much smaller than the 
#- size of the symbols we will use for plotting.

years = []
ras   = []
decs  = []
discs = []

for line in lines :
    if not line.rstrip() :
        continue

    # Year and discoverer are easy.
    year = int( line[ bounds[ "year" ][ 0 ] : bounds[ "year" ][ 1 ] ] )
    disc = line[ bounds[ "disc" ][ 0 ] : ]

    # Try for supernova R.A. and Decl. and use galaxy values only if needed.
    ra  = line[ bounds[ "sn_ra"  ][ 0 ] : bounds[ "sn_ra"  ][ 1 ] ].strip( ": " )
    dec = line[ bounds[ "sn_dec" ][ 0 ] : bounds[ "sn_dec" ][ 1 ] ].strip( ": " )
    if not ( ra and dec ) :
        ra  = line[ bounds[ "gal_ra"  ][ 0 ] : bounds[ "gal_ra"  ][ 1 ] ].strip( ": " )
        dec = line[ bounds[ "gal_dec" ][ 0 ] : bounds[ "gal_dec" ][ 1 ] ].strip( ": " )

    # Convert R.A. to float degrees.
    h, m, s = ra[ 0 : 2 ], ra[ 2 : 4 ], ra[ 4 : ]
    try :
        test = float( s )
    except ValueError:
        s = "00"
    ra = 15.0 * ( float( h ) + ( float( m ) + float( s ) / 60.0 ) / 60.0 )

    # Convert Dec. to float degrees.
    p, d, m, s = dec[ 0 ], dec[ 1 : 3 ], dec[ 3 : 5 ], dec[ 5 : ]
    try :
        test = float( s )
    except ValueError:
        s = "00"
    dec = float( d ) + ( float( m ) + float( s ) / 60.0 ) / 60.0
    if p != "+": dec = -dec

    # Push onto each array.
    years.append( year )
    ras.append  ( ra   )
    decs.append ( dec  )
    discs.append( disc )

years = numpy.array( years, dtype = "int" )
discs = numpy.array( discs )
ras   = numpy.radians( numpy.array( ras   ) )
decs  = numpy.radians( numpy.array( decs  ) )
ras[ ras > numpy.pi ] = ras[ ras > numpy.pi ] - 2.0 * numpy.pi

#- Colors for some selected surveys --- not exhaustive by any stretch.

colors = []
for i, disc in enumerate( discs ) :
    if "sdss" in disc.lower() :
        discs[ i ] = "SDSS"
        colors.append( "#C28800" )
    elif "loss" in disc.lower() or "lotoss" in disc.lower() :
        discs[ i ] = "LOSS"
        colors.append( "#B20050" )
    elif "hzsst" in disc.lower() :
        discs[ i ] = "High-Z"
        colors.append( "#FF9C00" )
    elif "nsf" in disc.lower() :
        discs[ i ] = "SNfactory"
        colors.append( "#06D1AE" )
    elif "essence" in disc.lower() :
        discs[ i ] = "ESSENCE"
        colors.append( "#0F00B2" )
    elif "scp" in disc.lower() :
        discs[ i ] = "SCP"
        colors.append( "#8C8458" )
    elif "cfht" in disc.lower() :
        discs[ i ] = "SNLS"
        colors.append( "#3B6642" )
    else :
        discs[ i ] = "other" # could add others here
        colors.append( "#516587" )
colors = numpy.array( colors )

#- Generate a bunch of images to be run through ImageMagick convert to make an
#- animated GIF.

uniq_years = sorted( set( years ) )

discs_used = []
color_used = []

for i, year in enumerate( range( 1885, 2011 ) ) :
    fig = pylab.figure( figsize = ( 8, 4 ), dpi = 180 )
    axes = pylab.axes( projection = "hammer" )
    axes.grid( True )
    selected = years < year
    print year,
    print selected.sum(),
    if any( selected ) :
        axes.scatter( ras[ selected ], decs[ selected ], c = colors[ selected ], edgecolors = "none", alpha = 0.5 )
    selected = years == year
    print selected.sum()
    if any( selected ) :
        axes.scatter( ras[ selected ], decs[ selected ], c = colors[ selected ], edgecolors = "none", alpha = 1.0 )
        labels = discs[ selected ]
        for disc, color in zip( discs[ selected ], colors[ selected ] ) :
            if disc == "other" :
                continue
            if disc not in discs_used :
                discs_used.append( disc  )
                color_used.append( color )
    print discs_used
    for i, disc in enumerate( discs_used ) :
        pylab.text( 0.99, 0.32 - 0.06 * i, disc, color = color_used[ i ], transform = axes.transAxes )
    pylab.title( year )
    pylab.savefig( str( year ) + ".jpg" )
    pylab.clf()

说明

添加一行文字以描述该文件所表现的内容

此文件中描述的项目

描绘内容

文件来源 简体中文(已转写)

上传者的原创作品 简体中文(已转写)

文件历史

点击某个日期/时间查看对应时刻的文件。

日期/时间缩⁠略⁠图大小用户备注
当前2010年4月22日 (四) 06:072010年4月22日 (四) 06:07版本的缩略图480 × 240(3.21 MB)RCThomasSmaller size so when it's embedded into an article it actually animates but doesn't interfere with the text by overwhelming it. No change to the source code was used; just a resize step in the convert call. Category:Supernovae
2010年4月21日 (三) 05:322010年4月21日 (三) 05:32版本的缩略图800 × 400(7.81 MB)RCThomas{{Information |Description={{en|1=Animated gif showing the R.A. and Dec. of supernovae discovered since 1885.}} |Source={{own}} |Author=RCThomas |Date=2010-04-20 |Permission= |other_versions= }} Category:Supernovae

以下2个页面使用本文件:

全域文件用途