2import matplotlib.pyplot
as plt
7import matplotlib.cm
as cm
10from collections
import defaultdict
13 return float(np.format_float_positional(x, precision=sig, unique=
False, trim=
'k'))
16 with open(file_path,
"r")
as f:
20 patch_pattern = re.compile(
21 r'begin patch.*?offset ([\d.eE+\-]+ [\d.eE+\-]+ [\d.eE+\-]+).*?'
22 r'size ([\d.eE+\-]+ [\d.eE+\-]+ [\d.eE+\-]+)',
27 for match
in patch_pattern.findall(content):
29 size_group[size].append(offset)
36parser = argparse.ArgumentParser(description=
'Tree Reader')
37parser.add_argument(
"-file-path",
"--file-path", dest=
"file", type=str, required=
"True", help=
"file path" )
39args = parser.parse_args()
46datafiles = [f
for f
in os.listdir(folder_path)
if f.startswith(prefix)]
52for file_path
in datafiles:
53 size_group = defaultdict(list)
55 size_groups.append(size_group)
60for size_group
in size_groups:
61 total_level=max(total_level, len(size_group.keys()))
64patch_number_for_each_level = defaultdict(list)
65for 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))
74print(
"Total Cell Count:")
75for size, count
in patch_number_for_each_level.items():
76 print(f
"Size: {size} -> Count: {sum(count)}")
82for 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]
90leftmost_offset=[999,999,999]
91for 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
100domain_offset = tuple(leftmost_offset)
101domain_size = tuple(map(float, max_size_key.split()))
102domain_size = tuple(
round_sig(x * 3,5)
for x
in domain_size)
104print(
"Domain Offset:", domain_offset,
"Domain Size:", domain_size)
118for 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)
145colors = plt.colormaps[
'tab10']
148fig = plt.figure(figsize=(28, 8))
150for k
in range(total_level):
151 axes.append(fig.add_subplot(1,total_level,k+1, projection=
'3d'))
153for 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))
167plt.savefig(
"TreeStructure.pdf")
168plt.savefig(
"TreeStrucutre.png")
read_patches(file_path, size_group)