Skip to content
Snippets Groups Projects
Commit 64b4ba4d authored by Lionel GUEZ's avatar Lionel GUEZ
Browse files

Change newline to Unix

parent f5022e21
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3
# A script that loads a segmented cf graph in the gt format, iterates on all
# of the edges and cost functions and generates the trajectories as done in
# MATLAB. Segments (nodes) have a new vertex property called "traj" that holds
# the trajectory ID that that segment belongs to. The output is either an
# expanded JSON file and/or an edgelist file with all of the trajectories.
# Inputs:
# orientation
# name and the location of the gt segmented cf graph
# Output:
# trajectories.json that contains all of the trajectories
import graph_tool as gt
from os import path
import json
import csv
import graph_tool.util as ut
orientation = 'anti'
g = gt.Graph()
g.load('segmented_anti_cf.gt')
#g = gt.Graph(directed = True)
# vlist = g.add_vertex(25)
# e1 = g.add_edge(g.vertex(0), g.vertex(1))
# e2 = g.add_edge(g.vertex(1), g.vertex(2))
# e3 = g.add_edge(g.vertex(1), g.vertex(3))
# e4 = g.add_edge(g.vertex(2), g.vertex(4))
# e5 = g.add_edge(g.vertex(3), g.vertex(5))
# e6 = g.add_edge(g.vertex(4), g.vertex(5))
# e7 = g.add_edge(g.vertex(5), g.vertex(6))
# e8 = g.add_edge(g.vertex(6), g.vertex(7))
# e9 = g.add_edge(g.vertex(6), g.vertex(8))
# e10 = g.add_edge(g.vertex(1), g.vertex(10))
# e11 = g.add_edge(g.vertex(10), g.vertex(11))
# e12 = g.add_edge(g.vertex(9), g.vertex(11))
# e13 = g.add_edge(g.vertex(11), g.vertex(12))
# e14 = g.add_edge(g.vertex(12), g.vertex(13))
# e15 = g.add_edge(g.vertex(12), g.vertex(14))
# e16 = g.add_edge(g.vertex(13), g.vertex(15))
# e17 = g.add_edge(g.vertex(14), g.vertex(15))
# e18 = g.add_edge(g.vertex(15), g.vertex(16))
# e19 = g.add_edge(g.vertex(2), g.vertex(17))
# e20 = g.add_edge(g.vertex(17), g.vertex(20))
# e21 = g.add_edge(g.vertex(18), g.vertex(20))
# e22 = g.add_edge(g.vertex(19), g.vertex(20))
# e23 = g.add_edge(g.vertex(20), g.vertex(21))
# e24 = g.add_edge(g.vertex(21), g.vertex(22))
# e25 = g.add_edge(g.vertex(21), g.vertex(23))
# e26 = g.add_edge(g.vertex(23), g.vertex(24))
# nl_cf = g.new_ep('float')
# g.ep['nl_cost_function'] = nl_cf
traj_mark = g.new_vp('int')
g.vp['traj'] = traj_mark
# g.ep.nl_cost_function[e1] = 6
# g.ep.nl_cost_function[e2] = 2
# g.ep.nl_cost_function[e3] = 7
# g.ep.nl_cost_function[e4] = 8
# g.ep.nl_cost_function[e5] = 4
# g.ep.nl_cost_function[e6] = 2
# g.ep.nl_cost_function[e7] = 10
# g.ep.nl_cost_function[e8] = 11
# g.ep.nl_cost_function[e9] = 2
# g.ep.nl_cost_function[e10] = 3
# g.ep.nl_cost_function[e11] = 2
# g.ep.nl_cost_function[e12] = 6
# g.ep.nl_cost_function[e13] = 4
# g.ep.nl_cost_function[e14] = 10
# g.ep.nl_cost_function[e15] = 6
# g.ep.nl_cost_function[e16] = 2
# g.ep.nl_cost_function[e17] = 4
# g.ep.nl_cost_function[e18] = 5
# g.ep.nl_cost_function[e19] = 6
# g.ep.nl_cost_function[e20] = 3
# g.ep.nl_cost_function[e21] = 2
# g.ep.nl_cost_function[e22] = 1
# g.ep.nl_cost_function[e23] = 7
# g.ep.nl_cost_function[e24] = 6
# g.ep.nl_cost_function[e25] = 8
# g.ep.nl_cost_function[e26] = 7
# name = g.new_vp('string')
# g.vp['name'] = name
# for i in range(0, 25):
# g.vp.name[g.vertex(i)] = i
# assign the new vertex property
for node in g.vertices():
g.vp.traj[node] = g.vp.name[node]
##################
# MAIN ALGORITHM #
##################
# iterating on edges:
print('Algorithm starting...')
for edge in g.edges():
current_cf = g.ep.nl_cost_function[edge]
src = edge.source()
trg = edge.target()
# source is a split
if src.out_degree() > 1:
if current_cf <= min({g.ep.nl_cost_function[e] for e in src.out_edges()}):
# elif target is a merge
if trg.in_degree() > 1:
if current_cf <= min({g.ep.nl_cost_function[e] for e in trg.out_edges()}):
# add trg to src trajectory
g.vp.traj[trg] = g.vp.traj[src]
# else, target is a split or end or continuation
else:
g.vp.traj[trg] = g.vp.traj[src]
# source is a continuation or root with one out
elif (src.in_degree() == 1 and src.out_degree() == 1) or (src.in_degree() == 0 and src.out_degree() == 1) or (src.in_degree() > 1):
if trg.in_degree() > 1:
# if the current cf is the smallest
if current_cf <= min({g.ep.nl_cost_function[e] for e in trg.in_edges()}):
g.vp.traj[trg] = g.vp.traj[src]
else:
g.vp.traj[trg] = g.vp.traj[src]
print('Algorithm done, saving...')
# make a dictionary of trajectories:
trajectories = {}
for node in g.vertices():
if g.vp.traj[node] not in trajectories:
trajectories[g.vp.traj[node]] = []
trajectories[g.vp.traj[node]].append(g.vp.name[node])
else:
trajectories[g.vp.traj[node]].append(g.vp.name[node])
# setup a new trajectory that holds the expanded segments
expanded_trajectories = {}
for trajectory in trajectories.values():
# exp traj of current traj key = []
key = trajectory[0]
for val in trajectory:
node = ut.find_vertex(g, g.vp.name, val)
if len(node) != 1:
print('Something is wrong.')
node = node[0]
seg = g.vp.segment[node]
for s in seg:
if key not in expanded_trajectories:
expanded_trajectories[key] = []
expanded_trajectories[key].append(s)
else:
expanded_trajectories[key].append(s)
# write out the json file
with open("trajectories.json", "w") as outfile:
json.dump(expanded_trajectories, outfile, indent = 4)
print(f'Done saving json: {len(trajectories)} trajectories.')
# Write to an edgelist file if need be to plot the trajectories
# with open('edgelist_60k_trajectories.csv', 'w', newline='') as csvfile:
# spamwriter = csv.writer(csvfile, delimiter=' ', escapechar=' ', quoting=csv.QUOTE_NONE)
# for trajectory in trajectories.values():
# for val in trajectory:
# node = ut.find_vertex(g, g.vp.name, val)
# if len(node) != 1:
# print('Something is wrong...')
# node = node[0]
# seg = g.vp.segment[node]
# for i in range(0, len(seg) - 1):
# spamwriter.writerow([seg[i], seg[i+1]])
# # we wrote the nodes from the segments, now we need to connect the segments
# # they are sequential
# for i in range(0, len(trajectory) - 1):
# src_val = trajectory[i]
# trg_val = trajectory[i+1]
# src = ut.find_vertex(g, g.vp.name, src_val)
# trg = ut.find_vertex(g, g.vp.name, trg_val)
# if len(src) != 1 or len(trg) != 1:
# print('Something is wrong in second loop...')
# src = src[0]
# trg = trg[0]
# seg_1 = g.vp.segment[src]
# seg_2 = g.vp.segment[trg]
# first = seg_1[-1]
# second = seg_2[0]
# spamwriter.writerow([first, second])
\ No newline at end of file
#!/usr/bin/env python3
# A script that loads a segmented cf graph in the gt format, iterates on all
# of the edges and cost functions and generates the trajectories as done in
# MATLAB. Segments (nodes) have a new vertex property called "traj" that holds
# the trajectory ID that that segment belongs to. The output is either an
# expanded JSON file and/or an edgelist file with all of the trajectories.
# Inputs:
# orientation
# name and the location of the gt segmented cf graph
# Output:
# trajectories.json that contains all of the trajectories
import graph_tool as gt
from os import path
import json
import csv
import graph_tool.util as ut
orientation = 'anti'
g = gt.Graph()
g.load('segmented_anti_cf.gt')
#g = gt.Graph(directed = True)
# vlist = g.add_vertex(25)
# e1 = g.add_edge(g.vertex(0), g.vertex(1))
# e2 = g.add_edge(g.vertex(1), g.vertex(2))
# e3 = g.add_edge(g.vertex(1), g.vertex(3))
# e4 = g.add_edge(g.vertex(2), g.vertex(4))
# e5 = g.add_edge(g.vertex(3), g.vertex(5))
# e6 = g.add_edge(g.vertex(4), g.vertex(5))
# e7 = g.add_edge(g.vertex(5), g.vertex(6))
# e8 = g.add_edge(g.vertex(6), g.vertex(7))
# e9 = g.add_edge(g.vertex(6), g.vertex(8))
# e10 = g.add_edge(g.vertex(1), g.vertex(10))
# e11 = g.add_edge(g.vertex(10), g.vertex(11))
# e12 = g.add_edge(g.vertex(9), g.vertex(11))
# e13 = g.add_edge(g.vertex(11), g.vertex(12))
# e14 = g.add_edge(g.vertex(12), g.vertex(13))
# e15 = g.add_edge(g.vertex(12), g.vertex(14))
# e16 = g.add_edge(g.vertex(13), g.vertex(15))
# e17 = g.add_edge(g.vertex(14), g.vertex(15))
# e18 = g.add_edge(g.vertex(15), g.vertex(16))
# e19 = g.add_edge(g.vertex(2), g.vertex(17))
# e20 = g.add_edge(g.vertex(17), g.vertex(20))
# e21 = g.add_edge(g.vertex(18), g.vertex(20))
# e22 = g.add_edge(g.vertex(19), g.vertex(20))
# e23 = g.add_edge(g.vertex(20), g.vertex(21))
# e24 = g.add_edge(g.vertex(21), g.vertex(22))
# e25 = g.add_edge(g.vertex(21), g.vertex(23))
# e26 = g.add_edge(g.vertex(23), g.vertex(24))
# nl_cf = g.new_ep('float')
# g.ep['nl_cost_function'] = nl_cf
traj_mark = g.new_vp('int')
g.vp['traj'] = traj_mark
# g.ep.nl_cost_function[e1] = 6
# g.ep.nl_cost_function[e2] = 2
# g.ep.nl_cost_function[e3] = 7
# g.ep.nl_cost_function[e4] = 8
# g.ep.nl_cost_function[e5] = 4
# g.ep.nl_cost_function[e6] = 2
# g.ep.nl_cost_function[e7] = 10
# g.ep.nl_cost_function[e8] = 11
# g.ep.nl_cost_function[e9] = 2
# g.ep.nl_cost_function[e10] = 3
# g.ep.nl_cost_function[e11] = 2
# g.ep.nl_cost_function[e12] = 6
# g.ep.nl_cost_function[e13] = 4
# g.ep.nl_cost_function[e14] = 10
# g.ep.nl_cost_function[e15] = 6
# g.ep.nl_cost_function[e16] = 2
# g.ep.nl_cost_function[e17] = 4
# g.ep.nl_cost_function[e18] = 5
# g.ep.nl_cost_function[e19] = 6
# g.ep.nl_cost_function[e20] = 3
# g.ep.nl_cost_function[e21] = 2
# g.ep.nl_cost_function[e22] = 1
# g.ep.nl_cost_function[e23] = 7
# g.ep.nl_cost_function[e24] = 6
# g.ep.nl_cost_function[e25] = 8
# g.ep.nl_cost_function[e26] = 7
# name = g.new_vp('string')
# g.vp['name'] = name
# for i in range(0, 25):
# g.vp.name[g.vertex(i)] = i
# assign the new vertex property
for node in g.vertices():
g.vp.traj[node] = g.vp.name[node]
##################
# MAIN ALGORITHM #
##################
# iterating on edges:
print('Algorithm starting...')
for edge in g.edges():
current_cf = g.ep.nl_cost_function[edge]
src = edge.source()
trg = edge.target()
# source is a split
if src.out_degree() > 1:
if current_cf <= min({g.ep.nl_cost_function[e] for e in src.out_edges()}):
# elif target is a merge
if trg.in_degree() > 1:
if current_cf <= min({g.ep.nl_cost_function[e] for e in trg.out_edges()}):
# add trg to src trajectory
g.vp.traj[trg] = g.vp.traj[src]
# else, target is a split or end or continuation
else:
g.vp.traj[trg] = g.vp.traj[src]
# source is a continuation or root with one out
elif (src.in_degree() == 1 and src.out_degree() == 1) or (src.in_degree() == 0 and src.out_degree() == 1) or (src.in_degree() > 1):
if trg.in_degree() > 1:
# if the current cf is the smallest
if current_cf <= min({g.ep.nl_cost_function[e] for e in trg.in_edges()}):
g.vp.traj[trg] = g.vp.traj[src]
else:
g.vp.traj[trg] = g.vp.traj[src]
print('Algorithm done, saving...')
# make a dictionary of trajectories:
trajectories = {}
for node in g.vertices():
if g.vp.traj[node] not in trajectories:
trajectories[g.vp.traj[node]] = []
trajectories[g.vp.traj[node]].append(g.vp.name[node])
else:
trajectories[g.vp.traj[node]].append(g.vp.name[node])
# setup a new trajectory that holds the expanded segments
expanded_trajectories = {}
for trajectory in trajectories.values():
# exp traj of current traj key = []
key = trajectory[0]
for val in trajectory:
node = ut.find_vertex(g, g.vp.name, val)
if len(node) != 1:
print('Something is wrong.')
node = node[0]
seg = g.vp.segment[node]
for s in seg:
if key not in expanded_trajectories:
expanded_trajectories[key] = []
expanded_trajectories[key].append(s)
else:
expanded_trajectories[key].append(s)
# write out the json file
with open("trajectories.json", "w") as outfile:
json.dump(expanded_trajectories, outfile, indent = 4)
print(f'Done saving json: {len(trajectories)} trajectories.')
# Write to an edgelist file if need be to plot the trajectories
# with open('edgelist_60k_trajectories.csv', 'w', newline='') as csvfile:
# spamwriter = csv.writer(csvfile, delimiter=' ', escapechar=' ', quoting=csv.QUOTE_NONE)
# for trajectory in trajectories.values():
# for val in trajectory:
# node = ut.find_vertex(g, g.vp.name, val)
# if len(node) != 1:
# print('Something is wrong...')
# node = node[0]
# seg = g.vp.segment[node]
# for i in range(0, len(seg) - 1):
# spamwriter.writerow([seg[i], seg[i+1]])
# # we wrote the nodes from the segments, now we need to connect the segments
# # they are sequential
# for i in range(0, len(trajectory) - 1):
# src_val = trajectory[i]
# trg_val = trajectory[i+1]
# src = ut.find_vertex(g, g.vp.name, src_val)
# trg = ut.find_vertex(g, g.vp.name, trg_val)
# if len(src) != 1 or len(trg) != 1:
# print('Something is wrong in second loop...')
# src = src[0]
# trg = trg[0]
# seg_1 = g.vp.segment[src]
# seg_2 = g.vp.segment[trg]
# first = seg_1[-1]
# second = seg_2[0]
# spamwriter.writerow([first, second])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment