DavMelchi commited on
Commit
50b11f5
·
1 Parent(s): e7fbd9b

adding Atoll processing DB

Browse files
apps/database_page.py CHANGED
@@ -5,7 +5,11 @@ import streamlit as st
5
  from st_aggrid import AgGrid, ColumnsAutoSizeMode
6
 
7
  from apps.dump_analysis import dump_analysis_space
8
- from queries.process_all_db import process_all_tech_db, process_all_tech_db_with_stats
 
 
 
 
9
  from queries.process_gsm import process_gsm_data_to_excel, process_gsm_data_to_kml
10
  from queries.process_invunit import process_invunit_data_to_excel
11
  from queries.process_lte import process_lte_data_to_excel, process_lte_data_to_kml
@@ -58,6 +62,9 @@ def download_button(database_type):
58
  elif database_type == "INVUNIT":
59
  data = UtilsVars.final_invunit_database
60
  file_name = f"INVUNIT database_{datetime.now()}.xlsx"
 
 
 
61
  st.download_button(
62
  type="primary",
63
  label=f"Download {database_type} Database File",
@@ -109,6 +116,17 @@ def execute_process_all_tech_db(uploaded_file):
109
  download_button("All")
110
 
111
 
 
 
 
 
 
 
 
 
 
 
 
112
  # def execute_process_all_tech_db_with_stats(uploaded_file: str, region_list: list):
113
  def execute_process_all_tech_db_with_stats(uploaded_file: str):
114
 
@@ -125,8 +143,8 @@ def execute_process_all_tech_db_with_stats(uploaded_file: str):
125
  download_button("All")
126
 
127
 
128
- col1, col2, col3, col4, col5 = st.columns(5)
129
- col6, col7, col8, col9, col10 = st.columns(5)
130
  if uploaded_file is not None:
131
  # UtilsVars.file_path = uploaded_file
132
 
@@ -240,7 +258,12 @@ if uploaded_file is not None:
240
  process_lte_data_to_kml, "LTE"
241
  ),
242
  )
243
-
 
 
 
 
 
244
  except Exception as e:
245
  st.error(f"Error: {e}")
246
 
 
5
  from st_aggrid import AgGrid, ColumnsAutoSizeMode
6
 
7
  from apps.dump_analysis import dump_analysis_space
8
+ from queries.process_all_db import (
9
+ process_all_tech_db,
10
+ process_all_tech_db_with_stats,
11
+ process_atoll_db,
12
+ )
13
  from queries.process_gsm import process_gsm_data_to_excel, process_gsm_data_to_kml
14
  from queries.process_invunit import process_invunit_data_to_excel
15
  from queries.process_lte import process_lte_data_to_excel, process_lte_data_to_kml
 
62
  elif database_type == "INVUNIT":
63
  data = UtilsVars.final_invunit_database
64
  file_name = f"INVUNIT database_{datetime.now()}.xlsx"
65
+ elif database_type == "Custom":
66
+ data = UtilsVars.final_atoll_database
67
+ file_name = f"Custom database_{datetime.now()}.xlsx"
68
  st.download_button(
69
  type="primary",
70
  label=f"Download {database_type} Database File",
 
116
  download_button("All")
117
 
118
 
119
+ def execute_process_custom_db(uploaded_file):
120
+ if uploaded_file is not None:
121
+ start_time = time.time()
122
+ process_atoll_db(uploaded_file)
123
+ execution_time = time.time() - start_time
124
+ st.write(
125
+ f"ATL databases are generated. Execution time: {execution_time:.2f} seconds"
126
+ )
127
+ download_button("Custom")
128
+
129
+
130
  # def execute_process_all_tech_db_with_stats(uploaded_file: str, region_list: list):
131
  def execute_process_all_tech_db_with_stats(uploaded_file: str):
132
 
 
143
  download_button("All")
144
 
145
 
146
+ col1, col2, col3, col4, col5, col6 = st.columns(6)
147
+ col7, col8, col9, col10, col11, col12 = st.columns(6)
148
  if uploaded_file is not None:
149
  # UtilsVars.file_path = uploaded_file
150
 
 
258
  process_lte_data_to_kml, "LTE"
259
  ),
260
  )
261
+ if DumpType.full_dump == True:
262
+ with col11:
263
+ st.button(
264
+ "Generate ATL DB",
265
+ on_click=lambda: execute_process_custom_db(uploaded_file),
266
+ )
267
  except Exception as e:
268
  st.error(f"Error: {e}")
269
 
queries/process_all_db.py CHANGED
@@ -1,3 +1,4 @@
 
1
  from queries.process_gsm import combined_gsm_database, gsm_analaysis
2
  from queries.process_invunit import process_invunit_data
3
  from queries.process_lte import lte_fdd_analaysis, lte_tdd_analaysis, process_lte_data
@@ -7,12 +8,18 @@ from utils.convert_to_excel import convert_dfs
7
  from utils.utils_vars import UtilsVars
8
 
9
 
10
- def all_dbs(filepath: str):
11
  UtilsVars.all_db_dfs.clear()
12
  UtilsVars.all_db_dfs_names.clear()
13
  UtilsVars.gsm_dfs.clear()
14
  UtilsVars.wcdma_dfs.clear()
15
  UtilsVars.lte_dfs.clear()
 
 
 
 
 
 
16
  combined_gsm_database(filepath)
17
  process_wcdma_data(filepath)
18
  process_lte_data(filepath),
@@ -45,3 +52,8 @@ def process_all_tech_db_with_stats(
45
  UtilsVars.all_db_dfs,
46
  ["GSM", "MAL", "TRX", "WCDMA", "LTE_FDD", "LTE_TDD", "MRBTS", "INVUNIT"],
47
  )
 
 
 
 
 
 
1
+ from queries.process_atoll_db import process_lte_for_atoll
2
  from queries.process_gsm import combined_gsm_database, gsm_analaysis
3
  from queries.process_invunit import process_invunit_data
4
  from queries.process_lte import lte_fdd_analaysis, lte_tdd_analaysis, process_lte_data
 
8
  from utils.utils_vars import UtilsVars
9
 
10
 
11
+ def clear_all_dbs():
12
  UtilsVars.all_db_dfs.clear()
13
  UtilsVars.all_db_dfs_names.clear()
14
  UtilsVars.gsm_dfs.clear()
15
  UtilsVars.wcdma_dfs.clear()
16
  UtilsVars.lte_dfs.clear()
17
+ UtilsVars.atoll_dfs.clear()
18
+ UtilsVars.final_atoll_database = None
19
+
20
+
21
+ def all_dbs(filepath: str):
22
+ clear_all_dbs()
23
  combined_gsm_database(filepath)
24
  process_wcdma_data(filepath)
25
  process_lte_data(filepath),
 
52
  UtilsVars.all_db_dfs,
53
  ["GSM", "MAL", "TRX", "WCDMA", "LTE_FDD", "LTE_TDD", "MRBTS", "INVUNIT"],
54
  )
55
+
56
+
57
+ def process_atoll_db(filepath: str):
58
+ clear_all_dbs()
59
+ process_lte_for_atoll(filepath)
queries/process_atoll_db.py ADDED
@@ -0,0 +1,430 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+
3
+ from queries.process_gsm import process_gsm_data
4
+ from queries.process_lte import process_lte_data
5
+ from queries.process_wcdma import process_wcdma_data
6
+ from utils.convert_to_excel import convert_dfs, save_dataframe
7
+ from utils.utils_vars import UtilsVars
8
+
9
+ LTE_ATOLL_EMETTEUR_COLUMNS = [
10
+ "code",
11
+ "name",
12
+ "Hauteur",
13
+ "Azimut",
14
+ ]
15
+
16
+ LTE_ATOLL_CELLULE_COLUMNS = [
17
+ "name",
18
+ "band",
19
+ "earfcnDL",
20
+ "rootSeqIndex",
21
+ "phyCellId",
22
+ "pMax",
23
+ ]
24
+
25
+
26
+ WCDMA_ATOLL_EMETTEUR_COLUMNS = [
27
+ "code",
28
+ "name",
29
+ "Hauteur",
30
+ "Azimut",
31
+ "porteuse",
32
+ ]
33
+
34
+ WCDMA_ATOLL_CELLULE_COLUMNS = [
35
+ "name",
36
+ "UARFCN",
37
+ "PriScrCode",
38
+ "PtxPrimaryCPICH",
39
+ ]
40
+
41
+
42
+ GSM_ATOLL_COLUMNS = [
43
+ "code",
44
+ "name",
45
+ "Hauteur",
46
+ "Azimut",
47
+ "band_frequence",
48
+ "TRX_TCH",
49
+ "number_trx_per_cell",
50
+ "BCCH",
51
+ "configuration_schema",
52
+ "type_cellule",
53
+ "BSIC",
54
+ ]
55
+
56
+
57
+ ########################### PROCESS LTE DATA FOR ATOLL#########################
58
+
59
+
60
+ def process_lte_for_atoll(file_path: str):
61
+ df: pd.DataFrame = process_lte_data(file_path)
62
+ lte_fdd_df = df[0]
63
+ lte_tdd_df = df[1]
64
+
65
+ lte_atoll_df = pd.concat([lte_fdd_df, lte_tdd_df], ignore_index=True)
66
+ lte_atoll_emetteur_df = lte_atoll_df[LTE_ATOLL_EMETTEUR_COLUMNS]
67
+ lte_atoll_cellule_df = lte_atoll_df[LTE_ATOLL_CELLULE_COLUMNS]
68
+
69
+ # rename columns
70
+
71
+ lte_atoll_emetteur_df = lte_atoll_emetteur_df.rename(
72
+ columns={
73
+ "code": "Site",
74
+ "name": "Emetteur",
75
+ "Hauteur": "Hauteur (m)",
76
+ "Azimut": "Azimut (°)",
77
+ }
78
+ )
79
+
80
+ lte_atoll_emetteur_df.loc[
81
+ lte_atoll_emetteur_df["Hauteur (m)"] < 1, "Hauteur (m)"
82
+ ] = 1
83
+
84
+ lte_atoll_emetteur_df.loc[lte_atoll_emetteur_df["Azimut (°)"] < 0, "Azimut (°)"] = 0
85
+
86
+ # Add additionals columns
87
+
88
+ lte_atoll_emetteur_df["Activé"] = True
89
+ lte_atoll_emetteur_df["DX (m)"] = 0
90
+ lte_atoll_emetteur_df["DY (m)"] = 0
91
+ lte_atoll_emetteur_df["Antenne"] = "OML 65deg 17dBi 6Tilt 1800MHz"
92
+ lte_atoll_emetteur_df["Downtilt mécanique (°)"] = 0
93
+ lte_atoll_emetteur_df["Rayon de calcul principal (m)"] = 15000
94
+ lte_atoll_emetteur_df["Modèle de propagation principal"] = (
95
+ "Standard Propagation Model"
96
+ )
97
+ lte_atoll_emetteur_df["Pertes émission (dB)"] = 0
98
+ lte_atoll_emetteur_df["Pertes réception (dB)"] = 0
99
+ lte_atoll_emetteur_df["Facteur de bruit (dB)"] = 5
100
+ lte_atoll_emetteur_df["Groupe d'hexagones"] = None
101
+ lte_atoll_emetteur_df["Rayon hexagone (m)"] = 5000
102
+ lte_atoll_emetteur_df["Commentaires"] = None
103
+ lte_atoll_emetteur_df["Equipement TMA"] = None
104
+ lte_atoll_emetteur_df["Equipement câbles"] = None
105
+ lte_atoll_emetteur_df["Equipement émetteur"] = None
106
+ lte_atoll_emetteur_df["Longueur de câbles en émission (m)"] = 100
107
+ lte_atoll_emetteur_df["Longueur de câbles en réception (m)"] = 100
108
+ lte_atoll_emetteur_df["Pertes diverses en émission (dB)"] = 0
109
+ lte_atoll_emetteur_df["Pertes diverses en réception (dB)"] = 0
110
+ lte_atoll_emetteur_df["Rayon de calcul étendu (m)"] = 20000
111
+ lte_atoll_emetteur_df["Modèle de propagation étendu"] = "(aucun)"
112
+ lte_atoll_emetteur_df["Résolution principale (m)"] = 500
113
+ lte_atoll_emetteur_df["Résolution étendue (m)"] = 10
114
+ lte_atoll_emetteur_df["Downtilt électrique additionnel (°)"] = 2
115
+ lte_atoll_emetteur_df["Nombre de ports d'antennes en émission"] = 2
116
+ lte_atoll_emetteur_df["Nombre de ports d'antennes en réception"] = 2
117
+ lte_atoll_emetteur_df["Type d'émetteur"] = "Intra-réseau (serveur et brouilleur)"
118
+ lte_atoll_emetteur_df["Antenne partagée"] = None
119
+ lte_atoll_emetteur_df["Equipement antenne intelligente"] = None
120
+ lte_atoll_emetteur_df["Tilt latéral mécanique (°)"] = 0
121
+ lte_atoll_emetteur_df["Diagramme partagé"] = None
122
+
123
+ # Rename cellule columns
124
+ lte_atoll_cellule_df = lte_atoll_cellule_df.rename(
125
+ columns={
126
+ "name": "Nom",
127
+ "earfcnDL": "Numéro de canal",
128
+ "rootSeqIndex": "Séquences ROOT PRACH",
129
+ "phyCellId": "Physical Cell ID",
130
+ "pMax": "Puissance max (dBm)",
131
+ }
132
+ )
133
+
134
+ # Map oml_band_frequence
135
+ lte_atoll_cellule_df["Bande de fréquences"] = (
136
+ lte_atoll_cellule_df["band"]
137
+ .map(UtilsVars.oml_lte_freq_band)
138
+ .fillna("not found")
139
+ )
140
+ lte_atoll_cellule_df["Emetteur"] = lte_atoll_cellule_df["Nom"]
141
+
142
+ lte_atoll_cellule_df["Charge de trafic (UL) (%)"] = 70
143
+ lte_atoll_cellule_df["Charge de trafic (DL) (%)"] = 70
144
+ lte_atoll_cellule_df["Equipement de réception"] = "Default Cell Equipment"
145
+ lte_atoll_cellule_df["Commentaires"] = None
146
+ lte_atoll_cellule_df["Nombre max d'utilisateurs"] = 600
147
+ lte_atoll_cellule_df["Noise rise UL (dB)"] = 2.5
148
+ lte_atoll_cellule_df["Nombre max de voisines intra-technologie"] = None
149
+ lte_atoll_cellule_df["Nombre max de voisines inter-technologies"] = None
150
+ lte_atoll_cellule_df["Active"] = True
151
+ lte_atoll_cellule_df["Scheduler"] = "Proportional Fair"
152
+ lte_atoll_cellule_df["RSRP min (dBm)"] = -128
153
+ lte_atoll_cellule_df["Support de diversité (DL)"] = "Diversité d'émission"
154
+ lte_atoll_cellule_df["Configuration de sous-trames TDD"] = "0 - DSUUU-DSUUU"
155
+ lte_atoll_cellule_df["Distance de réutilisation (m)"] = 20000
156
+ lte_atoll_cellule_df["Etat du SSS ID"] = "Alloué"
157
+ lte_atoll_cellule_df["Etat d'allocation de canal"] = "Alloué"
158
+ lte_atoll_cellule_df["Charge de trafic max (UL) (%)"] = 90
159
+ lte_atoll_cellule_df["Charge de trafic max (DL) (%)"] = 90
160
+ lte_atoll_cellule_df["Noise rise UL inter-technologies (dB)"] = 0
161
+ lte_atoll_cellule_df["Noise rise DL inter-technologies (dB)"] = 0
162
+ lte_atoll_cellule_df["Support de diversité (UL)"] = 1
163
+ lte_atoll_cellule_df["Nombre d'utilisateurs MU-MIMO co-schédulés (UL)"] = 2
164
+ lte_atoll_cellule_df["Offset EPRE SS / RS (dB)"] = 0
165
+ lte_atoll_cellule_df["Offset EPRE PDSCH / RS (dB)"] = 0
166
+ lte_atoll_cellule_df["Couche"] = "Macro Layer"
167
+ lte_atoll_cellule_df["Support de coordination d'interférences"] = 0
168
+ lte_atoll_cellule_df["Ratio de trafic en bordure de cellule (DL) (%)"] = 0
169
+ lte_atoll_cellule_df["Seuil ICIC de delta path loss (dB)"] = 0
170
+ lte_atoll_cellule_df["Facteur de contrôle de puissance fractionnaire"] = 1
171
+ lte_atoll_cellule_df["Noise rise max (UL) (dB)"] = 6
172
+ lte_atoll_cellule_df["C/(I+N) PUSCH max (dB)"] = 30
173
+ lte_atoll_cellule_df["Noise rise ICIC (UL) (dB)"] = 0
174
+ lte_atoll_cellule_df["EPRE RS par port d'antenne (dBm)"] = 12.2
175
+ lte_atoll_cellule_df["Offset EPRE PBCH / RS (dB)"] = 0
176
+ lte_atoll_cellule_df["Offset EPRE PDCCH / RS (dB)"] = 0
177
+ lte_atoll_cellule_df["Nombre d'utilisateurs (DL)"] = 300
178
+ lte_atoll_cellule_df["Nombre d'utilisateurs (UL)"] = 300
179
+ lte_atoll_cellule_df["Configuration de trame"] = None
180
+ lte_atoll_cellule_df["Taux d'utilisation AAS (DL) (%)"] = 0
181
+ lte_atoll_cellule_df["Distributions angulaires des interférences (AAS)"] = 10
182
+ lte_atoll_cellule_df["Domaine Physical Cell ID"] = None
183
+ lte_atoll_cellule_df["Etat du PSS ID"] = "Alloué"
184
+ lte_atoll_cellule_df["ID"] = None
185
+ lte_atoll_cellule_df["Nombre d'utilisateurs MU-MIMO co-schédulés (DL)"] = 2
186
+ lte_atoll_cellule_df["Schéma des sous-trames vides (ABS)"] = None
187
+ lte_atoll_cellule_df["Type de cellule"] = 1
188
+ lte_atoll_cellule_df["Nombre de RSI PRACH requis"] = 10
189
+ lte_atoll_cellule_df["Etat du RSI PRACH"] = "Alloué"
190
+ lte_atoll_cellule_df["Ordre"] = 1
191
+ lte_atoll_cellule_df["Seuil de sélection de cellule (dB)"] = 0
192
+ lte_atoll_cellule_df["Offset individuel de cellule (dB)"] = 0
193
+ lte_atoll_cellule_df["Marge de handover (dB)"] = 3
194
+ lte_atoll_cellule_df["Domaine de PRACH RSI"] = None
195
+
196
+ lte_atoll_cellule_df["Puissance max (dBm)"] = (
197
+ lte_atoll_cellule_df["Puissance max (dBm)"] / 10
198
+ )
199
+
200
+ ########################### PROCESS WCDMA DATA FOR ATOLL#########################
201
+
202
+ wcdma_atoll_df: pd.DataFrame = process_wcdma_data(file_path)
203
+ wcdma_atoll_emetteur_df = wcdma_atoll_df[WCDMA_ATOLL_EMETTEUR_COLUMNS]
204
+
205
+ # rename columns
206
+
207
+ wcdma_atoll_emetteur_df = wcdma_atoll_emetteur_df.rename(
208
+ columns={
209
+ "code": "Site",
210
+ "name": "Emetteur",
211
+ "Hauteur": "Hauteur (m)",
212
+ "Azimut": "Azimut (°)",
213
+ "porteuse": "Bande de fréquences",
214
+ }
215
+ )
216
+ # Add atoll wcdma emetteur columns
217
+ wcdma_atoll_emetteur_df["Activé"] = "True"
218
+ wcdma_atoll_emetteur_df["DX (m)"] = 0
219
+ wcdma_atoll_emetteur_df["DY (m)"] = 0
220
+ wcdma_atoll_emetteur_df["Antenne"] = "OML 65deg 17dBi 6Tilt 1800MHz"
221
+ wcdma_atoll_emetteur_df["Downtilt mécanique (°)"] = 0
222
+ wcdma_atoll_emetteur_df["Rayon de calcul principal (m)"] = 15000
223
+ wcdma_atoll_emetteur_df["Modèle de propagation principal"] = (
224
+ "Standard Propagation Model"
225
+ )
226
+ wcdma_atoll_emetteur_df["Pertes émission (dB)"] = 0
227
+ wcdma_atoll_emetteur_df["Pertes réception (dB)"] = 0
228
+ wcdma_atoll_emetteur_df["Facteur de bruit (dB)"] = 5
229
+ wcdma_atoll_emetteur_df["Groupe d'hexagones"] = None
230
+ wcdma_atoll_emetteur_df["Rayon hexagone (m)"] = 5000
231
+ wcdma_atoll_emetteur_df["Commentaires"] = None
232
+ wcdma_atoll_emetteur_df["Equipement TMA"] = None
233
+ wcdma_atoll_emetteur_df["Equipement câbles"] = None
234
+ wcdma_atoll_emetteur_df["Equipement émetteur"] = None
235
+ wcdma_atoll_emetteur_df["Longueur de câbles en émission (m)"] = 0
236
+ wcdma_atoll_emetteur_df["Longueur de câbles en réception (m)"] = 0
237
+ wcdma_atoll_emetteur_df["Gain de diversité d'antenne de réception (dB)"] = 0
238
+ wcdma_atoll_emetteur_df["Pertes diverses en émission (dB)"] = 0
239
+ wcdma_atoll_emetteur_df["Pertes diverses en réception (dB)"] = 0
240
+ wcdma_atoll_emetteur_df["Rayon de calcul étendu (m)"] = 20000
241
+ wcdma_atoll_emetteur_df["Modèle de propagation étendu"] = "(aucun)"
242
+ wcdma_atoll_emetteur_df["Résolution principale (m)"] = 10000
243
+ wcdma_atoll_emetteur_df["Résolution étendue (m)"] = None
244
+ wcdma_atoll_emetteur_df["Downtilt électrique additionnel (°)"] = 2
245
+ wcdma_atoll_emetteur_df["Type de diversité d'émission"] = "Pas de diversité"
246
+ wcdma_atoll_emetteur_df["Partage des puissances entre porteuses"] = False
247
+ wcdma_atoll_emetteur_df["Puissance max partagée (dBm)"] = 43
248
+ wcdma_atoll_emetteur_df["Nombre de ports d'antennes en émission"] = 1
249
+ wcdma_atoll_emetteur_df["Nombre de ports d'antennes en réception"] = 1
250
+ wcdma_atoll_emetteur_df["Antenne partagée"] = False
251
+ wcdma_atoll_emetteur_df["Mode multi-cellules"] = "Aucun"
252
+ wcdma_atoll_emetteur_df["Portée max (m)"] = None
253
+ wcdma_atoll_emetteur_df["Tilt latéral mécanique (°)"] = 0
254
+ wcdma_atoll_emetteur_df["Diagramme partagé"] = None
255
+
256
+ # Replace Hauteur (m) values less than 1 with 1
257
+ wcdma_atoll_emetteur_df.loc[
258
+ wcdma_atoll_emetteur_df["Hauteur (m)"] < 1, "Hauteur (m)"
259
+ ] = 1
260
+
261
+ wcdma_atoll_cellule_df = wcdma_atoll_df[WCDMA_ATOLL_CELLULE_COLUMNS]
262
+
263
+ # rename columns
264
+ wcdma_atoll_cellule_df = wcdma_atoll_cellule_df.rename(
265
+ columns={
266
+ "name": "Nom",
267
+ "UARFCN": "Porteuse",
268
+ "PriScrCode": "Scrambling code primaire",
269
+ "PtxPrimaryCPICH": "Puissance pilote (dBm)",
270
+ }
271
+ )
272
+ # Add columns Emetteur equal to Nom value
273
+ wcdma_atoll_cellule_df["Emetteur"] = wcdma_atoll_cellule_df["Nom"]
274
+
275
+ # Add additional column
276
+ wcdma_atoll_cellule_df["Domaine scrambling code"] = None
277
+ wcdma_atoll_cellule_df["Seuil AS (dB)"] = 5
278
+ wcdma_atoll_cellule_df["Puissance max (dBm)"] = 46
279
+ wcdma_atoll_cellule_df["Puissance SCH (dBm)"] = 21
280
+ wcdma_atoll_cellule_df["Puissance autres CCH (dBm)"] = 30
281
+ wcdma_atoll_cellule_df["Puissance totale (dBm)"] = None
282
+ wcdma_atoll_cellule_df["Facteur de charge UL (%)"] = None
283
+ wcdma_atoll_cellule_df["Commentaires"] = None
284
+ wcdma_atoll_cellule_df["Distance de réutilisation du SC (m)"] = 20000
285
+ wcdma_atoll_cellule_df["Nombre max de voisines intra-porteuse"] = 32
286
+ wcdma_atoll_cellule_df["Nombre max de voisines inter-technologies"] = 32
287
+ wcdma_atoll_cellule_df["Facteur de charge UL max (%)"] = 80
288
+ wcdma_atoll_cellule_df["Charge DL max (% Pmax)"] = 80
289
+ wcdma_atoll_cellule_df["Puissance HSDPA disponible (dBm)"] = None
290
+ wcdma_atoll_cellule_df["Dégagement de puissance (dB)"] = None
291
+ wcdma_atoll_cellule_df["Nombre max de codes HS-PDSCH"] = None
292
+ wcdma_atoll_cellule_df["Nombre max de voisines inter-porteuses"] = 32
293
+ wcdma_atoll_cellule_df["Nombre min de codes HS-PDSCH"] = None
294
+ wcdma_atoll_cellule_df["Allocation dynamique de puissance HSDPA"] = True
295
+ wcdma_atoll_cellule_df["Allocation dynamique de puissance HS-SCCH"] = True
296
+ wcdma_atoll_cellule_df["Puissance HS-SCCH (dBm)"] = None
297
+ wcdma_atoll_cellule_df["Nombre de canaux HS-SCCH"] = None
298
+ wcdma_atoll_cellule_df["Nombre max d'utilisateurs HSDPA"] = None
299
+ wcdma_atoll_cellule_df["Débit UL max par utilisateur (kbps)"] = 4000
300
+ wcdma_atoll_cellule_df["Débit DL max par utilisateur (kbps)"] = 45000
301
+ wcdma_atoll_cellule_df["Active"] = True
302
+ wcdma_atoll_cellule_df["Puissance DL HSUPA (dBm)"] = None
303
+ wcdma_atoll_cellule_df["Nombre max d'utilisateurs HSUPA"] = None
304
+ wcdma_atoll_cellule_df["Facteur de charge UL dû au HSUPA (%)"] = None
305
+ wcdma_atoll_cellule_df["Nombre d'utilisateurs HSUPA"] = None
306
+ wcdma_atoll_cellule_df["Facteur de réutilisation (UL)"] = None
307
+ wcdma_atoll_cellule_df["Nombre d'utilisateurs HSDPA"] = None
308
+ wcdma_atoll_cellule_df["Support HSPA"] = "Aucun"
309
+ wcdma_atoll_cellule_df["Noise rise UL inter-technologies (dB)"] = None
310
+ wcdma_atoll_cellule_df["Noise rise DL inter-technologies (dB)"] = None
311
+ wcdma_atoll_cellule_df["ID"] = None
312
+ wcdma_atoll_cellule_df["Support MIMO"] = "Aucun"
313
+ wcdma_atoll_cellule_df["SC verrouillé"] = True
314
+ wcdma_atoll_cellule_df["Algorithme du scheduler HSDPA"] = None
315
+ wcdma_atoll_cellule_df["RSCP min (dBm)"] = None
316
+ wcdma_atoll_cellule_df["Ordre"] = 1
317
+ wcdma_atoll_cellule_df["Couche"] = "Macro Layer"
318
+ wcdma_atoll_cellule_df["Offset individuel de cellule (dB)"] = 0
319
+ wcdma_atoll_cellule_df["Marge de handover (dB)"] = 0
320
+
321
+ wcdma_atoll_cellule_df["Puissance pilote (dBm)"] = (
322
+ wcdma_atoll_cellule_df["Puissance pilote (dBm)"] / 10
323
+ )
324
+
325
+ ########################### PROCESS GSM DATA FOR ATOLL#########################
326
+
327
+ gsm_atoll_df: pd.DataFrame = process_gsm_data(file_path)
328
+ gsm_atoll_df = gsm_atoll_df[GSM_ATOLL_COLUMNS]
329
+
330
+ # rename columns
331
+
332
+ gsm_atoll_df = gsm_atoll_df.rename(
333
+ columns={
334
+ "code": "Site",
335
+ "name": "Emetteur",
336
+ "Hauteur": "Hauteur (m)",
337
+ "Azimut": "Azimut (°)",
338
+ "band_frequence": "Bande de fréquences",
339
+ "TRX_TCH": "Canaux",
340
+ "number_trx_per_cell": "TRXs requis",
341
+ "BCCH": "BCCH",
342
+ "configuration_schema": "Configurations de schémas de codage GPRS/EDGE",
343
+ "type_cellule": "Type de cellule",
344
+ "BSIC": "BSIC",
345
+ }
346
+ )
347
+
348
+ # Add atoll columns
349
+ gsm_atoll_df["Activé"] = "True"
350
+ gsm_atoll_df["DX (m)"] = 0
351
+ gsm_atoll_df["DY (m)"] = 0
352
+ gsm_atoll_df["Antenne"] = "OML 65deg 17dBi 6Tilt 1800MHz"
353
+ gsm_atoll_df["Downtilt mécanique (°)"] = 0
354
+ gsm_atoll_df["PIRE (dBm)"] = None
355
+ gsm_atoll_df["Puissance (dBm)"] = 43
356
+ gsm_atoll_df["Pertes émission (dB)"] = 3
357
+ gsm_atoll_df["Rayon de calcul principal (m)"] = 15000
358
+ gsm_atoll_df["Modèle de propagation principal"] = "Standard Propagation Model"
359
+ gsm_atoll_df["Groupe d'hexagones"] = None
360
+ gsm_atoll_df["Rayon hexagone (m)"] = 5000
361
+ gsm_atoll_df["Commentaires"] = None
362
+ gsm_atoll_df["Equipement TMA"] = None
363
+ gsm_atoll_df["Equipement câbles"] = None
364
+ gsm_atoll_df["Equipement émetteur"] = None
365
+ gsm_atoll_df["Longueur de câbles en émission (m)"] = 0
366
+ gsm_atoll_df["Longueur de câbles en réception (m)"] = 0
367
+ gsm_atoll_df["Pertes diverses en émission (dB)"] = 0
368
+ gsm_atoll_df["Pertes diverses en réception (dB)"] = 0
369
+ gsm_atoll_df["Rayon de calcul étendu (m)"] = 20000
370
+ gsm_atoll_df["Modèle de propagation étendu"] = "(aucun)"
371
+ gsm_atoll_df["Résolution principale (m)"] = 10000
372
+ gsm_atoll_df["Résolution étendue (m)"] = None
373
+ gsm_atoll_df["GPRS/EDGE"] = True
374
+ gsm_atoll_df["Mode de saut"] = None
375
+ gsm_atoll_df["Poids AFP"] = 1
376
+ gsm_atoll_df["Domaine de BSIC"] = "ALL BSICs"
377
+ gsm_atoll_df["Verrouiller canaux et MAIO"] = False
378
+ gsm_atoll_df["Verrouiller HSN"] = False
379
+ gsm_atoll_df["Verrouiller BSIC"] = False
380
+ gsm_atoll_df["Couche HCS"] = "Macro Layer"
381
+ gsm_atoll_df["Nombre max de schémas de codage (non utilisé)"] = None
382
+ gsm_atoll_df["Nombre max de voisines intra-technologie"] = None
383
+ gsm_atoll_df["Nombre max de voisines inter-technologies"] = None
384
+ gsm_atoll_df["Nombre max de TRXs"] = 16
385
+ gsm_atoll_df["Downtilt électrique additionnel (°)"] = None
386
+ gsm_atoll_df["Portée min (m)"] = None
387
+ gsm_atoll_df["Portée max (m)"] = None
388
+ gsm_atoll_df["Configuration de codecs"] = "Adaptive Multi-Rate"
389
+ gsm_atoll_df["FN Offset"] = None
390
+ gsm_atoll_df["Offset de resélection (dB)"] = 0
391
+ gsm_atoll_df["Seuil de réception couche HCS"] = None
392
+ gsm_atoll_df["PBCCH supporté"] = False
393
+ gsm_atoll_df["Seuil de réception PBCCH"] = -102
394
+ gsm_atoll_df["Offset PBCCH de resélection de cellule (dB)"] = 0
395
+ gsm_atoll_df["ID"] = None
396
+ gsm_atoll_df["Type d'émetteur"] = "Intra-réseau (serveur et brouilleur)"
397
+ gsm_atoll_df["Antenne partagée"] = None
398
+ gsm_atoll_df["Pertes réception (dB)"] = 0
399
+ gsm_atoll_df["Facteur de bruit (dB)"] = 5
400
+ gsm_atoll_df["Distance de réutilisation (m)"] = 20000
401
+ gsm_atoll_df["Tilt latéral mécanique (°)"] = 0
402
+ gsm_atoll_df["Diagramme partagé"] = None
403
+
404
+ # Add "Nombre de TRX" equal to "TRXs requis"
405
+ gsm_atoll_df["Nombre de TRX"] = gsm_atoll_df["TRXs requis"]
406
+ # Replace Hauteur (m) values less than 1 with 1
407
+ gsm_atoll_df.loc[gsm_atoll_df["Hauteur (m)"] < 1, "Hauteur (m)"] = 1
408
+
409
+ # save_dataframe(gsm_atoll_df, "GSM_ATOLL")
410
+ # save_dataframe(wcdma_atoll_emetteur_df, "WCDMA_ATOLL_EMETTEUR")
411
+ # save_dataframe(wcdma_atoll_cellule_df, "WCDMA_ATOLL_CELLULE")
412
+ # save_dataframe(lte_atoll_emetteur_df, "LTE_ATOLL_EMETTEUR")
413
+ # save_dataframe(lte_atoll_cellule_df, "LTE_ATOLL_CELLULE")
414
+
415
+ UtilsVars.final_atoll_database = convert_dfs(
416
+ [
417
+ gsm_atoll_df,
418
+ wcdma_atoll_emetteur_df,
419
+ wcdma_atoll_cellule_df,
420
+ lte_atoll_emetteur_df,
421
+ lte_atoll_cellule_df,
422
+ ],
423
+ [
424
+ "GSM",
425
+ "WCDMA_EMETTEUR",
426
+ "WCDMA_CELLULE",
427
+ "LTE_EMETTEUR",
428
+ "LTE_CELLULE",
429
+ ],
430
+ )
utils/convert_to_excel.py CHANGED
@@ -34,4 +34,4 @@ def save_dataframe(df: pd.DataFrame, sheet_name: str):
34
  df (pd.DataFrame): The dataframe to save.
35
  sheet_name (str): The name of the sheet.
36
  """
37
- df.to_csv(f"data2/{sheet_name}_{time.time()}.csv", index=False)
 
34
  df (pd.DataFrame): The dataframe to save.
35
  sheet_name (str): The name of the sheet.
36
  """
37
+ df.to_csv(f"data2/{sheet_name}_{time.time()}.csv", index=False, encoding="latin1")