Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
D
Detection eddies
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
IPSL
LMD
DPAO
Detection eddies
Commits
64b4ba4d
Commit
64b4ba4d
authored
2 years ago
by
Lionel GUEZ
Browse files
Options
Downloads
Patches
Plain Diff
Change newline to Unix
parent
f5022e21
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
gt_matlab_trajs.py
+212
-212
212 additions, 212 deletions
gt_matlab_trajs.py
with
212 additions
and
212 deletions
gt_matlab_trajs.py
+
212
−
212
View file @
64b4ba4d
#!/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])
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment