] make_rejection(comp, g_stats, 'position', repeated_inds) ##If just one combo positionally possible, do a single combo check elif len(accepted_matches) == 1: single_match_test(src_all, comp, accepted_matches, accepted_inds, g_stats, len(matches), repeated_cats, matches) ##If more than one combination is positionally possible: else: ##Check for a dominant source. The combination must be the only one with high position prob, ##all others with low positional proability, and must dominate spectrally num_cat = len(set([cat for cat in src_all.cats if cat != '-100000.0'])) dom_source = mkl.spec_pos_agree(jstats, chi_reds, accepted_probs, num_cat) src_g = mkl.get_srcg(accepted_matches[0]) ##If it finds a dominant source, accept it - counts as a spectral match if dom_source != 'none': jstat_resids, params, bses, chi_resids = mkl.calculate_resids( [accepted_matches[dom_source]]) if chi_resids[0] <= 2: make_entry(accepted_matches[dom_source], params[0][0], params[0][1], bses[0][0], bses[0][1], g_stats, 'spectral', 0, chi_resids[0], 'dominant') else: make_entry(accepted_matches[dom_source], params[0][0], params[0][1], bses[0][0], bses[0][1], g_stats, 'spectral', 1, chi_resids[0], 'dominant') make_accept(comp, g_stats, 'spectral', accepted_inds) ##If nothing dominates, send to check if a combined source works
def make_plots(comp, i): ##Get the information into nice usable forms, and get rid of empty/pointless ##entries chunks = comp.split('START_COMP') all_info = chunks[0].split('\n') ##FOR SOME REASON CAN'T DO BOTH OF THESE LINES IN THE SAME FOR LOOP?!?!?! for entry in all_info: if entry == '': del all_info[all_info.index(entry)] for entry in all_info: if 'START' in entry: del all_info[all_info.index(entry)] matches = chunks[1].split('\n') del matches[0], matches[-2:] ##Put the information for every source in the matched group in one source_group() class ##(see apply_criteria_lib for source_group()) src_all = mkl.get_allinfo(all_info) #print src_all.names[0] ##This line applies positional criteria, and tells us if a simple one catalogue repeat source, returning ##how many combinations are possible and statistics on them repeated_cats, accepted_matches, accepted_inds, accepted_probs, jstats, chi_reds, g_stats = mkl.matches_retained( src_all, matches) match_crit = "%d of %d \ncombinations \npossible \n%s repeated cats" % ( len(accepted_matches), len(matches), repeated_cats) ##If no combinations are possible, reject all info (goes into the eyeball document) if len(accepted_matches) == 0: i = plot_accept_type(comp, accepted_inds, match_crit, 'Positionally\nimpossible', 'N/A', len(matches), plot_reject, src_all, 'position', i) ##If just one combo positionally possible, do a single combo check elif len(accepted_matches) == 1: i = single_match_test(src_all, comp, accepted_matches, accepted_inds, g_stats, len(matches), repeated_cats, matches, i) ##(Any plotting gets done within single_match_test) ##If more than one combination is positionally possible: else: ##Check for a dominant source. The combination must be the only one with high position prob, ##all others with low positional proability, and must dominate spectrally num_cat = len(set([cat for cat in src_all.cats if cat != '-100000.0'])) dom_source = mkl.spec_pos_agree(jstats, chi_reds, accepted_probs, num_cat) src_g = mkl.get_srcg(accepted_matches[0]) ##If it finds a dominant source, accept it - counts as a spectral match if dom_source != 'none': jstat_resids, params, bses, chi_resids = mkl.calculate_resids( [accepted_matches[dom_source]]) ##Find the probs of all the matches, and use the prob of the dom match to see what number match was accepted all_probs = [float(match.split()[-1]) for match in matches] accepted_prob = accepted_probs[dom_source] dom_num = all_probs.index(accepted_prob) i = plot_accept_type(comp, accepted_inds, match_crit, 'Dom source (%d)' % (dom_num + 1), 'Accept dom.\nsource', len(matches), plot_accept, src_all, 'spectral', i) ##If nothing dominates, send to check if a combined source works else: comb_crit, comb_source, comb_jstat, comb_chi_red = mkl.combine_flux( src_all, src_g, accepted_inds, 'plot=no', len(matches)) ##See whether combined or split if 'split' in comb_crit: accept_type = 'split' else: accept_type = 'combine' ##Plot the combine or split, based on whether accepted or retained to investigate if 'Accepted' in comb_crit: i = plot_accept_type(comp, accepted_inds, match_crit, 'No dom. source', comb_crit, len(matches), plot_accept, src_all, accept_type, i) else: i = plot_accept_type(comp, accepted_inds, match_crit, 'No dom. source', comb_crit, len(matches), plot_eyeball, src_all, accept_type, i) return i
def make_plots(comp, i): ##Get the information into nice usable forms, and get rid of empty/pointless ##entries chunks = comp.split("START_COMP") all_info = chunks[0].split("\n") ##FOR SOME REASON CAN'T DO BOTH OF THESE LINES IN THE SAME FOR LOOP?!?!?! for entry in all_info: if entry == "": del all_info[all_info.index(entry)] for entry in all_info: if "START" in entry: del all_info[all_info.index(entry)] matches = chunks[1].split("\n") del matches[0], matches[-2:] ##Put the information for every source in the matched group in one source_group() class ##(see apply_criteria_lib for source_group()) src_all = mkl.get_allinfo(all_info) # print src_all.names[0] ##This line applies positional criteria, and tells us if a simple one catalogue repeat source, returning ##how many combinations are possible and statistics on them repeated_cats, accepted_matches, accepted_inds, accepted_probs, jstats, chi_reds, g_stats = mkl.matches_retained( src_all, matches ) match_crit = "%d of %d \ncombinations \npossible \n%s repeated cats" % ( len(accepted_matches), len(matches), repeated_cats, ) ##If no combinations are possible, reject all info (goes into the eyeball document) if len(accepted_matches) == 0: i = plot_accept_type( comp, accepted_inds, match_crit, "Positionally\nimpossible", "N/A", len(matches), plot_reject, src_all, "position", i, ) ##If just one combo positionally possible, do a single combo check elif len(accepted_matches) == 1: i = single_match_test( src_all, comp, accepted_matches, accepted_inds, g_stats, len(matches), repeated_cats, matches, i ) ##(Any plotting gets done within single_match_test) ##If more than one combination is positionally possible: else: ##Check for a dominant source. The combination must be the only one with high position prob, ##all others with low positional proability, and must dominate spectrally num_cat = len(set([cat for cat in src_all.cats if cat != "-100000.0"])) dom_source = mkl.spec_pos_agree(jstats, chi_reds, accepted_probs, num_cat) src_g = mkl.get_srcg(accepted_matches[0]) ##If it finds a dominant source, accept it - counts as a spectral match if dom_source != "none": jstat_resids, params, bses, chi_resids = mkl.calculate_resids([accepted_matches[dom_source]]) ##Find the probs of all the matches, and use the prob of the dom match to see what number match was accepted all_probs = [float(match.split()[-1]) for match in matches] accepted_prob = accepted_probs[dom_source] dom_num = all_probs.index(accepted_prob) i = plot_accept_type( comp, accepted_inds, match_crit, "Dom source (%d)" % (dom_num + 1), "Accept dom.\nsource", len(matches), plot_accept, src_all, "spectral", i, ) ##If nothing dominates, send to check if a combined source works else: comb_crit, comb_source, comb_jstat, comb_chi_red = mkl.combine_flux( src_all, src_g, accepted_inds, "plot=no", len(matches) ) ##See whether combined or split if "split" in comb_crit: accept_type = "split" else: accept_type = "combine" ##Plot the combine or split, based on whether accepted or retained to investigate if "Accepted" in comb_crit: i = plot_accept_type( comp, accepted_inds, match_crit, "No dom. source", comb_crit, len(matches), plot_accept, src_all, accept_type, i, ) else: i = plot_accept_type( comp, accepted_inds, match_crit, "No dom. source", comb_crit, len(matches), plot_eyeball, src_all, accept_type, i, ) return i
cats = src_all.cats repeated_inds = [i for i in xrange(len(cats)) if cats.count(cats[i])>1] make_rejection(comp,g_stats,'position',repeated_inds) ##If just one combo positionally possible, do a single combo check elif len(accepted_matches)==1: single_match_test(src_all,comp,accepted_matches,accepted_inds,g_stats,len(matches),repeated_cats,matches) ##If more than one combination is positionally possible: else: ##Check for a dominant source. The combination must be the only one with high position prob, ##all others with low positional proability, and must dominate spectrally num_cat = len(set([cat for cat in src_all.cats if cat!='-100000.0'])) dom_source = mkl.spec_pos_agree(jstats,chi_reds,accepted_probs,num_cat) src_g = mkl.get_srcg(accepted_matches[0]) ##If it finds a dominant source, accept it - counts as a spectral match if dom_source!='none': jstat_resids,params,bses,chi_resids = mkl.calculate_resids([accepted_matches[dom_source]]) if chi_resids[0]<=2: make_entry(accepted_matches[dom_source],params[0][0],params[0][1],bses[0][0],bses[0][1],g_stats,'spectral',0,chi_resids[0]) else: make_entry(accepted_matches[dom_source],params[0][0],params[0][1],bses[0][0],bses[0][1],g_stats,'spectral',1,chi_resids[0]) make_accept(comp,g_stats,'spectral',accepted_inds) ##If nothing dominates, send to check if a combined source works else: comb_crit, comb_source, comb_jstat, comb_chi_red = mkl.combine_flux(src_all,src_g,accepted_inds,'plot=no',len(matches)) if 'Accepted' in comb_crit: ##If source was combined, add one new source with combine in the g_stat