Я делаю рабочий процесс в Snakemake для конвейера секвенирования. Я выполнил первые несколько правил (прочитал в fastq's, удалил PhiX путем сопоставления и фильтрации для несопоставленных чтений). Важный шаг, который доставляет мне неприятности, заключается в том, что мне нужно индивидуально демультиплексировать мои объединенные библиотеки с помощью flexbar. Мои необработанные чтения - это, по сути, пул отдельных образцов, которые можно идентифицировать по встроенным штрих-кодам P5 (используя flexbar). Ввод Flexbar выглядит следующим образом:
flexbar -t {outputID} -r {read1} -p {read2} -b {barcode_file}
Где файл штрих-кода выглядит примерно так:
>A1
ACTG
>B1
ACCCA
>C1
GTTGGAA
Мои файлы fastq, которые будут вводиться как {read1} и {read2} выглядит примерно так:
PooledSample1_filtered_R1.fastq
PooledSample1_filtered_R2.fastq
PooledSample2_filtered_R1.fastq
PooledSample2_filtered_R2.fastq
В каждом «PooledSample» у меня будет два или три отдельных сэмпла, которые FlexB назначит соответственно на основе файла штрих-кодов.
Например, если бы я должен был выполнить следующее:
flexbar -t PooledSample1 -r PooledSample1_filtered_R1.fastq -p PooledSample1_filtered_R2.fastq -b barcodes.fasta
приведет к 6 различным выходным файлам, которые будут названы в соответствии со своими штрих-кодами, содержащие чтения, которые были назначены этим штрих-кодам соответственно:
PooledSample1_A1_1.fastq PooledSample1_A1_2.fastq
PooledSample1_B1_1.fastq PooledSample1_B1_2.fastq
PooledSample1_C1_1.fastq PooledSample1_C1_2.fastq
Теперь я хочу переименовать эти файлы, чтобы отразить их индивидуальные идентификаторы образцов. Например, я знаю, что для PooledSample1 все показания, назначенные штрих-коду A1, будут индивидуальны_XX, все показания, назначенные B1, будут индивидуальны_XY, а все присвоения C1 будут индивидуальны_YY.
(Вы можете подумать, что я мог бы просто измените имена в barcodes.fasta, но это невозможно, потому что для PooledSample2 также есть чтения, назначенные A1, но с другим индивидуальным_ID.)
Также возможно, что нет чтения в PooledSample, который состоит из определенного образца, поэтому эти результирующие файлы будут пустыми (но все же будут созданы). Это нормально, потому что иногда существует небольшое количество операций чтения, назначенных штрих-кодам, которых на самом деле нет в этом пуле. Поэтому я оставляю это, создавая файл (пустой или нет) для всех возможных штрих-кодов, затем я могу проверить, как man, какие и почему чтения могут быть назначены неправильно.
Таким образом, мое решение было бы тогда создать список или файл tsv, который соединяет индивидуальный_идентификатор со штрих-кодом.
Pool A1 B1 C1
PooledSample1 XY YY noReads
PooledSample2 YY noReads XX
PooledSample3 XX XY YY
И затем создайте правило, которое принимает все выходные файлы flexbar и соответственно переименовывает их. Файлы, которые не имеют ни одного имени в названии, не должны быть переименованы, поскольку они в основном являются пустыми выводами гибкой панели.
Я хочу, чтобы мое правило взяло файлы из flexbar и проверило PooledSampleID (мой подстановочный знак {samples} из начальной части моего конвейера) по идентификатору штрих-кода в его имени файла, а затем переименовали.
Итак, из приведенного выше примера, выполняя flexbar для PooledSample1:
PooledSample1_A1_1.fastq ---> XY_1.fastq
PooledSample1_A1_2.fastq ---> XY_2.fastq
PooledSample1_B1_1.fastq ---> YY_1.fastq
PooledSample1_B1_2.fastq ---> YY_2.fastq
PooledSample1_C1_1.fastq ---> noReads_1.fastq
PooledSample1_C1_2.fastq ---> noReads_2.fastq
Если бы я имел дело только с одним PooledSample, я решил, что могу составить список возможных штрих-кодов в файле змеи, а затем вызвать их во входных данных в качестве дополнительных подстановочных знаков:
Pooled1 = ['XY', 'YY', 'noReads']
Barcode = ['A1', 'B1', 'C1']
rule all:
input:
expand("path/to/renamed/{files}.fastq", files=Pooled1),
rule rename:
input:
expand("path/to/demultiplexed/PooledSample1_{barcodes}_1.fastq", barcodes=Barcode)
output:
expand("path/to/renamed/{files}.fastq, files=Pooled1)
shell:
"mv {input} {output}"
Но это не будет работать по нескольким причинам. Он попытается создать девять файлов, по 3 для каждого из штрих-кодов. Еще более важно то, что у меня будет более одного пула сэмплов, поэтому вместо имени {PooledSample1} у него будет другой подстановочный знак в переименовании правила.
Я нашел кое-что об использовании dict (zip ()), но я не уверен, как назвать это подстановочным знаком.
Я также не уверен, что он обрабатывает штрих-коды как Подстановочные знаки, так как в моем правиле flexbar (непосредственно ранее) я вообще не вызываю эти подстановочные знаки явно, так как flexbar выплевывает вводные данные, основываясь на указанном им файле штрих-кодов.
Также, если я должен был сделать это в соответствии с В приведенном выше примере с псевдо мне понадобится второе правило переименования для другого чтения (_2), что на данный момент хорошо, так как вряд ли это проблема по сравнению с тем, что я сейчас пытаюсь выяснить.
Я буду использовать эти переименованные файлы в последующем рабочем процессе. Любая помощь будет так цениться.