diff --git a/Makefile b/Makefile index 3eab2e7a..d6be8fc2 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ BIN = $(SRC)/starcheck.pl $(SRC)/starcheck LIB = $(SRC)/lib/Ska/Starcheck/Obsid.pm \ $(SRC)/lib/Ska/Parse_CM_File.pm PYTHON_LIB = starcheck/calc_ccd_temps.py starcheck/pcad_att_check.py starcheck/plot.py \ - starcheck/utils.py starcheck/__init__.py + starcheck/utils.py starcheck/check_obsid.py starcheck/__init__.py DOC_RST = $(SRC)/aca_load_review_cl.rst DOC_HTML = aca_load_review_cl.html @@ -20,7 +20,7 @@ TEST_DATA_TGZ = ${SKA}/data/starcheck/JUL0918A_test_data.tar.gz # with "make install_dist" from that project TEST_BACKSTOP = JUL0918A/CR190_0603.backstop -DATA_FILES = starcheck/data/ACABadPixels starcheck/data/agasc.bad \ +DATA_FILES = starcheck/data/ACABadPixels \ starcheck/data/fid_CHARACTERIS_JUL01 starcheck/data/fid_CHARACTERIS_FEB07 \ starcheck/data/fid_CHARACTERISTICS starcheck/data/characteristics.yaml \ starcheck/data/overlib.js starcheck/data/up.gif starcheck/data/down.gif \ @@ -34,10 +34,10 @@ HOSTNAME = $(shell hostname) $(TEST_BACKSTOP): - tar -zxvpf $(TEST_DATA_TGZ) + tar -zxvpf $(TEST_DATA_TGZ) -all: +all: # Nothing to make; "make install" to install to $(SKA) diff --git a/starcheck/check_obsid.py b/starcheck/check_obsid.py new file mode 100644 index 00000000..8df0dbb1 --- /dev/null +++ b/starcheck/check_obsid.py @@ -0,0 +1,410 @@ +import pickle +from pathlib import Path +import gzip +import numpy as np +from astropy.table import Table + +from starcheck.utils import time2date, date2time, de_bytestr # noqa +from mica.archive import aca_dark +from chandra_aca.star_probs import guide_count, mag_for_p_acq +from chandra_aca.transform import (yagzag_to_pixels, pixels_to_yagzag, + mag_to_count_rate) +import Quaternion +from Ska.quatutil import radec2yagzag +import agasc +from proseco.core import ACABox +from proseco.catalog import get_effective_t_ccd, get_aca_catalog +from proseco.guide import get_imposter_mags +import proseco.characteristics as char + +import mica.stats.acq_stats +import mica.stats.guide_stats + +ACQS = mica.stats.acq_stats.get_stats() +GUIDES = mica.stats.guide_stats.get_stats() + + +def _get_aca_limits(): + return float(char.aca_t_ccd_planning_limit), float(char.aca_t_ccd_penalty_limit) + + +def _pixels_to_yagzag(i, j): + """ + Call chandra_aca.transform.pixels_to_yagzag. + This wrapper is set to pass allow_bad=True, as exceptions from the Python side + in this case would not be helpful, and the very small bad pixel list should be + on the CCD. + :params i: pixel row + :params j: pixel col + :returns tuple: yag, zag as floats + """ + yag, zag = pixels_to_yagzag(i, j, allow_bad=True) + return float(yag), float(zag) + + +def _yagzag_to_pixels(yag, zag): + """ + Call chandra_aca.transform.yagzag_to_pixels. + This wrapper is set to pass allow_bad=True, as exceptions from the Python side + in this case would not be helpful, and the boundary checks and such will work fine + on the Perl side even if the returned row/col is off the CCD. + :params yag: y-angle arcsecs (hopefully as a number from the Perl) + :params zag: z-angle arcsecs (hopefully as a number from the Perl) + :returns tuple: row, col as floats + """ + row, col = yagzag_to_pixels(yag, zag, allow_bad=True) + return float(row), float(col) + + +def _guide_count(mags, t_ccd, count_9th=False): + eff_t_ccd = get_effective_t_ccd(t_ccd) + return float(guide_count(np.array(mags), eff_t_ccd, count_9th)) + + +def check_hot_pix(idxs, yags, zags, mags, types, t_ccd, date, dither_y, dither_z): + """ + Return a list of info to make warnings on guide stars or fid + lights with local dark map that gives an 'imposter_mag' that could + perturb a centroid. The potential worst-case offsets (ignoring + effects at the background pixels) are returned and checking + against offset limits needs to be done from calling code. + + This fetches the dark current before the date of the observation + and passes it to proseco.get_imposter_mags with the star candidate + positions to fetch the brightest 2x2 for each and calculates the + mag for that region. The worse case offset is then added to an + entry for the star index. + + :param idxs: catalog indexes as list or array + :param yags: catalog yangs as list or array + :param zags: catalog zangs as list or array + :param mags: catalog mags (AGASC mags for stars estimated fid mags for fids) list or array + :param types: catalog TYPE (ACQ|BOT|FID|MON|GUI) as list or array + :param t_ccd: observation t_ccd in deg C (should be max t_ccd in guide phase) + :param date: observation date (bytestring via Inline) + :param dither_y: dither_y in arcsecs (guide dither) + :param dither_z: dither_z in arcsecs (guide dither) + :param yellow_lim: yellow limit centroid offset threshold limit (in arcsecs) + :param red_lim: red limit centroid offset threshold limit (in arcsecs) + :return imposters: list of dictionaries with keys that define the index, the imposter mag, + a 'status' key that has value 0 if the code to get the imposter mag ran successfully, + calculated centroid offset, and star or fid info to make a warning. + + """ + + types = [t.decode('ascii') for t in types] + date = date.decode('ascii') + eff_t_ccd = get_effective_t_ccd(t_ccd) + + dark = aca_dark.get_dark_cal_image(date=date, t_ccd_ref=eff_t_ccd, aca_image=True) + + def imposter_offset(cand_mag, imposter_mag): + """ + For a given candidate star and the pseudomagnitude of the + brightest 2x2 imposter calculate the max offset of the + imposter counts are at the edge of the 6x6 (as if they were in + one pixel). This is somewhat the inverse of + proseco.get_pixmag_for_offset + + """ + cand_counts = mag_to_count_rate(cand_mag) + spoil_counts = mag_to_count_rate(imposter_mag) + return spoil_counts * 3 * 5 / (spoil_counts + cand_counts) + + imposters = [] + for idx, yag, zag, mag, ctype in zip(idxs, yags, zags, mags, types): + if ctype in ['BOT', 'GUI', 'FID']: + if ctype in ['BOT', 'GUI']: + dither = ACABox((dither_y, dither_z)) + else: + dither = ACABox((5.0, 5.0)) + row, col = yagzag_to_pixels(yag, zag, allow_bad=True) + # Handle any errors in get_imposter_mags with a try/except. This doesn't + # try to pass back a message. Most likely this will only fail if the star + # or fid is completely off the CCD and will have other warning. + try: + # get_imposter_mags takes a Table of candidates as its first argument, so construct + # a single-candidate table `entries` + entries = Table([{'idx': idx, 'row': row, 'col': col, 'mag': mag, 'type': ctype}]) + imp_mags, imp_rows, imp_cols = get_imposter_mags(entries, dark, dither) + offset = imposter_offset(mag, imp_mags[0]) + imposters.append({'idx': int(idx), 'status': int(0), + 'entry_row': float(row), 'entry_col': float(col), + 'bad2_row': float(imp_rows[0]), 'bad2_col': float(imp_cols[0]), + 'bad2_mag': float(imp_mags[0]), 'offset': float(offset)}) + except Exception: + imposters.append({'idx': int(idx), 'status': int(1)}) + return imposters + + +def _get_agasc_stars(ra, dec, roll, radius, date, agasc_file): + """ + Fetch the cone of agasc stars. Update the table with the yag and zag of each star. + Return as a dictionary with the agasc ids as keys and all of the values as + simple Python types (int, float) + """ + stars = agasc.get_agasc_cone(float(ra), float(dec), float(radius), date.decode('ascii'), + agasc_file.decode('ascii')) + q_aca = Quaternion.Quat([float(ra), float(dec), float(roll)]) + yags, zags = radec2yagzag(stars['RA_PMCORR'], stars['DEC_PMCORR'], q_aca) + yags *= 3600 + zags *= 3600 + stars['yang'] = yags + stars['zang'] = zags + + # Get a dictionary of the stars with the columns that are used + # This needs to be de-numpy-ified to pass back into Perl + stars_dict = {} + for star in stars: + stars_dict[str(star['AGASC_ID'])] = { + 'id': int(star['AGASC_ID']), + 'class': int(star['CLASS']), + 'ra': float(star['RA_PMCORR']), + 'dec': float(star['DEC_PMCORR']), + 'mag_aca': float(star['MAG_ACA']), + 'bv': float(star['COLOR1']), + 'color1': float(star['COLOR1']), + 'mag_aca_err': float(star['MAG_ACA_ERR']), + 'poserr': float(star['POS_ERR']), + 'yag': float(star['yang']), + 'zag': float(star['zang']), + 'aspq': int(star['ASPQ1']), + 'var': int(star['VAR']), + 'aspq1': int(star['ASPQ1'])} + + return stars_dict + + +def get_mica_star_stats(agasc_id, time): + """ + Get the acq and guide star statistics for a star before a given time. + The time filter is just there to make this play well when run in regression. + The mica acq and guide stats are fetched into globals ACQS and GUIDES + and this method just filters for the relevant ones for a star and returns + a dictionary of summarized statistics. + + :param agasc_id: agasc id of star + :param time: time used as end of range to retrieve statistics. + + :return: dictionary of stats for the observed history of the star + """ + + # Cast the inputs + time = float(time) + agasc_id = int(agasc_id) + + acqs = Table(ACQS[(ACQS['agasc_id'] == agasc_id) + & (ACQS['guide_tstart'] < time)]) + ok = acqs['img_func'] == 'star' + guides = Table(GUIDES[(GUIDES['agasc_id'] == agasc_id) + & (GUIDES['kalman_tstart'] < time)]) + mags = np.concatenate( + [acqs['mag_obs'][acqs['mag_obs'] != 0], + guides['aoacmag_mean'][guides['aoacmag_mean'] != 0]]) + + avg_mag = float(np.mean(mags)) if (len(mags) > 0) else float(13.94) + stats = {'acq': len(acqs), + 'acq_noid': int(np.count_nonzero(~ok)), + 'gui': len(guides), + 'gui_bad': int(np.count_nonzero(guides['f_track'] < .95)), + 'gui_fail': int(np.count_nonzero(guides['f_track'] < .01)), + 'gui_obc_bad': int(np.count_nonzero(guides['f_obc_bad'] > .05)), + 'avg_mag': avg_mag} + return stats + + +def make_proseco_catalog(kwargs): + """ + Call proseco's get_aca_catalog with the parameters supplied in + `kwargs` for a specific obsid catalog. `kwargs` will be a Perl + hash converted to dict (by Inline) of the expected keyword + params. These keys must be defined: + + 'obsid' obsid + 'att' the target quaternion + 'date' observation date (in Chandra.Time compatible format) + 'n_acq' number of acquisition stars + 'n_guide' number of guide stars + 'man_angle' the maneuver angle to the target quaternion in degrees. + 'include_ids_acq' list of acq star ids + 'include_halfws_acq' list of acq star halfwidths in arcsecs + 'include_ids_guide' list of guide star ids + 'include_ids_fid' list of fid ids + 'dither_acq' acquisition dither + 'dither_guide' guide dither + 't_ccd_acq' acquisition temperature in deg C + 't_ccd_guide' guide temperature in dec C + 'detector' science detector + 'sim_offset' SIM offset + + As these values are from a Perl hash, bytestrings will be + converted by de_bytestr early in this method. + + :param kwargs: dict of expected keywords + :return tuple: (list of floats of star acq probabilties, float P2, float expected acq stars) + + """ + + kw = de_bytestr(kwargs) + + # Note that the fid ids in starcheck are 1-6 + # ACIS, 7-10 HRC-I 11-14 HRC-S. Proseco just uses indexes 1-6 so + # subtract off the offsets. + fid_ids = np.array(kw['fid_ids']) + if kw['detector'] == 'HRC-I': + fid_offset = 6 + elif kw['detector'] == 'HRC-S': + fid_offset = 10 + else: + fid_offset = 0 + fid_ids -= fid_offset + + args = dict(obsid=int(kw['obsid']), + att=Quaternion.normalize(kw['att']), + date=kw['date'], + n_acq=kw['n_acq'], + n_guide=kw['n_guide'], + man_angle=kw['man_angle'], + t_ccd_acq=kw['t_ccd_acq'], + t_ccd_guide=kw['t_ccd_guide'], + dither_acq=ACABox(kw['dither_acq']), + dither_guide=ACABox(kw['dither_guide']), + include_ids_acq=kw['include_ids_acq'], + include_halfws_acq=kw['include_halfws_acq'], + detector=kw['detector'], sim_offset=kw['sim_offset'], + include_ids_guide=kw['include_ids_guide'], + include_ids_fid=list(fid_ids), + n_fid=len(kw['fid_ids']), focus_offset=0) + if 'monitors' in kw: + args['monitors'] = kw['monitors'] + aca = get_aca_catalog(**args) + #import pickle + #pickle.dump({int(kw['obsid']): aca}, open(f"{kw['date']}.pkl", 'wb')) + return aca + + +def proseco_probs(aca, include_ids_acq): + acq_cat = aca.acqs + + # Assign the proseco probabilities back into an array. + p_acqs = [float(acq_cat['p_acq'][acq_cat['id'] == acq_id][0]) for acq_id in include_ids_acq] + + return p_acqs, float(-np.log10(acq_cat.calc_p_safe())), float(np.sum(p_acqs)) + + +def run_sparkles(aca): + acar = aca.get_review_table() + acar.run_aca_review() + return {'warn': [w['text'] for w in acar.messages == 'critical'], + 'orange_warn': [w['text'] for w in acar.messages == 'caution'], + 'yellow_warn': [w['text'] for w in acar.messages == 'warning'], + 'fyi': [w['text'] for w in acar.messages == 'info']} + + +def _mag_for_p_acq(p_acq, date, t_ccd): + """ + Call mag_for_p_acq, but cast p_acq and t_ccd as floats (may or may not be needed) and + convert date from a bytestring (from the Perl interface). + """ + eff_t_ccd = get_effective_t_ccd(t_ccd) + return mag_for_p_acq(float(p_acq), date.decode(), float(eff_t_ccd)) + + +def manual_stars(obsid, proseco_file): + """ + Get the manual include/excludes from the products pickle to display. + """ + pth = Path(de_bytestr(proseco_file)) + open_func = open if pth.suffix == '.pkl' else gzip.open + manual_entries = [] + with open_func(pth, 'rb') as fh: + acas_dict = pickle.load(fh) + aca = acas_dict[obsid] + call_args = aca.call_args.copy() + for key in call_args: + if key.startswith('include') or key.startswith('exclude'): + manual_entries.append(f'has {key} {call_args[key]}\n') + return manual_entries + + +def compare_cats(cat1, cat2, type=None): + + check_cols = ['id', 'type', 'halfw', + 'p_acq', 'mag', 'maxmag', 'yang', 'zang'] + if type == 'gui': + check_cols.extend(['res']) + if type == 'mon': + check_cols.extend(['dim']) + + diffs = [] + if len(cat1) != len(cat2): + diffs.append(f"Mismatch in number of rows in constructed and products {type} catalog") + + for id in set(cat1['id']) - set(cat2['id']): + diffs.append(f"Products catalog no {type} entry for id {id}") + + for id in set(cat2['id']) - set(cat1['id']): + diffs.append(f"Constructed catalog no {type} entry for id {id}") + + for id in cat1['id']: + if id not in cat2['id']: + continue + a = cat1.get_id(id, mon=(type=='mon')) + b = cat2.get_id(id, mon=(type=='mon')) + + for col in check_cols: + if isinstance(a[col], float): + if not np.isclose(a[col], b[col], atol=.1, rtol=0): + diffs.append(f"{col} a[col] {a[col]:.2f} != b[col] {b[col]:.2f}") + else: + if not a[col] == b[col]: + diffs.append(f"{col} a[col] {a[col]} != b[col] {b[col]}") + return diffs + + +def compare_prosecos(aca, pfile): + + diffs = [] + + pth = Path(de_bytestr(pfile)) + open_func = open if pth.suffix == '.pkl' else gzip.open + with open_func(pth, 'rb') as fh: + pfile_acas = pickle.load(fh) + + if aca.obsid not in pfile_acas: + diffs = [f"obsid {aca.obsid} not in {pfile}"] + return diffs + + # Where 'aca' is the proseco ACATable constructed in starcheck and prod_aca + # is the table packaged in the released products. + prod_aca = pfile_acas[aca.obsid] + + # Check temperatures + if not np.isclose(aca.t_ccd_acq, prod_aca.t_ccd_acq, rtol=0, atol=1): + diffs.append(f"Acq t_ccd starcheck {aca.t_ccd_acq:.1f} products pkl {prod_aca.t_ccd_acq:.1f}") + + if not np.isclose(aca.t_ccd_guide, prod_aca.t_ccd_guide, rtol=0, atol=1): + diffs.append( + f"Guide/Max t_ccd starcheck {aca.t_ccd_guide:.1f} products pkl {prod_aca.t_ccd_guide:.1f}") + + # Check acquisition catalog + ok1 = np.in1d(aca['type'], ['ACQ', 'BOT']) + ok2 = np.in1d(prod_aca['type'], ['ACQ', 'BOT']) + diffs.extend(compare_cats(aca[ok1], prod_aca[ok2], 'acq')) + + # Check guide catalog + ok1 = np.in1d(aca['type'], ['GUI', 'BOT']) + ok2 = np.in1d(prod_aca['type'], ['GUI', 'BOT']) + diffs.extend(compare_cats(aca[ok1], prod_aca[ok2], 'gui')) + + # Check fid catalog + ok1 = np.in1d(aca['type'], ['FID']) + ok2 = np.in1d(prod_aca['type'], ['FID']) + diffs.extend(compare_cats(aca[ok1], prod_aca[ok2], 'fid')) + + # Check mon catalog + ok1 = np.in1d(aca['type'], ['MON']) + ok2 = np.in1d(prod_aca['type'], ['MON']) + diffs.extend(compare_cats(aca[ok1], prod_aca[ok2], 'mon')) + + return diffs diff --git a/starcheck/data/agasc.bad b/starcheck/data/agasc.bad deleted file mode 100644 index 34ede428..00000000 --- a/starcheck/data/agasc.bad +++ /dev/null @@ -1,47 +0,0 @@ -1158290496 Incorrect position or proper motion (obsid 19763) (TA 18-Jan-2019) -350392600 Too bright, 3.6 mag in obsid 21252, catalog mag 7.6 (TA/JMC 17-Jan-2019) -797847184 not found as GS in 49383 or 49382, exclude per Tom 12-Mar-2018 -914493824 Too bright, exclude per Eric 15-Aug-2016 -509225640 Too bright, 5.1 mag, exclude per Eric (JMC 17-Feb-2015) -570033768 Proper motion greater than pipeline will correct (JMC 26-Apr-2011) -190977856 Much dimmer than 9.9 mag per obsid 7610 ( JMC 14-May-2007) -650249416 Much brighter than 6th mag per Tom (JMC 19-Apr-2007) -1197635184 Bad agasc info, really a cluster (JMC 20-Dec-2005) -614606480 Large offset as guide in obsid 6820 (JMC 15-Dec-2005) -690625776 Large offsets in eight obs. of Abell 85 (Ref: J.Nichols 8-Sep-04) -414324824 Very large offset (~2 arcsec) in vv_asp for obsid 4501 -260972216 elliptical galaxy -260968880 elliptical galaxy -1196953168 not found as AS or GS, obsid 61635, 14 May 2001 -1004817824 not found as GS in obsid 61559, 6 July 2001 -301078152 not found as GS in obsid 3018, 31 Dec 2001. DSS shows a double star. RAC -301080376 not found as GS in obsid 3018, 31 Dec 2001. DSS shows a normal star. RAC -301465776 not found as GS in obsid 2882, 08 Jan 2002, DSS shows double star, RAC -300948368 not found as GS in obsid 2882, 08 Jan 2002, DSS shows double star, RAC -692724384 star on/in galaxy, PGREEN,RAC, 19 June 2002 -# New stars on 2015:062:17:34:21.440 from agasc_bad/bad_stars.py -36178592 | ACQ Failed 4 of 4 attempts | GUI Not Tracked Median 57.4 %, 4 attempts | -39980640 | ACQ Failed 3 of 3 attempts | GUI Not Tracked Median 66.6 %, 3 attempts | -185871616 | No ACQ | GUI Not Tracked Median 100.0 %, 3 attempts | -188751528 | ACQ Failed 6 of 6 attempts | No GUI | -261621080 | ACQ Failed 11 of 13 attempts | No GUI | -296753512 | ACQ Failed 3 of 3 attempts | GUI Not Tracked Median 57.7 %, 6 attempts | -335025128 | ACQ Failed 6 of 7 attempts | No GUI | -335028096 | ACQ Failed 6 of 6 attempts | No GUI | -444743456 | ACQ Failed 3 of 3 attempts | GUI Not Tracked Median 88.2 %, 3 attempts | -465456712 | ACQ Failed 10 of 10 attempts | GUI Not Tracked Median 62.1 %, 7 attempts | -490220520 | ACQ Failed 5 of 5 attempts | GUI Not Tracked Median 66.6 %, 5 attempts | -502793400 | ACQ Failed 6 of 6 attempts | No GUI | -637144600 | ACQ Failed 2 of 2 attempts | GUI Not Tracked Median 65.6 %, 3 attempts | -647632648 | ACQ Failed 5 of 5 attempts | GUI Not Tracked Median 57.2 %, 4 attempts | -656409216 | ACQ Failed 9 of 9 attempts | GUI Not Tracked Median 99.4 %, 9 attempts | -788418168 | ACQ Failed 7 of 7 attempts | GUI Not Tracked Median 100.0 %, 3 attempts | -849226688 | ACQ Failed 4 of 4 attempts | GUI Not Tracked Median 66.7 %, 3 attempts | -956175008 | ACQ Failed 6 of 6 attempts | GUI Not Tracked Median 66.6 %, 6 attempts | -989598624 | ACQ Failed 15 of 15 attempts | No GUI | -1016736608 | ACQ Failed 5 of 5 attempts | GUI Not Tracked Median 100.0 %, 5 attempts | -1044122248 | ACQ Failed 15 of 15 attempts | No GUI | -1117787424 | ACQ Failed 6 of 6 attempts | GUI Not Tracked Median 100.0 %, 6 attempts | -1130635848 | ACQ Failed 51 of 63 attempts | No GUI | -1130649544 | ACQ Failed 12 of 12 attempts | GUI Not Tracked Median 100.0 %, 4 attempts | -1161827976 | ACQ Failed 6 of 6 attempts | GUI Not Tracked Median 100.0 %, 6 attempts | diff --git a/starcheck/data/bad_acq_stars.rdb b/starcheck/data/bad_acq_stars.rdb deleted file mode 100644 index ae724e52..00000000 --- a/starcheck/data/bad_acq_stars.rdb +++ /dev/null @@ -1,4408 +0,0 @@ -agasc_id n_noids n_obs -N N N -139192 1 30 -140408 1 4 -264752 1 2 -398936 1 2 -399160 1 8 -399552 7 9 -525656 1 1 -656088 1 2 -660624 1 1 -788048 1 1 -789736 1 2 -1314776 8 8 -1314824 1 1 -1314840 1 2 -1317216 2 8 -1580328 1 3 -1974040 1 1 -2362864 1 2 -2363144 1 3 -2622760 1 4 -2626672 1 1 -2629112 1 1 -2759144 1 3 -2889624 1 1 -3022536 1 1 -3287472 1 1 -3547216 1 1 -3676464 1 1 -3679400 1 1 -3803144 3 3 -3939256 1 1 -4718808 1 1 -4859192 2 2 -4984112 1 4 -4986720 1 4 -5115672 6 6 -5117584 2 2 -5118600 1 2 -5119688 1 8 -5376272 1 1 -5377920 2 2 -5509168 1 2 -5771800 2 2 -5778000 1 2 -6033232 1 7 -6033872 1 11 -6034672 1 1 -6161832 1 1 -6166048 1 2 -6169408 1 13 -6299352 1 1 -6953216 1 1 -7085224 1 1 -7210488 2 2 -7215264 1 2 -7472112 1 3 -7606192 1 2 -7736368 1 1 -7744656 1 1 -7865512 1 1 -8134464 1 1 -8521984 1 1 -8657528 1 1 -8658528 1 1 -9047352 1 1 -9048824 1 1 -9570024 1 3 -9967472 1 1 -10890216 1 3 -11019808 1 1 -11272672 1 1 -11276264 1 3 -11409120 1 2 -11665480 2 4 -12458520 2 2 -12462752 1 1 -12980304 1 1 -13372432 1 1 -13897608 1 2 -14025968 1 2 -15205224 1 1 -15211576 3 10 -15865200 1 1 -16912728 1 16 -16913216 1 6 -16918960 1 2 -17834912 2 2 -20192040 1 6 -20202208 1 2 -20204800 1 1 -20452232 1 1 -20725720 1 1 -20727600 1 2 -21631888 1 1 -23724888 1 1 -24656936 1 1 -25958816 1 1 -26357216 1 1 -26486304 1 3 -26487640 1 6 -27011256 1 2 -27792168 1 1 -28711624 1 1 -29626032 1 1 -30289640 1 8 -30546160 1 1 -30546792 1 1 -30819720 1 1 -30941672 1 1 -31067168 1 2 -31070800 1 6 -31072648 1 6 -31072656 1 23 -31074808 1 5 -31075128 3 68 -31457712 1 8 -31457856 3 13 -31463496 1 42 -31464456 1 2 -31465976 1 2 -31730392 1 2 -31982136 6 55 -31984984 3 33 -31985848 2 34 -31986688 1 2 -31990344 1 9 -31993904 1 8 -32119432 1 1 -32122224 1 1 -32252472 1 1 -32375384 4 78 -32381704 2 22 -33033624 1 1 -33037336 1 1 -33037864 1 1 -33162744 1 1 -33163792 1 2 -33168464 1 1 -33297752 1 1 -33299280 1 1 -33554464 1 1 -33556656 1 2 -33560512 1 2 -33562160 2 2 -33688248 1 2 -33689144 1 2 -33694880 1 1 -33955472 1 1 -34080904 1 3 -34082400 1 2 -34082712 1 1 -34084648 1 1 -34214824 1 1 -34342104 2 3 -34346328 1 1 -34473416 1 1 -34473424 1 2 -34603520 1 1 -34604904 1 1 -34735312 1 1 -34737840 1 1 -34738608 1 1 -34870952 1 1 -34874488 2 2 -35001864 1 1 -35003632 1 3 -35128696 1 4 -35259136 2 4 -35390480 1 1 -35391112 1 1 -35396424 3 3 -35527024 1 1 -35527656 1 2 -35656360 1 4 -35656576 1 2 -35657256 1 3 -35657456 1 3 -35783880 1 1 -35784192 1 3 -35784224 1 7 -35786792 1 6 -35787320 1 1 -35787872 1 1 -36047576 1 1 -36178064 1 1 -36178344 1 3 -36178592 4 4 -36314184 1 1 -36442848 1 3 -36700760 1 1 -36700856 1 1 -36963960 1 19 -36965616 1 11 -37098928 3 3 -37099360 1 3 -37101448 1 3 -37357800 1 1 -37362896 1 2 -37488760 2 6 -37490504 1 6 -37617728 1 13 -37621368 1 2 -37623240 2 6 -37749592 1 10 -37750424 2 2 -37753576 1 5 -37757640 1 4 -37879824 1 6 -37887704 1 1 -38011968 1 1 -38016872 1 1 -38142752 1 1 -38148224 1 1 -38281624 1 1 -38404520 1 2 -38406840 1 1 -38407800 2 4 -38410840 1 3 -38535536 1 1 -38538496 1 1 -39193952 1 2 -39324064 1 1 -39454616 1 1 -39454624 1 2 -39455680 1 1 -39847392 1 1 -39849680 1 2 -39854128 1 1 -39980640 3 3 -40108048 1 5 -40114416 2 5 -40241232 1 3 -40504440 1 2 -40771208 1 1 -41033248 1 3 -41033328 1 3 -41034688 1 2 -41157776 1 1 -41550824 2 8 -41557880 1 1 -41686144 1 1 -41691352 1 3 -41819792 1 2 -41946328 1 1 -41954592 1 1 -42077896 1 2 -42079280 1 2 -42084152 1 1 -42206192 1 2 -42206768 1 1 -42208184 1 1 -42212536 1 1 -42603824 1 1 -42734568 1 1 -42861760 1 2 -42864792 1 2 -42993696 1 1 -43124952 1 2 -43255104 1 2 -43255184 1 3 -43256248 1 1 -43257832 2 2 -43260816 1 1 -43396016 1 1 -43398080 1 3 -43518768 1 1 -43521456 1 1 -43527200 1 1 -43648032 1 1 -43652384 1 1 -43780120 1 1 -43784968 1 8 -43910568 1 1 -43911288 1 3 -43914888 1 1 -44304840 3 4 -44306848 2 4 -44568192 1 1 -44832232 1 1 -44957744 3 3 -44959152 1 4 -44959728 4 6 -44959920 1 1 -44961248 2 2 -44963160 1 1 -44963768 1 1 -44965328 1 3 -45222064 1 3 -45356200 1 3 -45482024 3 4 -45484288 1 1 -45488248 1 1 -45488272 1 1 -45488688 1 2 -45489008 1 1 -45613480 2 4 -45615272 1 8 -45617376 3 12 -46139120 1 1 -46402640 1 1 -46794712 3 3 -46930392 1 4 -46932336 1 5 -47060048 2 4 -47193408 1 3 -47580328 1 1 -47844016 1 1 -47846640 1 1 -47978464 1 1 -49288304 1 8 -49292680 1 6 -49414704 1 2 -49683240 1 1 -49818760 1 1 -50211280 1 1 -50475192 1 2 -50600784 1 1 -50607928 1 2 -51385848 1 3 -51532528 1 1 -51651088 1 5 -51774472 1 2 -52178072 1 1 -52181712 1 4 -53093016 1 1 -54396112 1 1 -54532640 1 2 -54677144 1 1 -54804952 1 1 -54806776 1 1 -55201240 1 1 -55320312 1 1 -56382360 1 1 -56504984 1 1 -56625456 1 1 -57562656 1 1 -57945504 1 1 -58458792 1 2 -58725680 1 1 -58852176 1 6 -59652848 1 1 -60708736 1 1 -60710248 2 10 -61368328 1 1 -63453824 1 1 -63595216 1 3 -63703920 1 1 -63742024 1 1 -64113280 1 3 -65541816 1 1 -67240416 1 2 -68029560 1 1 -68159880 1 1 -68820888 1 4 -68948440 2 2 -69212776 1 1 -69599768 1 2 -70004776 1 1 -70006872 1 1 -70009720 1 1 -70011400 1 1 -70259024 1 2 -70386824 1 2 -70399544 1 1 -70913872 1 1 -71312704 1 2 -71696600 1 1 -72886464 1 2 -73157184 1 1 -73281048 1 3 -73410976 2 2 -73552456 1 1 -73794832 1 2 -73796136 1 1 -74331480 1 2 -74855640 1 35 -75503592 1 2 -75505240 1 8 -75505280 1 4 -75507632 1 4 -75633656 2 3 -75766872 1 4 -75769792 2 6 -76681976 1 2 -76809416 1 3 -76813600 1 1 -76939344 1 5 -76939664 2 4 -76939888 1 2 -76943552 1 1 -76945480 1 2 -77073552 1 1 -77074728 1 1 -77470216 1 2 -77736792 1 4 -77860128 1 3 -78650928 1 1 -78784808 1 2 -79171680 1 2 -79440920 1 2 -79566056 1 1 -79695312 1 1 -79697824 1 3 -79833728 1 1 -79959376 1 1 -80093184 1 2 -80349200 1 1 -80615256 1 1 -81003152 1 3 -81007936 1 3 -81012344 1 1 -81014376 1 1 -81139744 1 2 -81401352 1 1 -81668496 1 1 -81923888 1 1 -82060736 2 2 -82186624 1 3 -82317736 1 7 -82971056 1 7 -82972976 1 8 -82976088 2 8 -82976232 3 6 -82976896 2 8 -83104576 1 6 -83502000 2 3 -83624440 1 6 -83626040 1 6 -83626736 1 1 -83631152 1 6 -83631872 1 2 -83756416 1 2 -84018536 1 1 -84020800 1 1 -84280944 1 7 -84283272 6 8 -84283384 1 8 -84286160 1 7 -84416088 1 1 -84807112 1 6 -84808840 1 1 -85208528 1 1 -85592240 1 1 -85599976 1 1 -85864096 1 3 -86116848 1 1 -87171360 1 1 -87173112 1 1 -87818984 1 3 -87950240 1 3 -87955344 3 9 -88478192 1 1 -88871208 1 2 -89132408 1 1 -89132488 1 1 -89403728 1 5 -89929512 1 1 -90057824 1 1 -90575816 1 1 -91893176 1 2 -92276312 1 2 -92278744 1 1 -92548224 1 1 -93852736 1 1 -93861968 1 4 -93986144 1 1 -95161432 2 2 -96606600 1 4 -99223256 1 1 -99624008 1 2 -99631040 1 1 -99753296 1 1 -99754392 1 2 -100011064 1 3 -103551032 1 1 -103551960 1 1 -103553992 1 1 -103817776 1 2 -103943072 1 1 -104212752 1 4 -105259912 1 1 -105787496 1 1 -106046248 1 1 -106431768 1 1 -106433400 1 1 -106438024 1 1 -106567448 1 1 -106569792 1 3 -106827784 1 1 -106831760 1 1 -106840848 1 1 -106964992 1 1 -107224776 1 2 -107621824 1 6 -107743264 2 2 -107743952 1 3 -107881800 1 1 -108408568 1 1 -108531640 1 3 -108799880 1 1 -108930192 1 1 -109581256 1 1 -109581760 1 1 -109707584 1 1 -109979512 1 1 -109979960 1 1 -110111936 1 2 -110498728 1 1 -110503072 1 1 -110633832 1 3 -111019872 1 2 -111151264 1 2 -111159824 1 1 -111160488 1 1 -111161008 1 1 -111280232 3 3 -111281472 1 4 -111281544 2 5 -111412336 1 1 -111415552 1 1 -111543792 1 3 -111545032 1 1 -111546576 1 1 -111546720 1 2 -111549712 1 1 -111552984 1 2 -111676280 1 1 -111676584 1 2 -111805360 2 2 -111807016 1 1 -111808376 1 1 -111811832 1 2 -111944880 1 1 -112067360 2 6 -112067736 1 7 -112068312 1 10 -112068352 4 8 -112070288 1 2 -112072760 1 1 -112075144 1 1 -112855440 1 1 -112988624 1 2 -113248408 2 2 -113249752 1 2 -113379664 1 1 -113380776 1 2 -113385664 1 1 -113386592 1 2 -113508784 2 7 -113510544 1 1 -113510880 4 5 -113511280 1 6 -113513760 1 2 -113515344 1 1 -113516320 1 2 -113771400 1 1 -113776416 1 1 -113905264 3 12 -114164944 1 2 -114166328 1 1 -114296240 1 1 -114299144 1 3 -114302944 2 4 -114427048 1 1 -114433488 2 9 -114557488 1 1 -114557560 2 2 -114558728 2 4 -114558856 1 1 -114561936 1 1 -114562392 1 17 -114562464 1 3 -114562920 1 3 -114563056 1 11 -114563648 1 19 -114563816 4 8 -114564432 2 13 -114565064 1 16 -114565080 2 11 -114565200 1 8 -114565272 3 4 -114565408 1 1 -114690512 1 1 -114820856 1 2 -114950920 1 1 -114951568 1 4 -114952608 1 3 -114952784 1 3 -114952792 1 118 -114955320 3 8 -114955704 1 2 -114956144 3 65 -114956184 6 63 -114956608 1 25 -114957320 1 7 -115084280 1 10 -115085336 1 4 -115086992 1 6 -115087248 1 1 -115089656 1 1 -115212320 1 1 -115212768 1 5 -115213032 1 3 -115213304 2 2 -115214584 2 2 -115214872 2 9 -115215392 3 7 -115215456 2 4 -115215984 1 19 -115216032 2 3 -115217168 1 7 -115345072 1 1 -115346872 1 2 -115347168 1 3 -115347400 3 22 -115347520 8 91 -115347896 1 7 -115348256 3 5 -115348424 2 27 -115348568 1 13 -115348632 5 20 -115348640 1 1 -115349560 1 12 -115349744 2 21 -115474672 1 4 -115479416 3 12 -115479928 1 11 -115480872 1 2 -115482384 1 5 -115607312 1 1 -115609648 1 3 -115736608 1 2 -115874968 1 1 -116005576 1 3 -116131048 1 1 -116267000 1 1 -116269312 1 1 -116398680 1 1 -116399576 1 1 -116524000 1 2 -116531808 1 1 -116657120 1 1 -116657928 1 1 -116791744 3 4 -116792320 3 3 -116920248 1 1 -117182080 1 2 -117309912 1 1 -117310848 1 2 -117313184 1 3 -117575560 2 2 -117837160 1 1 -117837624 1 1 -117967064 1 2 -118228376 1 1 -118231880 1 2 -118232104 1 2 -118234016 1 2 -118236216 1 3 -118237896 1 3 -118358288 2 2 -118358496 1 2 -118359864 2 2 -118364928 1 1 -118366912 1 1 -118489504 1 1 -118495656 1 1 -118497200 1 1 -118630768 1 2 -118752432 1 1 -118753064 1 1 -118757944 2 2 -119014616 1 3 -119019360 1 3 -119020960 1 3 -119409912 1 6 -119538136 1 3 -119539952 1 4 -119540000 1 1 -119545088 1 1 -119670208 1 1 -120202856 2 2 -120327456 1 3 -120460480 1 1 -120466376 1 3 -120598184 1 11 -120599960 1 6 -120720064 1 1 -120725784 1 2 -120851456 2 5 -120981504 1 1 -121251928 2 2 -121504088 1 1 -121507864 1 6 -121508296 3 5 -122296136 1 1 -122423528 1 2 -122556168 1 3 -122559192 1 3 -122821960 1 1 -123734352 1 1 -123872272 1 1 -123874048 2 2 -124522784 1 1 -124525984 1 1 -125050784 1 1 -126495600 1 1 -126497664 1 1 -126748392 1 1 -127799856 1 1 -127810440 1 1 -130034640 1 3 -134103152 1 1 -134364608 1 1 -135420376 1 1 -136318600 1 8 -138159320 1 4 -138437256 1 1 -138824368 1 1 -139204232 1 1 -139206888 1 1 -139217024 1 1 -139858552 1 2 -140654424 1 5 -141308992 1 1 -145113736 2 2 -145245680 1 1 -146278704 1 1 -146548480 1 1 -146676200 1 1 -146679728 1 1 -148118232 1 6 -148378592 1 1 -148511784 1 1 -149422392 1 2 -149947120 1 1 -149948864 1 1 -149957144 1 1 -150609408 1 1 -150609664 1 3 -150738272 1 2 -151393704 1 1 -151396936 1 3 -151521360 1 3 -151523568 1 2 -151535600 1 2 -151914248 1 3 -151924400 1 3 -152175600 1 1 -152177336 1 1 -152183880 1 1 -152185152 1 1 -152186792 1 1 -152312800 1 1 -152572480 1 1 -152706424 2 2 -152831696 1 1 -152843520 1 1 -152965656 1 1 -152971656 1 1 -153092608 1 1 -153099424 1 1 -153101800 2 2 -153360520 1 1 -153756400 1 1 -154405872 1 1 -154406584 1 1 -154417888 1 2 -154535360 1 1 -154544992 1 1 -154678448 1 2 -154804384 1 1 -154937312 1 1 -155718744 1 2 -155721328 1 1 -155976440 6 6 -156119280 2 6 -156247640 1 1 -156762400 1 2 -156767384 1 1 -156767432 1 1 -156770512 1 2 -156770520 1 1 -156899496 1 3 -157026752 1 3 -157036432 1 2 -157556824 1 2 -157816736 1 1 -157823304 1 1 -157946888 2 3 -157948536 1 1 -157949608 1 11 -157951008 1 2 -157951360 2 8 -157953216 2 14 -158209400 1 1 -158346592 1 4 -158597304 1 1 -158871648 1 1 -159655760 1 2 -160052720 1 1 -160437072 1 2 -160695232 1 2 -160696144 1 4 -160696160 1 1 -160702672 1 1 -160705024 1 2 -160968272 1 2 -161351192 1 2 -161352224 1 2 -161352408 1 1 -161353024 1 1 -161353296 1 2 -161362616 1 2 -161616856 2 4 -161875176 1 1 -162140272 1 3 -162272096 2 2 -162791496 1 2 -162792800 1 2 -162799088 2 2 -162800672 2 2 -163450920 1 1 -164894256 1 1 -165026576 1 2 -165162616 1 1 -165290440 2 2 -165683088 1 1 -165945048 2 3 -166461744 2 4 -166858280 1 5 -167642208 1 1 -167653584 1 1 -171444304 1 2 -171584504 1 40 -171594024 5 33 -171712776 1 12 -173806512 1 1 -173806768 1 2 -175387248 2 2 -175388408 1 2 -175506848 2 2 -178658928 1 1 -178664104 1 1 -179178128 1 2 -179438800 1 2 -180232848 1 1 -181417024 1 2 -181419528 1 1 -181539216 1 1 -181935520 1 2 -181941128 1 3 -182987472 1 4 -182990440 1 4 -182992064 1 3 -183108024 1 3 -183119288 1 4 -183637520 1 1 -183777272 1 1 -183901184 1 1 -183902856 1 1 -184032144 1 1 -184158464 1 1 -184426416 1 1 -184558208 1 1 -184680656 2 2 -184681120 1 2 -184948712 1 1 -185205096 1 5 -185205288 3 15 -185208224 1 1 -185208992 2 14 -185210536 1 1 -185341432 1 1 -185472712 1 3 -185599904 1 2 -185602416 1 1 -185608760 1 1 -185734696 1 3 -185993840 1 1 -186124112 1 1 -186127696 1 3 -186130352 1 1 -186390904 1 1 -186651856 1 1 -186655632 1 1 -186779608 1 1 -186911768 1 4 -187040664 1 1 -187305256 1 4 -187309672 2 2 -187309720 1 4 -187309824 1 2 -187439784 1 1 -187566680 1 2 -187571488 1 1 -187703776 1 1 -187965800 1 4 -187966120 1 4 -188088960 1 3 -188226312 1 1 -188354960 1 2 -188356208 1 1 -188357488 1 1 -188358160 1 2 -188358304 1 4 -188367168 1 3 -188482256 1 1 -188483608 1 1 -188485632 1 1 -188489480 1 1 -188497304 1 1 -188497688 1 1 -188501704 1 1 -188502192 1 1 -188617504 1 2 -188618624 1 1 -188619864 1 3 -188620536 2 3 -188623640 1 1 -188623712 1 1 -188630256 1 1 -188630352 1 1 -188630664 1 2 -188631072 1 1 -188745672 5 8 -188748040 1 3 -188751376 1 6 -188751528 6 6 -188752136 5 6 -188752536 6 6 -189007624 1 1 -189013232 1 1 -189019936 1 2 -189022312 1 9 -189139752 1 1 -189141920 1 7 -189147384 1 9 -189147672 1 1 -189148240 4 9 -189149096 1 1 -189149592 1 1 -189149656 1 2 -189268760 1 1 -189268856 1 2 -189271584 1 2 -189273640 1 2 -189275720 1 1 -189279728 1 2 -189280976 1 1 -189399616 1 3 -189399904 5 5 -189400808 2 2 -189403320 1 12 -189403496 1 1 -189407736 1 1 -189417640 1 1 -189540176 2 6 -189542232 1 1 -189547704 1 1 -189548968 1 1 -189663192 1 1 -189663632 1 2 -189664752 1 1 -189675912 1 1 -189808568 1 1 -189809832 1 1 -189925240 1 1 -190186408 1 1 -190317520 1 1 -190321248 1 1 -190321992 1 2 -190448096 1 1 -190448368 1 1 -190587272 2 2 -190719464 2 5 -190843896 3 5 -190847384 3 4 -190973536 1 3 -190977856 3 4 -190978048 4 7 -190980712 1 1 -191104640 1 1 -191374360 1 1 -191496504 1 4 -191503056 1 3 -191630576 1 1 -191764440 1 3 -192285064 1 1 -192285240 1 1 -192285856 1 1 -192287480 1 1 -192420008 1 1 -192553616 1 1 -192682136 1 3 -192682600 1 1 -192683360 1 1 -193070288 1 2 -193072864 1 1 -193467168 1 2 -193599232 1 1 -193729480 1 3 -193730928 1 1 -194251200 1 1 -194516632 1 1 -195436168 1 2 -195438248 1 2 -195439056 1 2 -195692280 1 1 -195694320 1 2 -195694840 1 1 -196609360 1 1 -196609600 1 1 -197265328 1 1 -197531080 2 3 -197793624 1 1 -197795040 1 1 -198181144 1 1 -198443032 1 1 -199492880 1 1 -199758224 1 2 -200415608 1 2 -200416760 1 1 -202521712 1 1 -203432144 1 1 -205145856 1 2 -205273480 1 2 -208280984 1 1 -208803904 1 1 -209335640 1 1 -210119456 1 3 -210250256 1 1 -211699680 1 1 -214699160 1 1 -214701736 1 1 -217458536 1 2 -217847336 1 1 -218371264 1 1 -218372720 1 2 -219938904 1 2 -220204832 1 1 -220468632 1 5 -220597528 1 6 -221517776 1 2 -221524824 1 2 -222050424 1 1 -222695680 1 4 -222823128 1 1 -222827792 1 1 -222831368 1 1 -222953520 1 1 -222965048 1 2 -223874472 1 2 -223883328 1 1 -223883736 2 2 -224002416 1 1 -224014056 1 1 -224265192 1 1 -224400888 1 10 -224534712 1 1 -224538856 1 1 -224932136 1 1 -225182280 1 3 -225329400 1 1 -225576592 1 1 -225709288 1 1 -225713936 1 1 -225717032 1 2 -225853720 1 2 -225979232 1 2 -226101848 1 1 -226105032 1 3 -226235360 1 2 -226244040 1 2 -226361448 1 2 -226369448 3 3 -226895144 1 1 -227019640 1 5 -227944792 1 2 -227949360 1 3 -228076440 1 1 -228206464 3 3 -228208672 1 3 -228339216 2 5 -228471832 2 6 -228474008 1 1 -228600504 1 1 -228990200 1 2 -229378984 1 1 -229381504 1 1 -230046880 1 2 -230439256 1 1 -230693168 1 1 -230703224 1 1 -230704592 1 1 -233187880 1 1 -233965368 1 1 -234888096 1 1 -236334056 1 1 -236992648 1 1 -238028856 1 2 -238030232 1 1 -238556176 1 3 -238560088 1 1 -238815376 1 1 -239075728 1 7 -239075888 1 3 -239077568 2 3 -239078032 1 1 -239080480 2 2 -239080584 1 1 -239081128 1 3 -239083608 1 1 -239470832 1 1 -239474096 4 6 -239609912 1 5 -239613544 1 5 -239733232 1 5 -240256840 1 4 -240257184 1 7 -240260568 1 10 -240260736 1 1 -240262800 3 4 -240388328 2 2 -240389664 1 1 -240391408 1 1 -240782136 2 9 -240913800 1 1 -240914488 1 1 -240914520 1 1 -240922632 1 1 -241435864 1 2 -241973864 1 1 -243803256 1 1 -244985464 1 4 -247597144 1 1 -248257992 2 2 -248275056 1 2 -248918464 1 1 -250228512 2 12 -251139312 2 2 -251405672 1 1 -252055752 2 2 -252062672 1 1 -252451792 1 2 -253243384 1 2 -254023352 1 1 -254024016 1 1 -254024792 1 1 -254030560 1 1 -254819112 1 2 -254819160 1 1 -254822120 1 1 -255079896 1 1 -255340840 1 1 -255469608 1 3 -255472320 1 3 -256377080 1 1 -256382816 1 1 -256385048 1 1 -256519304 1 1 -256647192 1 1 -256773784 1 2 -256912312 1 1 -257168824 1 2 -257298352 1 2 -257557776 1 1 -257561768 1 2 -257562320 1 1 -257562816 1 1 -257563048 1 1 -257692248 1 1 -257694704 1 1 -257696144 1 2 -257696704 1 1 -257819096 1 1 -257822832 1 1 -257956488 1 1 -257959312 1 1 -258215336 1 1 -258605776 1 2 -258612912 1 1 -258614888 1 1 -258736576 1 2 -258744048 1 1 -259002136 1 1 -259003120 1 2 -259006032 1 1 -259007584 1 1 -259148240 1 6 -259265088 1 2 -259523528 1 1 -259654776 1 2 -259654856 1 4 -259671472 1 1 -259785760 1 2 -259786520 1 1 -259790576 1 1 -259796008 1 1 -259918888 1 2 -259925672 1 1 -259925928 1 2 -259935776 1 2 -260051736 1 1 -260054728 1 1 -260058880 1 4 -260060672 1 4 -260060760 2 3 -260061920 3 4 -260062896 1 4 -260063280 2 4 -260064920 1 4 -260065288 1 1 -260180072 1 1 -260184048 1 1 -260185152 1 2 -260185712 1 1 -260186264 2 10 -260186640 2 8 -260187360 1 10 -260318824 1 1 -260323048 1 2 -260325616 2 2 -260326496 1 1 -260444816 1 4 -260445232 1 2 -260449032 1 4 -260575560 1 1 -260576400 1 1 -260577864 1 2 -260578528 1 1 -260579800 1 1 -260703392 1 1 -260704176 1 1 -260709880 1 5 -260716168 1 1 -260834088 2 3 -260836216 1 1 -260849624 4 4 -260857552 1 1 -260857656 1 4 -260859784 1 1 -260861680 1 2 -260964688 1 1 -260964968 1 2 -260965048 8 19 -260965416 5 18 -260966048 5 19 -260966192 1 12 -260967848 5 19 -260968880 1 1 -260969240 1 1 -260969392 2 8 -260970016 1 1 -260972216 1 1 -260974120 1 5 -261097120 1 1 -261112888 1 2 -261228504 2 2 -261229152 1 1 -261231904 1 2 -261233896 1 3 -261367984 1 1 -261490752 1 1 -261490800 1 12 -261492512 1 3 -261492528 1 1 -261494616 1 2 -261494640 4 20 -261499952 5 5 -261502080 4 17 -261503592 1 12 -261504080 1 2 -261504672 2 2 -261504704 1 13 -261505760 1 9 -261508488 1 4 -261620096 1 2 -261621080 11 13 -261621256 4 24 -261621792 8 23 -261623552 4 19 -261623624 1 28 -261624808 4 15 -261625280 1 2 -261625488 3 8 -261633792 1 1 -261636520 1 1 -261637664 2 5 -261752496 2 2 -261754432 7 8 -261757824 3 3 -262146648 1 3 -262150304 1 1 -262150992 1 1 -262282072 1 2 -262407608 1 78 -262407760 5 72 -262407800 3 44 -262407808 1 1 -262408104 7 27 -262408936 3 75 -262409384 7 76 -262409624 10 71 -262410880 2 3 -262411576 1 2 -262411960 1 33 -262538704 1 2 -262540896 1 2 -262541648 1 1 -262543840 1 5 -262545520 1 1 -262668936 1 2 -262807328 2 4 -262933152 1 1 -263062712 1 1 -263066816 2 6 -263067400 1 4 -263068552 1 2 -263068648 1 4 -263068720 1 1 -263071224 2 6 -263201496 1 1 -263324512 1 3 -263325672 1 1 -263332544 1 2 -263459608 1 1 -263464584 4 15 -263592712 1 1 -263593416 2 15 -263593672 2 2 -263594472 1 3 -263719800 1 1 -263851688 1 1 -263854568 1 1 -263857016 1 1 -263982080 1 2 -263982872 1 1 -263984360 1 2 -264115840 2 2 -264116040 2 2 -264119600 1 2 -264241480 1 1 -264375056 1 1 -264381368 1 1 -264381376 1 1 -264508736 1 1 -264509696 1 1 -264510656 1 1 -264512608 1 1 -264642696 1 1 -265293080 1 1 -265298488 1 1 -265556832 1 2 -265560920 1 2 -265684752 1 1 -265685608 1 1 -265687280 1 2 -265688920 1 1 -265690616 1 2 -265958144 1 1 -265958536 1 1 -266211016 1 3 -266212912 1 3 -266214112 2 4 -266344016 1 1 -266348512 1 1 -266350560 1 4 -266612160 1 1 -266612528 1 1 -266862656 1 1 -266864696 1 1 -266993952 1 3 -266995344 1 1 -267005456 2 8 -267131200 1 1 -267393952 3 4 -267393968 1 4 -267395192 2 3 -267398208 1 6 -267520888 1 2 -267655280 1 2 -268438608 1 1 -269099304 1 1 -269099568 1 2 -269223176 1 1 -269884528 1 2 -271193792 1 1 -275523360 1 1 -276562048 1 1 -277103232 1 1 -278009024 1 1 -278795496 1 2 -278942064 1 5 -279059072 1 1 -281026040 1 1 -281286400 1 1 -282473008 1 2 -284565776 1 1 -289674928 1 1 -289678344 1 1 -289684952 1 1 -289812144 1 1 -290206504 1 1 -290334112 1 1 -292295064 1 1 -293215680 1 3 -293479280 1 2 -293736264 1 7 -294789792 1 6 -295180984 1 1 -295307376 1 1 -295717336 1 1 -295960864 1 1 -295969792 1 2 -296224440 1 1 -296226048 1 1 -296753512 3 3 -296879824 1 1 -296883232 1 1 -296891080 1 1 -297018072 1 2 -299109048 1 3 -299117192 1 1 -299507424 1 1 -300289768 2 2 -300555392 1 21 -300555712 1 2 -300558688 1 10 -300944224 2 4 -300948368 1 1 -300948808 2 4 -301078152 1 1 -301080376 1 1 -301083720 1 1 -301465776 1 1 -301600040 1 1 -301868056 1 1 -302123152 1 2 -302531536 1 1 -302908872 1 1 -303433728 1 1 -303694336 1 1 -304224056 1 1 -304492056 1 5 -304882912 1 1 -304883808 1 3 -306189816 1 4 -306200176 1 2 -306716968 1 1 -306843448 1 3 -306849192 1 2 -307107024 1 3 -307251056 1 2 -307759368 1 2 -307759960 1 2 -307772032 1 2 -308547792 1 1 -309201336 2 13 -309202536 1 1 -309473840 1 4 -309477672 1 3 -310008208 1 1 -310383864 1 1 -310781872 1 2 -311309224 1 3 -311824376 1 1 -312354232 1 2 -313265616 1 1 -313272432 1 1 -313395832 1 1 -313919408 1 2 -314054848 1 1 -314055320 2 2 -314055624 1 1 -314320808 1 2 -316280072 1 1 -316546128 1 4 -316801240 1 2 -321529016 2 5 -321795944 1 1 -322444848 1 1 -323362856 1 1 -323488224 1 1 -323494832 1 1 -323749392 1 1 -324667352 1 4 -325067696 1 1 -325459696 1 1 -325727624 1 1 -325848192 1 7 -325850632 1 3 -325852720 1 7 -326243576 1 2 -326502216 1 1 -326511600 1 1 -326763072 1 1 -326764456 1 1 -326896224 1 2 -327036400 2 2 -327427800 1 1 -327685704 1 2 -327690248 1 1 -327942448 1 1 -327946288 1 2 -327946728 1 1 -328077952 1 1 -328208608 1 2 -328466792 1 1 -328469176 1 2 -328470520 1 2 -328473048 1 1 -328474392 1 1 -328732704 1 1 -329385352 1 1 -329387328 2 2 -329387592 1 2 -329388560 1 3 -329388584 1 1 -329389616 1 2 -329390024 1 3 -329391288 1 2 -329515040 1 2 -329650056 1 4 -329779848 1 6 -329781624 1 1 -329911960 1 4 -329912352 1 3 -329912720 1 3 -330040520 1 2 -330174104 1 5 -330178864 2 15 -330184688 1 2 -330186016 1 1 -330302312 1 1 -330304568 1 1 -330305976 1 2 -330317864 1 1 -330320264 1 1 -330436056 1 2 -330437224 1 1 -330439888 1 3 -330449856 1 6 -330569992 1 1 -330571056 1 1 -330575552 2 2 -330575928 1 1 -330577472 1 2 -330579232 1 1 -330581600 1 1 -330705120 1 2 -330706352 1 2 -330711000 1 3 -330715048 1 2 -330833472 1 1 -330842536 1 1 -330961008 1 1 -330967424 1 1 -330974760 1 1 -330976208 1 1 -331090664 1 1 -331092592 1 1 -331097152 1 2 -331104992 1 1 -331222896 6 10 -331351440 1 1 -331351728 1 3 -331352088 1 3 -331352880 2 6 -331354544 2 6 -331359824 1 3 -331361712 3 3 -331362176 1 6 -331481104 1 1 -331481616 1 1 -331620256 1 2 -331622160 1 1 -331625408 1 4 -331625472 1 3 -331874656 1 1 -331875000 1 1 -331880440 1 1 -331885264 1 1 -332010896 1 1 -332018672 1 1 -332147128 1 2 -332147752 2 2 -332276696 1 2 -332536624 1 1 -332537016 1 1 -332662248 1 1 -332663256 1 1 -332669144 1 3 -333186376 1 3 -333190472 2 3 -333323544 1 1 -333449936 1 3 -333455936 2 2 -333840976 1 1 -333842528 1 1 -333842824 1 1 -333848080 1 2 -333972048 1 3 -333972496 1 1 -333976168 1 1 -334102712 2 11 -334103104 1 2 -334496656 1 18 -334499440 1 5 -334501552 1 7 -334627856 1 13 -334628448 1 5 -334628840 1 2 -334629528 2 4 -334629656 1 2 -334629976 1 6 -334631560 1 1 -334761464 1 1 -334765480 1 2 -334890320 1 1 -334894808 1 1 -335020304 1 1 -335020384 3 3 -335020728 5 27 -335020984 1 38 -335022984 1 2 -335023008 1 2 -335023288 2 39 -335023824 1 1 -335024096 5 19 -335024104 10 20 -335024216 4 9 -335025040 3 41 -335025128 6 7 -335025848 2 46 -335025992 3 11 -335026016 4 28 -335026200 13 39 -335026864 4 5 -335027408 5 24 -335027424 2 3 -335027600 6 21 -335027752 1 5 -335028032 2 2 -335028096 6 6 -335028616 1 29 -335028832 1 2 -335029368 1 31 -335029528 2 20 -335152736 2 3 -335153056 1 26 -335157088 6 25 -335414592 1 2 -335414944 3 9 -335416352 3 17 -335417648 1 4 -335417968 3 45 -335419056 1 21 -335419408 2 41 -335419520 3 4 -335420192 1 6 -335420816 2 4 -335422096 2 2 -335422272 1 30 -335546608 1 9 -335549752 1 2 -335552728 1 1 -335553576 1 15 -335554008 1 23 -335680848 1 7 -335684032 4 6 -335945976 1 1 -336078312 1 1 -336595616 1 1 -336728160 1 1 -336858896 1 3 -336865088 2 3 -336993072 2 2 -336994448 1 1 -337252408 1 2 -337380536 1 1 -337385712 1 1 -338048776 1 1 -340795168 1 4 -342631144 1 3 -343284880 1 3 -343804048 1 2 -347996280 2 4 -348027672 1 5 -350392600 1 1 -352341328 1 1 -353374432 1 4 -355741280 1 1 -355999496 1 1 -359016520 1 2 -359138728 1 1 -359549184 1 3 -359934576 1 1 -360710656 1 2 -361760056 1 1 -363726080 1 1 -363736592 1 1 -364905480 1 3 -365439720 1 16 -366362792 1 1 -367140864 6 62 -367657896 1 203 -367673952 13 35 -367674040 1 2 -367674496 2 21 -367674552 1 205 -368450480 1 1 -368979688 1 1 -369115520 1 1 -371216176 1 1 -372656768 1 1 -372905712 1 6 -373030976 1 2 -373564272 3 3 -374089904 2 4 -374352808 3 21 -374353904 1 2 -374356920 1 3 -375145080 1 1 -375536968 1 1 -375669640 1 1 -375920632 1 1 -376067360 1 4 -376571376 1 2 -376587064 1 2 -376596416 1 2 -377099888 1 4 -377102496 4 4 -377234160 1 2 -378425112 1 1 -378550256 1 1 -378673000 1 4 -379854696 2 2 -380110160 1 1 -380769160 1 1 -381301640 1 1 -382740224 1 1 -383521984 1 1 -383783880 1 1 -385222592 1 1 -386275480 1 1 -386800984 1 1 -387063480 1 1 -388380400 1 3 -389022600 1 2 -389025688 2 3 -389290256 1 2 -389940936 1 3 -389944080 2 2 -390341776 1 1 -390598144 1 1 -390606144 1 1 -390728808 1 1 -390731240 1 1 -390733376 1 11 -390999232 3 9 -391120072 2 2 -391251760 1 2 -391253848 1 4 -391254664 1 2 -391256392 1 2 -391258496 1 2 -391392752 1 4 -391783904 1 1 -392171576 1 1 -392175272 1 1 -392176472 1 2 -392312056 1 4 -392568920 1 3 -392703032 1 3 -392966184 1 1 -393090872 1 1 -393224512 1 1 -393348272 1 1 -393348936 1 3 -393743072 1 1 -393873656 1 2 -393877768 1 1 -394264936 1 2 -394265432 1 2 -394268032 1 1 -394268360 2 2 -394272120 1 1 -394404880 1 2 -394407048 2 2 -394527600 4 77 -394530784 7 73 -394531368 6 59 -394533848 2 76 -394543704 1 2 -394543960 3 67 -394667448 1 1 -394795472 2 2 -394802104 1 1 -394936032 1 1 -395053232 1 1 -395055600 1 1 -395195424 1 1 -395313576 1 1 -395318904 1 1 -395450184 1 1 -395454152 1 1 -395458552 1 3 -395579744 1 1 -395579776 1 1 -395592624 1 1 -395593504 1 1 -395706528 1 1 -395706640 1 21 -395706784 1 1 -395706896 1 2 -395707376 1 24 -395708512 1 22 -395712368 1 1 -395714944 1 1 -395716408 1 1 -395717992 1 3 -395848336 1 2 -396101240 1 2 -396231952 1 1 -396235176 1 1 -396370736 1 2 -396501520 2 2 -396624368 2 3 -396632440 1 3 -397284440 1 1 -397807504 1 3 -397935912 3 5 -397939208 1 1 -397940392 1 4 -397941848 1 1 -398464512 1 1 -398465392 1 1 -398592128 1 1 -398592952 1 3 -398598328 1 1 -398724320 1 3 -398728208 1 3 -398852632 1 1 -398853616 1 2 -398854704 1 2 -399644096 1 1 -399646272 1 1 -399647448 2 2 -399907032 1 1 -400167592 1 1 -400169144 1 1 -400171096 1 1 -400299928 1 1 -400310624 1 1 -400567088 1 1 -400569272 1 1 -401479760 1 5 -401480560 1 7 -401753008 1 1 -402010472 1 2 -402131400 1 1 -403047424 1 1 -403057840 1 1 -405815848 1 2 -406201536 1 1 -406980384 1 1 -406983560 2 24 -406987320 1 15 -406987384 1 75 -406987968 1 2 -406989616 5 175 -407522472 1 1 -408302920 1 1 -411716240 1 2 -413800040 2 9 -416025768 1 2 -416154440 1 1 -417340976 1 2 -419042008 1 1 -420752392 1 2 -420754040 1 131 -422323080 1 1 -422449320 1 1 -423629800 1 14 -424022192 1 2 -424023728 1 2 -424029264 1 1 -424151176 4 12 -424289384 1 1 -426524224 1 1 -427435320 1 1 -427567576 1 1 -430707896 1 1 -430708216 1 1 -434255152 1 1 -434256136 1 1 -434523728 1 4 -434781672 1 2 -436214776 1 2 -436994432 1 1 -437784240 1 1 -438307640 1 2 -438313208 1 1 -438441368 2 39 -438450872 2 6 -438455912 1 36 -438461488 1 16 -439096344 1 1 -440140240 1 33 -440141624 1 16 -440146496 1 13 -440163560 1 23 -440164960 1 38 -440540096 1 1 -441720288 1 4 -443419856 1 1 -444728128 2 3 -444743456 3 3 -445004016 1 1 -445527904 1 2 -445648560 3 3 -446305448 1 1 -447481320 1 1 -447481536 1 2 -447483912 1 3 -447493960 1 1 -447498144 1 3 -447498480 2 2 -447881592 1 3 -447885936 1 1 -448148928 1 2 -448529368 1 1 -448664000 1 2 -448793976 2 3 -449066608 1 1 -449183848 1 1 -449447096 1 1 -449447144 1 1 -449448216 1 1 -449454136 1 1 -449580800 1 5 -449585312 1 3 -449708720 1 1 -449709024 1 1 -449843224 1 2 -449971152 1 1 -449972248 1 1 -450102400 1 1 -450103168 2 2 -450108568 5 9 -450110976 1 9 -450111200 1 2 -450111336 1 8 -450236160 1 1 -450495144 1 2 -450629776 1 2 -451019184 1 2 -451023168 1 1 -451150984 1 1 -451674720 1 9 -451805672 1 1 -451810232 1 8 -451945120 1 4 -452330248 1 1 -452467592 1 1 -452469288 1 3 -452470848 1 1 -452597168 1 1 -452600688 1 4 -452602640 1 2 -452603456 1 2 -452725656 1 2 -452726488 1 1 -452854944 2 3 -452855280 1 1 -452855440 1 4 -452857416 1 1 -452858496 2 3 -452861336 1 1 -452862368 1 2 -452990256 1 1 -453118184 1 1 -453122704 1 1 -453122720 1 1 -453125688 1 1 -453128632 1 1 -453129160 1 1 -453392088 1 1 -453510208 1 16 -453512008 1 1 -453517376 1 1 -453518632 1 1 -453525128 1 1 -453643528 1 1 -453647416 1 1 -453777144 1 1 -453779304 1 1 -453792416 1 1 -453902960 2 8 -453909528 1 1 -454039448 1 3 -454039688 1 2 -454303528 3 10 -454305024 1 2 -454430232 1 3 -454430664 1 2 -454431232 2 5 -454435952 3 5 -454563688 1 1 -454690352 2 4 -454691600 1 6 -454692440 1 1 -454694264 2 4 -454952192 1 2 -455083432 1 4 -455091464 1 2 -455213856 1 1 -455215752 1 1 -455869184 1 36 -455871720 3 38 -456664832 2 3 -456790096 1 1 -457182752 1 1 -457321696 1 1 -457322016 1 1 -457718632 1 3 -458373760 2 4 -458621440 1 2 -458631808 1 7 -460204384 1 1 -463084616 1 2 -465456712 10 10 -465703800 1 1 -465833232 1 2 -465838904 1 1 -465963816 2 15 -465965336 1 4 -465966096 1 2 -468582920 1 1 -470315408 1 2 -472271216 1 1 -472275792 1 1 -472523760 1 635 -472527000 1 13 -472527720 1 175 -472533912 3 372 -472647784 3 35 -472649352 16 355 -472652872 1 1 -472653792 20 200 -472654568 8 246 -472654800 2 26 -472655152 1 598 -472655704 2 180 -472655848 2 37 -472659832 2 250 -472661712 27 401 -472665088 3 29 -472665256 1 494 -473314912 1 1 -473317600 1 1 -476581488 1 5 -480512032 1 5 -481169520 1 1 -481958200 1 1 -487338336 1 1 -487853008 1 1 -487984584 1 1 -488513832 1 5 -490220520 5 5 -490477432 1 1 -490479336 1 2 -494418616 1 1 -496113544 1 4 -496114184 3 3 -496115632 1 4 -496240920 1 2 -496244736 1 1 -496249952 1 3 -496250264 1 1 -496501840 2 2 -497812016 1 1 -497815184 1 1 -497819792 2 2 -497824592 3 3 -497826112 1 3 -497956720 1 1 -497956752 1 1 -498206264 1 1 -498733648 1 2 -498991424 1 1 -498994032 1 1 -498998864 1 1 -499130824 2 4 -499132448 2 6 -499136328 1 8 -499261200 1 3 -499915896 1 2 -500172848 1 2 -500305784 1 2 -500572312 1 1 -500574944 2 2 -500704600 2 3 -500964480 1 1 -500965600 1 2 -501355616 1 1 -501356480 2 2 -501484464 1 1 -501487624 1 7 -501488040 1 3 -501488120 1 4 -501613824 1 4 -501617728 1 1 -501617920 1 7 -501620184 2 8 -501744744 1 1 -501745400 1 5 -501746592 1 3 -501747056 2 11 -501747432 1 5 -501875280 1 5 -502007096 1 2 -502137280 1 2 -502138960 1 5 -502141464 1 2 -502141640 1 4 -502661416 2 2 -502793400 6 6 -502793448 1 3 -502794712 1 4 -503056104 1 1 -503057672 1 1 -503058880 1 1 -503059424 1 3 -503059584 1 2 -503319904 1 1 -503452944 1 2 -503454808 1 2 -503455360 1 2 -503457368 1 2 -503980496 1 8 -504111704 1 1 -504761712 1 1 -504891712 1 15 -504894856 1 25 -504898912 1 2 -505153536 1 1 -505157520 1 1 -505157992 1 1 -505414672 1 1 -505422504 1 6 -505547096 1 1 -505807336 3 46 -505807848 18 37 -505809168 1 2 -505809464 1 1 -505809720 2 24 -505811320 1 2 -505814560 1 11 -505815008 1 9 -505819192 1 3 -505947472 1 3 -506069784 1 1 -506073208 1 2 -506074336 1 1 -506201528 2 3 -506342200 1 1 -506729168 1 1 -506864496 1 4 -506991512 1 1 -506992096 2 2 -506992256 1 1 -506993752 1 1 -507126960 1 1 -507380760 1 2 -507388336 1 3 -508181168 1 6 -508184632 1 5 -508699352 1 3 -508957984 1 1 -509220856 1 3 -509225640 3 3 -509742616 1 2 -510142104 1 1 -512767184 1 1 -513678408 1 1 -520225488 1 1 -521535800 1 2 -523374632 1 1 -525606576 1 45 -525732528 2 40 -526268736 1 4 -526389800 1 1 -526521480 1 1 -529020200 1 1 -531636064 1 2 -531894232 1 1 -534646800 1 1 -535573800 2 2 -537011488 1 1 -539624040 1 1 -540420752 1 1 -540547424 1 4 -540809368 1 1 -541721576 1 2 -541728304 1 11 -541732960 1 10 -542124504 1 1 -542377712 1 2 -542377928 1 1 -543293752 1 6 -543302584 1 1 -543428744 1 1 -543563528 1 1 -543564984 1 1 -543689232 1 1 -543694616 1 1 -543697584 1 1 -543828536 1 1 -544867200 1 1 -545001104 1 1 -545265216 1 1 -545522528 1 7 -545522568 1 16 -545523632 2 17 -545524704 1 1 -545526968 1 2 -545658728 3 4 -545786792 1 1 -545915592 1 2 -545916288 1 11 -546183736 1 2 -546570456 1 1 -546702000 1 1 -546709424 1 1 -547097008 1 2 -547098440 2 2 -547099624 1 1 -547102544 1 4 -547619880 1 2 -548933288 2 10 -548935824 3 8 -548938256 2 7 -549598720 1 2 -549719200 1 1 -549721544 1 8 -549848856 1 1 -550116720 1 1 -550249984 1 3 -551035816 1 1 -552075520 1 16 -552083344 2 6 -552206936 1 1 -552212136 2 2 -554045736 1 1 -554836392 1 1 -555746432 1 1 -555749800 1 1 -556941872 1 1 -559941856 1 1 -563484440 1 2 -563490240 1 2 -564006784 1 1 -565576376 1 1 -566238880 1 1 -566497016 1 1 -566765648 1 2 -567163648 1 1 -568465584 1 2 -568858016 1 1 -569903568 1 2 -571086240 2 2 -571870008 1 2 -571870360 1 2 -572784728 1 1 -573180520 1 8 -573181552 1 11 -573186200 2 6 -573578552 1 4 -573582512 1 1 -573715368 1 3 -573719824 1 5 -573976008 1 1 -574489776 2 47 -574490368 3 4 -574491552 1 18 -574493848 1 36 -574494880 2 7 -574494928 1 3 -574495368 2 11 -574496080 2 31 -574496176 2 2 -574496312 1 25 -574496360 1 11 -574497128 2 2 -574497600 4 20 -574627488 1 2 -574631928 1 3 -574758664 1 3 -574762136 2 2 -575147672 1 4 -575149448 1 2 -575150616 1 10 -575542320 1 5 -575800200 1 2 -575932328 1 2 -575933528 1 1 -576067744 1 3 -576717120 1 1 -576720112 1 1 -577124216 3 7 -577507008 1 1 -577507448 1 1 -577508808 1 1 -578159384 1 1 -581832360 1 1 -582094288 1 3 -586287656 1 2 -592327440 1 1 -593102328 3 3 -593112712 1 3 -593625400 1 2 -593626408 1 2 -593756360 1 1 -593761128 1 1 -594413720 1 1 -595859184 1 1 -597953424 1 5 -600051288 1 3 -600444768 1 1 -600449832 1 1 -600575304 1 1 -600981440 2 2 -600990688 2 2 -601625592 1 2 -601633624 1 3 -602806464 1 2 -602809936 1 2 -602812552 1 2 -609623864 1 1 -611192384 1 29 -611323960 1 1 -611324008 1 1 -611328304 1 2 -611454200 1 1 -611459712 1 1 -611587568 1 1 -611713032 1 1 -611716792 1 1 -611716808 1 1 -611716872 1 1 -611844560 1 2 -611978216 1 1 -611978840 1 1 -611981624 1 1 -612107984 1 1 -612114176 1 1 -612238488 1 1 -612239360 1 1 -612370792 1 1 -612375072 1 2 -612505208 1 2 -612637600 1 1 -612761952 1 3 -612763896 1 2 -613422960 1 1 -613548600 1 2 -613557312 3 3 -613558664 1 1 -613561680 1 1 -613682392 1 1 -613683704 1 1 -613683824 1 1 -613690736 1 3 -613818032 1 2 -613823856 1 1 -613941328 1 1 -614083312 1 1 -614204936 1 2 -614205280 1 3 -614207768 2 3 -614215264 1 1 -614345648 1 3 -614349672 1 1 -614351472 1 1 -614482704 1 1 -614605064 1 2 -614605400 2 4 -614731320 1 1 -614731336 1 4 -614732000 3 3 -614732696 1 1 -614859168 1 1 -614865984 1 1 -614997888 1 2 -615130048 2 2 -615254776 1 1 -615260160 1 7 -615520944 1 2 -615647968 1 1 -615910352 1 13 -615910520 1 3 -615913248 2 2 -616048272 1 1 -616699752 1 1 -617096120 1 1 -617222144 1 2 -617354256 1 1 -617743152 1 1 -617880760 2 4 -617880944 1 5 -617880984 1 5 -617882064 1 4 -618004752 1 5 -618005736 1 2 -618007848 1 1 -618008088 1 2 -618009312 1 1 -618010448 1 2 -618011816 2 3 -618013448 1 2 -618014016 3 4 -618014744 1 1 -618135616 1 6 -618140640 1 1 -618141968 1 1 -618273208 1 2 -618403968 1 1 -618670008 1 1 -618923608 1 2 -618929248 1 3 -618930232 1 2 -620109440 2 2 -620367184 1 3 -620628528 1 1 -620635960 1 2 -621152016 1 2 -621281928 1 1 -621413880 1 1 -621545992 1 2 -621553784 1 1 -621806408 1 3 -622865680 1 7 -623381288 1 1 -623781312 1 1 -624171944 1 1 -624299080 1 2 -624307696 1 3 -624693208 1 3 -624820744 1 2 -624825368 1 1 -624825664 2 5 -624829760 1 7 -625223512 1 3 -625739440 1 1 -626396376 1 1 -626398472 1 4 -626667256 1 1 -626790224 1 1 -626791264 1 3 -627056736 1 2 -627449496 1 1 -628892800 1 5 -629024056 1 6 -629029096 1 2 -629157048 1 4 -629279848 4 4 -629291272 1 1 -629824632 1 2 -630995824 1 2 -631137192 1 6 -631664504 1 2 -633230264 1 1 -633873856 1 2 -636628280 1 2 -637014200 1 3 -637020592 1 2 -637144600 2 2 -637281552 1 3 -639107480 1 1 -639109336 1 2 -639109568 1 2 -639378184 1 1 -640167544 1 1 -640290104 1 3 -640293464 1 1 -641601888 1 1 -641866136 1 2 -642653464 1 8 -642654952 3 9 -642783824 1 4 -642909304 2 2 -643040984 1 2 -643832120 1 2 -643833752 1 2 -643835968 1 2 -644350056 1 2 -644481176 1 1 -644489216 1 1 -644616792 1 3 -644879264 1 1 -644881856 1 1 -645137888 1 2 -645269040 1 1 -645271416 1 1 -645273280 1 1 -645405168 1 1 -645405904 1 1 -645407368 1 2 -645409936 1 1 -645529760 1 1 -645531608 1 1 -645795944 1 1 -645797216 1 1 -645801536 1 4 -645802576 1 2 -645803280 1 1 -645803456 1 1 -645923904 1 2 -645923936 1 1 -646186936 1 2 -646190208 1 1 -646191600 1 3 -646193472 2 6 -646316136 1 1 -646316560 1 1 -646317536 1 1 -646320424 1 1 -646322160 1 3 -646322176 4 4 -646324344 2 3 -646448968 1 1 -646586032 2 4 -646713488 1 5 -646846152 2 2 -647234368 1 6 -647235192 1 6 -647239624 1 3 -647241520 1 1 -647366656 1 3 -647366760 1 1 -647367544 2 6 -647369168 1 3 -647369800 1 5 -647627608 1 1 -647629064 1 2 -647632648 5 5 -647757912 1 3 -647759080 1 2 -647762704 1 1 -647763440 1 3 -648151600 1 3 -648286368 1 1 -648288216 1 2 -648289072 1 1 -648546072 1 1 -648546592 1 1 -648547128 1 1 -648550800 1 1 -648675768 1 3 -648676152 3 5 -648680368 1 1 -648680984 1 1 -648681584 1 1 -648682560 2 3 -648683472 3 3 -648811864 1 1 -648815024 1 10 -649070000 2 3 -649070072 2 2 -649070128 1 2 -649468488 1 3 -649601320 1 5 -649731776 1 12 -649857712 1 5 -649859240 1 6 -649860856 1 1 -649861480 1 1 -649994944 1 3 -650121392 1 5 -650124384 1 5 -650126336 1 1 -650249416 4 4 -650385584 1 1 -650388904 1 1 -650520096 1 4 -650904744 1 4 -651037128 2 2 -651169944 1 1 -651171080 2 2 -651299520 2 2 -651428368 1 1 -651438424 1 1 -651562136 1 2 -651563576 1 1 -651566200 1 2 -651825184 1 1 -651832024 1 1 -652214920 1 1 -652214976 2 11 -652216536 1 2 -652217192 2 2 -652218384 3 10 -652219312 1 11 -652353928 1 1 -652354544 2 3 -652611912 1 1 -652872840 1 1 -652873776 1 1 -653267256 1 1 -653267872 1 1 -653398544 1 1 -653399728 1 1 -653529952 2 2 -653660400 1 2 -653918512 1 1 -653919168 3 3 -653924456 1 1 -654053896 1 1 -654054560 1 1 -654706632 1 2 -654711144 2 2 -654838016 1 1 -654970680 1 4 -654970960 1 1 -654971448 1 4 -656283192 1 1 -656408856 1 7 -656409216 9 9 -656411552 1 7 -656411640 4 7 -656411704 1 7 -656805208 1 1 -656805936 1 1 -656806488 1 2 -657064384 1 1 -657851544 2 3 -658245688 1 1 -658768944 1 1 -658771880 1 2 -658772584 1 2 -658773192 1 1 -659163640 2 2 -659556192 2 2 -659691440 1 2 -660736376 1 2 -662569648 1 1 -662573784 1 1 -662573816 1 1 -662579688 1 1 -663751016 3 5 -663882600 1 2 -663884560 1 2 -664276720 1 1 -664412840 1 1 -664936840 2 2 -665322328 1 1 -666371808 1 2 -666508472 1 1 -666634104 1 1 -666896904 1 1 -667159640 1 4 -667161544 1 1 -667681160 5 10 -667681352 4 13 -667681872 1 7 -667685784 1 4 -667816416 1 1 -667949176 1 2 -669256520 1 2 -669256592 1 3 -669257704 1 1 -669521296 1 1 -669647968 1 1 -669781032 1 1 -670317248 1 2 -670318128 1 9 -670437048 2 5 -671746216 1 3 -671761568 1 9 -672137576 1 1 -672270944 2 8 -672271600 2 5 -672541480 1 3 -672805616 1 1 -673058832 1 1 -673065440 1 2 -673077416 2 4 -673202480 1 2 -673465120 1 2 -673580664 1 1 -673588304 1 3 -673591896 2 4 -673846096 1 1 -673994440 1 1 -675284360 1 4 -675290848 1 2 -675417112 3 3 -675547344 1 1 -675679072 1 1 -677119744 1 1 -677254376 1 1 -677255696 1 1 -677650304 1 1 -678044240 1 1 -679880912 1 1 -680268240 1 1 -681713560 1 1 -682492216 1 4 -682629784 1 2 -682630648 1 4 -683019424 1 2 -683020040 1 2 -683021200 1 3 -683411936 1 1 -683934488 1 1 -683940776 2 3 -684330856 1 1 -684593416 1 1 -684728616 1 1 -684729736 1 3 -684854016 1 1 -684862688 1 2 -684984024 1 10 -684988504 1 2 -684993288 1 1 -685642928 1 3 -686171384 2 2 -686173008 1 2 -686560664 1 2 -686948744 1 1 -686951032 1 1 -687082016 1 3 -687210936 1 1 -687343664 1 2 -687344232 1 3 -687349928 1 1 -687350632 1 3 -687351272 1 1 -687609200 1 1 -687612640 1 1 -687867256 1 1 -688005880 1 1 -688131976 1 1 -688264600 1 1 -688522848 1 1 -688524272 1 2 -688526800 1 2 -688785848 1 3 -689046152 1 1 -689047576 1 1 -689183488 1 2 -689439336 1 3 -689439808 1 4 -689441328 3 3 -689575072 1 1 -689577312 1 1 -689964344 1 1 -689969136 1 1 -690096424 2 3 -690096624 1 1 -690099896 1 1 -690622304 1 1 -690622320 1 1 -690625480 1 1 -690752264 2 2 -690760152 1 1 -690881000 1 4 -690885888 1 1 -690886696 1 1 -690896912 1 1 -691017272 2 2 -691017456 1 1 -691021688 1 1 -691025840 1 2 -691025936 1 1 -691026624 1 1 -691143440 1 2 -691149432 1 1 -691149912 1 1 -691159760 1 1 -691274048 1 1 -691274560 1 3 -691281464 1 1 -691282184 1 1 -691415440 1 1 -691415792 1 1 -691540192 1 1 -691666952 1 1 -691668600 1 3 -691671608 1 2 -691674608 1 1 -691799040 1 1 -691802320 1 1 -691810888 1 1 -691813392 1 2 -691815048 1 1 -691932000 1 1 -691940264 1 2 -691943720 1 1 -691944816 1 1 -692061416 1 1 -692062264 1 1 -692065720 1 1 -692075704 1 2 -692077072 2 2 -692077568 1 1 -692324768 1 2 -692334232 1 1 -692336832 1 2 -692341552 1 1 -692454464 1 1 -692457248 1 1 -692462312 1 1 -692463128 1 1 -692603408 1 1 -692716224 1 3 -692849576 1 1 -693243160 1 1 -693246032 1 1 -693370928 1 1 -693371632 3 5 -693769680 1 1 -693897816 1 1 -693898168 1 2 -693903744 1 3 -694290312 1 3 -694295008 2 3 -694295184 2 4 -694427112 1 1 -694428608 1 1 -694560496 1 2 -694683776 1 1 -694686216 1 1 -694813288 2 2 -695078752 1 1 -695601872 2 3 -695993536 1 1 -696401304 1 2 -696782320 2 2 -696917160 2 2 -697044336 1 1 -697697304 1 1 -700058448 1 2 -703732280 1 1 -707141320 1 5 -707923784 1 2 -709107904 2 2 -710038160 1 1 -711464416 1 2 -713831808 1 2 -714081712 1 2 -714096568 2 2 -714211920 2 4 -714615488 1 2 -715392712 1 1 -715784256 1 1 -716181488 1 1 -716185480 2 4 -716447184 2 2 -716452568 1 8 -716710776 1 2 -716979216 1 1 -717488976 1 1 -717491680 1 1 -717498016 1 1 -717629472 1 1 -717751096 1 4 -717882368 1 1 -717888440 1 1 -718143640 1 1 -718934792 1 2 -719457696 2 2 -719458856 1 1 -719459536 1 2 -719856736 1 1 -720249008 1 1 -720381608 1 1 -720385280 1 1 -720511872 1 1 -720770232 1 1 -721164376 1 1 -721164400 1 2 -721170688 1 2 -721552872 1 1 -721555744 1 1 -721951536 1 2 -722343336 1 1 -722469816 6 19 -722472832 2 38 -722604880 1 1 -722607592 1 1 -722741568 1 1 -722865864 3 3 -722871536 3 16 -722871728 1 40 -722872912 1 38 -723002520 1 1 -723005776 1 1 -723256168 2 2 -723393376 1 1 -723393808 1 2 -723394352 1 1 -723394552 1 2 -723396024 1 1 -723396560 1 2 -723531632 1 2 -723650312 1 1 -723657296 1 1 -723911624 1 1 -724044904 2 2 -724438424 1 1 -724447368 1 1 -724567720 1 1 -724828488 1 2 -724830552 1 3 -724831112 1 2 -724833408 1 1 -724834192 1 3 -724969824 1 2 -725228280 1 1 -725229152 1 1 -725353528 1 1 -725490696 1 2 -725614728 1 1 -725754152 1 1 -725880192 1 1 -726279536 1 1 -726797168 2 6 -726799104 1 1 -726800944 2 3 -726805320 1 8 -726931440 1 6 -726932400 2 8 -726937000 3 3 -727320712 1 9 -727321472 1 9 -727323744 1 8 -727325168 4 4 -727719056 2 2 -727986856 1 1 -728236176 5 6 -728236256 1 7 -728237088 1 4 -728239272 1 1 -728243160 1 5 -728246184 2 2 -728246264 1 3 -728247400 1 3 -728248144 3 3 -728372824 1 1 -728632856 1 4 -728633680 1 1 -728635856 1 1 -728637664 1 4 -728639032 1 4 -728639832 1 2 -729548968 1 1 -730075840 1 2 -730077152 1 2 -730202272 1 1 -730465520 1 2 -730595616 1 3 -730597552 1 1 -730864352 1 1 -730993584 1 1 -731644336 1 1 -731644544 1 1 -732439568 1 1 -733222048 1 3 -733348016 1 1 -733355776 1 1 -735053952 1 2 -735055672 1 1 -735709464 1 1 -735712056 1 1 -735713728 1 3 -735971904 1 2 -735974552 1 1 -735975416 1 1 -736758688 2 2 -736760784 1 1 -737021416 1 1 -737023400 1 2 -737282992 1 1 -737283120 1 1 -737284064 1 1 -737417200 1 1 -737419064 1 1 -737420256 1 1 -737543736 1 2 -737673832 1 1 -737936776 2 2 -737937512 2 2 -738200216 1 1 -738200296 1 2 -738200480 1 1 -738200616 1 1 -738201568 1 1 -738202792 2 2 -738202808 1 3 -738595472 1 1 -738724592 1 2 -738854680 1 2 -739251512 1 2 -740432952 1 3 -740559944 1 3 -740560688 1 1 -740696280 1 2 -740828168 1 2 -741082464 1 1 -741608840 1 1 -742004048 1 2 -742004680 1 1 -742262448 1 3 -744490608 1 1 -745014576 1 1 -745016616 1 2 -745146792 1 1 -745409416 1 2 -745675656 2 12 -745679040 1 2 -745680656 1 6 -745931424 1 5 -745938232 1 3 -746338440 1 6 -746343264 4 4 -746455168 1 1 -746456928 1 4 -746460264 1 16 -746460272 1 67 -746460328 2 60 -746461568 4 14 -746461728 2 59 -746462680 2 46 -746726600 1 1 -746857392 1 2 -747029672 1 2 -747114760 2 2 -747243456 1 1 -747382272 1 1 -748038488 1 2 -748301632 1 1 -748432680 1 1 -748686488 1 1 -750660872 1 1 -752226208 1 1 -752356016 2 2 -752881592 1 1 -753283928 1 2 -753664984 1 1 -753796112 1 1 -756422976 1 2 -756553040 1 1 -756814656 1 1 -756815600 1 1 -757342536 1 1 -758128360 1 1 -759304920 1 1 -759432088 1 1 -759436232 1 3 -759828112 1 1 -760481696 1 1 -760617584 1 2 -761136768 1 1 -761148528 1 2 -761539992 1 1 -761662440 1 1 -761672120 1 2 -761793968 2 2 -761797064 1 1 -762184312 1 2 -762581024 2 2 -762844728 1 1 -762975688 1 3 -762978240 1 3 -762979816 1 3 -763237048 1 1 -763498280 1 11 -763499880 2 8 -763500168 1 1 -763502704 1 15 -763503920 1 5 -763504152 2 2 -763626208 1 2 -763632872 1 1 -763766432 1 3 -763888800 1 1 -764019768 1 6 -764020792 1 6 -764021256 1 7 -764026144 1 3 -764150080 1 1 -764153432 2 3 -764412088 1 1 -764419560 1 5 -764812448 2 2 -765068144 1 2 -765467560 1 1 -765854568 1 1 -766118704 1 1 -766514264 1 2 -766515576 1 1 -766642408 1 1 -766643704 1 1 -766644800 1 1 -766646480 1 1 -766647792 1 10 -766651552 1 1 -766653384 1 2 -766771616 1 2 -766774680 1 1 -766776000 1 4 -766779344 1 28 -766780032 4 10 -766781064 3 6 -766781368 1 2 -766783240 8 31 -766910072 1 2 -766911912 1 1 -766920064 1 1 -767040576 1 2 -767047624 1 1 -767048712 2 2 -767168608 12 29 -767171568 1 39 -767171896 2 8 -767171936 3 23 -767172960 7 18 -767431952 1 1 -767432472 1 3 -767436264 1 2 -767436968 1 2 -767438856 1 3 -767561928 1 4 -767566248 2 4 -767821360 1 2 -767822784 2 3 -767953976 1 1 -767956184 2 2 -767958296 1 1 -768083432 1 1 -768085336 2 2 -768086264 3 3 -768088344 1 1 -768088376 1 4 -768099512 1 1 -768213272 1 4 -768214224 1 1 -768346808 1 1 -768476256 1 1 -768606344 1 1 -768741744 1 1 -768743712 1 1 -768744704 1 1 -768746504 1 1 -769132592 1 1 -769400240 1 1 -769526240 2 3 -769919568 1 1 -769922352 1 1 -770049648 1 1 -770051072 1 2 -770184800 1 3 -770186208 1 2 -770187840 1 2 -770311168 1 1 -770311424 1 3 -770311536 1 2 -770313456 1 2 -770315376 1 1 -770315536 2 2 -770450528 1 1 -770572952 1 2 -770573360 1 2 -770578744 1 1 -770579072 2 2 -770580152 1 2 -770709152 1 1 -770710856 1 1 -770712416 1 3 -770713224 1 1 -770974096 1 1 -771890256 1 1 -772672840 1 2 -772678008 1 2 -772679136 1 3 -780278784 1 1 -784218104 1 5 -784474816 1 1 -784605624 1 1 -787744616 1 1 -788149504 1 2 -788418168 7 7 -788936224 1 1 -789060072 1 1 -789065712 1 1 -789596368 1 1 -789708968 1 2 -790236512 1 2 -790763728 1 1 -791289640 1 2 -791676888 1 1 -792209424 1 1 -792463256 1 1 -792987680 1 1 -792988536 1 4 -793252352 1 2 -793512024 1 1 -794035144 3 3 -794303624 1 5 -794432600 1 6 -796135832 1 1 -796657784 2 5 -796668880 2 3 -796921000 1 17 -796921304 1 1 -796923960 1 18 -796926504 2 4 -796927416 1 12 -796927664 1 3 -796928880 1 19 -796931344 1 11 -797051880 1 1 -797836856 1 1 -797977416 1 2 -798234344 1 1 -799153568 1 1 -799541536 1 1 -799934624 1 6 -799943360 3 4 -800068384 1 1 -800854912 1 1 -800985432 1 1 -801249832 1 1 -801250032 1 1 -801251976 1 2 -801384680 1 1 -801639152 1 1 -801774456 1 1 -802554784 1 1 -802952520 1 1 -803472920 1 1 -803473672 1 2 -803603616 1 1 -803604072 1 1 -803869840 1 1 -803997848 1 1 -805052160 1 1 -805185184 1 1 -805185560 1 1 -805188680 1 4 -805308904 1 2 -805309416 1 2 -805702800 1 5 -805833856 1 1 -806624856 1 1 -806750408 1 2 -806751424 1 2 -806754648 1 1 -806886864 1 2 -807419488 1 5 -808061016 1 1 -808722136 1 1 -808723048 1 2 -809763472 1 1 -809894176 1 2 -810287648 1 1 -810551512 1 3 -810689000 1 2 -810952624 1 1 -811076544 1 2 -811076944 3 3 -812390848 1 1 -813439080 1 1 -813696184 1 1 -813826248 2 4 -813836624 1 3 -813836992 1 1 -813837240 1 1 -813957656 1 2 -814224944 1 1 -814488024 1 1 -815797544 1 2 -815799744 1 2 -815926776 1 1 -816318584 1 2 -816318920 1 1 -816583256 1 1 -816583272 1 2 -816588808 1 3 -816846600 1 1 -817499768 1 1 -817767040 2 2 -817772232 1 1 -818284000 1 1 -818284544 1 1 -818414504 1 1 -818415920 1 4 -818807632 1 11 -818808400 1 1 -819468328 1 2 -819987616 1 3 -820121408 1 1 -820121816 1 7 -820526064 2 10 -820788216 1 8 -821178880 2 8 -822090992 1 39 -824978664 1 1 -825236408 1 1 -826552744 1 2 -826559656 1 3 -826567120 1 1 -827336288 1 2 -829043976 1 1 -829045848 2 2 -830610656 1 1 -831403584 1 2 -831654040 2 2 -831794840 1 2 -834274448 1 1 -834407928 1 2 -834539712 1 2 -834543688 2 2 -834544040 1 2 -835067904 1 1 -835980072 1 3 -836242272 2 2 -836370776 1 3 -836383000 2 2 -836636432 1 1 -837031480 1 1 -837033032 1 1 -837033104 1 1 -837157104 1 1 -837291648 2 2 -837420448 1 1 -837421240 1 1 -837423400 1 1 -837686104 2 6 -837693112 1 9 -838080824 1 1 -838209392 1 1 -838339184 1 2 -838467600 1 5 -838733432 1 2 -838733512 1 4 -838737408 1 2 -839131312 1 1 -839257136 1 1 -839260024 1 1 -839385704 2 2 -839386512 1 3 -839391520 1 6 -839519536 1 1 -839520888 1 1 -839521664 1 2 -840044360 1 1 -840044992 1 1 -840171832 1 1 -840437976 1 1 -840441888 1 2 -840565328 2 3 -840566064 1 4 -840571416 1 1 -840696384 1 2 -840697384 1 3 -840704296 1 2 -840829824 1 3 -840831944 1 1 -840833384 1 2 -840833488 1 3 -840834688 1 1 -840963824 1 1 -841351624 1 2 -841356392 1 1 -841616952 1 1 -841616968 1 6 -841617512 1 4 -841622552 2 2 -841625328 1 1 -841744920 1 10 -841745408 2 20 -841745456 1 11 -841752448 1 1 -842008736 3 6 -842018096 1 1 -842018632 1 1 -842018936 1 1 -842022264 1 1 -842023696 2 2 -842414040 1 1 -842543360 1 3 -842798360 1 1 -843059688 1 2 -843187640 1 1 -843188464 1 1 -843189568 1 2 -843194688 1 2 -843329384 1 2 -843331856 1 1 -843333040 1 1 -843458568 1 1 -843847064 1 3 -844235040 1 2 -844242328 1 1 -844366288 1 1 -844369768 1 1 -844369848 1 1 -844498824 1 1 -844499704 1 1 -844501968 1 1 -844503872 1 1 -845417648 1 1 -845419104 1 1 -845420752 1 1 -845552712 1 1 -845676584 4 32 -845676672 2 26 -845676728 1 111 -845676936 3 114 -845680176 2 12 -845808496 14 98 -845808520 15 111 -845808968 4 26 -845809032 11 64 -845813656 10 33 -845815128 12 75 -845816224 1 4 -845943224 1 1 -845947128 1 1 -846069912 1 1 -846202288 1 1 -846207824 1 2 -846742688 1 1 -846858320 1 1 -847120104 1 1 -848173240 1 1 -849223080 1 4 -849226688 4 4 -850920632 1 2 -850924536 1 3 -851324584 1 1 -854873128 2 3 -855511296 1 1 -855516528 1 1 -856428200 1 1 -856435856 1 1 -858535600 1 1 -859315176 1 1 -859835552 1 1 -859838056 1 1 -859840184 1 1 -859864568 1 1 -859869272 1 2 -859869896 1 1 -860759232 1 1 -861167800 1 1 -862198512 3 3 -862213664 1 3 -862590224 1 1 -862727848 1 1 -866003072 1 1 -867185904 1 2 -867443400 1 2 -867969560 1 4 -869663464 1 7 -869664656 1 4 -869666520 1 4 -870057712 1 6 -870059896 1 4 -870061520 1 5 -870062672 1 7 -871637024 1 1 -871900384 1 6 -872027776 1 1 -872415368 1 1 -872420640 1 3 -872813864 1 2 -872948520 1 1 -874254928 1 1 -874518576 1 2 -874776392 2 2 -874909624 1 2 -875038816 1 1 -875044832 1 1 -875168776 1 3 -875173584 1 1 -875823888 1 1 -876610304 2 2 -877270488 1 1 -877398512 1 1 -877667096 1 1 -877796720 1 1 -877797896 1 1 -877927208 1 1 -878445168 1 4 -878446016 1 4 -878843992 1 1 -878844888 1 1 -879767480 1 1 -879768704 2 2 -880545592 1 1 -880940072 1 5 -881201640 1 1 -881594752 1 3 -883824784 2 2 -885661192 1 1 -886310640 1 1 -886444216 1 1 -888151416 1 2 -888407184 1 1 -888407744 1 1 -888421856 1 1 -888668504 1 1 -888679600 1 1 -888799712 1 2 -888940200 1 1 -888947464 1 1 -889078984 1 1 -889466888 1 1 -889979776 1 1 -889992024 1 1 -890504864 1 1 -890506472 3 6 -890506936 1 5 -891029384 2 2 -891161224 2 3 -891165984 1 1 -891690352 1 2 -892732728 1 7 -892865992 12 12 -892866536 3 11 -893657336 1 1 -893659584 1 1 -893912280 1 2 -894180904 1 2 -894438720 1 1 -894699616 1 2 -894971472 1 1 -895223048 4 8 -895352920 1 7 -895353944 5 5 -895354224 2 4 -895354312 1 5 -895354328 1 5 -895354568 1 1 -895488896 1 3 -895879608 1 28 -895881200 2 6 -896008984 2 14 -896014264 10 12 -896015120 1 15 -896144360 1 1 -896276936 1 2 -896402424 1 5 -896403520 1 9 -896536400 1 63 -896542048 1 42 -896543792 11 36 -896544544 7 8 -896671560 3 6 -896806352 1 1 -897322408 1 1 -897589672 1 1 -897858600 1 1 -897878136 1 1 -898003880 1 1 -898004384 1 1 -898379176 1 4 -898897936 3 3 -900206312 1 1 -900214632 1 1 -900859240 1 1 -901660672 1 3 -901664112 1 1 -902316832 1 1 -902705088 1 1 -902710336 1 2 -903220216 1 2 -906629184 1 1 -907676176 1 1 -907684592 1 1 -908073448 1 1 -908209400 1 1 -908330040 1 1 -908467008 1 3 -909642752 1 1 -909905808 1 1 -912131024 2 4 -912261624 1 1 -912266424 1 1 -912270776 5 10 -912274520 1 1 -912276032 1 41 -912394328 1 1 -912395400 1 1 -912400064 1 1 -912524544 1 3 -912919040 1 3 -912924048 1 1 -912924528 1 2 -913049392 2 7 -913050144 1 7 -913050576 1 7 -913311000 1 1 -913311808 1 1 -913319272 1 3 -913707632 1 1 -913709024 1 2 -913836216 1 1 -913970608 1 3 -914228288 1 1 -914228752 1 1 -914363776 1 2 -915149000 1 3 -915150912 1 3 -915541512 1 4 -915542464 1 1 -915544296 1 2 -915670176 1 2 -915802192 1 1 -915934160 1 6 -915935536 2 3 -915937240 1 5 -915938496 1 1 -915938808 1 6 -915939232 1 1 -916066160 1 2 -916066184 1 8 -916196320 1 3 -916327104 1 1 -916463424 1 1 -916852808 1 1 -917248168 1 1 -917383040 1 1 -917389080 1 22 -917390768 2 21 -917513464 1 1 -917635104 1 6 -917645208 3 21 -917900624 1 1 -917901392 1 1 -917907688 1 1 -918039552 2 2 -918168464 1 1 -918169392 1 1 -918172400 1 1 -918175544 2 2 -918175792 1 1 -918291568 1 2 -918568008 1 1 -918814984 1 1 -918817696 1 3 -919083544 2 2 -919084728 1 2 -919601888 1 1 -920650552 1 2 -920654296 1 2 -921049696 1 8 -921051456 1 7 -921052256 1 1 -921183624 1 1 -921311000 1 3 -921442608 1 2 -921572160 2 8 -921966888 3 10 -921967424 4 11 -922624288 1 1 -922626856 1 2 -923797976 1 7 -924593400 1 2 -925499744 1 3 -925643520 1 10 -926291536 1 1 -926943712 1 8 -931276288 1 3 -931804256 1 1 -933774480 1 1 -933901520 1 1 -933907128 1 1 -934440904 1 1 -935217312 1 1 -935872904 1 3 -937834496 1 4 -941632960 1 1 -941635200 1 3 -942016496 1 1 -942811376 1 1 -943981864 1 1 -943982984 1 2 -944517088 1 1 -944649520 1 1 -945043840 1 3 -945044824 1 3 -945425512 1 1 -945824960 1 1 -945946912 2 3 -946611680 1 1 -948180592 1 1 -948182416 1 1 -950010032 1 1 -950015736 1 1 -950144048 1 4 -950147840 1 2 -950147888 1 2 -950149576 1 2 -950151880 1 1 -950404200 1 1 -950409480 1 1 -950540632 1 2 -950670272 1 2 -950672392 2 2 -950807768 1 1 -950808200 1 2 -950810880 1 2 -952120160 1 1 -952254112 1 4 -952371416 1 1 -952899088 1 2 -953288560 1 2 -956172808 1 1 -956175008 6 6 -956441216 1 1 -956567680 1 1 -957492392 1 1 -958401400 1 1 -958531392 1 1 -958665888 1 2 -958929632 1 1 -959057480 2 2 -959578464 1 2 -961414368 1 2 -961684912 1 3 -962734360 3 5 -963003624 1 1 -963524424 1 1 -963647544 1 1 -964697232 1 5 -965214592 1 2 -966264136 1 1 -966265784 1 6 -966791624 1 2 -966792656 1 1 -966918336 8 23 -966926896 1 23 -967060208 5 19 -967450832 1 36 -968111920 1 1 -968235216 1 1 -968494088 1 1 -968498888 2 2 -969293880 1 1 -969412296 1 1 -971127400 1 1 -972036936 1 2 -972947752 1 8 -974128840 2 2 -974791888 1 2 -974797504 1 1 -974917400 1 2 -974919112 2 2 -974920104 1 2 -975185480 1 1 -976490568 2 7 -976629560 1 3 -976631432 1 3 -977277320 1 1 -977414712 1 3 -977798624 1 1 -977808936 1 1 -978071048 1 1 -978323688 1 2 -979637520 1 2 -980948464 1 24 -980951112 1 8 -981207032 1 1 -981471984 1 1 -981476200 2 38 -981478152 3 70 -981478568 1 20 -981607880 3 15 -981608448 5 7 -981608536 2 2 -981738128 1 1 -981992808 1 1 -982000624 1 1 -982647856 1 1 -982652816 1 2 -982653376 2 2 -982655952 2 2 -982917912 1 1 -983050728 1 1 -983309856 1 3 -983441976 1 5 -983566720 1 1 -983963312 1 7 -984353552 1 2 -984483136 1 1 -984881200 1 1 -984882856 1 1 -985140392 2 4 -985269824 1 3 -985271320 1 3 -985402432 1 1 -985533064 1 2 -985666944 1 3 -985669552 1 1 -985928648 1 1 -986186368 1 1 -986187688 1 1 -987110288 1 7 -987497688 1 1 -988547640 1 1 -988683608 1 17 -988808320 1 1 -988808680 1 1 -988811384 1 1 -988811712 1 1 -988812168 1 1 -988813112 1 1 -988814496 1 1 -988814824 1 3 -988943928 1 1 -989069480 1 17 -989466816 1 12 -989468688 1 1 -989594176 1 18 -989594688 1 66 -989595848 3 66 -989598624 15 15 -989598656 11 12 -989598728 10 54 -989990704 2 11 -989992856 2 19 -989994192 1 3 -989995000 1 7 -990119264 1 1 -990119680 1 1 -990380440 1 1 -990386184 3 13 -991431128 1 1 -991431640 1 1 -991696880 1 1 -991697552 1 1 -991830024 1 3 -991955272 1 2 -991955704 1 1 -992092280 1 3 -992093896 1 3 -992874720 1 1 -993016224 1 1 -994587408 1 5 -995503208 1 2 -995629880 1 3 -995763240 1 1 -996018768 1 3 -996020288 3 4 -996021296 2 2 -996682760 2 2 -998116944 1 1 -998247160 1 1 -999032488 1 1 -1001260744 1 2 -1003240072 1 1 -1004413080 1 1 -1004817824 1 1 -1004960400 4 4 -1005716408 1 11 -1005726488 1 12 -1005849584 2 3 -1005871784 2 13 -1006770680 1 3 -1006778752 1 4 -1008606600 1 5 -1008616464 1 5 -1008884696 1 1 -1012008216 1 1 -1012666392 1 1 -1012941672 1 2 -1014371680 1 1 -1014501152 1 2 -1016084888 1 1 -1016472504 1 2 -1016736608 5 5 -1017387096 1 2 -1017390096 1 1 -1017391672 1 2 -1017521928 1 1 -1017522752 1 2 -1017910760 1 1 -1018824416 1 3 -1019095088 1 8 -1019095624 2 10 -1019220944 1 20 -1019609752 1 6 -1019741224 1 11 -1020660952 2 4 -1020665576 2 3 -1020796600 1 1 -1021051456 1 1 -1021189632 1 1 -1021707432 1 7 -1021721672 1 30 -1022230680 1 25 -1022235840 1 21 -1022756928 1 1 -1022763904 1 3 -1023037744 1 1 -1023297368 1 2 -1023430944 1 1 -1024199976 2 2 -1024206256 1 1 -1024996784 1 1 -1025002688 1 1 -1025649760 1 5 -1025651776 1 2 -1025903672 1 3 -1026169456 2 3 -1026186752 1 12 -1027081312 1 2 -1027348704 1 2 -1027743752 1 1 -1028533816 1 1 -1028670520 1 1 -1029455464 1 1 -1029572832 1 5 -1029706648 1 1 -1030489624 1 1 -1031152304 1 1 -1031159144 1 1 -1031406360 4 4 -1031416256 1 1 -1031801232 1 3 -1031930240 1 5 -1032457112 1 2 -1032740792 1 1 -1033240888 1 1 -1033254128 1 1 -1034819448 1 1 -1036262376 1 1 -1037322424 1 1 -1037568560 1 1 -1037587688 1 2 -1037701544 1 8 -1038097256 1 1 -1038097824 1 1 -1038108472 1 1 -1038235424 1 1 -1038765336 1 1 -1039275056 1 1 -1040594072 1 1 -1040714000 1 1 -1041236624 1 2 -1041367328 1 1 -1041375328 1 1 -1041380112 1 1 -1041767048 1 1 -1041769848 1 1 -1041770104 1 1 -1041770632 1 1 -1042549016 1 2 -1042550664 1 1 -1043604696 1 2 -1043859152 1 1 -1043863648 1 1 -1044120680 1 3 -1044121096 2 23 -1044122248 15 15 -1044256032 1 2 -1044521592 1 1 -1044652808 3 4 -1044779304 1 1 -1044912200 1 1 -1045046672 1 1 -1046350712 1 2 -1046355592 1 1 -1046874912 1 2 -1047137880 1 1 -1047140456 1 1 -1047528552 1 1 -1047662088 1 3 -1047665120 1 3 -1047923488 1 2 -1048059984 1 2 -1048190576 1 2 -1049240304 2 2 -1049495760 1 2 -1049629496 1 2 -1049635064 1 1 -1049761992 2 3 -1049763328 2 2 -1049894272 1 1 -1050022056 1 3 -1050281264 1 1 -1050288832 1 1 -1050682720 1 1 -1050804760 3 3 -1051197856 1 3 -1051202320 1 1 -1051204328 1 3 -1051205736 1 3 -1051206232 2 3 -1051328536 1 1 -1051333024 1 2 -1051727416 1 1 -1052247408 1 1 -1052249728 1 1 -1052251432 1 1 -1052511000 1 1 -1052514176 1 1 -1052775520 1 5 -1052778288 1 1 -1052907072 1 2 -1053300208 1 1 -1053821776 1 1 -1053826824 1 1 -1054611112 1 1 -1054612008 1 1 -1054867632 1 2 -1054869920 1 1 -1054875208 1 2 -1055655400 1 1 -1056578176 1 2 -1056971832 1 2 -1057368104 1 2 -1058548024 1 3 -1058938112 5 5 -1061292696 1 2 -1061295768 2 4 -1069820944 1 1 -1070604616 1 1 -1071254424 1 1 -1072316712 2 2 -1073880616 1 1 -1076500688 1 1 -1077020760 1 1 -1077020912 1 5 -1080184088 1 1 -1081092600 3 3 -1081346536 1 1 -1081485688 1 1 -1081879392 1 8 -1083189152 1 1 -1083979376 1 1 -1087785064 1 1 -1088825752 1 4 -1088948976 1 2 -1089217152 1 1 -1090926304 2 2 -1091194800 1 18 -1091324080 4 9 -1091332544 1 16 -1091336128 1 17 -1091339024 1 1 -1091698696 1 17 -1091699976 1 19 -1091703920 1 13 -1091709408 1 38 -1091965880 1 2 -1091971760 1 7 -1092111248 1 2 -1092505568 1 2 -1093143624 1 1 -1093814488 1 4 -1093945968 1 3 -1094077832 1 1 -1096171368 1 1 -1096418840 2 3 -1096557432 1 1 -1097336672 2 2 -1097470960 1 1 -1098782464 2 4 -1099178928 1 1 -1099835032 1 1 -1101143776 1 1 -1101403648 1 4 -1101404448 1 3 -1101410464 1 1 -1101673400 1 1 -1102201120 1 1 -1102971768 1 1 -1102975696 1 3 -1104023432 1 1 -1104152488 1 1 -1106119208 1 1 -1106127944 1 1 -1106780952 1 2 -1108221416 1 1 -1109001176 2 3 -1109001224 1 2 -1109003208 1 2 -1109003784 2 2 -1109005624 1 1 -1109008024 1 3 -1109008528 1 2 -1109269904 1 7 -1109793232 1 2 -1109796032 1 2 -1110705352 1 1 -1110712512 1 1 -1110836408 1 1 -1110842600 1 2 -1111366032 1 2 -1111756680 1 1 -1111891288 1 1 -1112020824 1 5 -1112021736 1 1 -1112024176 2 2 -1112026416 1 7 -1112156576 1 1 -1112807240 1 2 -1112939112 2 5 -1113070824 1 2 -1113200544 1 1 -1113201656 1 1 -1113330448 1 2 -1113331784 1 3 -1113591032 1 2 -1113592448 1 2 -1113593152 1 2 -1113598168 1 2 -1113722752 2 2 -1113857384 1 1 -1116473336 1 9 -1117784888 1 2 -1117786360 1 2 -1117786432 1 1 -1117787424 6 6 -1118573904 1 1 -1118579616 1 3 -1118712072 1 1 -1118713456 1 4 -1119360528 1 1 -1119619448 2 15 -1119630640 1 1 -1122764880 1 1 -1124347976 1 1 -1124600536 1 2 -1124608712 1 2 -1125019232 1 1 -1128275192 1 7 -1128803208 1 3 -1129459024 1 1 -1130635848 51 63 -1130640672 1 6 -1130649544 12 12 -1131414168 1 7 -1131417240 1 1 -1131421248 1 4 -1131424832 1 1 -1133253192 2 2 -1133517944 1 1 -1133521000 1 1 -1133914192 1 1 -1133916816 1 1 -1134563824 1 2 -1134691808 1 1 -1136401736 1 1 -1139171624 3 3 -1139279528 1 1 -1139555712 1 1 -1139936336 1 10 -1139942520 1 2 -1140465416 1 3 -1140724800 1 11 -1141115696 1 1 -1141116224 1 8 -1141119008 1 8 -1141120752 1 6 -1141772056 1 1 -1143744224 1 1 -1144139912 1 1 -1144148016 1 4 -1144528128 1 1 -1144925976 1 1 -1145326656 1 1 -1145327376 1 2 -1146622528 1 2 -1146751552 1 2 -1147011456 1 1 -1147029040 1 5 -1147159760 1 3 -1148329224 1 1 -1148335808 1 1 -1148337904 1 1 -1148587480 1 1 -1149777568 1 1 -1151340776 1 5 -1151346656 2 6 -1151468968 1 4 -1151471184 1 1 -1152130504 1 1 -1152254456 1 1 -1154617472 1 1 -1155008456 1 1 -1155010432 1 2 -1155145472 1 3 -1155406904 1 1 -1155535760 1 1 -1155538512 1 2 -1156061960 1 1 -1156319144 1 1 -1156448440 1 1 -1156449256 1 1 -1156455040 1 1 -1157368064 2 2 -1157370512 1 1 -1157373080 2 2 -1157768304 1 4 -1157890256 1 1 -1157895224 1 1 -1157895288 1 1 -1157896816 1 1 -1157899448 1 1 -1157899560 1 1 -1158027848 1 7 -1158164656 1 2 -1158424120 1 1 -1158820192 1 1 -1158940568 1 2 -1158941760 2 3 -1158951128 1 2 -1158951672 3 4 -1159202808 1 1 -1159205112 1 1 -1159729376 1 1 -1159862560 1 5 -1161176640 1 2 -1161299944 3 4 -1161301360 1 2 -1161827976 6 6 -1162088616 1 1 -1162090640 1 4 -1162095520 1 10 -1163135800 1 1 -1163138776 1 1 -1163404224 1 1 -1163788304 1 2 -1164317696 1 1 -1164716648 1 1 -1164848328 1 5 -1164974200 1 1 -1164977400 1 1 -1165236368 1 1 -1165237112 1 4 -1165364712 1 7 -1165389944 2 3 -1167076936 1 5 -1167598464 1 1 -1167855968 1 1 -1167994096 1 1 -1170360320 1 1 -1172442624 1 2 -1172578352 1 1 -1174027824 1 51 -1174171424 3 5 -1175862568 1 1 -1178733200 1 1 -1180194920 1 2 -1180200984 1 1 -1180205080 1 1 -1180309344 4 4 -1180319888 1 3 -1180575616 1 4 -1180577352 2 8 -1180579504 8 12 -1180579528 1 1 -1180580304 3 3 -1180584160 2 4 -1180609960 1 19 -1180610128 1 12 -1180612064 1 18 -1180700752 1 2 -1180961384 1 1 -1181091968 1 3 -1181361000 1 9 -1181888328 2 14 -1184769096 1 2 -1184771104 1 2 -1185290696 1 2 -1186485144 1 1 -1186732432 1 1 -1186992520 3 6 -1187005712 2 6 -1187261264 1 2 -1188051944 1 1 -1189107992 1 2 -1189752608 2 2 -1189757400 1 1 -1190269592 1 4 -1190406336 1 1 -1191192208 1 1 -1191192960 1 1 -1193017368 1 10 -1193018824 1 7 -1193019248 1 2 -1193548008 1 1 -1194069512 1 3 -1194599720 1 5 -1194995392 1 1 -1195390752 1 1 -1195775040 1 1 -1195781072 1 1 -1196035360 2 2 -1196038928 1 1 -1196040720 1 1 -1196040792 1 1 -1196953168 1 1 -1197605928 1 23 -1197609880 1 23 -1197617224 2 16 -1197617752 2 21 -1197619752 3 29 -1197620848 2 16 -1197625384 1 1 -1197635184 3 3 -1197740448 1 9 -1197743048 1 3 -1197749416 1 24 -1197749664 2 192 -1197750640 6 189 -1197750848 1 7 -1197877680 1 4 -1197885104 1 143 -1197885232 5 62 -1198130856 1 1 -1198190336 2 9 -1198190792 3 4 -1198190968 3 63 -1198191296 1 1 -1198191552 2 4 -1198191760 1 1 -1198191824 1 32 -1198192456 1 24 -1198192568 1 1 -1198264832 6 25 -1198269920 5 39 -1198270632 2 10 -1198272784 1 2 -1198283128 1 81 -1198790088 1 1 -1199834400 1 1 -1199836424 1 1 -1199842184 1 1 -1199967920 1 1 -1199975080 1 1 -1200759696 1 2 -1200882672 1 7 -1200883576 1 2 -1200884248 1 49 -1200885016 6 44 -1201017288 6 101 -1201017424 1 17 -1201018312 2 47 -1201018344 1 60 -1201018384 1 28 -1201018568 1 19 -1201019200 3 133 -1201539920 1 6 -1201540776 3 72 -1202201816 1 1 -1202455992 1 1 -1203248984 1 1 -1203374888 1 1 -1204425704 1 2 -1206390824 1 1 -1208091048 1 1 -1208093536 1 1 -1215563328 1 1 -1215955952 1 1 -1217665232 1 2 -1217924280 1 4 -1220426408 1 2 -1222510744 1 5 -1223829808 1 1 -1224082096 1 1 -1224096488 1 1 -1224351280 1 1 -1226049512 1 1 -1226050856 1 1 -1226182544 1 1 -1227628312 1 3 -1228803768 1 3 -1228932720 1 1 -1229200440 2 2 -1229331032 1 1 -1231560032 2 2 -1232211992 1 1 -1232601432 1 1 -1232612944 1 1 -1233391424 1 2 -1233913232 2 3 -1234066976 1 5 -1234569872 1 4 -1236284776 1 1 -1243221920 1 1 -1248080816 1 1 -1248335536 1 1 -1248336472 1 1 -1248340728 1 1 -1248989136 1 1 -1248989688 1 1 -1248993248 1 2 diff --git a/starcheck/data/bad_gui_stars.rdb b/starcheck/data/bad_gui_stars.rdb deleted file mode 100644 index 1abe471d..00000000 --- a/starcheck/data/bad_gui_stars.rdb +++ /dev/null @@ -1,845 +0,0 @@ -agasc_id n_nbad n_obs -N N N -267376 1 1 -394488 1 2 -1314672 1 1 -1314776 7 8 -1320096 1 6 -1841600 1 1 -2367424 1 1 -2758552 1 1 -3282272 2 2 -3679400 1 1 -3803544 1 1 -5115672 1 2 -5771800 2 2 -9047352 1 1 -9570024 1 1 -9574928 1 3 -9967472 1 1 -17834912 2 2 -21368320 1 2 -21368928 1 1 -21375488 1 2 -26748896 1 1 -27792168 1 1 -31070800 1 1 -31328048 1 1 -31990928 1 2 -32375384 2 43 -32902072 1 1 -33299280 1 1 -33554464 1 1 -33688248 1 2 -33952024 1 1 -34997808 1 3 -35000432 1 3 -35000776 1 9 -35001864 2 3 -35002728 2 12 -35004328 1 4 -35004456 2 2 -35263288 1 1 -35398128 1 2 -35656576 1 1 -36047616 1 1 -36178592 4 4 -36438608 1 4 -36443624 1 1 -37098928 1 1 -38011968 1 1 -38409760 1 2 -38535536 2 2 -39980640 3 3 -40113272 1 1 -40766872 1 1 -41691352 1 3 -41946328 1 1 -42870912 1 4 -43257832 1 2 -44304840 1 2 -44306848 1 1 -44959056 1 7 -45483048 1 1 -46794712 2 2 -47846640 1 1 -48892720 1 1 -50473248 1 2 -52177088 1 1 -54802960 1 1 -54806080 1 1 -57543216 1 1 -57945504 1 1 -60705432 1 1 -62922104 1 1 -64113280 1 2 -68956456 1 1 -70913760 1 1 -71829832 1 1 -71838016 1 1 -73409080 1 1 -73794376 1 1 -75498752 1 2 -77603448 1 1 -77604312 1 1 -77859416 1 1 -79697824 1 1 -80093184 1 2 -80349200 1 1 -81137544 1 1 -81401352 1 1 -81923536 1 1 -82973008 1 6 -82976896 1 4 -83502000 1 2 -83631872 1 2 -84020800 1 1 -84283272 1 7 -84285360 2 7 -85599976 1 1 -86116264 1 1 -87955344 4 4 -89132488 1 1 -99753296 1 1 -103943072 1 1 -104205832 2 2 -106304808 1 2 -107747440 1 2 -107881800 1 1 -109979960 1 1 -111280232 2 2 -111552984 1 1 -111807640 1 1 -112073448 1 1 -112075144 1 1 -112076816 1 2 -112467776 1 1 -112860520 1 3 -113248408 2 2 -113378432 1 1 -113510880 4 6 -113514048 1 3 -113776416 1 1 -114558856 1 1 -114564432 1 2 -114951568 1 1 -114952056 1 6 -114953312 1 1 -115212424 1 1 -115344184 1 5 -115347400 1 14 -115347592 1 2 -115347896 1 2 -115348632 1 10 -115349744 1 10 -115609648 1 2 -116657928 1 1 -117577008 1 1 -117836536 1 1 -118358288 1 1 -118359864 1 1 -118498608 1 1 -120587592 1 1 -120992000 1 2 -122296136 1 1 -131740736 1 1 -134364608 1 1 -139214712 1 1 -145113736 1 1 -145359032 1 1 -149957144 1 1 -152831696 1 1 -153100112 1 1 -153631040 1 1 -155976440 5 6 -156770512 1 2 -157155376 1 2 -157689088 1 1 -158597304 1 1 -159650160 1 1 -160041768 1 2 -160571432 1 2 -161351256 1 1 -161353264 1 1 -161357600 1 1 -162791496 1 1 -162800672 2 2 -163450920 1 1 -167648296 1 1 -169745072 1 1 -171586032 1 78 -171595712 1 1 -175387248 2 2 -184426416 1 1 -185205288 1 18 -185871616 3 3 -185999680 1 1 -186125624 1 1 -186655392 1 1 -186915648 1 1 -187040664 1 1 -187305256 1 6 -187309672 2 2 -188226672 1 1 -188353456 1 2 -188482256 1 1 -188488336 1 1 -188497304 1 1 -188617280 1 2 -188617504 1 2 -188623712 1 1 -188750920 1 1 -188751576 1 6 -188752136 3 6 -189008880 1 1 -189139752 1 1 -189268760 1 1 -189407736 1 1 -189682080 1 1 -190587272 1 1 -190716896 1 1 -190977856 3 3 -192154296 1 1 -192283696 1 1 -192287776 1 1 -192677816 1 1 -193070464 1 2 -193203712 1 1 -193203880 1 1 -195429880 1 1 -195438248 1 2 -210250256 1 1 -221524824 1 4 -222831128 1 1 -223358200 1 1 -223883736 3 3 -224015176 1 2 -224932136 1 1 -225576592 1 1 -225981864 1 2 -226369448 1 2 -228729344 1 1 -229385424 1 1 -232129104 1 1 -239077568 1 3 -239080480 1 1 -240255592 1 5 -240260736 1 1 -240388328 1 1 -240391408 1 1 -240782136 1 4 -240785360 1 1 -240922632 1 1 -242094344 1 1 -243803256 1 1 -243803752 1 1 -244200248 1 1 -248253864 1 1 -248257992 1 1 -248275056 1 1 -250227912 1 12 -251405672 1 1 -251539008 1 2 -257953336 1 1 -258216048 1 1 -258612968 1 1 -259149568 6 6 -259402768 1 1 -259654776 2 2 -259672440 1 1 -260050336 1 4 -260053392 2 2 -260186640 2 10 -260318824 1 1 -260323048 1 1 -260325616 1 1 -260834088 1 1 -260849624 1 2 -260863048 1 1 -260964688 1 1 -260965416 2 14 -260967848 1 10 -260968144 1 10 -260968880 1 1 -260969240 1 1 -261112888 1 1 -261490800 1 10 -261626376 1 25 -261754432 1 1 -262275128 2 11 -262409624 1 17 -262681584 1 2 -262807328 1 1 -263201496 1 1 -263593672 1 1 -264115840 1 2 -264119600 2 2 -265687280 1 2 -265690616 1 1 -267393432 1 1 -269360480 1 1 -286410432 1 1 -288498944 1 1 -296753512 6 6 -300158864 1 14 -300948368 1 1 -301078152 1 1 -301080376 1 1 -301465776 1 1 -301600040 1 1 -304882912 1 1 -306200176 1 1 -308678376 1 1 -309204016 1 1 -322963800 1 1 -324149816 1 1 -325850632 1 4 -325859552 1 7 -327036400 1 1 -327418000 1 2 -327945264 1 1 -328077952 1 1 -328470520 1 1 -329261768 1 1 -329387592 2 2 -329388560 1 3 -329391288 1 1 -329515800 1 1 -329522600 1 1 -329912720 1 3 -330171408 1 3 -330173744 3 12 -330305976 2 2 -330311856 1 1 -330450136 1 1 -330569992 1 1 -330841072 1 1 -330967424 1 1 -331222896 3 4 -331355312 1 8 -331361712 1 3 -331874656 1 1 -333322496 1 2 -334631560 1 1 -335025040 1 37 -335025848 1 37 -335026200 3 7 -335029368 1 14 -335414944 1 1 -335419056 1 7 -335419296 1 1 -335684032 6 7 -367148872 1 214 -373564272 1 1 -375145080 1 1 -375541704 1 1 -377102496 1 1 -379854696 2 2 -389816480 1 2 -390732192 1 1 -390734432 1 1 -391120072 1 1 -391251760 2 2 -391256392 2 2 -391258496 2 2 -391392752 1 2 -391643272 1 1 -392312056 1 3 -392561640 1 1 -393479136 1 1 -394273160 1 1 -394404880 1 2 -394528824 1 10 -394543384 1 1 -395055600 1 1 -395722536 1 1 -396501520 2 2 -396762720 1 1 -397804344 1 1 -397939208 1 1 -398728208 1 1 -398852632 1 1 -400171096 1 1 -401738488 1 1 -402142880 1 1 -406983600 1 130 -406985120 1 148 -407520256 1 2 -424151176 6 14 -436091496 1 2 -436356296 1 1 -438441368 1 21 -440140240 1 37 -444743456 3 3 -445648560 2 2 -448412024 1 1 -449326512 1 1 -450103168 1 1 -450108568 3 10 -450111336 2 8 -451158096 1 2 -452603456 1 1 -452734360 1 1 -452738064 1 1 -452994656 1 1 -453122704 1 1 -453525128 1 1 -454303560 1 1 -454305024 1 1 -454694264 1 1 -455091840 1 3 -456664832 1 1 -460204384 1 1 -465456712 6 7 -472527720 1 202 -472652872 1 9 -472654568 2 171 -472659832 1 272 -472661712 2 16 -472665256 1 462 -490220520 5 5 -494418616 1 1 -496240920 1 1 -496242136 1 1 -497824592 1 1 -497951560 1 1 -499129656 1 1 -499130824 3 6 -499525624 1 6 -501487624 1 1 -501617728 1 1 -502406624 1 1 -503056528 1 1 -505545160 1 1 -506069784 1 1 -508046536 1 1 -508697264 1 1 -509225640 4 4 -510791464 1 1 -523109448 1 1 -537150832 1 1 -556930704 1 1 -559814360 1 1 -573051032 1 1 -573459376 1 1 -574497600 1 18 -574762136 2 2 -575933000 1 1 -577508552 1 1 -577510952 1 1 -593102328 1 1 -596250584 1 2 -611321344 1 1 -611328304 1 1 -611976504 1 4 -612370792 1 1 -612763008 2 2 -613557312 2 2 -613560496 1 1 -613817792 1 2 -614207768 1 1 -614482704 1 1 -614732696 1 1 -615910352 1 2 -615914552 1 1 -616048272 1 1 -616432288 1 1 -616699752 1 1 -617222144 1 2 -618008912 1 1 -618273208 1 1 -618533328 1 4 -618535032 3 3 -620628528 1 1 -626667256 1 1 -629150672 1 1 -634392248 1 4 -637144600 3 3 -639635448 2 2 -640951128 1 1 -641597776 1 1 -642655480 1 9 -645405904 1 1 -645793424 1 2 -645801536 1 4 -646186832 1 2 -646193472 1 3 -646322176 2 2 -646713488 1 5 -647632648 4 4 -647759080 1 3 -647762704 1 1 -648157200 1 1 -648546072 1 1 -648676152 1 3 -648683472 1 1 -649070000 1 2 -649070072 1 1 -649076448 1 1 -650119672 1 2 -650249416 2 2 -651559472 1 3 -651563576 1 1 -651960008 1 1 -652349304 1 1 -652480464 1 1 -653529952 1 1 -653918512 1 1 -653919168 1 1 -654050016 1 1 -654051456 1 1 -654053896 1 1 -656409216 9 9 -656409952 1 6 -656411640 1 2 -658771880 1 1 -658773552 1 2 -662451152 1 2 -662569256 1 1 -664279632 1 1 -664412840 1 1 -666634104 1 2 -667681352 2 4 -667813904 1 1 -667950568 1 1 -672416120 1 1 -672672328 1 1 -672942936 1 1 -673588304 1 2 -674505344 1 4 -675417112 3 3 -676336280 1 1 -677255696 1 1 -680658760 1 1 -683020544 1 3 -684202816 1 1 -686173240 1 2 -686557584 1 1 -688264600 1 1 -689045696 3 7 -689439808 1 3 -689441328 2 2 -690752264 1 1 -690894672 1 1 -691025840 1 2 -691415792 1 1 -691547008 1 1 -691548808 1 1 -691668600 1 1 -692065720 1 1 -692077072 2 2 -692077872 1 1 -692334232 1 1 -692723624 3 3 -692849352 1 1 -693243160 1 1 -693371632 1 4 -693373016 1 4 -693903800 1 1 -694034288 1 2 -694036016 1 1 -694160416 1 1 -694294024 1 1 -694425952 1 1 -696917160 1 2 -711341336 1 1 -711724488 1 1 -712259608 1 1 -714096568 2 2 -716578704 1 2 -717887808 2 3 -718145224 1 1 -720504096 1 1 -720770784 1 1 -722343336 1 1 -722741568 1 1 -722871056 1 2 -722871536 1 3 -723521752 1 1 -723657296 1 1 -726805320 1 6 -728239272 2 2 -728631464 1 5 -732566304 1 1 -735709464 1 1 -736235696 1 1 -736760784 1 1 -738857416 1 1 -739780584 2 2 -740693864 2 2 -744490608 1 1 -747635400 1 2 -747902720 1 1 -750784840 1 1 -756551792 1 1 -756814024 1 1 -757735584 1 1 -758255832 3 3 -759439008 4 4 -759958456 3 3 -759961200 2 7 -760614344 1 2 -761795176 1 1 -761795544 1 1 -761795880 1 1 -761796200 1 2 -761800680 2 3 -761802048 2 5 -762194256 2 4 -762581024 1 1 -763626208 1 2 -763893760 1 1 -764150080 1 1 -764418648 1 7 -764677232 1 1 -764812448 1 1 -766525064 1 1 -766647040 1 1 -766774840 3 5 -766779696 1 2 -766910960 1 2 -767047624 1 1 -767168608 2 4 -767431952 1 1 -767434336 1 1 -767562928 1 2 -767823352 1 1 -767953976 1 1 -767955424 1 1 -769132592 1 1 -770451328 1 1 -770713224 1 1 -771756656 1 1 -772679136 1 3 -784599648 1 1 -788418168 3 3 -790896216 1 1 -792986440 1 2 -793379216 1 1 -794035144 3 3 -796663952 1 1 -796926504 1 3 -796930872 2 7 -796931344 2 6 -797051880 1 1 -797836856 1 1 -799937584 1 1 -800985432 1 1 -802557488 1 1 -805966472 1 1 -809894176 2 2 -810558256 1 2 -810689000 2 3 -810952624 1 1 -813826248 1 1 -815797544 1 2 -816325736 1 2 -816583256 1 1 -817767040 1 1 -818025496 1 1 -818285680 1 1 -818807896 3 7 -826545392 1 1 -827336288 2 2 -835982160 1 1 -836242272 2 2 -836246360 1 2 -836370776 1 1 -836372744 1 2 -837291648 1 2 -837421240 1 1 -838209392 1 1 -838473128 1 2 -838998120 1 1 -839125536 1 1 -839125640 1 1 -839385704 1 1 -839386512 1 1 -840441888 1 1 -840697120 1 1 -841616968 1 6 -841625328 1 1 -842155536 1 1 -842543360 1 1 -842543752 1 1 -842798360 1 1 -844892816 1 1 -845419104 1 1 -845676584 1 33 -845676728 1 104 -845680176 1 4 -845808496 3 50 -845808520 2 26 -845808968 7 35 -845809032 1 9 -845813656 4 32 -845815128 6 20 -849226688 3 3 -850920632 1 2 -853937792 1 1 -854873128 1 3 -859323944 1 2 -859864568 1 1 -862061648 1 1 -862201144 1 1 -872423616 1 1 -875038816 1 1 -875168776 1 1 -875172640 1 1 -876086232 1 1 -876610304 2 2 -878055056 1 1 -879768704 2 2 -887101152 1 1 -888800840 1 1 -890776504 1 1 -892865992 1 1 -895223048 1 1 -895354312 1 5 -895882448 1 4 -896014264 1 1 -896671704 1 10 -897607632 1 14 -897878136 1 1 -897988944 2 2 -897995504 5 7 -897996696 4 4 -897999536 2 2 -898002928 4 10 -898004384 5 5 -898026352 6 11 -898124000 1 1 -898125104 2 2 -898135232 2 3 -901664112 1 1 -904010616 1 1 -907026800 1 1 -907676176 1 1 -909642752 1 1 -911347328 1 1 -912266424 1 1 -912266608 1 1 -912270776 1 1 -912274520 1 1 -913970880 1 2 -914363776 1 1 -914367632 1 1 -914493824 1 1 -914759280 1 1 -915150912 1 3 -915541320 1 1 -915805672 1 2 -915939232 1 1 -916068248 1 1 -917900624 1 1 -919083544 2 2 -921965544 1 1 -933784768 1 1 -944649520 1 1 -945946912 1 2 -950408336 1 1 -950666648 1 2 -952120160 1 1 -953161688 1 1 -956175008 6 6 -959057480 2 2 -959578464 1 2 -962068896 1 1 -962202216 1 1 -962998672 1 1 -973229000 1 1 -974791856 1 1 -976490568 3 7 -976627168 1 2 -981337176 1 1 -981608448 1 1 -981608536 2 2 -981868776 1 1 -982653376 1 2 -984354776 1 1 -984881200 1 1 -984883736 1 3 -985146640 1 2 -985270584 1 1 -988815744 1 1 -989598656 5 12 -989598728 4 42 -990380440 1 2 -990386360 1 1 -996682760 2 2 -1004817824 1 1 -1005848792 1 8 -1014633104 1 2 -1016736608 5 5 -1017522752 1 1 -1020796600 1 1 -1021716808 1 28 -1026827176 1 1 -1031152304 1 1 -1031152960 1 1 -1038765336 1 1 -1043476472 1 2 -1044912200 1 1 -1047658976 1 1 -1048060864 1 1 -1052247408 1 1 -1052516392 1 1 -1052778400 1 1 -1054736752 1 1 -1058938112 1 1 -1077020568 1 1 -1081092600 1 1 -1088825752 1 4 -1089217152 1 1 -1092095568 1 2 -1093802144 2 2 -1098782464 1 4 -1101402896 1 1 -1105592952 1 1 -1106780952 2 2 -1107434616 1 2 -1113331784 1 1 -1113593152 1 1 -1113598168 1 2 -1117787424 6 6 -1118315672 1 6 -1118573904 1 1 -1130649544 4 4 -1139171624 2 2 -1143744224 1 1 -1145326656 1 1 -1147029040 1 5 -1148587480 1 1 -1154617472 1 1 -1156853664 1 1 -1157368064 1 2 -1157373080 2 2 -1157897992 1 2 -1158028568 1 1 -1161827976 6 6 -1163404224 1 1 -1163798232 1 1 -1164836912 1 2 -1180456512 1 1 -1189107992 1 1 -1190406336 1 1 -1193018944 1 2 -1194599720 1 4 -1196953168 1 1 -1197635184 3 3 -1197749416 2 21 -1197749456 1 3 -1198270632 1 2 -1199702136 1 1 -1200759696 1 3 -1201019200 1 38 -1201411680 1 1 -1202201816 1 1 -1208091048 1 1 -1216226192 1 1 -1223952272 1 1 -1224351280 1 1 -1227625048 1 2 -1228932720 1 2 -1232612944 1 1 -1246237112 1 2 diff --git a/starcheck/src/lib/Ska/Starcheck/Obsid.pm b/starcheck/src/lib/Ska/Starcheck/Obsid.pm index fc3a7019..fbba5687 100644 --- a/starcheck/src/lib/Ska/Starcheck/Obsid.pm +++ b/starcheck/src/lib/Ska/Starcheck/Obsid.pm @@ -22,210 +22,19 @@ use strict; use warnings; use Inline Python => q{ -import numpy as np -from astropy.table import Table - -from starcheck.utils import time2date, date2time, de_bytestr -from mica.archive import aca_dark -from chandra_aca.star_probs import guide_count -from chandra_aca.transform import (yagzag_to_pixels, pixels_to_yagzag, - count_rate_to_mag, mag_to_count_rate) -import Quaternion -from Ska.quatutil import radec2yagzag -import agasc - -from proseco.core import ACABox -from proseco.catalog import get_effective_t_ccd -from proseco.guide import get_imposter_mags -import proseco.characteristics as char - -import mica.stats.acq_stats -import mica.stats.guide_stats - -ACQS = mica.stats.acq_stats.get_stats() -GUIDES = mica.stats.guide_stats.get_stats() - -def _get_aca_limits(): - return float(char.aca_t_ccd_planning_limit), float(char.aca_t_ccd_penalty_limit) - -def _pixels_to_yagzag(i, j): - """ - Call chandra_aca.transform.pixels_to_yagzag. - This wrapper is set to pass allow_bad=True, as exceptions from the Python side - in this case would not be helpful, and the very small bad pixel list should be - on the CCD. - :params i: pixel row - :params j: pixel col - :returns tuple: yag, zag as floats - """ - yag, zag = pixels_to_yagzag(i, j, allow_bad=True) - return float(yag), float(zag) - - -def _yagzag_to_pixels(yag, zag): - """ - Call chandra_aca.transform.yagzag_to_pixels. - This wrapper is set to pass allow_bad=True, as exceptions from the Python side - in this case would not be helpful, and the boundary checks and such will work fine - on the Perl side even if the returned row/col is off the CCD. - :params yag: y-angle arcsecs (hopefully as a number from the Perl) - :params zag: z-angle arcsecs (hopefully as a number from the Perl) - :returns tuple: row, col as floats - """ - row, col = yagzag_to_pixels(yag, zag, allow_bad=True) - return float(row), float(col) - - -def _guide_count(mags, t_ccd, count_9th=False): - eff_t_ccd = get_effective_t_ccd(t_ccd) - return float(guide_count(np.array(mags), eff_t_ccd, count_9th)) - -def check_hot_pix(idxs, yags, zags, mags, types, t_ccd, date, dither_y, dither_z): - """ - Return a list of info to make warnings on guide stars or fid lights with local dark map that gives an - 'imposter_mag' that could perturb a centroid. The potential worst-case offsets (ignoring effects - at the background pixels) are returned and checking against offset limits needs to be done - from calling code. - - This fetches the dark current before the date of the observation and passes it to - proseco.get_imposter_mags with the star candidate positions to fetch the brightest - 2x2 for each and calculates the mag for that region. The worse case offset is then - added to an entry for the star index. - - :param idxs: catalog indexes as list or array - :param yags: catalog yangs as list or array - :param zags: catalog zangs as list or array - :param mags: catalog mags (AGASC mags for stars estimated fid mags for fids) list or array - :param types: catalog TYPE (ACQ|BOT|FID|MON|GUI) as list or array - :param t_ccd: observation t_ccd in deg C (should be max t_ccd in guide phase) - :param date: observation date (bytestring via Inline) - :param dither_y: dither_y in arcsecs (guide dither) - :param dither_z: dither_z in arcsecs (guide dither) - :param yellow_lim: yellow limit centroid offset threshold limit (in arcsecs) - :param red_lim: red limit centroid offset threshold limit (in arcsecs) - :return imposters: list of dictionaries with keys that define the index, the imposter mag, - a 'status' key that has value 0 if the code to get the imposter mag ran successfully, - calculated centroid offset, and star or fid info to make a warning. - """ - - types = [t.decode('ascii') for t in types] - date = date.decode('ascii') - eff_t_ccd = get_effective_t_ccd(t_ccd) - - dark = aca_dark.get_dark_cal_image(date=date, t_ccd_ref=eff_t_ccd, aca_image=True) - - - def imposter_offset(cand_mag, imposter_mag): - """ - For a given candidate star and the pseudomagnitude of the brightest 2x2 imposter - calculate the max offset of the imposter counts are at the edge of the 6x6 - (as if they were in one pixel). This is somewhat the inverse of proseco.get_pixmag_for_offset - """ - cand_counts = mag_to_count_rate(cand_mag) - spoil_counts = mag_to_count_rate(imposter_mag) - return spoil_counts * 3 * 5 / (spoil_counts + cand_counts) - - imposters = [] - for idx, yag, zag, mag, ctype in zip(idxs, yags, zags, mags, types): - if ctype in ['BOT', 'GUI', 'FID']: - if ctype in ['BOT', 'GUI']: - dither = ACABox((dither_y, dither_z)) - else: - dither = ACABox((5.0, 5.0)) - row, col = yagzag_to_pixels(yag, zag, allow_bad=True) - # Handle any errors in get_imposter_mags with a try/except. This doesn't - # try to pass back a message. Most likely this will only fail if the star - # or fid is completely off the CCD and will have other warning. - try: - # get_imposter_mags takes a Table of candidates as its first argument, so construct - # a single-candidate table `entries` - entries = Table([{'idx': idx, 'row': row, 'col': col, 'mag': mag, 'type': ctype}]) - imp_mags, imp_rows, imp_cols = get_imposter_mags(entries, dark, dither) - offset = imposter_offset(mag, imp_mags[0]) - imposters.append({'idx': int(idx), 'status': int(0), - 'entry_row': float(row), 'entry_col': float(col), - 'bad2_row': float(imp_rows[0]), 'bad2_col': float(imp_cols[0]), - 'bad2_mag': float(imp_mags[0]), 'offset': float(offset)}) - except: - imposters.append({'idx': int(idx), 'status': int(1)}) - return imposters - - -def _get_agasc_stars(ra, dec, roll, radius, date, agasc_file): - """ - Fetch the cone of agasc stars. Update the table with the yag and zag of each star. - Return as a dictionary with the agasc ids as keys and all of the values as - simple Python types (int, float) - """ - stars = agasc.get_agasc_cone(float(ra), float(dec), float(radius), date.decode('ascii'), - agasc_file.decode('ascii')) - q_aca = Quaternion.Quat([float(ra), float(dec), float(roll)]) - yags, zags = radec2yagzag(stars['RA_PMCORR'], stars['DEC_PMCORR'], q_aca) - yags *= 3600 - zags *= 3600 - stars['yang'] = yags - stars['zang'] = zags - - # Get a dictionary of the stars with the columns that are used - # This needs to be de-numpy-ified to pass back into Perl - stars_dict = {} - for star in stars: - stars_dict[str(star['AGASC_ID'])] = { - 'id': int(star['AGASC_ID']), - 'class': int(star['CLASS']), - 'ra': float(star['RA_PMCORR']), - 'dec': float(star['DEC_PMCORR']), - 'mag_aca': float(star['MAG_ACA']), - 'bv': float(star['COLOR1']), - 'color1': float(star['COLOR1']), - 'mag_aca_err': float(star['MAG_ACA_ERR']), - 'poserr': float(star['POS_ERR']), - 'yag': float(star['yang']), - 'zag': float(star['zang']), - 'aspq': int(star['ASPQ1']), - 'var': int(star['VAR']), - 'aspq1': int(star['ASPQ1'])} - - return stars_dict - - -def get_mica_star_stats(agasc_id, time): - """ - Get the acq and guide star statistics for a star before a given time. - The time filter is just there to make this play well when run in regression. - The mica acq and guide stats are fetched into globals ACQS and GUIDES - and this method just filters for the relevant ones for a star and returns - a dictionary of summarized statistics. - - :param agasc_id: agasc id of star - :param time: time used as end of range to retrieve statistics. - - :return: dictionary of stats for the observed history of the star - """ - - # Cast the inputs - time = float(time) - agasc_id = int(agasc_id) - - acqs = Table(ACQS[(ACQS['agasc_id'] == agasc_id) - & (ACQS['guide_tstart'] < time)]) - ok = acqs['img_func'] == 'star' - guides = Table(GUIDES[(GUIDES['agasc_id'] == agasc_id) - & (GUIDES['kalman_tstart'] < time)]) - mags = np.concatenate( - [acqs['mag_obs'][acqs['mag_obs'] != 0], - guides['aoacmag_mean'][guides['aoacmag_mean'] != 0]]) - - avg_mag = float(np.mean(mags)) if (len(mags) > 0) else float(13.94) - stats = {'acq': len(acqs), - 'acq_noid': int(np.count_nonzero(~ok)), - 'gui' : len(guides), - 'gui_bad': int(np.count_nonzero(guides['f_track'] < .95)), - 'gui_fail': int(np.count_nonzero(guides['f_track'] < .01)), - 'gui_obc_bad': int(np.count_nonzero(guides['f_obc_bad'] > .05)), - 'avg_mag': avg_mag} - return stats +from starcheck.check_obsid import (_pixels_to_yagzag, _yagzag_to_pixels, + _guide_count, + check_hot_pix, + _get_agasc_stars, + get_mica_star_stats, + get_effective_t_ccd, + make_proseco_catalog, + manual_stars, + proseco_probs, run_sparkles, compare_prosecos, + _mag_for_p_acq, _get_aca_limits) + +from starcheck.utils import date2time, time2date }; @@ -236,8 +45,6 @@ use POSIX qw(floor); use English; use IO::All; -use RDB; - use Carp; # Constants @@ -262,11 +69,7 @@ my $agasc_start_date = '2000:001:00:00:00.000'; # Actual science global structures. my @bad_pixels; my %odb; -my %bad_acqs; -my %bad_gui; -my %bad_id; my %config; -my $db_handle; 1; @@ -294,13 +97,6 @@ sub new { return $self; } -################################################################################## -sub set_db_handle { -################################################################################## - my $handle = shift; - $db_handle = $handle; -} - ################################################################################## sub setcolors { @@ -367,70 +163,6 @@ sub set_ACA_bad_pixels { print STDERR "Read ", ($#bad_pixels+1), " ACA bad pixels from $pixel_file\n"; } -################################################################################## -sub set_bad_acqs { -################################################################################## - - my $rdb_file = shift; - if ( -r $rdb_file ){ - my $rdb = new RDB $rdb_file or warn "Problem Loading $rdb_file\n"; - - my %data; - while($rdb && $rdb->read( \%data )) { - $bad_acqs{ $data{'agasc_id'} }{'n_noids'} = $data{'n_noids'}; - $bad_acqs{ $data{'agasc_id'} }{'n_obs'} = $data{'n_obs'}; - } - - undef $rdb; - return 1; - } - else{ - return 0; - } - -} - - -################################################################################## -sub set_bad_gui { -################################################################################## - - my $rdb_file = shift; - if ( -r $rdb_file ){ - my $rdb = new RDB $rdb_file or warn "Problem Loading $rdb_file\n"; - - my %data; - while($rdb && $rdb->read( \%data )) { - $bad_gui{ $data{'agasc_id'} }{'n_nbad'} = $data{'n_nbad'}; - $bad_gui{ $data{'agasc_id'} }{'n_obs'} = $data{'n_obs'}; - } - - undef $rdb; - return 1; - } - else{ - return 0; - } - -} - - -################################################################################## -sub set_bad_agasc { -# Read bad AGASC ID file -# one object per line: numeric id followed by commentary. -################################################################################## - - my $bad_file = shift; - my $BS = io($bad_file); - while (my $line = $BS->getline()) { - $bad_id{$1} = 1 if ($line =~ (/^ \s* (\d+)/x)); - } - - print STDERR "Read ",(scalar keys %bad_id) ," bad AGASC IDs from $bad_file\n"; - return 1; -} - ################################################################################## sub set_obsid { @@ -473,7 +205,7 @@ sub set_files { ################################################################################## my $self = shift; ($self->{STARCHECK}, $self->{backstop}, $self->{guide_summ}, $self->{or_file}, - $self->{mm_file}, $self->{dot_file}, $self->{tlr_file}) = @_; + $self->{mm_file}, $self->{dot_file}, $self->{tlr_file}, $self->{proseco_file}) = @_; } ################################################################################## @@ -1060,70 +792,6 @@ sub large_dither_checks { - - -############################################################################################# -sub check_bright_perigee{ -############################################################################################# - my $self = shift; - my $radmon = shift; - my $min_n_stars = 3; - - # if this is an OR, just return - return if (($self->{obsid} =~ /^\d+$/ && $self->{obsid} < $ER_MIN_OBSID)); - - # if radmon is undefined, warn and return - if (not defined $radmon){ - push @{$self->{warn}}, "Perigee bright stars not being checked, no rad zone info available\n"; - return; - } - - # set the observation start as the end of the maneuver - my $obs_tstart = $self->{obs_tstart}; - my $obs_tstop = $self->{obs_tstop}; - - # if observation stop time is undefined, warn and return - if (not defined $obs_tstop){ - push @{$self->{warn}}, "Perigee bright stars not being checked, no obs tstop available\n"; - return; - } - - # is this obsid in perigee? assume no to start - my $in_perigee = 0; - - for my $rad (reverse @{$radmon}){ - next if ($rad->{time} > $obs_tstop); - if ($rad->{state} eq 'DISA'){ - $in_perigee = 1; - last; - } - last if ($rad->{time} < $obs_tstart); - } - - # nothing to do if not in perigee - return if (not $in_perigee); - - my $c = find_command($self, 'MP_STARCAT'); - return if (not defined $c); - - my @mags = (); - for my $i (1 .. 16){ - if ($c->{"TYPE$i"} =~ /GUI|BOT/){ - my $mag = $c->{"GS_MAG$i"}; - push @mags, $mag; - } - } - - # Pass 1 to _guide_count as third arg to use the count_9th mode - my $bright_count = sprintf("%.1f", _guide_count(\@mags, $self->{ccd_temp}, 1)); - if ($bright_count < $min_n_stars){ - push @{$self->{warn}}, "$bright_count star(s) brighter than scaled 9th mag. " - . "Perigee requires at least $min_n_stars\n"; - } - $self->{figure_of_merit}->{guide_count_9th} = $bright_count; -} - - ############################################################################################# sub check_momentum_unload{ ############################################################################################# @@ -1185,6 +853,14 @@ sub check_sim_position { } } +sub check_manual_stars { + my $self = shift; + if ($self->{proseco_file}){ + push @{$self->{fyi}}, manual_stars($self->{obsid}, $self->{proseco_file}); + } +} + + ############################################################################################# sub check_star_catalog { ############################################################################################# @@ -1349,30 +1025,6 @@ sub check_star_catalog { } } - # Overlap spoiler check - # The PEA will drop a readout window if it overlaps with another window. This was - # noticed in obsid 45890 and 45884 in NOV2921A. - # For each 'tracked' type (GUI, BOT, FID, MON) confirm that it isn't within 60 arcsecs - # (Y and Z) of another tracked type. - foreach my $i (1..16){ - next if $c->{"TYPE$i"} =~ /NUL|ACQ/; - foreach my $j ($i+1..16){ - next if $c->{"TYPE$j"} =~ /NUL|ACQ/; - my $dy = $c->{"YANG${i}"} - $c->{"YANG${j}"}; - my $dz = $c->{"ZANG${i}"} - $c->{"ZANG${j}"}; - if ((abs($dy) < 60) & (abs($dz) < 60)){ - push @warn, - sprintf("Track overlap for idxs [$i] [$j]. Delta y,z (%.1f,%.1f) < 60.\n", - $dy, $dz); - } - } - } - - # Seed smallest maximums and largest minimums for guide star box - my $max_y = -3000; - my $min_y = 3000; - my $max_z = -3000; - my $min_z = 3000; foreach my $i (1..16) { (my $sid = $c->{"GS_ID$i"}) =~ s/[\s\*]//g; @@ -1387,13 +1039,6 @@ sub check_star_catalog { # Search error for ACQ is the slew error, for fid, guide or mon it is about 4 arcsec my $search_err = ( (defined $type) and ($type =~ /BOT|ACQ/)) ? $slew_err : 4.0; - # Find position extrema for smallest rectangle check - if ( $type =~ /BOT|GUI/ ) { - $max_y = ($max_y > $yag ) ? $max_y : $yag; - $min_y = ($min_y < $yag ) ? $min_y : $yag; - $max_z = ($max_z > $zag ) ? $max_z : $zag; - $min_z = ($min_z < $zag ) ? $min_z : $zag; - } next if ($type eq 'NUL'); # Warn if star not identified ACA-042 @@ -1413,8 +1058,8 @@ sub check_star_catalog { my $obs_bad_frac = 0.3; # Bad Acquisition Star if ($type =~ /BOT|ACQ|GUI/){ - my $n_obs = $bad_acqs{$sid}{n_obs}; - my $n_noids = $bad_acqs{$sid}{n_noids}; + my $n_obs = 0; + my $n_noids = 0; if (defined $db_stats->{acq}){ $n_obs = $db_stats->{acq}; $n_noids = $db_stats->{acq_noid}; @@ -1428,8 +1073,8 @@ sub check_star_catalog { # Bad Guide Star if ($type =~ /BOT|GUI/){ - my $n_obs = $bad_gui{$sid}{n_obs}; - my $n_nbad = $bad_gui{$sid}{n_nbad}; + my $n_obs = 0; + my $n_nbad = 0; if (defined $db_stats->{gui}){ $n_obs = $db_stats->{gui}; $n_nbad = $db_stats->{gui_bad}; @@ -1443,9 +1088,7 @@ sub check_star_catalog { # Bad AGASC ID ACA-031 push @yellow_warn,sprintf "[%2d] Non-numeric AGASC ID. %s\n",$i,$sid if ($sid ne '---' && $sid =~ /\D/); - if (($type =~ /BOT|GUI|ACQ/) and (defined $bad_id{$sid})){ - push @warn, sprintf "[%2d] Bad AGASC ID. %s\n",$i,$sid; - } + # Set NOTES variable for marginal or bad star based on AGASC info $c->{"GS_NOTES$i"} = ''; my $note = ''; @@ -1487,58 +1130,6 @@ sub check_star_catalog { } } - # Star/fid outside of CCD boundaries - # ACA-019 ACA-020 ACA-021 - my ($pixel_row, $pixel_col) = _yagzag_to_pixels($yag, $zag); - - # Set "acq phase" dither to acq dither or 20.0 if undefined - my $dither_acq_y = $self->{dither_acq}->{ampl_y} or 20.0; - my $dither_acq_p = $self->{dither_acq}->{ampl_p} or 20.0; - - # Set "dither" for FID to be pseudodither of 5.0 to give 1 pix margin - # Set "track phase" dither for BOT GUI to max guide dither over interval or 20.0 if undefined. - my $dither_track_y = ($type eq 'FID') ? 5.0 : $self->{dither_guide}->{ampl_y_max} or 20.0; - my $dither_track_p = ($type eq 'FID') ? 5.0 : $self->{dither_guide}->{ampl_p_max} or 20.0; - - my $pix_window_pad = 7; # half image size + point uncertainty + ? + 1 pixel of margin - my $pix_row_pad = 8; - my $pix_col_pad = 1; - my $row_lim = 512.0 - ($pix_row_pad + $pix_window_pad); - my $col_lim = 512.0 - ($pix_col_pad + $pix_window_pad); - - my %track_limits = ('row' => $row_lim - $dither_track_y / $ang_per_pix, - 'col' => $col_lim - $dither_track_p / $ang_per_pix); - my %pixel = ('row' => $pixel_row, - 'col' => $pixel_col); - # Store the sign of the pixel row/col just to make it easier to print the corresponding limit - my %pixel_sign = ('row' => ($pixel_row < 0) ? -1 : 1, - 'col' => ($pixel_col < 0) ? -1 : 1); - - if ($type =~ /BOT|GUI|FID/){ - foreach my $axis ('row', 'col'){ - my $track_delta = abs($track_limits{$axis}) - abs($pixel{$axis}); - if ($track_delta < 2.5){ - push @warn, sprintf "[%2d] Less than 2.5 pix edge margin $axis lim %.1f val %.1f delta %.1f\n", - $i, $pixel_sign{$axis} * $track_limits{$axis}, $pixel{$axis}, $track_delta; - } - elsif ($track_delta < 5){ - push @orange_warn, sprintf "[%2d] Within 5 pix of CCD $axis lim %.1f val %.1f delta %.1f\n", - $i, $pixel_sign{$axis} * $track_limits{$axis}, $pixel{$axis}, $track_delta; - } - } - } - # For acq stars, the distance to the row/col padded limits are also confirmed, - # but code to track which boundary is exceeded (row or column) is not present. - # Note from above that the pix_row_pad used for row_lim has 7 more pixels of padding - # than the pix_col_pad used to determine col_lim. - my $acq_edge_delta = min(($row_lim - $dither_acq_y / $ang_per_pix) - abs($pixel_row), - ($col_lim - $dither_acq_p / $ang_per_pix) - abs($pixel_col)); - if (($type =~ /BOT|ACQ/) and ($acq_edge_delta < (-1 * 12))){ - push @orange_warn, sprintf "[%2d] Acq Off (padded) CCD by > 60 arcsec.\n",$i; - } - elsif (($type =~ /BOT|ACQ/) and ($acq_edge_delta < 0)){ - push @{$self->{fyi}}, sprintf "[%2d] Acq Off (padded) CCD\n",$i; - } # Faint and bright limits ~ACA-009 ACA-010 if ($mag ne '---') { @@ -1718,13 +1309,6 @@ sub check_star_catalog { } - -# Find the smallest rectangle size that all acq stars fit in - my $y_side = sprintf( "%.0f", $max_y - $min_y ); - my $z_side = sprintf( "%.0f", $max_z - $min_z ); - push @yellow_warn, "Guide stars fit in $y_side x $z_side square arc-second box\n" - if $y_side < $min_y_side && $z_side < $min_z_side; - # Collect warnings push @{$self->{warn}}, @warn; push @{$self->{orange_warn}}, @orange_warn; @@ -2724,59 +2308,6 @@ sub set_ccd_temps{ } } -use Inline Python => q{ - -from proseco.catalog import get_aca_catalog - - -def proseco_probs(kwargs): - """ - Call proseco's get_acq_catalog with the parameters supplied in `kwargs` for a specific obsid catalog - and return the individual acq star probabilities, the P2 value for the catalog, and the expected - number of acq stars. - - `kwargs` will be a Perl hash converted to dict (by Inline) of the expected keyword params. These keys - must be defined: - - 'q1', 'q2', 'q3', 'q4' = the target quaternion - 'man_angle' the maneuver angle to the target quaternion in degrees. - 'acq_ids' list of acq star ids - 'halfwidths' list of acq star halfwidths in arcsecs - 't_ccd_acq' acquisition temperature in deg C - 'date' observation date (in Chandra.Time compatible format) - 'detector' science detector - 'sim_offset' SIM offset - - As these values are from a Perl hash, bytestrings will be converted by de_bytestr early in this method. - - :param kwargs: dict of expected keywords - :return tuple: (list of floats of star acq probabilties, float P2, float expected acq stars) - - """ - - kw = de_bytestr(kwargs) - args = dict(obsid=0, - att=Quaternion.normalize(kw['att']), - date=kw['date'], - n_acq=kw['n_acq'], - man_angle=kw['man_angle'], - t_ccd_acq=kw['t_ccd_acq'], - t_ccd_guide=kw['t_ccd_guide'], - dither_acq=ACABox(kw['dither_acq']), - dither_guide=ACABox(kw['dither_guide']), - include_ids_acq=kw['include_ids_acq'], - include_halfws_acq=kw['include_halfws_acq'], - detector=kw['detector'], sim_offset=kw['sim_offset'], - n_fid=0, n_guide=0, focus_offset=0) - aca = get_aca_catalog(**args) - acq_cat = aca.acqs - - # Assign the proseco probabilities back into an array. - p_acqs = [float(acq_cat['p_acq'][acq_cat['id'] == acq_id][0]) for acq_id in kw['include_ids_acq']] - - return p_acqs, float(-np.log10(acq_cat.calc_p_safe())), float(np.sum(p_acqs)) -}; - ################################################################################### sub proseco_args{ @@ -2788,6 +2319,7 @@ sub proseco_args{ # If an observation does not have a target quaternion or a starcat, it is skipped and # an empty hash is returned with no warning. my $self = shift; + my $or = shift; my %proseco_args; # For the target quaternion, use the -1 to get the last quaternion (there could be more than # one for a segmented maneuver). @@ -2802,6 +2334,7 @@ sub proseco_args{ my $si = $is_OR ? $self->{SI} : 'ACIS-S'; my $offset = $is_OR ? $self->{SIM_OFFSET_Z} : 0; + my $mon_cnt = 0; my @acq_ids; my @acq_indexes; my @gui_ids; @@ -2811,6 +2344,9 @@ sub proseco_args{ IDX: foreach my $i (1..16) { (my $sid = $cat_cmd->{"GS_ID$i"}) =~ s/[\s\*]//g; + if ($cat_cmd->{"TYPE$i"} =~ /MON/){ + $mon_cnt += 1; + } # If there is no star there is nothing for proseco probs to do so skip it. # But warn if it was a thing that should have had an id (BOT/ACQ/GUI). if ($sid eq '---'){ @@ -2861,18 +2397,23 @@ sub proseco_args{ n_acq => scalar(@acq_ids), include_halfws_acq => \@halfwidths, include_ids_guide => \@gui_ids, - n_guide => scalar(@gui_ids), + n_guide => scalar(@gui_ids) + $mon_cnt, fid_ids => \@fid_ids, n_fid => scalar(@fid_ids), acq_indexes => \@acq_indexes); + if ($self->{HAS_MON}){ + my $mon_type = ($mon_cnt > 0) ? 2 : 1; + $proseco_args{monitors} = [[$or->{MON_RA}, $or->{MON_DEC}, 0, 0, $mon_type]]; + } + return \%proseco_args } ################################################################################### -sub set_proseco_probs_and_check_P2{ +sub set_and_check_proseco{ ################################################################################### # For observations with a star catalog and which have valid parameters already determined # in $self->{proseco_args}, call the Python proseco_probs method to calculate the @@ -2885,11 +2426,45 @@ sub set_proseco_probs_and_check_P2{ my $args = $self->{proseco_args}; if (not %{$args}){ + $self->{figure_of_merit} = {expected => 0, + P2 => 0, + cum_prob_bad => 1}; return; } - my ($p_acqs, $P2, $expected) = proseco_probs($args); + my $proseco_catalog = make_proseco_catalog($args); + my ($p_acqs, $P2, $expected) = proseco_probs($proseco_catalog, $args->{include_ids_acq}); + my $sparkles = run_sparkles($proseco_catalog); + for my $warn_type (keys %{$sparkles}){ + for my $warn (@{$sparkles->{$warn_type}}){ + # Skip the warnings for include ids as all are included in starcheck->sparkles + # For this, we really should read the pickle to compare. + if (($warn =~ 'included acq ID') or ($warn =~ 'included guide ID') + or ($warn =~ 'included fid ID')){ + next; + } + # Skip warnings about imposters as handled in starcheck + if ($warn =~ 'imposter offset'){ + next; + } + # Skip warning about likely MON star as we have the OR list in starcheck + if (($warn =~ 'likely MON star') and ($self->{HAS_MON} == 1)){ + next; + } + # Skip warning about number of stars requested as inaccurate + if ($warn =~ 'guides requested'){ + next; + } + push @{$self->{$warn_type}}, "$warn\n"; + } + } - $P2 = sprintf("%.1f", $P2); + if ($self->{proseco_file}){ + my $diff_warns = compare_prosecos($proseco_catalog, + $self->{proseco_file}); + for my $warn (@{$diff_warns}){ + push @{$self->{orange_warn}}, "$warn\n"; + } + } my @acq_indexes = @{$args->{acq_indexes}}; @@ -2926,24 +2501,8 @@ sub set_proseco_probs_and_check_P2{ "-log10 probability of 2 or fewer stars < $P2_yellow\n"; } -} - - - -use Inline Python => q{ - -from chandra_aca.star_probs import mag_for_p_acq - -def _mag_for_p_acq(p_acq, date, t_ccd): - """ - Call mag_for_p_acq, but cast p_acq and t_ccd as floats (may or may not be needed) and - convert date from a bytestring (from the Perl interface). - """ - eff_t_ccd = get_effective_t_ccd(t_ccd) - return mag_for_p_acq(float(p_acq), date.decode(), float(eff_t_ccd)) - -}; +} sub set_dynamic_mag_limits{ diff --git a/starcheck/src/starcheck.pl b/starcheck/src/starcheck.pl index e8b81580..0db9d5c1 100755 --- a/starcheck/src/starcheck.pl +++ b/starcheck/src/starcheck.pl @@ -128,6 +128,7 @@ my $simtrans_file= get_file("$par{dir}/History/SIMTRANS.txt*", 'simtrans'); my $simfocus_file= get_file("$par{dir}/History/SIMFOCUS.txt*", 'simfocus'); my $attitude_file= get_file("$par{dir}/History/ATTITUDE.txt*", 'attitude'); +my $proseco_file = get_file("$par{dir}/output/*proseco.pkl.gz", 'proseco'); # Check for characteristics. Ignore the get_file required vs not API and just pre-check # to see if there is characteristics @@ -163,10 +164,7 @@ my $ps_file = get_file("$par{dir}/mps/ms*.sum", 'processing summary'); my $tlr_file = get_file("$par{dir}/${sosa_dir_slash}*.tlr", 'TLR', 'required'); -my $bad_agasc_file = get_file("$Starcheck_Data/agasc.bad", 'banned_agasc'); my $ACA_bad_pixel_file = get_file("$Starcheck_Data/ACABadPixels", 'bad_pixel'); -my $bad_acqs_file = get_file( "$Starcheck_Data/bad_acq_stars.rdb", 'acq_star_rdb'); -my $bad_gui_file = get_file( "$Starcheck_Data/bad_gui_stars.rdb", 'gui_star_rdb'); # Let's find which dark current made the current bad pixel file @@ -291,24 +289,10 @@ warning("Fidsel History runs into load\n"); } - -# Read in the failed acquisition stars -warning("Could not open ACA bad acquisition stars file $bad_acqs_file\n") - unless (Ska::Starcheck::Obsid::set_bad_acqs($bad_acqs_file)); - - -# Read in the troublesome guide stars -warning("Could not open ACA bad guide star file $bad_gui_file\n") - unless (Ska::Starcheck::Obsid::set_bad_gui($bad_gui_file)); - - # Read in the ACA bad pixels warning("Could not open ACA bad pixel file $ACA_bad_pixel_file\n") unless (Ska::Starcheck::Obsid::set_ACA_bad_pixels($ACA_bad_pixel_file)); -# Read bad AGASC stars -warning("Could not open bad AGASC file $bad_agasc_file\n") - unless (Ska::Starcheck::Obsid::set_bad_agasc($bad_agasc_file)); # Initialize list of "interesting" commands @@ -362,7 +346,7 @@ $obs{$obsid}->set_star_catalog(); $obs{$obsid}->set_maneuver(%mm) if ($mm_file); $obs{$obsid}->set_manerr(@manerr) if (@manerr); - $obs{$obsid}->set_files($STARCHECK, $backstop, $guide_summ, $or_file, $mm_file, $dot_file, $tlr_file); + $obs{$obsid}->set_files($STARCHECK, $backstop, $guide_summ, $or_file, $mm_file, $dot_file, $tlr_file, $proseco_file); $obs{$obsid}->set_fids($fidsel); $obs{$obsid}->set_ps_times(@ps) if ($ps_file); map { $obs{$obsid}->{$_} = $or{$obsid}{$_} } keys %{$or{$obsid}} if (exists $or{$obsid}); @@ -530,13 +514,14 @@ sub json_obsids{ $obs{$obsid}->set_dynamic_mag_limits(); $obs{$obsid}->check_dither($dither); # Get the args that proseco would want - $obs{$obsid}->{'proseco_args'} = $obs{$obsid}->proseco_args(); - $obs{$obsid}->set_proseco_probs_and_check_P2(); + $obs{$obsid}->{'proseco_args'} = $obs{$obsid}->proseco_args($or{$obsid}); + $obs{$obsid}->set_and_check_proseco(); $obs{$obsid}->check_star_catalog($or{$obsid}, $par{vehicle}); $obs{$obsid}->check_sim_position(@sim_trans) unless $par{vehicle}; - $obs{$obsid}->check_momentum_unload(\@bs); - $obs{$obsid}->check_bright_perigee($radmon); + $obs{$obsid}->check_momentum_unload(\@bs); $obs{$obsid}->check_guide_count(); + $obs{$obsid}->check_manual_stars($obs{$obsid}->{obsid}, + $obs{$obsid}->{proseco_file}); # Make sure there is only one star catalog per obsid warning ("More than one star catalog assigned to Obsid $obsid\n")