37 parser = argparse.ArgumentParser(description=
'Tree Reader')
38 parser.add_argument(
"-file",
"--file-path", dest=
"file", type=str, required=
"True", help=
"file path" )
40 args = parser.parse_args()
47 datafiles = [f
for f
in os.listdir(folder_path)
if f.startswith(prefix)]
53 for file_path
in datafiles:
54 size_group = defaultdict(list)
56 size_groups.append(size_group)
60 for size_group
in size_groups:
61 total_level=max(total_level, len(size_group.keys()))
64 patch_number_for_each_level = defaultdict(list)
65 for size_group
in size_groups:
66 for size, offsets
in size_group.items():
67 print(f
"Size: {size} -> Count: {len(offsets)}")
68 patch_number_for_each_level[size].append(len(offsets))
74 print(
"Total Cell Count:")
75 for size, count
in patch_number_for_each_level.items():
76 print(f
"Size: {size} -> Count: {sum(count)}")
82 for size_group
in size_groups:
83 for size
in size_group.keys():
84 size_tuple = tuple(map(float, size.split()))
85 if size_tuple[0]>max_size:
86 max_size=size_tuple[0]
90 leftmost_offset=[999,999,999]
91 for size_group
in size_groups:
92 for offset
in size_group[max_size_key]:
93 offset_tuple = tuple(map(float, offset.split()))
94 for m
in range(dimension):
95 if offset_tuple[m]<leftmost_offset[m]:
96 leftmost_offset[m]=offset_tuple[m]
97 leftmost_offset_key=offset
100 domain_offset = tuple(leftmost_offset)
101 domain_size = tuple(map(float, max_size_key.split()))
102 domain_size = tuple(
round_sig(x * 3,5)
for x
in domain_size)
104 print(domain_offset, domain_size)
118 for size_group
in size_groups:
119 tree_matrix = [
None]*total_level
120 tree_patch = [
None]*total_level
121 for size, offsets
in size_group.items():
122 size_tuple = tuple(map(float, size.split()))
123 level=int( math.log( int(
round_sig(domain_size[0]/size_tuple[0],1)), 3) )
124 matrix_size=(3**level)
127 matrix=np.zeros((matrix_size, matrix_size, matrix_size), dtype=bool)
128 for offset
in offsets:
129 offset_tuple = tuple(map(float, offset.split()))
131 for i
in range(len(offset_tuple)):
132 index[i]=round((offset_tuple[i]-domain_offset[i])/size_tuple[i])
133 matrix[tuple(index)]=1
136 tree_matrix[level-1]=matrix
137 tree_patch[level-1]=len(offsets)
138 tree_matrices.append(tree_matrix)
139 tree_patches.append(tree_patch)
145 colors = plt.colormaps[
'tab10']
148 fig = plt.figure(figsize=(12, 4))
150 for k
in range(total_level):
151 axes.append(fig.add_subplot(1,total_level,k+1, projection=
'3d'))
153 for j
in range(len(datafiles)):
155 for i
in range(total_level):
156 x, y, z = np.where(tree_matrices[j][i])
157 axes[i].scatter(x, y, z, color=color, marker=
's',s=50*27/3**(1+i), depthshade=
False)
160 axes[i].set_xlabel(
"X"); axes[i].set_ylabel(
"Y"); axes[i].set_zlabel(
"Z")
161 axes[i].set_xlim([0,3**(1+i)-1]); axes[i].set_ylim([0,3**(1+i)-1]); axes[i].set_zlim([0,3**(1+i)-1]);
162 axes[i].set_title(
"Level="+str(i))
166 plt.savefig(
"TreeStructure.pdf")
167 plt.savefig(
"TreeStrucutre.png")