def labelcolors(labels): n=len(np.unique(labels)) c=cm.turbo(np.linspace(0, 1, n)) colors=[] colorsShort=[ RGBtoHex(c[i]) for i in range(n)] for i in range(len(labels)): cloc=np.where(np.unique(labels)==labels.iloc[i])[0][0] cval=RGBtoHex(c[cloc]) colors.append(cval) colors=np.array(colors) return colors, colorsShort
def main(group_number, epoch, ddddd): groups = [[int(g.split(",")[0]), int(g.split(",")[1])] for g in get_configs("grouops", epoch).split(";")] output = [] matplotlib.use('TkAgg') configuration_items = get_configs_items() for key, value in configuration_items.items(): rcParams[key] = value minor_locatorx = MultipleLocator(20) minor_locatory = MultipleLocator(20) minor_locator_level = MultipleLocator(1) input_file = "groups/" + epoch + ".groups" date = { date.split("-")[0].strip(): date.split("-")[1].strip() for date in get_configs("parameters", "dates").split(",") }[epoch] if check_if_group_is_in_file(input_file, group_number): group_tmp, velocity_tmp, intensity_tmp, ra_tmp, dec_tmp = \ np.loadtxt(input_file, unpack=True, usecols=(0, 2, 3, 5, 6)) dtype = [('group_nr', int), ('velocity', float), ('intensity', float), ("ra", float), ("dec", float)] values = [(group_tmp[ch], velocity_tmp[ch], intensity_tmp[ch], ra_tmp[ch], dec_tmp[ch]) for ch in range(0, len(group_tmp))] data = np.array(values, dtype=dtype) data = np.sort(data, order=['group_nr', 'velocity']) data = data[data["group_nr"] == group_number] max_intensity = max(data["intensity"]) reference_index = np.where(data["intensity"] == max_intensity)[0][0] references_ra = data["ra"][reference_index] references_dec = data["dec"][reference_index] references_velocity = data["velocity"][reference_index] #print("references ra", references_ra, "references dec", references_dec, #"references velocity", references_velocity) velocity = data["velocity"] vel_max = max(velocity) vel_min = min(velocity) intensity = data["intensity"] ra = data["ra"] dec = data["dec"] ra -= references_ra dec -= references_dec fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(16, 16), dpi=90) fig2, ax2 = plt.subplots(nrows=1, ncols=1, figsize=(16, 16), dpi=90) coord_range = max(max(ra) - min(ra), max(dec) - min(dec)) color = [] for v in range(0, len(velocity)): if velocity[v] < min(velocity) or velocity[v] > max(velocity): c = (0, 0, 0) else: c = cm.turbo((velocity[v] - min(velocity)) / (max(velocity) - min(velocity)), 1) color.append(c) el = Circle((ra[v], dec[v]), radius=0.05 * np.log(intensity[v] * 1000), angle=0, lw=2) el.set_facecolor(c) ax[1].add_artist(el) ax[0].scatter(velocity, intensity, color=color, lw=2) slope, intercept, r_value, p_value, std_err = stats.linregress(ra, dec) line = slope * ra + intercept ax[1].plot(ra, line, 'm', linewidth=10) position_angle2 = 90 + np.degrees(np.arctan(slope)) #print("position angle from linear fit is ", position_angle2) #print("Distance between fit and points", line-dec) #print("Pearsonr correlation", pearsonr(ra, line)) max_separation = {"r": 0, "d": -1, "separation": 0} sky_coords = [ SkyCoord(ra[coord], dec[coord], unit=u.arcsec) for coord in range(0, len(ra)) ] for r in range(0, len(ra)): for d in range(0, len(dec)): if r != d: separation = sky_coords[r].separation(sky_coords[d]) if separation > max_separation["separation"]: max_separation["r"] = r max_separation["d"] = d max_separation["separation"] = separation m, b = np.polyfit([ra[max_separation["r"]], ra[max_separation["d"]]], [dec[max_separation["r"]], dec[max_separation["d"]]], 1) if ddddd: ax[1].plot([ra[max_separation["r"]], ra[max_separation["d"]]], [ m * ra[max_separation["r"]] + b, m * ra[max_separation["d"]] + b ], "k--", linewidth=10) position_angle = 90 + np.degrees(np.arctan(m)) #print("position angle is ", position_angle) if len(velocity) >= 3: firs_exceeds_tmp = firs_exceeds(np.diff(velocity), 0.5) split_index = firs_exceeds_tmp + 1 if firs_exceeds_tmp != -1: a = intensity[0:split_index] b = intensity[split_index:len(intensity)] c = velocity[0:split_index] d = velocity[split_index:len(velocity)] e = ra[0:split_index] f = ra[split_index:len(velocity)] g = dec[0:split_index] h = dec[split_index:len(velocity)] velocity_tmp = [c, d] intensity_tmp = [a, b] ra_tmp = [e, f] dec_tmp = [g, h] else: velocity_tmp = [velocity] intensity_tmp = [intensity] ra_tmp = [ra] dec_tmp = [dec] for gauss_nr in range(0, len(velocity_tmp)): size = [] max_intensity_index = np.array( intensity_tmp[gauss_nr]).argmax() for j in range(0, len(velocity_tmp[gauss_nr])): for k in range(j + 1, len(velocity_tmp[gauss_nr])): dist = np.sqrt((ra[j] - ra[k])**2 + (dec[j] - dec[k])**2) size.append(dist) if len(velocity_tmp[gauss_nr]) >= 3: amplitude = max(intensity_tmp[gauss_nr]) centre_of_peak_index = list( intensity_tmp[gauss_nr]).index(amplitude) centre_of_peak = velocity_tmp[gauss_nr][ centre_of_peak_index] second_largest_amplitude_index = ( -intensity_tmp[gauss_nr]).argsort()[1] second_largest_amplitude = intensity_tmp[gauss_nr][ second_largest_amplitude_index] second_largest_centre_of_peak = velocity_tmp[gauss_nr][ second_largest_amplitude_index] standard_deviation = np.std(intensity_tmp[gauss_nr]) ps = [[amplitude, centre_of_peak, standard_deviation], [ amplitude, centre_of_peak, standard_deviation, second_largest_amplitude, second_largest_centre_of_peak, standard_deviation ], [0.9, -6.45, 0.2], [0.9, -6.45, 0.2, 0.32, -5.43, 0.1], [0.361, -6.98, 0.2, 0.149, -6.489, 0.2], [2.2, -6.9, 0.2, 23.6, -6.22, 0.2], [1.99, -6.977, 0.05, 0.6, -7.3, 0.05], [0.035, -7.75, 0.001]] q = np.linspace(min(velocity_tmp[gauss_nr]), max(velocity_tmp[gauss_nr]), 10000) perrs = [] coeffs = [] for p in ps: #if epoch == "ea063": #p = [0.035, -7.75, 0.001] try: if len(p) == 3: coeff, var_matrix = curve_fit( gauss, velocity_tmp[gauss_nr], intensity_tmp[gauss_nr], p0=p, method="lm") else: coeff, var_matrix = curve_fit( gauss2, velocity_tmp[gauss_nr], intensity_tmp[gauss_nr], p0=p, method="lm") perr = np.sqrt(np.diag(var_matrix)) perr = perr[~np.isnan(perr)] perrs.append(np.mean(perr) / len(perr)) coeffs.append(coeff) except: pass if len(perrs) > 0: coeff_index = perrs.index(min(perrs)) coeff = coeffs[coeff_index] if len(coeff) == 6: hist_fit = gauss2(q, *coeff) ax[0].plot(q, hist_fit, 'k--', linewidth=10) print( "{\\it %d} & %.3f & %.3f & %.1f & %.2f & %.2f & %.3f & %.3f & %.2f & %.2f & %.3f & " "%.1f(%.1f) & %.3f( " "%.3f)\\\\" % (gauss_nr, ra_tmp[gauss_nr][max_intensity_index] + references_ra, dec_tmp[gauss_nr][max_intensity_index] + references_dec, velocity[max_intensity_index], coeff[1], coeff[2] * 2, intensity[max_intensity_index], coeff[0], coeff[4], coeff[5] * 2, coeff[3], max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64))) output.append([ -1, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], coeff[1], coeff[2] * 2, intensity[max_intensity_index], coeff[0], coeff[4], coeff[5] * 2, coeff[3], max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64), position_angle, position_angle2 ]) elif len(coeff) == 3: hist_fit = gauss(q, *coeff) ax[0].plot(q, hist_fit, 'k--', linewidth=10) print( "{\\it %d} & %.3f & %.3f & %.1f & %.2f & %.2f & %.3f & %.3f & %.1f(%.1f) & %.3f(" "%.3f)\\\\" % (gauss_nr, ra_tmp[gauss_nr][max_intensity_index] + references_ra, dec_tmp[gauss_nr][max_intensity_index] + references_dec, velocity[max_intensity_index], coeff[1], coeff[2] * 2, intensity[max_intensity_index], coeff[0], max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64))) output.append([ -1, ra_tmp[gauss_nr][max_intensity_index] + references_ra, dec_tmp[gauss_nr][max_intensity_index] + references_dec, velocity[max_intensity_index], coeff[1], coeff[2] * 2, intensity[max_intensity_index], coeff[0], "-", "-", "-", max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64), position_angle, position_angle2 ]) else: if len(size) > 0: print( "{\\it %d} & %.3f & %.3f & %.1f & %s & %s & %.3f & %s & %.1f(%.1f) & %.3f(%.3f)\\\\" % (gauss_nr, ra_tmp[gauss_nr][max_intensity_index] + references_ra, dec_tmp[gauss_nr][max_intensity_index] + references_dec, velocity[max_intensity_index], "-", "-", intensity[max_intensity_index], "-", max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64))) output.append([ -1, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], "-", "-", intensity[max_intensity_index], "-", "-", "-", "-", max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64), position_angle, position_angle2 ]) else: print( "{\\it %d} & %.3f & %.3f & %.1f & %s & %s & %.3f & %s & %s & %s\\\\" % (gauss_nr, ra_tmp[gauss_nr][max_intensity_index] + references_ra, dec_tmp[gauss_nr][max_intensity_index] + references_dec, velocity[max_intensity_index], "-", "-", intensity[max_intensity_index], "-", "-", "-")) output.append([ -1, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], "-", "-", intensity[max_intensity_index], "-", "-", "-", "-", "-", "-", "-", position_angle, position_angle2 ]) ps = [[0.79, -6.7006000000000006, 0.43855130828672717], [8.292, -6.086, 2.8962589178124705]] hist_fits = list() hist_fits2 = list() hist_fits3 = list() q2 = np.linspace(min(velocity), max(velocity), 10000) colors = ["r", "b", "y", "g"] for g in groups: index1 = g[0] index2 = g[1] x = velocity[index1:index2] y = intensity[index1:index2] q = np.linspace(min(x), max(x), 10000) if len(x) >= 3: color = colors[groups.index(g)] p = ps[groups.index(g)] ''' if groups.index(g) == 0: coeff, var_matrix = curve_fit(gauss2, x, y, p0=p, method="lm", maxfev=100000) hist_fit = gauss2(q, *coeff) else: coeff, var_matrix = curve_fit(gauss, x, y, p0=p, method="lm", maxfev=100000) hist_fit = gauss(q, *coeff) ''' coeff, var_matrix = curve_fit(gauss, x, y, p0=p, method="lm", maxfev=100000) hist_fit = gauss(q, *coeff) hist_fit2 = gauss(velocity, *coeff) hist_fits.append(hist_fit) hist_fits2.append(hist_fit2) hist_fit3 = gauss(q2, *coeff) hist_fits3.append(hist_fit3) ax[0].plot(q, hist_fit, '--', c=color, linewidth=10) ra_tmp = ra[index1:index2] dec_tmp = dec[index1:index2] slope, intercept, r_value, p_value, std_err = stats.linregress( ra_tmp, dec_tmp) line = slope * ra_tmp + intercept ax[1].plot(ra_tmp, line, c=color, linewidth=10) max_separation = {"r": 0, "d": -1, "separation": 0} sky_coords = [ SkyCoord(ra_tmp[coord], dec_tmp[coord], unit=u.arcsec) for coord in range(0, len(ra_tmp)) ] size = [] max_intensity_index = np.array(y).argmax() for j in range(0, len(x)): for k in range(j + 1, len(x)): dist = np.sqrt((ra_tmp[j] - ra_tmp[k])**2 + (dec_tmp[j] - dec_tmp[k])**2) size.append(dist) for r in range(0, len(ra_tmp)): for d in range(0, len(dec_tmp)): if r != d: separation = sky_coords[r].separation( sky_coords[d]) if separation > max_separation["separation"]: max_separation["r"] = r max_separation["d"] = d max_separation["separation"] = separation m, b = np.polyfit( [ra_tmp[max_separation["r"]], ra_tmp[max_separation["d"]]], [ dec_tmp[max_separation["r"]], dec_tmp[max_separation["d"]] ], 1) position_angle = 90 + np.degrees(np.arctan(m)) position_angle2 = 90 + np.degrees(np.arctan(slope)) sub_group_nr = groups.index(g) output.append([ sub_group_nr, ra_tmp[max_intensity_index], dec_tmp[max_intensity_index], x[max_intensity_index], coeff[1], coeff[2] * 2, y[max_intensity_index], coeff[0], "-", "-", "-", max(size), max(size) * 1.64, (x[0] - x[len(x) - 1]) / max(size), (x[0] - x[len(x) - 1]) / (max(size) * 1.64), position_angle, position_angle2 ]) #print("position angle is ", position_angle) #print("position angle from linear fit is ", position_angle2) #print("Distance between fit and points", line - dec_tmp) #print("Pearsonr correlation", pearsonr(ra_tmp, line)) q2 = np.linspace(min(velocity), max(velocity), 10000) ax[0].plot(q2, sum(hist_fits3), c="k", linewidth=10) ax2.plot(velocity, intensity - sum(hist_fits2), "k-") ax2.plot(velocity, intensity - sum(hist_fits2), "k.", markersize=20) ax[0].set_xlim(vel_min - 0.1, vel_max + 0.1) ax[0].set_ylim((min(intensity)) - 0.5, (max(intensity) + 0.5)) ax[0].xaxis.set_minor_locator(minor_locator_level) ax[0].set_title(date) ax[1].set_aspect("equal", adjustable='box') ax[1].set_xlim( np.mean((max(ra), min(ra))) - (coord_range / 2) - 0.5, np.mean((max(ra), min(ra))) + (coord_range / 2) + 0.5) ax[1].set_ylim( np.mean((max(dec), min(dec))) - (coord_range / 2) - 0.5, np.mean((max(dec), min(dec))) + (coord_range / 2) + 0.5) ax[1].invert_xaxis() ax[0].set_ylabel('Flux density (Jy)') ax[1].set_ylabel('$\\Delta$ Dec (mas)') ax[0].set_xlabel('$V_{\\rm LSR}$ (km s$^{-1}$)') ax[1].set_xlabel('$\\Delta$ RA (mas)') ax[1].xaxis.set_minor_locator(minor_locatorx) ax[1].yaxis.set_minor_locator(minor_locatory) ax2.set_title("Residuals for spectre") plt.tight_layout() plt.subplots_adjust(top=0.947, bottom=0.085, left=0.044, right=0.987, hspace=0.229, wspace=0.182) plt.show() header2 = [ "sub_group_nr", "ra", "dec", "velocity", "vel_fit", "sigma", "max_intensity", "fit_amp", "vel_fit2", "sigma2", "fit_amp2", "max_distance", "max_distance_au", "gradient", "gradient_au", "position_angle", "position_angle2" ] np.savetxt("cloudlet_sub_" + "_" + epoch + "_" + str(group_number) + "._sats.csv", np.array(output, dtype=object), delimiter=", ", fmt='%s', header=",".join(header2)) else: print("group is not in epoch") sys.exit()
def main(group_number): configuration_items = get_configs_items() for key, value in configuration_items.items(): rcParams[key] = value minorLocatorx = MultipleLocator(20) minorLocatory = MultipleLocator(20) minorLocatorvel = MultipleLocator(1) gauss2_list = get_configs("parameters", "gauss").split(";") gauss2_dict = dict() for epoch in gauss2_list: gauss2_dict[epoch.split(":")[0]] = epoch.split(":")[1].split(",") file_order = [file.strip() for file in get_configs("parameters", "fileOrder").split(",")] input_files = [] for file in file_order: input_files.append(file) dates = {file.split("-")[0].strip(): file.split("-")[1].strip() for file in get_configs("parameters", "dates").split(",")} bad_files = [] for file in input_files: if not check_if_group_is_in_file(file.split(".")[0] + ".groups", group_number): bad_files.append(file) del dates[file.split(".")[0]] input_files = [file for file in input_files if file not in bad_files] fig, ax = plt.subplots(nrows=2, ncols=len(input_files), figsize=(16, 16), dpi=90) velocitys = [] intensitys = [] ras = [] decs = [] max_ra = [] min_ra = [] min_dec = [] max_dec = [] intensitys_max = [] intensitys_min = [] v_maxs = [] v_mins = [] for index in range(0, len(input_files)): input_file = "groups/" + "/" + input_files[index].split(".")[0] + ".groups" velocity = np.empty(0) intensity = np.empty(0) ra = np.empty(0) dec = np.empty(0) group_tmp, channel_tmp, velocity_tmp, intensity_tmp, integral_intensity_tmp, ra_tmp, dec_tmp = np.loadtxt( input_file, unpack=True) for i in range(0, len(channel_tmp)): if group_tmp[i] == int(group_number): velocity = np.append(velocity, velocity_tmp[i]) intensity = np.append(intensity, intensity_tmp[i]) ra = np.append(ra, ra_tmp[i]) dec = np.append(dec, dec_tmp[i]) v_maxs.append(max(velocity)) v_mins.append(min(velocity)) if len(intensity) == 0: intensity = [0] if len(velocity) == 0: velocity = [0] velocitys.append(velocity) intensitys.append(intensity) ras.append(ra) decs.append(dec) if len(ra) != 0: intensitys_max.append(max(intensity)) intensitys_min.append(min(intensity)) max_ra.append(np.max(ra)) min_ra.append(np.min(ra)) min_dec.append(np.min(dec)) max_dec.append(np.max(dec)) coord_range = max(max(max_ra) - min(min_ra), max(max_dec) - min(min_dec)) for index in range(0, len(input_files)): v_max = v_maxs[index] v_min = v_mins[index] velocity = velocitys[index] intensity = intensitys[index] dec = decs[index] ra = ras[index] title = input_files[index].split(".")[0].upper() + "-" + dates[input_files[index].split(".")[0]] if len(velocity) >= 3: p1 = [max(intensity), min(velocity) + 0.5 * (max(velocity) - min(velocity)), 0.2] p2 = [max(intensity), min(velocity) + 0.5 * (max(velocity) - min(velocity)), 0.3, max(intensity) / 4, min(velocity) + 0.5 * (max(velocity) - min(velocity)), 0.1] q = np.linspace(min(velocity), max(velocity), 1000) gauss2_groups_for_epoch = gauss2_dict[input_files[index].split(".")[0].upper()] if str(group_number) in gauss2_groups_for_epoch: try: coeff, var_matrix = curve_fit(gauss2, velocity, intensity, p0=p2, maxfev=100000) hist_fit = gauss2(q, *coeff) ax[0][index].plot(q, hist_fit, 'k') except: pass else: try: coeff, var_matrix = curve_fit(gauss, velocity, intensity, p0=p1, maxfev=100000) hist_fit = gauss(q, *coeff) ax[0][index].plot(q, hist_fit, 'k') except: pass rel = [] for i in range(len(velocity) - 1): if velocity[i] < v_min or velocity[i] > v_max: c = (0, 0, 0) else: c = cm.turbo((velocity[i] - v_min) / (v_max - v_min), 1) ax[0][index].scatter((velocity[i], velocity[i + 1]), (intensity[i], intensity[i + 1]), color=c, lw=2) ax[0][index].set_xlim(min(velocity) - 0.5, max(velocity) + 0.5) ax[0][index].xaxis.set_minor_locator(minorLocatorvel) ax[0][index].set_title(title) ax[0][index].set_xlabel('$V_{\\rm LSR}$ (km s$^{-1}$)') el = Circle((ra[i], dec[i]), radius=0.1 * np.sqrt(intensity[i]), angle=0, lw=2) ax[1][index].add_artist(el) el.set_facecolor(c) rel.append([ra[i], dec[i], velocity[i]]) ax[0][index].set_ylim((min(intensitys_min)) - 0.1, (max(intensitys_max) + 0.1)) ax[1][index].set_aspect("equal", adjustable='box') ax[1][index].set_xlim(np.mean((max(max_ra), min(min_ra))) - (coord_range / 2) - 0.5, (np.mean((max(max_ra), min(min_ra))) - (coord_range / 2) - 0.5) + 12) ax[1][index].set_ylim(np.mean((max(max_dec), min(min_dec))) - (coord_range / 2) - 0.5, np.mean((max(max_dec), min(min_dec))) + (coord_range / 2) + 0.5 + 12) ax[1][index].set_xlabel('$\\Delta$ RA (mas)') ax[1][index].xaxis.set_minor_locator(minorLocatorx) ax[1][index].yaxis.set_minor_locator(minorLocatory) ax[1][index].invert_xaxis() ax[0][0].set_ylabel('Flux density (Jy)') ax[1][0].set_ylabel('$\\Delta$ Dec (mas)') plt.tight_layout() plt.subplots_adjust(top=0.97, bottom=0, wspace=0.18, hspace=0, left=0.05, right=0.99) plt.show()
71: 16, # "trunk" 72: 17, # "terrain" 80: 18, # "pole" 81: 19, # "traffic-sign" 99: 0, # "other-object" to "unlabeled" ----------------------------mapped 252: 1, # "moving-car" to "car" ------------------------------------mapped 253: 7, # "moving-bicyclist" to "bicyclist" ------------------------mapped 254: 6, # "moving-person" to "person" ------------------------------mapped 255: 8, # "moving-motorcyclist" to "motorcyclist" ------------------mapped 256: 5, # "moving-on-rails" mapped to "other-vehicle" --------------mapped 257: 5, # "moving-bus" mapped to "other-vehicle" -------------------mapped 258: 4, # "moving-truck" to "truck" --------------------------------mapped 259: 5, # "moving-other"-vehicle to "other-vehicle" ----------------mapped } _n_classes = max(labelmap.values()) + 1 _colors = cm.turbo(np.asarray(range(_n_classes)) / (_n_classes - 1))[:, :3] * 255 palette = list(np.uint8(_colors).flatten()) @numba.jit def scatter(arrary, index, value): for (h, w), v in zip(index, value): arrary[h, w] = v return arrary def projection(source, grid, order, H, W): assert source.ndim == 2, source.ndim C = source.shape[1] proj = np.zeros((H, W, C)) proj = np.asarray(proj, dtype=source.dtype)
def run(seed, l_, g_, k_in, k_out): graph = nx.planted_partition_graph(l_, g_, k_in / g_, k_out / g_, seed=seed) largest_cc = max(nx.connected_components(graph), key=len) graph = graph.subgraph(largest_cc) graph = nx.convert_node_labels_to_integers(graph) laplacian = cv._construct_laplacian(graph, use_spectral_gap=False) w, v = sp.linalg.eigs(laplacian, k=100, which='SM') #w, v = np.linalg.eig(laplacian.toarray()) #, k=50, which='SM') C_1 = [node for node in graph.nodes if graph.nodes[node]["block"] == 0] C_2 = [node for node in graph.nodes if graph.nodes[node]["block"] == 1] edges = np.array(graph.edges) _e = edges[np.isin(edges[:, 0], C_1)] out_edges = _e[np.isin(_e[:, 1], C_2)] gc = np.array([graph.nodes[node]["block"] for node in graph.nodes]) gc[gc == 0] = -1 diffs = [] corr_int = [] corr = [] for s in range(len(w)): diffs.append( abs(np.sum([v[edge[0], s] - v[edge[1], s] for edge in out_edges]))) v_c_int = np.array(v[:, s]) v_c_int[v_c_int < 0] = -1 v_c_int[v_c_int > 0] = 1 corr_int.append(abs(np.dot(gc, v_c_int)) / len(gc)) corr.append(abs(np.dot(gc, v[:, s]) / len(gc))) #w = w[1:] #v = v[:, 1:] #corr = corr[1:] #corr_int = corr_int[1:] #diffs = diffs[1:] v_c = v[:, np.argmax(diffs)] v_c_best = v[:, np.argmax(corr_int)] best_diff, best_corr = np.argmax(diffs), np.argmax(corr_int) v_c_int = np.array(v_c) v_c_int[v_c < 0] = -1 v_c_int[v_c > 0] = 1 v_c_int /= g_ v_c_best_int = np.array(v_c_best) v_c_best_int[v_c_best < 0] = -1 v_c_best_int[v_c_best > 0] = 1 plot = True if plot: plt.figure(figsize=(4, 3)) norm_corr = np.array(corr_int) / np.max(corr_int) plt.scatter(w, np.array(diffs) / max(diffs), s=10 + 20 * norm_corr, c=cm.turbo(norm_corr)) #'k')#, marker=".") plt.savefig('diff_vs_eig.pdf', bbox_inches='tight') plt.figure(figsize=(4, 3)) plt.plot(w, corr_int, ".", c='k') plt.xlabel(r'$|\sum_{ij} (\phi_s(i) - \phi_s(j))\,\delta(C_i,C_j)|$') plt.ylabel(r'$corr$') plt.figure(figsize=(4, 3)) plt.scatter(diffs, corr_int, c=cm.turbo(norm_corr)) # plt.scatter(diffs[best_diff], corr_int[best_diff], label="diff") plt.legend() plt.savefig('example_plot_1.pdf', bbox_inches='tight') plt.figure(figsize=(4, 3)) plt.plot(-v_c, ".", label="diff", c='k', ms=0.5) plt.axis([0, 10000, -.02, .02]) #plt.plot(v_c_best, ".", label="corr") plt.xlabel('node id') plt.ylabel(r'$\phi_\mathrm{best}(i)$') plt.legend() # ax2 = plt.twinx() # ax2.set_xlim(0, 10000) #ax2.plot(v_c_int, ".", label="diff_int") #ax2.plot(0.8 * v_c_best_int, ".", label="corr_int") plt.plot(gc / np.sqrt(2 * g_), c="r", lw=0.5) plt.savefig('best_eig.pdf', bbox_inches='tight') plt.figure(figsize=(4, 3)) plt.plot(v[:, 1], ".", label="diff", c='k', ms=0.5) plt.axis([0, 10000, -.02, .02]) #plt.plot(v_c_best, ".", label="corr") plt.xlabel('node id') plt.ylabel(r'$\phi_2(i)$') plt.legend() # ax2 = plt.twinx() # ax2.set_xlim(0, 10000) #ax2.plot(v_c_int, ".", label="diff_int") #ax2.plot(0.8 * v_c_best_int, ".", label="corr_int") plt.plot(gc / np.sqrt(2 * g_), c="r", lw=0.5) plt.savefig('second_eig.pdf') return corr_int[best_diff], corr_int[best_corr], corr_int[0]
def main(group_number, ddddd): matplotlib.use('TkAgg') configuration_items = get_configs_items() for key, value in configuration_items.items(): rcParams[key] = value minor_locatorx = MultipleLocator(20) minor_locatory = MultipleLocator(20) minor_locator_level = MultipleLocator(1) file_order = [ file.strip() for file in get_configs("parameters", "fileOrder").split(",") ] input_files = [] for file in file_order: input_files.append(file) dates = { file.split("-")[0].strip(): file.split("-")[1].strip() for file in get_configs("parameters", "dates").split(",") } bad_files = [] for file in input_files: if not check_if_group_is_in_file( file.split(".")[0] + ".groups", group_number): bad_files.append(file) del dates[file.split(".")[0]] input_files = [file for file in input_files if file not in bad_files] data = dict() max_intensity = [] for index in range(0, len(input_files)): epoch = input_files[index].split(".")[0] data[epoch] = dict() input_file = "groups/" + "/" + input_files[index].split( ".")[0] + ".groups" intensity = np.empty(0) channels = np.empty(0) ra = np.empty(0) dec = np.empty(0) velocity = np.empty(0) group_tmp, channel_tmp, velocity_tmp, intensity_tmp, ra_tmp, dec_tmp = \ np.loadtxt(input_file, unpack=True, usecols=(0, 1, 2, 3, 5, 6)) for i in range(0, len(channel_tmp)): if group_tmp[i] == int(group_number): intensity = np.append(intensity, intensity_tmp[i]) channels = np.append(channels, channel_tmp[i]) ra = np.append(ra, ra_tmp[i]) dec = np.append(dec, dec_tmp[i]) velocity = np.append(velocity, velocity_tmp[i]) max_intensity.append(max(intensity)) data[epoch]["index_for_max_intensity"] = np.where( intensity == max(intensity))[0][0] data[epoch]["intensity"] = intensity data[epoch]["channels"] = channels data[epoch]["velocity"] = velocity data[epoch]["ra"] = ra data[epoch]["dec"] = dec max_max_intensity = max(max_intensity) epoch_index_for_max_intensity = max_intensity.index(max_max_intensity) epochs = list(data.keys()) epoch_with_max_intensity = epochs[epoch_index_for_max_intensity] print("epoch with max intensity", epoch_with_max_intensity) reference_index = data[epoch_with_max_intensity]["index_for_max_intensity"] references_ra = data[epoch_with_max_intensity]["ra"][reference_index] references_dec = data[epoch_with_max_intensity]["dec"][reference_index] references_velocity = data[epoch_with_max_intensity]["velocity"][ reference_index] print("references ra", references_ra, "references dec", references_dec, "references velocity", references_velocity) velocity_max = [] velocity_min = [] intensity_max = [] intensity_min = [] ra_max = [] ra_min = [] dec_max = [] dec_min = [] for epoch in data: if epoch != epoch_with_max_intensity: closet_velocity_index_to_references_velocity = \ (np.abs(data[epoch]["velocity"] - references_velocity)).argmin() data[epoch]["ra"] -= data[epoch]["ra"][ closet_velocity_index_to_references_velocity] data[epoch]["dec"] -= data[epoch]["dec"][ closet_velocity_index_to_references_velocity] else: data[epoch]["ra"] -= references_ra data[epoch]["dec"] -= references_dec velocity_max.append(max(data[epoch]["velocity"])) velocity_min.append(min(data[epoch]["velocity"])) intensity_max.append(max(data[epoch]["intensity"])) intensity_min.append(min(data[epoch]["intensity"])) ra_max.append(max(data[epoch]["ra"])) ra_min.append(min(data[epoch]["ra"])) dec_max.append(max(data[epoch]["dec"])) dec_min.append(min(data[epoch]["dec"])) fig, ax = plt.subplots(nrows=2, ncols=len(input_files), figsize=(16, 16), dpi=90) coord_range = max(max(ra_max) - min(ra_min), max(dec_max) - min(dec_min)) output = [] output2 = [] for epoch in data: print("epoch", epoch) velocity = data[epoch]["velocity"] intensity = data[epoch]["intensity"] index = list(data.keys()).index(epoch) ra = data[epoch]["ra"] dec = data[epoch]["dec"] title = dates[epoch] max_separation = {"r": 0, "d": -1, "separation": 0} sky_coords = [ SkyCoord(ra[coord], dec[coord], unit=u.arcsec) for coord in range(0, len(ra)) ] for r in range(0, len(ra)): for d in range(0, len(dec)): if r != d: separation = sky_coords[r].separation(sky_coords[d]) if separation > max_separation["separation"]: max_separation["r"] = r max_separation["d"] = d max_separation["separation"] = separation m, b = np.polyfit([ra[max_separation["r"]], ra[max_separation["d"]]], [dec[max_separation["r"]], dec[max_separation["d"]]], 1) if ddddd: ax[1][index].plot( [ra[max_separation["r"]], ra[max_separation["d"]]], [ m * ra[max_separation["r"]] + b, m * ra[max_separation["d"]] + b ], "k--") position_angle = 90 + np.degrees(np.arctan(m)) print("position angle is ", position_angle) if len(velocity) >= 3: firs_exceeds_tmp = firs_exceeds(np.diff(velocity), 0.9) split_index = firs_exceeds_tmp + 1 if firs_exceeds_tmp != -1: a = intensity[0:split_index] b = intensity[split_index:len(intensity)] c = velocity[0:split_index] d = velocity[split_index:len(velocity)] e = ra[0:split_index] f = ra[split_index:len(velocity)] g = dec[0:split_index] h = dec[split_index:len(velocity)] velocity_tmp = [c, d] intensity_tmp = [a, b] ra_tmp = [e, f] dec_tmp = [g, h] print(split_index, len(intensity)) else: velocity_tmp = [velocity] intensity_tmp = [intensity] ra_tmp = [ra] dec_tmp = [dec] print("number of gauss", len(velocity_tmp)) for gauss_nr in range(0, len(velocity_tmp)): size = [] max_intensity_index = np.array( intensity_tmp[gauss_nr]).argmax() for j in range(0, len(velocity_tmp[gauss_nr])): for k in range(j + 1, len(velocity_tmp[gauss_nr])): dist = np.sqrt((ra[j] - ra[k])**2 + (dec[j] - dec[k])**2) size.append(dist) if len(velocity_tmp[gauss_nr]) >= 3: amplitude = max(intensity_tmp[gauss_nr]) centre_of_peak_index = list( intensity_tmp[gauss_nr]).index(amplitude) centre_of_peak = velocity_tmp[gauss_nr][ centre_of_peak_index] second_largest_amplitude_index = ( -intensity_tmp[gauss_nr]).argsort()[1] second_largest_amplitude = intensity_tmp[gauss_nr][ second_largest_amplitude_index] second_largest_centre_of_peak = velocity_tmp[gauss_nr][ second_largest_amplitude_index] standard_deviation = np.std(intensity_tmp[gauss_nr]) ps = [[amplitude, centre_of_peak, standard_deviation], [ amplitude, centre_of_peak, standard_deviation, second_largest_amplitude, second_largest_centre_of_peak, standard_deviation ], [0.9, -6.45, 0.2], [0.9, -6.45, 0.2, 0.32, -5.43, 0.1], [0.361, -6.98, 0.2, 0.149, -6.489, 0.2], [2.2, -6.9, 0.2, 23.6, -6.22, 0.2], [1.99, -6.977, 0.05, 0.6, -7.3, 0.05], [0.035, -7.75, 0.001]] q = np.linspace(min(velocity_tmp[gauss_nr]), max(velocity_tmp[gauss_nr]), 10000) perrs = [] coeffs = [] for p in ps: #if epoch == "ea063": # p = [0.035, -7.75, 0.001] try: if len(p) == 3: coeff, var_matrix = curve_fit( gauss, velocity_tmp[gauss_nr], intensity_tmp[gauss_nr], p0=p, method="lm") else: coeff, var_matrix = curve_fit( gauss2, velocity_tmp[gauss_nr], intensity_tmp[gauss_nr], p0=p, method="lm") perr = np.sqrt(np.diag(var_matrix)) perr = perr[~np.isnan(perr)] perrs.append(np.mean(perr) / len(perr)) coeffs.append(coeff) except: pass if len(perrs) > 0: coeff_index = perrs.index(min(perrs)) coeff = coeffs[coeff_index] if len(coeff) == 6: hist_fit = gauss2(q, *coeff) ax[0][index].plot(q, hist_fit, 'k') print( "{\\it %d} & %.3f & %.3f & %.1f & %.2f & %.2f & %.3f & %.3f & %.2f & %.2f & %.3f & " "%.1f(%.1f) & %.3f( " "%.3f)\\\\" % (gauss_nr, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], coeff[1], coeff[2] * 2, intensity[max_intensity_index], coeff[0], coeff[4], coeff[5] * 2, coeff[3], max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64))) output2.append([ epoch, gauss_nr, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], coeff[1], coeff[2] * 2, intensity[max_intensity_index], coeff[0], coeff[4], coeff[5] * 2, coeff[3], max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64), position_angle ]) elif len(coeff) == 3: hist_fit = gauss(q, *coeff) ax[0][index].plot(q, hist_fit, 'k') print( "{\\it %d} & %.3f & %.3f & %.1f & %.2f & %.2f & %.3f & %.3f & %.1f(%.1f) & %.3f(" "%.3f)\\\\" % (gauss_nr, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], coeff[1], coeff[2] * 2, intensity[max_intensity_index], coeff[0], max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64))) output2.append([ epoch, gauss_nr, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], coeff[1], coeff[2] * 2, intensity[max_intensity_index], coeff[0], "-", "-", "-", max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64), position_angle ]) else: if len(size) > 0: print( "{\\it %d} & %.3f & %.3f & %.1f & %s & %s & %.3f & %s & %.1f(%.1f) & %.3f(%.3f)\\\\" % (gauss_nr, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], "-", "-", intensity[max_intensity_index], "-", max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64))) output2.append([ epoch, gauss_nr, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], "-", "-", intensity[max_intensity_index], "-", "-", "-", "-", max(size), max(size) * 1.64, (velocity[0] - velocity[len(velocity) - 1]) / max(size), (velocity[0] - velocity[len(velocity) - 1]) / (max(size) * 1.64), position_angle ]) else: print( "{\\it %d} & %.3f & %.3f & %.1f & %s & %s & %.3f & %s & %s & %s\\\\" % (gauss_nr, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], "-", "-", intensity[max_intensity_index], "-", "-", "-")) output2.append([ epoch, gauss_nr, ra_tmp[gauss_nr][max_intensity_index], dec_tmp[gauss_nr][max_intensity_index], velocity[max_intensity_index], "-", "-", intensity[max_intensity_index], "-", "-", "-", "-", "-", "-", "-", position_angle ]) print("\n") for o in range(0, len(velocity)): output.append([ epoch, velocity[o], intensity[o], ra[o], dec[o], position_angle ]) for i in range(len(velocity)): if velocity[i] < min(velocity_min) or velocity[i] > max( velocity_max): c = (0, 0, 0) else: c = cm.turbo((velocity[i] - min(velocity_min)) / (max(velocity_max) - min(velocity_min)), 1) ax[0][index].scatter((velocity[i]), (intensity[i], ), color=c, lw=2) el = Circle((ra[i], dec[i]), radius=0.05 * np.log(intensity[i] * 1000), angle=0, lw=2) el.set_facecolor(c) ax[1][index].add_artist(el) ax[0][index].set_xlim(min(velocity_min) - 0.2, max(velocity_max) + 0.5) ax[0][index].set_ylim((min(intensity_min)) - 0.5, (max(intensity_max) + 0.5)) ax[0][index].xaxis.set_minor_locator(minor_locator_level) ax[0][index].set_title(title) ax[0][index].set_xlabel('$V_{\\rm LSR}$ (km s$^{-1}$)') ax[1][index].set_aspect("equal", adjustable='box') ax[1][index].set_xlim( np.mean((max(ra_max), min(ra_min))) - (coord_range / 2) - 0.5, np.mean((max(ra_max), min(ra_min))) + (coord_range / 2) + 0.5) ax[1][index].set_ylim( np.mean((max(dec_max), min(dec_min))) - (coord_range / 2) - 0.5, np.mean((max(dec_max), min(dec_min))) + (coord_range / 2) + 0.5) ax[1][index].set_xlabel('$\\Delta$ RA (mas)') ax[1][index].xaxis.set_minor_locator(minor_locatorx) ax[1][index].yaxis.set_minor_locator(minor_locatory) ax[1][index].invert_xaxis() ax[1][index].set_yscale('linear') ax[1][index].set_yscale('linear') header1 = ["epoch", "velocity", "intensity", "ra", "dec", "position_angle"] header2 = [ "epoch", "gauss_nr", "ra", "dec", "velocity", "coeff1", "coeff2_*_2", "max_intensity", "coeff0", "coeff4", "coeff5_*_2", "coeff3", "max_distance", "max_distance_au", "gradient", "gradient_au", "position_angle" ] np.savetxt("cloudlet_" + str(group_number) + "._coords.csv", np.array(output, dtype=object), delimiter=", ", fmt='%s', header=",".join(header1)) np.savetxt("cloudlet_" + str(group_number) + "._sats.csv", np.array(output2, dtype=object), delimiter=", ", fmt='%s', header=",".join(header2)) ax[0][0].set_ylabel('Flux density (Jy)') ax[1][0].set_ylabel('$\\Delta$ Dec (mas)') plt.tight_layout() plt.subplots_adjust(top=0.947, bottom=0.085, left=0.044, right=0.987, hspace=0.229, wspace=0.182) plt.show()
def colorise_ribbon(ribbon_section, t1_section, r_threshold, t_threshold): t1_gray = cm.gray(np.array(t1_section / t_threshold)) mask = ribbon_section > 0 coloured_cortex = cm.turbo(np.array(ribbon_section / r_threshold)) t1_gray[mask] = coloured_cortex[mask] return t1_gray * 255
plt.figure() plt.scatter(all_g, abs(np.hstack(sum_v_g))) plt.ylabel(r'$|\sum_{ij} (\phi_s(i) - \phi_s(j))\,\delta(C_i,C_j)|$') plt.xlabel('number of nodes') ind = np.where(abs(np.hstack(sum_v_g)) == max(abs(np.hstack(sum_v_g))))[0] plt.figure() plt.plot(v[:, ind]) plt.savefig('phi2.svg') plt.figure() ind = np.argsort(w) # colors = cm.rainbow(np.linspace(0, 1, len(w))) color = [] for i, y in enumerate(abs(np.array(sum_v_g).flatten())): plt.scatter(w[i], y, color=cm.turbo(y)) color.append(cm.turbo(y)) # plt.scatter(w[ind],abs(np.array(sum_v_g))) plt.savefig('diffusion_differece.svg') #plt.axvline(lambda2,c='r') #compute correlation with ground truth gt = [ 1 / np.sqrt(g_) if i in C_1 else -1 / np.sqrt(g_) for i in range(len(largest_cc)) ] gt = np.array(gt) corr = [] for s in range(v.shape[1]): corr.append(gt.dot(v[:, s]))
#if((daily_counts_65[xx] - mask_day_avgs[indices[0]]) < 0.5 * \ mask_day_stds[indices[0]]): #daily_counts_65[xx] = -9 new_daily_counts[xx] = daily_counts_65[xx] daily_counts_65 = np.ma.masked_where(daily_counts_65 == -9, daily_counts_65) # = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = # # Plot the individual years of area time series # # = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = fig0 = plt.figure(figsize=(10, 4)) ax0 = fig0.add_subplot(1, 1, 1) plot_c = cm.turbo((years - np.min(years)) / (np.max(years) - np.min(years))) # Set up an array to hold the event counts # ---------------------------------------- d_val = 4 #h_val = 1 if (interval == 0.2): max_val = np.round(np.max(daily_counts_65), 1) + interval else: if (int(min_lat) == 75): max_val = int(np.max(daily_counts_65)) + 2 * interval else: max_val = int(np.max(daily_counts_65)) + interval event_sizes = np.arange(h_val, max_val, interval) events_yearly = np.zeros((years.shape[0], event_sizes.shape[0]))