-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathantenna_graph.py
86 lines (73 loc) · 3.15 KB
/
antenna_graph.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import networkx as nx
import matplotlib.pyplot as plt
class AntennaGraph:
def __init__(self, num_antennas, color_palette=None):
"""
Initialize the AntennaGraph instance.
Parameters:
- num_antennas (int): Number of antennas in the graph.
- color_palette (list, optional): List of colors for graph visualization.
"""
self.adjacency_list = {i: [] for i in range(1, num_antennas + 1)}
self.antenna_colors = {}
self.color_palette = color_palette or ['skyblue', 'lightcoral', 'palegreen', 'lightgoldenrodyellow',
'lightsteelblue', 'lightpink', 'lightcyan', 'plum', 'palegreen',
'thistle', 'lightseagreen', 'burlywood', 'wheat', 'lightgray']
def add_connection(self, antenna1, antenna2):
"""
Add a connection between two antennas.
Parameters:
- antenna1 (int): Antenna identifier.
- antenna2 (int): Antenna identifier.
"""
self.adjacency_list[antenna1].append(antenna2)
self.adjacency_list[antenna2].append(antenna1)
def add_connections(self, connections):
"""
Add connections to the graph.
Parameters:
- connections (list): List of antenna connections represented as tuples.
"""
for antenna1, antenna2 in connections:
if antenna1 not in self.adjacency_list or antenna2 not in self.adjacency_list:
raise ValueError("Antenna not found in the adjacency list.")
self.add_connection(antenna1, antenna2)
def assign_colors(self, color_patterns):
"""
Assign colors to antennas based on frequency patterns.
Parameters:
- color_patterns (list): List of color patterns representing antenna frequencies.
"""
for idx, color_pattern in enumerate(color_patterns):
for i, color_bit in enumerate(color_pattern):
if color_bit == '1':
self.antenna_colors[i + 1] = self.color_palette[idx]
def print_graph(self):
"""
Visualize the graph.
"""
G = self.create_networkx_graph()
node_colors = [self.antenna_colors.get(antenna, 'lightgray') for antenna in G.nodes()]
self.draw_graph(G, node_colors)
def create_networkx_graph(self):
"""
Create a NetworkX graph from the adjacency list.
Returns:
- nx.Graph: NetworkX graph representing the antenna connections.
"""
G = nx.Graph()
for antenna, neighbors in self.adjacency_list.items():
G.add_node(antenna)
for neighbor in neighbors:
G.add_edge(antenna, neighbor)
return G
def draw_graph(self, G, node_colors):
"""
Draw the NetworkX graph.
Parameters:
- G (nx.Graph): NetworkX graph.
- node_colors (list): List of colors for nodes.
"""
pos = nx.spring_layout(G) # Use a spring layout for better visualization
nx.draw(G, with_labels=True, node_size=2000, node_color=node_colors, font_size=20, width=2, edge_color="gray")
plt.show()