Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
uses: actions/checkout@v2

- name: Cache singularity images
uses: actions/cache@v2
uses: actions/cache@v4.2.2
with:
path: work/singularity
key: singularity-${{ hashFiles('config/nextflow_config/singularity.config') }}
Expand Down
25 changes: 21 additions & 4 deletions bin/get_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
import argparse
import os
import json
from operator import itemgetter
from pathlib import Path
import yaml


class RunfolderInfo:
def __init__(self, runfolder, bcl2fastq_outdir):
self.runfolder = runfolder
self.run_info = self.read_run_info()
self.run_parameters = self.read_run_parameters()
self.stats_json = self.read_stats_json(bcl2fastq_outdir)
self.description_and_identifier = OrderedDict()
Expand Down Expand Up @@ -42,6 +44,14 @@ def find(self, d, tag):
for i in v:
yield from self.find(i, tag)

def read_run_info(self):
run_info = os.path.join(self.runfolder, "RunInfo.xml")
if os.path.exists(run_info):
with open(run_info) as f:
return xmltodict.parse(f.read())
else:
return None

def read_run_parameters(self):
alt_1 = os.path.join(self.runfolder, "runParameters.xml")
alt_2 = os.path.join(self.runfolder, "RunParameters.xml")
Expand Down Expand Up @@ -109,18 +119,25 @@ def get_read_cycles(self):
read_counter = 1
index_counter = 1
try:
for read_info in self.stats_json["ReadInfosForLanes"][0]["ReadInfos"]:
if read_info["IsIndexedRead"]:
reads = self.run_info["RunInfo"]["Run"]["Reads"]["Read"]

# Handle potential cases with only one Read element
if isinstance(reads, dict):
reads = [reads] # Wrap it in a list to make it iterable

for read_info in sorted(reads, key=itemgetter("@Number")):
if read_info["@IsIndexedRead"] == "Y":
read_and_cycles[f"Index {index_counter} (bp)"] = read_info[
"NumCycles"
"@NumCycles"
]
index_counter += 1
else:
read_and_cycles[f"Read {read_counter} (bp)"] = read_info[
"NumCycles"
"@NumCycles"
]
read_counter += 1
return read_and_cycles

except TypeError:
return read_and_cycles

Expand Down
6 changes: 0 additions & 6 deletions main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,6 @@ def helpMessage() {
"""
}

def printVersion() {

log.info "seqreports v${workflow.manifest.version}"

}

printVersion()

if (params.help || !params.run_folder){
Expand Down
5 changes: 5 additions & 0 deletions tests/unit_tests/test_get_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,8 @@ def test_get_read_cycles(runfolder_info):
def test_get_info(runfolder_info):
results = runfolder_info.get_info()
assert len(results) == 9


def test_read_run_info(runfolder_info):
run_info = runfolder_info.read_run_info()
assert len(run_info["RunInfo"]["Run"]["Reads"]["Read"]) == 4
Loading