def join_terrain_files(origin_container, origin_hole_position_blob, origin_hole_information_blob, origin_hole_profile_blob, final_container, final_blob):
"""
Función que permite juntar archivos terrain en un unico archivo con resumen del pozo
Parámetros
----------
origin_container: str
Nombre del contenedor donde se encuentra el archivo a limpiar.
origin_hole_position_blob: str
Nombre del archivo que contiene la posición de los pozos.
origin_hole_information_blob: str
Nombre del archivo que contiene la información de los pozos.
origin_hole_profile_blob: str
Nombre del archivo que contiene el perfil de los pozos.
final_container: str
Nombre del contenedor donde se guardará el archivo limpio.
final_blob: str
Nombre del archivo que se guardará en el contenedor final.
Returns
-------
None
"""
# Read terrain hole position file
conn_origin_container = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_container, blob_name=origin_hole_position_blob)
download_origin_blob = conn_origin_container.download_blob().readall()
data = json.loads(download_origin_blob)
df_terrain_hole_position = pd.DataFrame(data['values'], columns=data['headers'])
# Read terrain hole information file
conn_origin_container = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_container, blob_name=origin_hole_information_blob)
download_origin_blob = conn_origin_container.download_blob().readall()
data = json.loads(download_origin_blob)
df_terrain_hole_information = pd.DataFrame(data['values'], columns=data['headers'])
# Read terrain hole profile file
conn_origin_container = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=origin_container, blob_name=origin_hole_profile_blob)
download_origin_blob = conn_origin_container.download_blob().readall()
data = json.loads(download_origin_blob)
df_terrain_hole_profile = pd.DataFrame(data['values'], columns=data['headers'])
# Merge files
df_terrain_hole_profile['hole_id'] = df_terrain_hole_profile['hole_id'].replace('N\\A',np.nan).astype(float)
df_terrain_hole_profile['machine_id'] = df_terrain_hole_profile['machine_id'].replace('N\\A',np.nan).astype(float)
df_puntos_terrain = df_terrain_hole_profile.merge(df_terrain_hole_position, right_on=['hole_id','machine_id'], left_on=['hole_id', 'machine_id'], how='left', indicator=True, suffixes=('_puntos', '_posiciones'))
df_puntos_terrain = df_puntos_terrain.loc[df_puntos_terrain['_merge'] == 'both']
df_puntos_terrain = df_puntos_terrain.drop(columns=['_merge'])
df_puntos_terrain_completo = df_puntos_terrain.merge(df_terrain_hole_information, right_on=['hole_id','machine_id'], left_on=['hole_id', 'machine_id'], how='left', indicator=True, suffixes=('_cruce', '_informacion'))
df_puntos_terrain_completo = df_puntos_terrain_completo.loc[df_puntos_terrain_completo['_merge'] == 'both']
# Bench correction process
df_puntos_terrain_completo = df_puntos_terrain_completo[
['hole_id', 'machine_id', 'hole_start',
'start_x', 'start_y', 'start_z', 'end_x', 'end_y', 'end_z',
'design_x', 'design_y', 'design_z', 'time_start', 'time_end_informacion',
'name', 'collarelevation', 'depth', 'design_depth'
]
]
df_puntos_terrain_completo = df_puntos_terrain_completo.drop_duplicates()
multiples_of_16 = [x for x in range(800, 3000) if x % 16 == 0]
df_puntos_terrain_completo['bench'] = df_puntos_terrain_completo.apply(lambda x: calculateBenchTerrrain(x, multiples_of_16), axis=1)
df_puntos_terrain_completo['bench'] = df_puntos_terrain_completo['bench']
# Write file to blob
blob = BlobClient.from_connection_string(conn_str=BLOB_CONNECT_STRING, container_name=final_container, blob_name=final_blob)
json_data = df_puntos_terrain_completo.to_json(index=False, orient='table')
blob.upload_blob(json_data, overwrite=True)