def test_constellations():
    lookup = load_constellation_map()

    assert lookup(position_of_radec(0, 0)) == 'Psc'
    assert lookup(position_of_radec(360, 90)) == 'UMi'

    # (4.65, 0) used to be in Orion, but, precession
    assert lookup(position_of_radec(4.65, 0)) == 'Eri'
    assert lookup(position_of_radec(4.75, 0.3)) == 'Ori'

    # Test vectorization.
    assert list(lookup(position_of_radec([4.65, 4.75],
                                         [0, 0.3]))) == ['Eri', 'Ori']
예제 #2
0
def test_constellations():
    ts = load.timescale(builtin=True)
    t = ts.utc(2000)
    lookup = load_constellation_map()

    assert lookup(position_of_radec(0, 0)) == 'Psc'
    assert lookup(position_of_radec(360, 90)) == 'UMi'

    # (4.65, 0) used to be in Orion, but, precession
    assert lookup(position_of_radec(4.65, 0)) == 'Eri'
    assert lookup(position_of_radec(4.75, 0.3)) == 'Ori'

    # Test vectorization.
    assert (lookup(position_of_radec([4.65, 4.75],
                                     [0, 0.3])) == ['Eri', 'Ori']).all()
예제 #3
0
def test_constellations():
    lookup = load_constellation_map()

    assert lookup(position_of_radec(0, 0)) == 'Psc'
    assert lookup(position_of_radec(360, 90)) == 'UMi'

    # (4.65, 0) used to be in Orion, but, precession
    assert lookup(position_of_radec(4.65, 0)) == 'Eri'
    assert lookup(position_of_radec(4.75, 0.3)) == 'Ori'

    # exploit extend() bug, issue 547
    B1875 = Time(None, julian_date_of_besselian_epoch(1875))
    assert lookup(position_of_radec(18.1747, 39., epoch=B1875)) == 'Her'
    assert lookup(position_of_radec(18.1753, 39., epoch=B1875)) == 'Lyr'

    # Test vectorization.
    assert list(
        lookup(position_of_radec([4.65, 4.75], [0, 0.3]))
    ) == ['Eri', 'Ori']
예제 #4
0
def import_bright_stars_bsc5_json_all(filename):

    constell_dict = {}
    constell_lookup = load_constellation_map()

    for co in Constellation.query.all():
        constell_dict[co.iau_code] = co.id

    star_cnt = 0
    try:
        with open(filename) as f:
            all_recs = json.load(f)
            for json_rec in all_recs:
                star_cnt += 1
                _parse_bsc5_json_rec(json_rec, star_cnt, len(all_recs),
                                     constell_dict, constell_lookup)
        print('')
        db.session.commit()
    except IntegrityError as err:
        print('\nIntegrity error {}'.format(err))
        db.session.rollback()
예제 #5
0
def fix_dso_constellation():
    constell_dict = {}

    constellation_at = load_constellation_map()

    for co in Constellation.query.all():
        constell_dict[co.iau_code.upper()] = co.id

    try:
        for dso in DeepskyObject.query.all():
            const_code = constellation_at(
                position_from_radec(dso.ra / np.pi * 12.0,
                                    dso.dec / np.pi * 180.0))
            dso.constellation_id = constell_dict[
                const_code.upper()] if const_code else None
            db.session.add(dso)
        db.session.commit()
    except KeyError as err:
        print('\nKey error: {}'.format(err))
        db.session.rollback()
    except IntegrityError as err:
        print('\nIntegrity error {}'.format(err))
        db.session.rollback()
    print('')
예제 #6
0
dt = datetime.datetime(int(year),
                       int(month),
                       int(date),
                       int(hour),
                       int(mins),
                       tzinfo=tz)
t1 = dt.astimezone(pytz.utc)
ts = api.load.timescale()
y, m, d, h, mns = t1.year, t1.month, t1.date, t1.hour, t1.minute
t = ts.utc(y, m, h, mns)

topos = api.Topos(latitude_degrees=lat, longitude_degrees=lon)
observer = topos.at(t)
pos = observer.from_altaz(alt_degrees=alt, az_degrees=azi)
ra, dec, distance = pos.radec()
constellation_at = load_constellation_map()
coord = position_of_radec(ra.hours, dec.degrees)
print(constellation_at(coord))
print("RA = ", ra)
print("Dec = ", dec)

t2 = (2020, 11, 14, 22, 00)
topos = api.Topos(latitude_degrees=31.77,
                  longitude_degrees=76.98)  #coordinates of iit mandi
observer = topos.at(t)
pos = observer.from_altaz(alt_degrees=90, az_degrees=0)
ra, dec, distance = pos.radec()
constellation_at = load_constellation_map()
coord = position_of_radec(ra.hours, dec.degrees)
print("Constellation right above Lucy: ", constellation_at(coord))
예제 #7
0
def import_hnsky(hnsky_dso_file):

    from sqlalchemy.exc import IntegrityError

    constellation_at = load_constellation_map()

    constell_dict = {}
    for co in Constellation.query.all():
        constell_dict[co.iau_code.upper()] = co.id

    hnd_file = open(hnsky_dso_file, 'r', encoding='ISO-8859-1')
    lines = hnd_file.readlines()[2:]
    hnd_file.close()

    existing_dsos = {}
    for dso in DeepskyObject.query.filter_by().all():
        existing_dsos[dso.name] = dso

    dso_set = set()
    master_dso_map = {}

    pref_cats = [None] * 1000
    cat_codes = {}
    catalogs = Catalogue.query.filter(Catalogue.id<1000).order_by(Catalogue.id)
    for cat in catalogs:
        pref_cats[cat.id-1] = []
        cat_codes[cat.id-1] = cat.code

    dso_count = 0
    other_dsos = []

    try:
        for line in lines:
            if len(line) == 0:
                continue
            items = line.split(',')

            ra = 2.0 * np.pi * float(items[0])/864000.0
            dec = np.pi * float(items[1])/(324000.0 * 2.0)

            const_code = constellation_at(position_from_radec(ra / np.pi * 12.0, dec / np.pi * 180.0))
            constellation_id = constell_dict[const_code.upper()] if const_code else None

            str_mag = items[2].strip()
            mag = float(str_mag)/10.0 if str_mag else 100.0

            brightness = None
            if len(items) > 5:
                str_brightness = items[5].strip()
                try:
                    brightness = float(str_brightness)/10.0 if str_brightness else 100.0
                except (ValueError, TypeError):
                    pass
                
            obj_types = items[4].split('/')

            obj_type = obj_types[0].strip()
            indx = obj_types[0].find('[')
            if indx>0:
                obj_type = obj_type[:indx]
            indx = obj_types[0].find(';')
            if indx>0:
                obj_type = obj_type[:indx]

            indx1 = items[4].find('[')
            indx2 = items[4].find(']')
            obj_subtype = items[4][indx1+1:indx2] if indx1<indx2 else None

            # remove uncertainty flag
            if obj_type.endswith('?') and len(obj_type) > 1:
                obj_type = obj_type[:-1]
                
            obj_type = dso_type_map.get(obj_type, None)

            if obj_type is None:
                print('No type {}'.format(obj_types[0].strip()))
                print(line)
                continue

            rlong = None
            str_length = items[6].strip() if len(items) > 6 else None

            if str_length:
                try:
                    rlong = float(str_length) * 6
                except (ValueError, TypeError):
                    pass

            rshort = None
            str_width = items[7].strip() if len(items) > 7 else None
            if str_width:
                try:
                    rshort = float(str_width) * 6
                except (ValueError, TypeError):
                    pass

            position_angle = None
            str_pos_angle = items[8].strip() if len(items) > 8 else None

            if str_pos_angle:
                try:
                    position_angle = float(str_pos_angle)
                except (ValueError, TypeError):
                    pass

            names = items[3].split('/')

            master_dso = None
            child_dsos = []
            master_cat_prio = None
            for name1 in names:
                for name in name1.split(';'):
                    name = name.strip()
                    
                    if name.startswith('PN_'):
                        name = name[3:]
                        
                    if name.startswith('A66_'):
                        name = 'Abell' + name[4:]

                    if name.startswith('PK_'):
                        name = 'PK' + _denormalize_pk_name(name[3:])

                    if name.startswith('Arp_'):
                        name = 'Arp' + name[4:]

                    if name.startswith('NGC') or name.startswith('IC') or name.startswith('UGC'):
                        if name.endswith('A'):
                            name = name[:-1]
                        elif name.endswith('-1') or name.endswith('_1'):
                            name = name[:-2]

                    if name in dso_set:
                        continue

                    dso_set.add(name)

                    cat = get_catalog_from_dsoname(name)

                    if cat:
                        dso = existing_dsos.get(name, None)

                        if dso is None:
                            dso = DeepskyObject()

                        dso.name = name
                        dso.type = obj_type
                        dso.subtype = obj_subtype
                        dso.ra = ra
                        dso.dec = dec
                        dso.constellation_id = constellation_id
                        dso.catalogue_id = cat.id
                        dso.major_axis = rlong
                        dso.minor_axis = rshort
                        dso.position_angle = position_angle
                        dso.mag = mag
                        dso.surface_bright = brightness
                        dso.common_name = None

                        cat_prio = cat_priorities.get(cat.code, 1000)

                        if (master_cat_prio is not None) and cat_prio < master_cat_prio:
                            child_dsos.append(master_dso)
                            master_dso = dso
                            master_cat_prio = cat_prio
                        elif master_dso:
                            child_dsos.append(dso)
                        else:
                            master_dso = dso
                            master_cat_prio = cat_prio

                        if cat.id < 1000:
                            pref_cats[cat.id-1].append(dso)
                        else:
                            other_dsos.append(dso)
                        dso_count += 1
                            
                    else:
                        print('Not found {}'.format(name))

            for child_dso in child_dsos:
                master_dso_map[child_dso.name] = master_dso

        # Sort dso in catalog list according object number in catalog
        for i in range(1000):
            dso_list = pref_cats[i]
            if not dso_list or i not in cat_codes:
                continue
            ccl = len(cat_codes[i])
            if cat_codes[i] in { 'Sh2' }: # skip '-' character in case of Sh2 object ID
                ccl += 1
            pos = int(log(len(dso_list), 10)) + 1
            # add 0 before dso ID (in catalog)
            dso_list.sort(key=lambda x: (('0' * (pos - (len(x.name) - ccl))) + x.name[ccl:]) if len(x.name) - ccl <  pos else x.name[ccl:])
        
        line_cnt = 1

        # Import master DSO from preferred catalogs 
        for i in range(1000):
            dso_list = pref_cats[i]
            if dso_list and i in cat_codes:
                line_cnt = _save_dso_list(dso_count, line_cnt, dso_list, master_dso_map, True)

        # Import child DSO from preferred catalogs
        line_cnt = _save_dso_list(dso_count, line_cnt, other_dsos, master_dso_map, True) 
            
        for i in range(1000):
            dso_list = pref_cats[i]
            if dso_list and i in cat_codes:
                line_cnt = _save_dso_list(dso_count, line_cnt, dso_list, master_dso_map, False)

        line_cnt = _save_dso_list(dso_count, line_cnt, other_dsos, master_dso_map, False) 
        
        db.session.commit()
        
    except KeyError as err:
        print('\nKey error: {}'.format(err))
        db.session.rollback()
    except IntegrityError as err:
        print('\nIntegrity error {}'.format(err))
        db.session.rollback()
    print('') # finish on new line
예제 #8
0
def import_carbon_stars(carbon_stars_data_file):
    sf = open(carbon_stars_data_file, 'r')
    lines = sf.readlines()
    sf.close()

    constellation_at = load_constellation_map()

    constell_dict = {}

    for co in Constellation.query.all():
        constell_dict[co.iau_code] = co.id

    try:
        editor_user = User.get_editor_user()
        star_list = StarList.query.filter_by(name='carbon-stars').first()
        if star_list:
            star_list.name = 'carbon-stars'
            star_list.long_name = 'Carbon Stars'
            star_list.update_by = editor_user.id
            star_list.create_date = datetime.now()
            star_list.star_list_items[:] = []
            star_list.star_list_descriptions[:] = []
        else:
            star_list = StarList(name='carbon-stars',
                                 long_name='Carbon Stars',
                                 create_by=editor_user.id,
                                 update_by=editor_user.id,
                                 create_date=datetime.now(),
                                 update_date=datetime.now())

        db.session.add(star_list)
        db.session.flush()

        base_name = os.path.basename(carbon_stars_data_file)
        descr_list = _load_descriptions(
            os.path.dirname(carbon_stars_data_file), base_name[:-len('.txt')],
            star_list, editor_user)

        for descr in descr_list:
            db.session.add(descr)

        db.session.flush()

        row_count = len(lines)
        row_id = 0
        for line in lines:
            row_id += 1
            progress(row_id, row_count, 'Importing carbon stars catalog')
            str_hd = line[0:7].strip()
            hd = int(str_hd) if str_hd else None
            var_id = line[7:17].strip()
            ra = int(line[17:23].strip()) * np.pi / 12.0 + int(
                line[23:26].strip()) * np.pi / (12.0 * 60.0) + float(
                    line[26:31].strip()) * np.pi / (12 * 60.0 * 60)
            dec = int(line[34:35] + '1') * (
                int(line[35:37].strip()) * np.pi / 180.0 +
                int(line[38:40].strip()) * np.pi /
                (180.0 * 60.0) + int(line[41:43].strip()) * np.pi /
                (180.0 * 60.0 * 60.0))
            mag = float(line[43:50].strip())
            sp_type = line[50:69].strip()
            max_min = line[69:82].strip()
            min = None
            max = None
            if max_min:
                sep_index = max_min.find('-')
                if sep_index >= 0:
                    min = float(max_min[0:sep_index])
                    max = float(max_min[sep_index + 1:])

            star = None

            if hd is not None:
                star = Star.query.filter_by(hd=hd).first()

            if not star and var_id:
                star = Star.query.filter_by(var_id=var_id).first()

            if not star:
                star = Star()
                star.src_catalogue = 'carbon_stars'

            constellation = constellation_at(
                position_from_radec(ra / np.pi * 12.0, dec / np.pi * 180.0))

            star.hd = hd
            star.var_id = var_id
            star.ra = ra
            star.dec = dec
            star.mag = mag
            star.mag_max = max
            star.mag_min = min
            star.constellation_id = constell_dict[
                constellation] if constellation else None
            if sp_type:
                star.sp_type = sp_type

            db.session.add(star)
            db.session.flush()

            item = StarListItem.query.filter_by(star_list_id=star_list.id,
                                                star_id=star.id).first()
            if not item:
                item = StarListItem(
                    star_list_id=star_list.id,
                    star_id=star.id,
                    item_id=row_id,
                    create_by=editor_user.id,
                    create_date=datetime.now(),
                )
            db.session.add(item)

        db.session.commit()

    except KeyError as err:
        print('\nKey error: {}'.format(err))
        db.session.rollback()
    except IntegrityError as err:
        print('\nIntegrity error {}'.format(err))
        db.session.rollback()
    print('')  # finish on new line
예제 #9
0
파일: import_vic.py 프로젝트: skybber/czsky
def import_vic(vic_data_file):
    """Import data from VIC catalog."""
    from sqlalchemy.exc import IntegrityError

    constellation_at = load_constellation_map()

    constell_dict = {}

    for co in Constellation.query.all():
        constell_dict[co.iau_code] = co.id

    row_count = sum(1 for line in open(vic_data_file)) - 1

    with open(vic_data_file) as csvfile:
        reader = csv.DictReader(csvfile, delimiter=';')
        catalogue_id = Catalogue.get_catalogue_id_by_cat_code('VIC')
        row_id = 0
        try:
            for row in reader:
                row_id += 1
                progress(row_id, row_count, 'Importing VIC catalogue')

                dso_name = 'VIC' + str(row_id)

                c = DeepskyObject.query.filter_by(name = dso_name).first()

                if c is None:
                    c = DeepskyObject()

                ra_ang = Angle(hours=tuple(map(float, row['RA'].split(',')))) if len(row['RA']) > 0 else None
                dec_ang = Angle(degrees=tuple(map(float, row['Dec'].split(',')))) if len(row['Dec']) > 0 else None

                constellation = constellation_at(position_from_radec(ra_ang.radians / np.pi * 12.0, dec_ang.radians / np.pi * 180.0))

                c.name = dso_name
                c.type = 'AST'
                c.ra = ra_ang.radians if ra_ang else None
                c.dec = dec_ang.radians if dec_ang else None
                c.constellation_id = constell_dict[constellation] if constellation else None
                c.catalogue_id = catalogue_id
                c.major_axis = vic2int(row['length']) / 10 * 60.0
                c.minor_axis = vic2int(row['width']) / 10 * 60.0
                c.position_angle = vic2int(row['orient']) / 10
                c.mag = vic2int(row['mag']) / 10
                c.surface_bright = vic2int(row['brightness']) / 10
                c.hubble_type = None
                c.c_star_u_mag = None
                c.c_star_b_mag = None
                c.c_star_v_mag = None
                c.identifiers = None
                c.common_name = row['name'].strip()
                c.descr = None

                db.session.add(c)
            db.session.commit()
        except KeyError as err:
            print('\nKey error: {}'.format(err))
            db.session.rollback()
        except IntegrityError as err:
            print('\nIntegrity error {}'.format(err))
            db.session.rollback()
        print('') # finish on new line
예제 #10
0
def pos_to_constellation(pos):
    constellation_at = api.load_constellation_map()
    return constellation_at(pos)