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", ], )