Changeset 621
- Timestamp:
- 10/10/16 17:18:52 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
mds-and-trees/tree-genealogy.py
r620 r621 6 6 import math 7 7 import argparse 8 import time as ttime 8 9 9 10 TIME = "" # BIRTHS / GENERATIONAL / REAL … … 117 118 quit() 118 119 119 if not creature["FromIDs"][0] in nodes :120 if not creature["FromIDs"][0] in nodes and firstnode == None: 120 121 firstnode = creature["FromIDs"][0] 121 122 … … 130 131 inv_nodes[val] = inv_nodes.get(val, []) 131 132 inv_nodes[val].append(k) 133 134 print(len(nodes)) 132 135 133 136 … … 191 194 # ------------------------------------ 192 195 193 def prepos_children_reccurent(node):194 global visited195 for c in inv_nodes[node]:196 197 # we want to visit the node just once, after all of its parents198 if not all_parents_visited(c):199 continue200 else:201 visited[c] = True202 203 cy = 0204 if TIME == "BIRTHS":205 if c[0] == "c":206 cy = int(c[1:])207 else:208 cy = int(c)209 elif TIME == "GENERATIONAL":210 cy = positions[node][1]+1211 elif TIME == "REAL":212 cy = time[c]213 214 if len(nodes[c]) == 1:215 dissimilarity = 0216 if JITTER == True:217 dissimilarity = random.gauss(0,1)218 else:219 dissimilarity = 1220 positions[c] = [xmin_crowd(positions[node][0]-dissimilarity, positions[node][0]+dissimilarity, cy), cy]221 else:222 vsum = sum([v for k, v in nodes[c].items()])223 cx = sum([positions[k][0]*v/vsum for k, v in nodes[c].items()])224 225 if JITTER == True:226 positions[c] = [cx + random.gauss(0, 0.1), cy]227 else:228 positions[c] = [cx, cy]229 230 231 if c in inv_nodes:232 prepos_children_reccurent(c)196 # def prepos_children_reccurent(node): 197 # global visited 198 # for c in inv_nodes[node]: 199 # 200 # # we want to visit the node just once, after all of its parents 201 # if not all_parents_visited(c): 202 # continue 203 # else: 204 # visited[c] = True 205 # 206 # cy = 0 207 # if TIME == "BIRTHS": 208 # if c[0] == "c": 209 # cy = int(c[1:]) 210 # else: 211 # cy = int(c) 212 # elif TIME == "GENERATIONAL": 213 # cy = positions[node][1]+1 214 # elif TIME == "REAL": 215 # cy = time[c] 216 # 217 # if len(nodes[c]) == 1: 218 # dissimilarity = 0 219 # if JITTER == True: 220 # dissimilarity = random.gauss(0,1) 221 # else: 222 # dissimilarity = 1 223 # positions[c] = [xmin_crowd(positions[node][0]-dissimilarity, positions[node][0]+dissimilarity, cy), cy] 224 # else: 225 # vsum = sum([v for k, v in nodes[c].items()]) 226 # cx = sum([positions[k][0]*v/vsum for k, v in nodes[c].items()]) 227 # 228 # if JITTER == True: 229 # positions[c] = [cx + random.gauss(0, 0.1), cy] 230 # else: 231 # positions[c] = [cx, cy] 232 # 233 # 234 # if c in inv_nodes: 235 # prepos_children_reccurent(c) 233 236 234 237 def prepos_children(): 235 global max_height, max_width, min_width, visited 238 global max_height, max_width, min_width, visited, TIME 239 240 print("firstnode " + firstnode) 236 241 237 242 if not bool(time): … … 241 246 positions[firstnode] = [0, 0] 242 247 243 visited = {} 244 visited[firstnode] = True 245 prepos_children_reccurent(firstnode) 248 #visited = {} 249 #visited[firstnode] = True 250 251 252 nodes_to_visit = [firstnode] 253 254 ccc = 0 255 timet = ttime.time() 256 257 while True: 258 259 ccc += 1 260 if ccc%1000 == 0 : 261 print(str(ccc) + " " + str(ttime.time()-timet)) 262 timet = ttime.time() 263 264 current_node = nodes_to_visit[0] 265 266 if current_node in inv_nodes: 267 for c in inv_nodes[current_node]: 268 # we want to visit the node just once, after all of its parents 269 if c not in nodes_to_visit: 270 nodes_to_visit.append(c) 271 272 cy = 0 273 if TIME == "BIRTHS": 274 if c[0] == "c": 275 cy = int(c[1:]) 276 else: 277 cy = int(c) 278 elif TIME == "GENERATIONAL": 279 cy = positions[current_node][1]+1 280 elif TIME == "REAL": 281 cy = time[c] 282 283 if len(nodes[c]) == 1: 284 dissimilarity = 0 285 if JITTER == True: 286 dissimilarity = random.gauss(0,1) 287 else: 288 dissimilarity = 1 289 positions[c] = [xmin_crowd(positions[current_node][0]-dissimilarity, positions[current_node][0]+dissimilarity, cy), cy] 290 else: 291 vsum = sum([v for k, v in nodes[c].items()]) 292 cx = sum([positions[k][0]*v/vsum for k, v in nodes[c].items()]) 293 294 if JITTER == True: 295 positions[c] = [cx + random.gauss(0, 0.1), cy] 296 else: 297 positions[c] = [cx, cy] 298 299 300 #if c in inv_nodes: 301 # prepos_children_reccurent(c) 302 303 nodes_to_visit = nodes_to_visit[1:] 304 # if none left, we can stop 305 if len(nodes_to_visit) == 0: 306 break 307 308 309 # prepos_children_reccurent(firstnode) 246 310 247 311 for pos in positions: … … 388 452 min_skeleton_depth = 0 389 453 390 firstnode = ""454 firstnode = None 391 455 nodes = {} 392 456 inv_nodes = {}
Note: See TracChangeset
for help on using the changeset viewer.