Как мне использовать эту функцию 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}. Я продолжаю получать все типы ошибок, поскольку я возился с ней, и не знаю, как двигаться дальше.