У меня есть JSON, который выглядит следующим образом
{
"barcodes": {
"0004F--0004R": {
"Barcode UID": "4",
"Sample ID": "10887581",
"For Barcode Name": "0004F",
"For Barcode Sequence": "GGTAGTGTGTATCAGTACATG",
"Rev Barcode Name": "0004R",
"Rev Barcode Sequence": "GGTAGTGTGTATCAGTACATG",
"Genes Sequenced": "",
"Ethnicity": "",
"laa_params": {
"--minLength": "3000",
"--ignoreEnds": "60",
"--maxReads": "2500",
"--maxPhasingReads": "500"
}
},
"0014F--0014R": {
"Barcode UID": "14",
"Sample ID": "10895675",
"For Barcode Name": "0014F",
"For Barcode Sequence": "GGTAGCGTCTATATACGTATA",
"Rev Barcode Name": "0014R",
"Rev Barcode Sequence": "GGTAGCGTCTATATACGTATA",
"Genes Sequenced": "A/B/C",
"Ethnicity": "British/Irish",
"laa_params": {
"--minLength": "3000",
"--ignoreEnds": "60",
"--maxReads": "2500",
"--maxPhasingReads": "500"
}
},
"0018F--0018R": {
"Barcode UID": "18",
"Sample ID": "10896709",
"For Barcode Name": "0018F",
"For Barcode Sequence": "GGTAGCATCACTACGCTAGAT",
"Rev Barcode Name": "0018R",
"Rev Barcode Sequence": "GGTAGCATCACTACGCTAGAT",
"Genes Sequenced": "B/C",
"Ethnicity": "British/Irish",
"laa_params": {
"--minLength": "3000",
"--ignoreEnds": "60",
"--maxReads": "2500",
"--maxPhasingReads": "500"
}
}
}
}
Я использую это JSON для создания файла фаста, где я разделил название штрих-кода "0014F - 0014R" на два половинки. Каждая половина помещается в файл, а затем соответствующая последовательность под ним примерно так:
>0014F
GGTAGCGTCTATATACGTATA
>0014R
GGTAGCGTCTATATACGTATA
Я делаю это, используя Groovy, код для этого:
// Load JSON
// cfg_file is the JSON
def analysis_config = jsonSlurper.parse(cfg_file)
// Create Keyset of "barcodes"
barcodes = Channel.from(analysis_config.barcodes.keySet())
// Create fasta:
new File('barcodes.fasta').withOutputStream { out ->
analysis_config.barcodes.each { barcode ->
def (fname, revname) = barcode.key.split('--')
out << ">$fname\n${barcode.value['For Barcode Sequence']}\n"
out << ">$revname\n${barcode.value['Rev Barcode Sequence']}\n"
}
}
Я хочу изменить этот лог c так, чтобы, если "genes sequenced" пуст, пропустите этот штрих-код.
В "0004F - 0004R" нет секвенированных генов. Как я могу реализовать эту логику c?
В Python вы можете просто сделать:
if not barcode['genessequenced']:
continue
... и он пропустит этот штрих-код. По сути, я Python программист и использую Nextflow, который использует Groovy в качестве базового языка. Помощь будет принята с благодарностью.
ПРИМЕЧАНИЕ
У меня такое чувство, что мне нужно изменить всю логику c. Текущий поток:
- Создание набора ключей () всех штрих-кодов
- Заполните каждый последовательностями
И поток теперь должен быть: 1. Создать keySet () штрих-кодов с «секвенированными генами» 2. Заполните каждый последовательностями
Итак, barcodes = Channel.from(analysis_config.barcodes.keySet())
есть идеи, как мне добавить эти логики c в это?
Что-то вроде:
barcodes = Channel.from(analysis_config.barcodes.[if "Genes Sequenced"].keySet())