Как мне использовать эту функцию python в разделе params моего правила Snakemake?

Я пытаюсь выяснить, как извлечь информацию о полосе чтения группы из файла fastq, а затем использовать эту строку в моем GATK AddOrReplaceReadGroups Snakemake ниже (ниже). Я написал короткую функцию Python (в верхней части правила), чтобы выполнить эту операцию, но не могу понять, как на самом деле использовать ее в сценарии, чтобы я мог получить доступ к строковому выводу (например, «ABCHGSX35:2") функции в данном файле fastq в моей команде оболочки GATK. По сути, я хочу передать {params.PathToReadR1} в функцию extract_lane_info, но не могу понять, как их правильно интегрировать.

Открыт для любых решений поставленной проблемы, или если есть совершенно более эффективный и другой способ достижения того же результата (получение информации о дорожке группы чтения в качестве значения параметра), это тоже было бы здорово. Спасибо за любую помощь.

      def extract_lane_info(file_path):
    # Run the bash command using subprocess.run()
    elements = subprocess.run(["zcat", file_path], stdout=subprocess.PIPE).stdout.split(b"\n")[0].split(b":")[2:4]
    # Extract the lane information from the output of the command using a regular expression
    read_group = elements[0].decode().strip("'")
    string_after = elements[1].decode().strip("'")
    elements = read_group + ":" + string_after
    return(elements)  

rule AddOrReplaceReadGroups:
    input:
         "results/{species}/bwa/merged/{read}_pese.bam",
 
     output:
        "results/{species}/GATK/AddOrReplace/{read}.pese.bwa_mem.addRG.bam",

    threads: config["trimmmomatic"]["cpu"]
    
    log:
        "results/{species}/GATK/AddOrReplace/log/{read}_AddOrReplace.stderrs"
    
    message:
        "Running AddOrReplaceReadGroups on {wildcards.read}"

    conda: 
        config["CondaEnvs"]
    
    params:
        ReadGroupID = lambda wildcards: final_Prefix_ReadGroup[wildcards.read],
        PathToReadR1 = lambda wildcards: final_Prefix_RawReadPathR1[wildcards.read],
        LIBRARY = lambda wildcards: final_Prefix_ReadGroupLibrary[wildcards.read],
    
    shell:"gatk AddOrReplaceReadGroups -I {input} -O {output} -ID {params.ReadGroupID}.1 -LB {params.LIBRARY} -PL illumina -PU {input.lane_info}:{params.ReadGroupID} -SM {params.ReadGroupID} --SORT_ORDER 'coordinate' --CREATE_INDEX true 2>> {log}"

По сути, {params.PathToReadR1} будет "path/to/file.fastq.gz", и я хочу, чтобы этот файл был введен в функцию extract_lane_info, а затем вывод этой функции использовался в разделе -PU файла команду оболочки (например, {params.lane_info}. Я продолжаю получать все типы ошибок, поскольку я возился с ней, и не знаю, как двигаться дальше.

0 ответов

Другие вопросы по тегам