File size: 20,214 Bytes
50b11f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9cd5e21
 
 
 
 
 
50b11f5
 
 
 
9cd5e21
50b11f5
 
 
 
9cd5e21
 
50b11f5
9cd5e21
50b11f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9cd5e21
50b11f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9cd5e21
50b11f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9cd5e21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50b11f5
 
 
 
 
 
 
9cd5e21
50b11f5
 
 
 
 
 
 
9cd5e21
50b11f5
 
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
import pandas as pd

from queries.process_gsm import process_gsm_data
from queries.process_lte import process_lte_data
from queries.process_wcdma import process_wcdma_data
from utils.convert_to_excel import convert_dfs, save_dataframe
from utils.utils_vars import UtilsVars

LTE_ATOLL_EMETTEUR_COLUMNS = [
    "code",
    "name",
    "Hauteur",
    "Azimut",
]

LTE_ATOLL_CELLULE_COLUMNS = [
    "name",
    "band",
    "earfcnDL",
    "rootSeqIndex",
    "phyCellId",
    "pMax",
]


WCDMA_ATOLL_EMETTEUR_COLUMNS = [
    "code",
    "name",
    "Hauteur",
    "Azimut",
    "porteuse",
]

WCDMA_ATOLL_CELLULE_COLUMNS = [
    "name",
    "UARFCN",
    "PriScrCode",
    "PtxPrimaryCPICH",
]


GSM_ATOLL_COLUMNS = [
    "code",
    "name",
    "Hauteur",
    "Azimut",
    "band_frequence",
    "TRX_TCH",
    "number_trx_per_cell",
    "BCCH",
    "configuration_schema",
    "type_cellule",
    "BSIC",
]

SITE_COLUMNS = [
    "code",
    "Longitude",
    "Latitude",
    "Hauteur",
]

########################### PROCESS LTE DATA FOR ATOLL#########################


def process_data_for_atoll(file_path: str):
    df: pd.DataFrame = process_lte_data(file_path)
    lte_fdd_df = df[0]
    lte_tdd_df = df[1]

    lte_tdd_df = lte_tdd_df.rename(columns={"earfcn": "earfcnDL"})

    lte_atoll_df = pd.concat([lte_fdd_df, lte_tdd_df], ignore_index=True)
    lte_site_df = lte_atoll_df[SITE_COLUMNS]
    lte_atoll_emetteur_df = lte_atoll_df[LTE_ATOLL_EMETTEUR_COLUMNS]
    lte_atoll_cellule_df = lte_atoll_df[LTE_ATOLL_CELLULE_COLUMNS]

    # rename columns

    lte_atoll_emetteur_df = lte_atoll_emetteur_df.rename(
        columns={
            "code": "Site",
            "name": "Emetteur",
            "Hauteur": "Hauteur (m)",
            "Azimut": "Azimut (°)",
        }
    )

    lte_atoll_emetteur_df.loc[
        lte_atoll_emetteur_df["Hauteur (m)"] < 1, "Hauteur (m)"
    ] = 1

    lte_atoll_emetteur_df.loc[lte_atoll_emetteur_df["Azimut (°)"] < 0, "Azimut (°)"] = 0

    # Add additionals columns

    lte_atoll_emetteur_df["Activé"] = True
    lte_atoll_emetteur_df["DX (m)"] = 0
    lte_atoll_emetteur_df["DY (m)"] = 0
    lte_atoll_emetteur_df["Antenne"] = "OML 65deg 17dBi 6Tilt 1800MHz"
    lte_atoll_emetteur_df["Downtilt mécanique (°)"] = 0
    lte_atoll_emetteur_df["Rayon de calcul principal (m)"] = 15000
    lte_atoll_emetteur_df["Modèle de propagation principal"] = (
        "Standard Propagation Model"
    )
    lte_atoll_emetteur_df["Pertes émission (dB)"] = 0
    lte_atoll_emetteur_df["Pertes réception (dB)"] = 0
    lte_atoll_emetteur_df["Facteur de bruit (dB)"] = 5
    lte_atoll_emetteur_df["Groupe d'hexagones"] = None
    lte_atoll_emetteur_df["Rayon hexagone (m)"] = 5000
    lte_atoll_emetteur_df["Commentaires"] = None
    lte_atoll_emetteur_df["Equipement TMA"] = None
    lte_atoll_emetteur_df["Equipement câbles"] = None
    lte_atoll_emetteur_df["Equipement émetteur"] = None
    lte_atoll_emetteur_df["Longueur de câbles en émission (m)"] = 100
    lte_atoll_emetteur_df["Longueur de câbles en réception (m)"] = 100
    lte_atoll_emetteur_df["Pertes diverses en émission (dB)"] = 0
    lte_atoll_emetteur_df["Pertes diverses en réception (dB)"] = 0
    lte_atoll_emetteur_df["Rayon de calcul étendu (m)"] = 20000
    lte_atoll_emetteur_df["Modèle de propagation étendu"] = "(aucun)"
    lte_atoll_emetteur_df["Résolution principale (m)"] = 500
    lte_atoll_emetteur_df["Résolution étendue (m)"] = 10
    lte_atoll_emetteur_df["Downtilt électrique additionnel (°)"] = 2
    lte_atoll_emetteur_df["Nombre de ports d'antennes en émission"] = 2
    lte_atoll_emetteur_df["Nombre de ports d'antennes en réception"] = 2
    lte_atoll_emetteur_df["Type d'émetteur"] = "Intra-réseau (serveur et brouilleur)"
    lte_atoll_emetteur_df["Antenne partagée"] = None
    lte_atoll_emetteur_df["Equipement antenne intelligente"] = None
    lte_atoll_emetteur_df["Tilt latéral mécanique (°)"] = 0
    lte_atoll_emetteur_df["Diagramme partagé"] = None

    # Rename cellule columns
    lte_atoll_cellule_df = lte_atoll_cellule_df.rename(
        columns={
            "name": "Nom",
            "earfcnDL": "Numéro de canal",
            "rootSeqIndex": "Séquences ROOT PRACH",
            "phyCellId": "Physical Cell ID",
            "pMax": "Puissance max (dBm)",
        }
    )

    # Map oml_band_frequence
    lte_atoll_cellule_df["Bande de fréquences"] = (
        lte_atoll_cellule_df["band"]
        .map(UtilsVars.oml_lte_freq_band)
        .fillna("not found")
    )
    lte_atoll_cellule_df["Emetteur"] = lte_atoll_cellule_df["Nom"]

    lte_atoll_cellule_df["Charge de trafic (UL) (%)"] = 70
    lte_atoll_cellule_df["Charge de trafic (DL) (%)"] = 70
    lte_atoll_cellule_df["Equipement de réception"] = "Default Cell Equipment"
    lte_atoll_cellule_df["Commentaires"] = None
    lte_atoll_cellule_df["Nombre max d'utilisateurs"] = 600
    lte_atoll_cellule_df["Noise rise UL (dB)"] = 2.5
    lte_atoll_cellule_df["Nombre max de voisines intra-technologie"] = None
    lte_atoll_cellule_df["Nombre max de voisines inter-technologies"] = None
    lte_atoll_cellule_df["Active"] = True
    lte_atoll_cellule_df["Scheduler"] = "Proportional Fair"
    lte_atoll_cellule_df["RSRP min (dBm)"] = -128
    lte_atoll_cellule_df["Support de diversité (DL)"] = "Diversité d'émission"
    lte_atoll_cellule_df["Configuration de sous-trames TDD"] = "0 - DSUUU-DSUUU"
    lte_atoll_cellule_df["Distance de réutilisation (m)"] = 20000
    lte_atoll_cellule_df["Etat du SSS ID"] = "Alloué"
    lte_atoll_cellule_df["Etat d'allocation de canal"] = "Alloué"
    lte_atoll_cellule_df["Charge de trafic max (UL) (%)"] = 90
    lte_atoll_cellule_df["Charge de trafic max (DL) (%)"] = 90
    lte_atoll_cellule_df["Noise rise UL inter-technologies (dB)"] = 0
    lte_atoll_cellule_df["Noise rise DL inter-technologies (dB)"] = 0
    lte_atoll_cellule_df["Support de diversité (UL)"] = 1
    lte_atoll_cellule_df["Nombre d'utilisateurs MU-MIMO co-schédulés (UL)"] = 2
    lte_atoll_cellule_df["Offset EPRE SS / RS (dB)"] = 0
    lte_atoll_cellule_df["Offset EPRE PDSCH / RS (dB)"] = 0
    lte_atoll_cellule_df["Couche"] = "Macro Layer"
    lte_atoll_cellule_df["Support de coordination d'interférences"] = 0
    lte_atoll_cellule_df["Ratio de trafic en bordure de cellule (DL) (%)"] = 0
    lte_atoll_cellule_df["Seuil ICIC de delta path loss (dB)"] = 0
    lte_atoll_cellule_df["Facteur de contrôle de puissance fractionnaire"] = 1
    lte_atoll_cellule_df["Noise rise max (UL) (dB)"] = 6
    lte_atoll_cellule_df["C/(I+N) PUSCH max (dB)"] = 30
    lte_atoll_cellule_df["Noise rise ICIC (UL) (dB)"] = 0
    lte_atoll_cellule_df["EPRE RS par port d'antenne (dBm)"] = 12.2
    lte_atoll_cellule_df["Offset EPRE PBCH / RS (dB)"] = 0
    lte_atoll_cellule_df["Offset EPRE PDCCH / RS (dB)"] = 0
    lte_atoll_cellule_df["Nombre d'utilisateurs (DL)"] = 300
    lte_atoll_cellule_df["Nombre d'utilisateurs (UL)"] = 300
    lte_atoll_cellule_df["Configuration de trame"] = None
    lte_atoll_cellule_df["Taux d'utilisation AAS (DL) (%)"] = 0
    lte_atoll_cellule_df["Distributions angulaires des interférences (AAS)"] = 10
    lte_atoll_cellule_df["Domaine Physical Cell ID"] = None
    lte_atoll_cellule_df["Etat du PSS ID"] = "Alloué"
    lte_atoll_cellule_df["ID"] = None
    lte_atoll_cellule_df["Nombre d'utilisateurs MU-MIMO co-schédulés (DL)"] = 2
    lte_atoll_cellule_df["Schéma des sous-trames vides (ABS)"] = None
    lte_atoll_cellule_df["Type de cellule"] = 1
    lte_atoll_cellule_df["Nombre de RSI PRACH requis"] = 10
    lte_atoll_cellule_df["Etat du RSI PRACH"] = "Alloué"
    lte_atoll_cellule_df["Ordre"] = 1
    lte_atoll_cellule_df["Seuil de sélection de cellule (dB)"] = 0
    lte_atoll_cellule_df["Offset individuel de cellule (dB)"] = 0
    lte_atoll_cellule_df["Marge de handover (dB)"] = 3
    lte_atoll_cellule_df["Domaine de PRACH RSI"] = None

    lte_atoll_cellule_df["Puissance max (dBm)"] = (
        lte_atoll_cellule_df["Puissance max (dBm)"] / 10
    )

    ########################### PROCESS WCDMA DATA FOR ATOLL#########################

    wcdma_atoll_df: pd.DataFrame = process_wcdma_data(file_path)
    wcdma_site_df = wcdma_atoll_df[SITE_COLUMNS]
    wcdma_atoll_emetteur_df = wcdma_atoll_df[WCDMA_ATOLL_EMETTEUR_COLUMNS]

    # rename columns

    wcdma_atoll_emetteur_df = wcdma_atoll_emetteur_df.rename(
        columns={
            "code": "Site",
            "name": "Emetteur",
            "Hauteur": "Hauteur (m)",
            "Azimut": "Azimut (°)",
            "porteuse": "Bande de fréquences",
        }
    )
    # Add atoll wcdma emetteur columns
    wcdma_atoll_emetteur_df["Activé"] = "True"
    wcdma_atoll_emetteur_df["DX (m)"] = 0
    wcdma_atoll_emetteur_df["DY (m)"] = 0
    wcdma_atoll_emetteur_df["Antenne"] = "OML 65deg 17dBi 6Tilt 1800MHz"
    wcdma_atoll_emetteur_df["Downtilt mécanique (°)"] = 0
    wcdma_atoll_emetteur_df["Rayon de calcul principal (m)"] = 15000
    wcdma_atoll_emetteur_df["Modèle de propagation principal"] = (
        "Standard Propagation Model"
    )
    wcdma_atoll_emetteur_df["Pertes émission (dB)"] = 0
    wcdma_atoll_emetteur_df["Pertes réception (dB)"] = 0
    wcdma_atoll_emetteur_df["Facteur de bruit (dB)"] = 5
    wcdma_atoll_emetteur_df["Groupe d'hexagones"] = None
    wcdma_atoll_emetteur_df["Rayon hexagone (m)"] = 5000
    wcdma_atoll_emetteur_df["Commentaires"] = None
    wcdma_atoll_emetteur_df["Equipement TMA"] = None
    wcdma_atoll_emetteur_df["Equipement câbles"] = None
    wcdma_atoll_emetteur_df["Equipement émetteur"] = None
    wcdma_atoll_emetteur_df["Longueur de câbles en émission (m)"] = 0
    wcdma_atoll_emetteur_df["Longueur de câbles en réception (m)"] = 0
    wcdma_atoll_emetteur_df["Gain de diversité d'antenne de réception (dB)"] = 0
    wcdma_atoll_emetteur_df["Pertes diverses en émission (dB)"] = 0
    wcdma_atoll_emetteur_df["Pertes diverses en réception (dB)"] = 0
    wcdma_atoll_emetteur_df["Rayon de calcul étendu (m)"] = 20000
    wcdma_atoll_emetteur_df["Modèle de propagation étendu"] = "(aucun)"
    wcdma_atoll_emetteur_df["Résolution principale (m)"] = 10000
    wcdma_atoll_emetteur_df["Résolution étendue (m)"] = None
    wcdma_atoll_emetteur_df["Downtilt électrique additionnel (°)"] = 2
    wcdma_atoll_emetteur_df["Type de diversité d'émission"] = "Pas de diversité"
    wcdma_atoll_emetteur_df["Partage des puissances entre porteuses"] = False
    wcdma_atoll_emetteur_df["Puissance max partagée (dBm)"] = 43
    wcdma_atoll_emetteur_df["Nombre de ports d'antennes en émission"] = 1
    wcdma_atoll_emetteur_df["Nombre de ports d'antennes en réception"] = 1
    wcdma_atoll_emetteur_df["Antenne partagée"] = False
    wcdma_atoll_emetteur_df["Mode multi-cellules"] = "Aucun"
    wcdma_atoll_emetteur_df["Portée max (m)"] = None
    wcdma_atoll_emetteur_df["Tilt latéral mécanique (°)"] = 0
    wcdma_atoll_emetteur_df["Diagramme partagé"] = None

    # Replace Hauteur (m) values less than 1 with 1
    wcdma_atoll_emetteur_df.loc[
        wcdma_atoll_emetteur_df["Hauteur (m)"] < 1, "Hauteur (m)"
    ] = 1

    wcdma_atoll_cellule_df = wcdma_atoll_df[WCDMA_ATOLL_CELLULE_COLUMNS]

    # rename columns
    wcdma_atoll_cellule_df = wcdma_atoll_cellule_df.rename(
        columns={
            "name": "Nom",
            "UARFCN": "Porteuse",
            "PriScrCode": "Scrambling code primaire",
            "PtxPrimaryCPICH": "Puissance pilote (dBm)",
        }
    )
    # Add columns Emetteur equal to Nom value
    wcdma_atoll_cellule_df["Emetteur"] = wcdma_atoll_cellule_df["Nom"]

    # Add additional column
    wcdma_atoll_cellule_df["Domaine scrambling code"] = None
    wcdma_atoll_cellule_df["Seuil AS (dB)"] = 5
    wcdma_atoll_cellule_df["Puissance max (dBm)"] = 46
    wcdma_atoll_cellule_df["Puissance SCH (dBm)"] = 21
    wcdma_atoll_cellule_df["Puissance autres CCH (dBm)"] = 30
    wcdma_atoll_cellule_df["Puissance totale (dBm)"] = None
    wcdma_atoll_cellule_df["Facteur de charge UL (%)"] = None
    wcdma_atoll_cellule_df["Commentaires"] = None
    wcdma_atoll_cellule_df["Distance de réutilisation du SC (m)"] = 20000
    wcdma_atoll_cellule_df["Nombre max de voisines intra-porteuse"] = 32
    wcdma_atoll_cellule_df["Nombre max de voisines inter-technologies"] = 32
    wcdma_atoll_cellule_df["Facteur de charge UL max (%)"] = 80
    wcdma_atoll_cellule_df["Charge DL max (% Pmax)"] = 80
    wcdma_atoll_cellule_df["Puissance HSDPA disponible (dBm)"] = None
    wcdma_atoll_cellule_df["Dégagement de puissance (dB)"] = None
    wcdma_atoll_cellule_df["Nombre max de codes HS-PDSCH"] = None
    wcdma_atoll_cellule_df["Nombre max de voisines inter-porteuses"] = 32
    wcdma_atoll_cellule_df["Nombre min de codes HS-PDSCH"] = None
    wcdma_atoll_cellule_df["Allocation dynamique de puissance HSDPA"] = True
    wcdma_atoll_cellule_df["Allocation dynamique de puissance HS-SCCH"] = True
    wcdma_atoll_cellule_df["Puissance HS-SCCH (dBm)"] = None
    wcdma_atoll_cellule_df["Nombre de canaux HS-SCCH"] = None
    wcdma_atoll_cellule_df["Nombre max d'utilisateurs HSDPA"] = None
    wcdma_atoll_cellule_df["Débit UL max par utilisateur (kbps)"] = 4000
    wcdma_atoll_cellule_df["Débit DL max par utilisateur (kbps)"] = 45000
    wcdma_atoll_cellule_df["Active"] = True
    wcdma_atoll_cellule_df["Puissance DL HSUPA (dBm)"] = None
    wcdma_atoll_cellule_df["Nombre max d'utilisateurs HSUPA"] = None
    wcdma_atoll_cellule_df["Facteur de charge UL dû au HSUPA (%)"] = None
    wcdma_atoll_cellule_df["Nombre d'utilisateurs HSUPA"] = None
    wcdma_atoll_cellule_df["Facteur de réutilisation (UL)"] = None
    wcdma_atoll_cellule_df["Nombre d'utilisateurs HSDPA"] = None
    wcdma_atoll_cellule_df["Support HSPA"] = "Aucun"
    wcdma_atoll_cellule_df["Noise rise UL inter-technologies (dB)"] = None
    wcdma_atoll_cellule_df["Noise rise DL inter-technologies (dB)"] = None
    wcdma_atoll_cellule_df["ID"] = None
    wcdma_atoll_cellule_df["Support MIMO"] = "Aucun"
    wcdma_atoll_cellule_df["SC verrouillé"] = True
    wcdma_atoll_cellule_df["Algorithme du scheduler HSDPA"] = None
    wcdma_atoll_cellule_df["RSCP min (dBm)"] = None
    wcdma_atoll_cellule_df["Ordre"] = 1
    wcdma_atoll_cellule_df["Couche"] = "Macro Layer"
    wcdma_atoll_cellule_df["Offset individuel de cellule (dB)"] = 0
    wcdma_atoll_cellule_df["Marge de handover (dB)"] = 0

    wcdma_atoll_cellule_df["Puissance pilote (dBm)"] = (
        wcdma_atoll_cellule_df["Puissance pilote (dBm)"] / 10
    )

    ########################### PROCESS GSM DATA FOR ATOLL#########################

    gsm_atoll_df: pd.DataFrame = process_gsm_data(file_path)
    gsm_site_df = gsm_atoll_df[SITE_COLUMNS]
    gsm_atoll_df = gsm_atoll_df[GSM_ATOLL_COLUMNS]

    # rename columns

    gsm_atoll_df = gsm_atoll_df.rename(
        columns={
            "code": "Site",
            "name": "Emetteur",
            "Hauteur": "Hauteur (m)",
            "Azimut": "Azimut (°)",
            "band_frequence": "Bande de fréquences",
            "TRX_TCH": "Canaux",
            "number_trx_per_cell": "TRXs requis",
            "BCCH": "BCCH",
            "configuration_schema": "Configurations de schémas de codage GPRS/EDGE",
            "type_cellule": "Type de cellule",
            "BSIC": "BSIC",
        }
    )

    # Add atoll columns
    gsm_atoll_df["Activé"] = "True"
    gsm_atoll_df["DX (m)"] = 0
    gsm_atoll_df["DY (m)"] = 0
    gsm_atoll_df["Antenne"] = "OML 65deg 17dBi 6Tilt 1800MHz"
    gsm_atoll_df["Downtilt mécanique (°)"] = 0
    gsm_atoll_df["PIRE (dBm)"] = None
    gsm_atoll_df["Puissance (dBm)"] = 43
    gsm_atoll_df["Pertes émission (dB)"] = 3
    gsm_atoll_df["Rayon de calcul principal (m)"] = 15000
    gsm_atoll_df["Modèle de propagation principal"] = "Standard Propagation Model"
    gsm_atoll_df["Groupe d'hexagones"] = None
    gsm_atoll_df["Rayon hexagone (m)"] = 5000
    gsm_atoll_df["Commentaires"] = None
    gsm_atoll_df["Equipement TMA"] = None
    gsm_atoll_df["Equipement câbles"] = None
    gsm_atoll_df["Equipement émetteur"] = None
    gsm_atoll_df["Longueur de câbles en émission (m)"] = 0
    gsm_atoll_df["Longueur de câbles en réception (m)"] = 0
    gsm_atoll_df["Pertes diverses en émission (dB)"] = 0
    gsm_atoll_df["Pertes diverses en réception (dB)"] = 0
    gsm_atoll_df["Rayon de calcul étendu (m)"] = 20000
    gsm_atoll_df["Modèle de propagation étendu"] = "(aucun)"
    gsm_atoll_df["Résolution principale (m)"] = 10000
    gsm_atoll_df["Résolution étendue (m)"] = None
    gsm_atoll_df["GPRS/EDGE"] = True
    gsm_atoll_df["Mode de saut"] = None
    gsm_atoll_df["Poids AFP"] = 1
    gsm_atoll_df["Domaine de BSIC"] = "ALL BSICs"
    gsm_atoll_df["Verrouiller canaux et MAIO"] = False
    gsm_atoll_df["Verrouiller HSN"] = False
    gsm_atoll_df["Verrouiller BSIC"] = False
    gsm_atoll_df["Couche HCS"] = "Macro Layer"
    gsm_atoll_df["Nombre max de schémas de codage (non utilisé)"] = None
    gsm_atoll_df["Nombre max de voisines intra-technologie"] = None
    gsm_atoll_df["Nombre max de voisines inter-technologies"] = None
    gsm_atoll_df["Nombre max de TRXs"] = 16
    gsm_atoll_df["Downtilt électrique additionnel (°)"] = None
    gsm_atoll_df["Portée min (m)"] = None
    gsm_atoll_df["Portée max (m)"] = None
    gsm_atoll_df["Configuration de codecs"] = "Adaptive Multi-Rate"
    gsm_atoll_df["FN Offset"] = None
    gsm_atoll_df["Offset de resélection (dB)"] = 0
    gsm_atoll_df["Seuil de réception couche HCS"] = None
    gsm_atoll_df["PBCCH supporté"] = False
    gsm_atoll_df["Seuil de réception PBCCH"] = -102
    gsm_atoll_df["Offset PBCCH de resélection de cellule (dB)"] = 0
    gsm_atoll_df["ID"] = None
    gsm_atoll_df["Type d'émetteur"] = "Intra-réseau (serveur et brouilleur)"
    gsm_atoll_df["Antenne partagée"] = None
    gsm_atoll_df["Pertes réception (dB)"] = 0
    gsm_atoll_df["Facteur de bruit (dB)"] = 5
    gsm_atoll_df["Distance de réutilisation (m)"] = 20000
    gsm_atoll_df["Tilt latéral mécanique (°)"] = 0
    gsm_atoll_df["Diagramme partagé"] = None

    # Add "Nombre de TRX" equal to "TRXs requis"
    gsm_atoll_df["Nombre de TRX"] = gsm_atoll_df["TRXs requis"]
    # Replace Hauteur (m) values less than 1 with 1
    gsm_atoll_df.loc[gsm_atoll_df["Hauteur (m)"] < 1, "Hauteur (m)"] = 1

    # save_dataframe(gsm_atoll_df, "GSM_ATOLL")
    # save_dataframe(wcdma_atoll_emetteur_df, "WCDMA_ATOLL_EMETTEUR")
    # save_dataframe(wcdma_atoll_cellule_df, "WCDMA_ATOLL_CELLULE")
    # save_dataframe(lte_atoll_emetteur_df, "LTE_ATOLL_EMETTEUR")
    # save_dataframe(lte_atoll_cellule_df, "LTE_ATOLL_CELLULE")

    ################################ SITE ########################################

    site_df: pd.DataFrame = pd.concat(
        [gsm_site_df, wcdma_site_df, lte_site_df], ignore_index=True
    )
    site_df.drop_duplicates(subset=["code"], keep="first", inplace=True)
    # order by code
    site_df.sort_values(by=["code"], inplace=True)
    # rename columns
    site_df.rename(
        columns={
            "code": "Nom",
            "Longitude": "Longitude",
            "Latitude": "Latitude",
            "Hauteur": "Hauteur du support (m)",
        },
        inplace=True,
    )

    site_df["Altitude (m)"] = None
    site_df["Commentaires"] = None
    site_df["Type de support"] = "Pylône haubané"
    site_df["Nb max CEs UL"] = 1200
    site_df["Nb max CEs DL"] = 1200
    site_df["Débit Iub Backhaul max UL (kbps)"] = 300000
    site_df["Débit Iub Backhaul max DL (kbps)"] = 500000
    site_df["Equipement"] = None
    site_df["Débit max interface S1 (DL) (kbps)"] = 500000
    site_df["Débit max interface S1 (UL) (kbps)"] = 300000

    UtilsVars.final_atoll_database = convert_dfs(
        [
            gsm_atoll_df,
            wcdma_atoll_emetteur_df,
            wcdma_atoll_cellule_df,
            lte_atoll_emetteur_df,
            lte_atoll_cellule_df,
            site_df,
        ],
        [
            "GSM",
            "WCDMA_EMETTEUR",
            "WCDMA_CELLULE",
            "LTE_EMETTEUR",
            "LTE_CELLULE",
            "SITE",
        ],
    )