Carlos Fernandez-Lozano

38 papers C 2Journal 25Unranked 11
YearRankTypeTitle / Venue / Authors
2025 J jnl
Multim. Tools Appl.
Enrique Fernández-Blanco, Brais Galdo, Carlos Fernandez-Lozano, Alejandro Pazos, Daniel Rivero
2025 J jnl
Neural Comput. Appl.
David Vázquez-Lema, Eduardo Mosqueira-Rey, Elena Hernández-Pereira, Carlos Fernandez-Lozano, Fernando Seara-Romera, Jorge Pombo-Otero
2024 conf
CIBB
Diego Fernández-Edreira, Jose Liñares-Blanco, Carlos Fernandez-Lozano
2024 J jnl
J. Cheminformatics
Paula Carracedo-Reboredo, Eider Aranzamendi, Shan He, Sonia Arrasate, Cristian R. Munteanu, Carlos Fernandez-Lozano, Nuria Sotomayor, Esther Lete, Humberto González Díaz
2024 J jnl
CoRR
Carlos Fernandez-Lozano, Pablo Hervella, Virginia Mato Abad, Manuel Rodríguez Yáñez, Sonia Suárez Garaboa, Iria Lopez-Dequidt, Ana Estany-Gestal, Tomás Sobrino, Francisco Campos, José Castillo, Santiago Rodríguez Yáñez, Ramón Iglesias-Rey
2024 J jnl
CoRR
David Vázquez-Lema, Eduardo Mosqueira-Rey, Elena Hernández-Pereira, Carlos Fernandez-Lozano, Fernando Seara-Romera, Jorge Pombo-Otero
2022 conf
XoveTIC
Francisco Cedrón, Michael Añon-Valera, Sara Álvarez González, Carlos Fernandez-Lozano, Adrián Carballal
2022 J jnl
PeerJ Comput. Sci.
Adrián Carballal, J. Pablo Galego-Carro, Nereida Rodriguez-Fernandez, Carlos Fernandez-Lozano
2021 J jnl
CoRR
Enrique Fernández-Blanco, Carlos Fernandez-Lozano, Alejandro Pazos, Daniel Rivero
2021 conf
MIE
Jose Liñares-Blanco, Carlos Fernandez-Lozano, José A. Seoane, Guillermo López-Campos
2021 J jnl
Expert Syst. Appl.
Diego Fernández-Edreira, Jose Liñares-Blanco, Carlos Fernandez-Lozano
2021 J jnl
PeerJ Comput. Sci.
Jose Liñares-Blanco, Alejandro Pazos, Carlos Fernandez-Lozano
2020 J jnl
Entropy
Adrián Carballal, Carlos Fernandez-Lozano, Nereida Rodriguez-Fernandez, Iria Santos, Juan Romero
2020 J jnl
PeerJ Comput. Sci.
Alba Arceo-Vilas, Carlos Fernandez-Lozano, Salvador Pita, Sonia Pértega Díaz, Alejandro Pazos
2020 J jnl
J. Exp. Theor. Artif. Intell.
Daniel Rivero, Enrique Fernández-Blanco, Carlos Fernandez-Lozano, Alejandro Pazos
2020 J jnl
Neural Comput. Appl.
Adrián Carballal, Carlos Fernandez-Lozano, Jónathan Heras, Juan Romero
2019 J jnl
CoRR
Enrique Fernández-Blanco, Daniel Rivero, Marcos Gestal, Carlos Fernandez-Lozano, Norberto Ezquerra, Cristian R. Munteanu, Julián Dorado
2019 J jnl
Neuroinformatics
Gadea Mata, Miroslav Radojevic, Carlos Fernandez-Lozano, Ihor Smal, Niels Werij, Miguel Morales, Erik Meijering, Julio Rubio
2019 J jnl
Complex.
Adrián Carballal, Carlos Fernandez-Lozano, Nereida Rodriguez-Fernandez, Luz Castro, Antonino Santos
2019 J jnl
CoRR
Carlos Fernandez-Lozano, Ruben F. Cuinas, José A. Seoane, Enrique Fernández-Blanco, Julián Dorado, Cristian R. Munteanu
2018 C conf
DATA
Carlos Fernandez-Lozano, Rafael Alonso Valente, Manuel Fidalgo Díaz, Alejandro Pazos
2018 J jnl
Biomed. Signal Process. Control.
Adrián Carballal, Francisco Javier Nóvoa, Carlos Fernandez-Lozano, Marcos García-Guimaraes, Guillermo López-Campos, Ramón Calviño-Santos, José Manuel Vázquez-Naya, Alejandro Pazos
2018 conf
SOCO-CISIS-ICEUTE
Marcos Gestal, Carlos Fernandez-Lozano, Cristian R. Munteanu, Juan R. Rabuñal, Julián Dorado
2018 C conf
DATA
Carlos Fernandez-Lozano, Jose Liñares-Blanco, Marcos Gestal, Julián Dorado, Alejandro Pazos
2017 J jnl
Comput. Biol. Medicine
Raúl Alonso-Calvo, Sergio Paraiso-Medina, David Pérez-Rey, Enrique Alonso-Oset, Ruud van Stiphout, Sheng Yu, Marian Taylor, Francesca Buffa, Carlos Fernandez-Lozano, Alejandro Pazos, Victor Maojo
2017 J jnl
Expert Syst. Appl.
Yong Liu, Shaoxun Tang, Carlos Fernandez-Lozano, Cristian R. Munteanu, Alejandro Pazos, Yi-zun Yu, Zhiliang Tan, Humberto González Díaz
2015 J jnl
Expert Syst. Appl.
Cristian R. Munteanu, Carlos Fernandez-Lozano, Virginia Mato Abad, Salvador Pita Fernández, Juan Alvarez-Linera, Juan Antonio Hernández Tamames, Alejandro Pazos
2015 J jnl
J. Cheminformatics
Georgia Tsiliki, Cristian R. Munteanu, José A. Seoane, Carlos Fernandez-Lozano, Haralambos Sarimveis, Egon L. Willighagen
2015 J jnl
J. Chem. Inf. Model.
Cristian R. Munteanu, António César Pimenta, Carlos Fernandez-Lozano, André Melo, M. N. D. S. Cordeiro, Irina S. Moreira
2015 J jnl
Soft Comput.
Carlos Fernandez-Lozano, José Antonio Seoane Fernández, Marcos Gestal, Tom R. Gaunt, Julián Dorado, Colin Campbell
2013 conf
BIOINFORMATICS
Carlos Fernandez-Lozano, José A. Seoane, Pablo Mesejo, Youssef S. G. Nashed, Stefano Cagnoni, Julián Dorado
2013 conf
VISAPP (1)
Carlos Fernandez-Lozano, José A. Seoane, Marcos Gestal, Daniel Rivero, Julián Dorado, Alejandro Pazos
2013 conf
MedInfo
Carlos Fernandez-Lozano, Guillermo López-Campos, José A. Seoane, Victoria López-Alonso, Julián Dorado, Fernando Martín-Sánchez, Alejandro Pazos
2013 J jnl
Int. J. Data Anal. Tech. Strateg.
Carlos Fernandez-Lozano, Alvaro Rodríguez-Tajes, Cristina Ruíz Romero, José A. Seoane
2013 conf
IWANN (1)
Carlos Fernandez-Lozano, José A. Seoane, Marcos Gestal, Tom R. Gaunt, Colin Campbell
2013 conf
BIOSTEC (Selected Papers)
Carlos Fernandez-Lozano, José A. Seoane, Pablo Mesejo, Youssef S. G. Nashed, Stefano Cagnoni, Julián Dorado
2012 conf
VISAPP (2)
Alvaro Rodríguez, Carlos Fernandez-Lozano, José Antonio Seoane Fernández, Juan R. Rabuñal, Julián Dorado
2011 conf
ISSPIT
Alvaro Rodríguez, Carlos Fernandez-Lozano, José Antonio Seoane Fernández, Juan R. Rabuñal, Julián Dorado
redb/s3_utils.py
← Index redb/s3_utils.py python
"""
S3 and file utility functions for REDB.

Contains MinIO/S3 client creation, S3 key generation,
file download, and archive extraction helpers.
"""
import os
import tempfile
from typing import Optional, List

from minio import Minio
from minio.error import S3Error


def get_minio_client():
    """Create and return a Minio client using credentials from .env file"""
    return Minio(
        endpoint=os.getenv("S3_ENDPOINT"),
        access_key=os.getenv("S3_ACCESS_KEY"),
        secret_key=os.getenv("S3_SECRET_KEY"),
        secure=os.getenv("S3_SECURE", "false").lower() == "true"
    )


def generate_s3_key_from_hash(sample_hash: str) -> str:
    """
    Generate S3 key from hash using sharding structure.
    Example: 09f7d02a3c2382199458c98a62b045145ee54ab6aba86166aecf3d10c3c1444c
    becomes: 09/f7/09f7d02a3c2382199458c98a62b045145ee54ab6aba86166aecf3d10c3c1444c.zip
    """
    if len(sample_hash) < 4:
        raise ValueError(f"Hash too short for sharding: {sample_hash}")

    # Create sharded path: first 2 chars / next 2 chars / full_hash.zip
    return f"{sample_hash[:2]}/{sample_hash[2:4]}/{sample_hash}.zip"


def download_s3_object(s3_bucket: str, s3_key: str, temp_dir: str, logger=None) -> Optional[str]:
    """
    Download an object from S3 to a local temporary directory and return the local path.
    If the .zip file is not found, automatically tries .7z as a fallback for legacy uploads.
    """
    try:
        minio_client = get_minio_client()
        local_path = os.path.join(temp_dir, os.path.basename(s3_key))

        # Download the file
        minio_client.fget_object(s3_bucket, s3_key, local_path)

        return local_path
    except S3Error as e:
        # If .zip not found and error is NoSuchKey, try .7z fallback
        if e.code == 'NoSuchKey' and s3_key.endswith('.zip'):
            s3_key_7z = s3_key[:-4] + '.7z'  # Replace .zip with .7z
            if logger:
                logger.info(f".zip not found, trying .7z fallback: {s3_key_7z}")
            try:
                local_path_7z = os.path.join(temp_dir, os.path.basename(s3_key_7z))
                minio_client.fget_object(s3_bucket, s3_key_7z, local_path_7z)
                if logger:
                    logger.info(f"Successfully downloaded .7z fallback: {s3_key_7z}")
                return local_path_7z
            except S3Error as e2:
                if logger:
                    logger.error(f"Failed to download S3 object {s3_key} (tried both .zip and .7z): {e2}")
                else:
                    print(f"[ERROR] Failed to download S3 object {s3_key} (tried both .zip and .7z): {e2}")
                return None
        else:
            if logger:
                logger.error(f"Failed to download S3 object {s3_key}: {e}")
            else:
                print(f"[ERROR] Failed to download S3 object {s3_key}: {e}")
            return None


def extract_fat_slices(macho, output_dir: str, logger) -> List[tuple]:
    """
    Extract slices from FAT Mach-O binary using machofile's dump_slices() API.

    Args:
        macho: Parsed machofile.UniversalMachO object
        output_dir: Directory to write slice files
        logger: Logger instance

    Returns:
        List of (arch_name, slice_path, slice_sha256, slice_md5, slice_sha1) tuples
    """
    result = []
    try:
        # Use machofile's dump_slices API (v2026.2.5+)
        slices = macho.dump_slices(output_dir=output_dir)
        logger.debug(f"Extracted {len(slices)} slices from FAT binary")

        for arch_name, slice_path in slices:
            # Get hash info for this slice from machofile
            general_info = macho.get_general_info(arch=arch_name)
            slice_sha256 = general_info.get('SHA256')
            slice_md5 = general_info.get('MD5')
            slice_sha1 = general_info.get('SHA1')
            result.append((arch_name, slice_path, slice_sha256, slice_md5, slice_sha1))
            logger.debug(f"Slice {arch_name}: {slice_sha256}")

    except Exception as e:
        logger.error(f"Error extracting FAT slices: {e}")

    return result