From e4681f3bc5df9281fc746a8359ed9f5caac97f90 Mon Sep 17 00:00:00 2001 From: Barry digby Date: Thu, 3 Sep 2026 13:29:36 +0100 Subject: [PATCH] v1.0.2: multi-mappers to report, fix miRNA | RBP to use hg38 not circRNA column --- assets/manuscript.svg | 2 +- ... execution_report_2026-09-03_12-55-30.txt} | 7 +- .../execution_report_2026-09-03_12-55-48.txt | 118 +++++++++++ .../execution_report_2026-08-20_20-04-22.txt | 24 --- .../execution_report_2026-09-03_12-56-19.txt | 135 ++++++++++++ .../execution_report_2026-08-20_20-05-04.txt | 24 --- .../execution_report_2026-09-03_12-57-16.txt | 161 ++++++++++++++ .../execution_report_2026-08-20_20-06-05.txt | 24 --- .../execution_report_2026-09-03_12-58-25.txt | 176 ++++++++++++++++ .../execution_report_2026-08-20_20-07-26.txt | 24 --- .../execution_report_2026-09-03_13-00-01.txt | 198 ++++++++++++++++++ config.py | 46 +++- docs/conf.py | 2 +- docs/outputs.rst | 17 +- pyproject.toml | 2 +- uv.lock | 2 +- 16 files changed, 850 insertions(+), 112 deletions(-) rename benchmarks/performance/results/bench_100/{execution_report_2026-08-20_21-19-58.txt => execution_report_2026-09-03_12-55-30.txt} (98%) create mode 100644 benchmarks/performance/results/bench_1000/execution_report_2026-09-03_12-55-48.txt delete mode 100644 benchmarks/performance/results/bench_10000/execution_report_2026-08-20_20-04-22.txt create mode 100644 benchmarks/performance/results/bench_10000/execution_report_2026-09-03_12-56-19.txt delete mode 100644 benchmarks/performance/results/bench_100k/execution_report_2026-08-20_20-05-04.txt create mode 100644 benchmarks/performance/results/bench_100k/execution_report_2026-09-03_12-57-16.txt delete mode 100644 benchmarks/performance/results/bench_200k/execution_report_2026-08-20_20-06-05.txt create mode 100644 benchmarks/performance/results/bench_200k/execution_report_2026-09-03_12-58-25.txt delete mode 100644 benchmarks/performance/results/bench_300k/execution_report_2026-08-20_20-07-26.txt create mode 100644 benchmarks/performance/results/bench_300k/execution_report_2026-09-03_13-00-01.txt diff --git a/assets/manuscript.svg b/assets/manuscript.svg index 8aa5141..e989457 100644 --- a/assets/manuscript.svg +++ b/assets/manuscript.svg @@ -29,7 +29,7 @@ inkscape:document-units="mm" showguides="true" inkscape:zoom="0.9639402" - inkscape:cx="371.39233" + inkscape:cx="370.87363" inkscape:cy="453.34763" inkscape:window-width="2123" inkscape:window-height="1281" diff --git a/benchmarks/performance/results/bench_100/execution_report_2026-08-20_21-19-58.txt b/benchmarks/performance/results/bench_100/execution_report_2026-09-03_12-55-30.txt similarity index 98% rename from benchmarks/performance/results/bench_100/execution_report_2026-08-20_21-19-58.txt rename to benchmarks/performance/results/bench_100/execution_report_2026-09-03_12-55-30.txt index e1bd452..99ea066 100644 --- a/benchmarks/performance/results/bench_100/execution_report_2026-08-20_21-19-58.txt +++ b/benchmarks/performance/results/bench_100/execution_report_2026-09-03_12-55-30.txt @@ -1,7 +1,7 @@ pycircdb execution report ======================================== -Timestamp : 2026-08-20 21:19:58 -pycircdb version : 0.1.5 +Timestamp : 2026-09-03 12:55:30 +pycircdb version : 1.0.1 Database version : 1.0 Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_100.json @@ -58,6 +58,7 @@ Mapping Statistics circpedia [84/100] 84.0% cscd [95/100] 95.0% exorbase [77/100] 77.0% + FASTA arraystar [33/100] 33.0% circRNADb [52/100] 52.0% @@ -65,6 +66,7 @@ Mapping Statistics circbase [49/100] 49.0% circpedia [84/100] 84.0% cscd [95/100] 95.0% + miRNA chr10 [7/100] 7.0% chr11 [3/100] 3.0% @@ -85,6 +87,7 @@ Mapping Statistics chr7 [7/100] 7.0% chr8 [4/100] 4.0% chr9 [1/100] 1.0% + RBP chr10 [7/100] 7.0% chr11 [3/100] 3.0% diff --git a/benchmarks/performance/results/bench_1000/execution_report_2026-09-03_12-55-48.txt b/benchmarks/performance/results/bench_1000/execution_report_2026-09-03_12-55-48.txt new file mode 100644 index 0000000..b935161 --- /dev/null +++ b/benchmarks/performance/results/bench_1000/execution_report_2026-09-03_12-55-48.txt @@ -0,0 +1,118 @@ +pycircdb execution report +======================================== +Timestamp : 2026-09-03 12:55:48 +pycircdb version : 1.0.1 +Database version : 1.0 +Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_1000.json + +Global Parameters +-------------------- + max_tasks: 1 + output_dir: benchmarks/performance/results/bench_1000 + tmp_dir: tmp + +Samples +-------------------- + bench_1000: + file_path : benchmarks/performance/inputs/bench_1000.txt + reference : hg19 + +Databases & Algorithms +-------------------- + Annotation databases : arraystar, circatlas, circbank, circbase, circpedia, circrnadb, cscd, exorbase + FASTA databases : arraystar, circbank, circbase, circpedia, circrnadb, cscd + miRNA algorithms : miRanda, PITA, TargetScan + +Database Provenance +-------------------- + Annotation + arraystar : hg19, version 2.0, accessed January 2025 + circatlas : hg38, version 3.0, accessed January 2026 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + exorbase : hg38, version 1.0, accessed May 2026 + FASTA + arraystar : hg19, version 2.0, accessed January 2025 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + miRNA + circnet : hg19, version 2.0, accessed January 2026 + cscd : hg38, version 2.0, accessed January 2026 + RBP + cscd : hg38, version 2.0, accessed January 2026 + +Mapping Statistics +------------------------------ + Annotation + arraystar [270/1000] 27.0% + circRNADb [552/1000] 55.2% + circatlas [939/1000] 93.9% + circbank [950/1000] 95.0% + circbase [458/1000] 45.8% + circpedia [861/1000] 86.1% + cscd [958/1000] 95.8% + exorbase [762/1000] 76.2% + + FASTA + arraystar [270/1000] 27.0% + circRNADb [552/1000] 55.2% + circbank [950/1000] 95.0% + circbase [458/1000] 45.8% + circpedia [861/1000] 86.1% + cscd [958/1000] 95.8% + + miRNA + chr10 [40/1000] 4.0% + chr11 [46/1000] 4.6% + chr12 [44/1000] 4.4% + chr13 [23/1000] 2.3% + chr14 [29/1000] 2.9% + chr15 [40/1000] 4.0% + chr16 [37/1000] 3.7% + chr17 [41/1000] 4.1% + chr18 [24/1000] 2.4% + chr19 [21/1000] 2.1% + chr1 [93/1000] 9.3% + chr20 [24/1000] 2.4% + chr21 [10/1000] 1.0% + chr22 [11/1000] 1.1% + chr2 [94/1000] 9.4% + chr3 [56/1000] 5.6% + chr4 [57/1000] 5.7% + chr5 [56/1000] 5.6% + chr6 [44/1000] 4.4% + chr7 [56/1000] 5.6% + chr8 [44/1000] 4.4% + chr9 [51/1000] 5.1% + chrX [23/1000] 2.3% + + RBP + chr10 [40/1000] 4.0% + chr11 [46/1000] 4.6% + chr12 [44/1000] 4.4% + chr13 [23/1000] 2.3% + chr14 [29/1000] 2.9% + chr15 [40/1000] 4.0% + chr16 [37/1000] 3.7% + chr17 [41/1000] 4.1% + chr18 [24/1000] 2.4% + chr19 [21/1000] 2.1% + chr1 [93/1000] 9.3% + chr20 [24/1000] 2.4% + chr21 [10/1000] 1.0% + chr22 [10/1000] 1.0% + chr2 [94/1000] 9.4% + chr3 [56/1000] 5.6% + chr4 [57/1000] 5.7% + chr5 [55/1000] 5.5% + chr6 [44/1000] 4.4% + chr7 [56/1000] 5.6% + chr8 [44/1000] 4.4% + chr9 [51/1000] 5.1% + chrX [23/1000] 2.3% diff --git a/benchmarks/performance/results/bench_10000/execution_report_2026-08-20_20-04-22.txt b/benchmarks/performance/results/bench_10000/execution_report_2026-08-20_20-04-22.txt deleted file mode 100644 index b13e28c..0000000 --- a/benchmarks/performance/results/bench_10000/execution_report_2026-08-20_20-04-22.txt +++ /dev/null @@ -1,24 +0,0 @@ -pycircdb execution report -======================================== -Timestamp : 2026-08-20 20:04:22 -pycircdb version : 0.1.5 -Database version : 1.0 -Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_10000.json - -Global Parameters --------------------- - max_tasks: 1 - output_dir: benchmarks/performance/results/bench_10000 - tmp_dir: tmp - -Samples --------------------- - bench_10000: - file_path : benchmarks/performance/inputs/bench_10000.txt - reference : hg19 - -Databases & Algorithms --------------------- - Annotation databases : arraystar, circatlas, circbank, circbase, circpedia, circrnadb, cscd, exorbase - FASTA databases : arraystar, circbank, circbase, circpedia, circrnadb, cscd - miRNA algorithms : miRanda, PITA, TargetScan diff --git a/benchmarks/performance/results/bench_10000/execution_report_2026-09-03_12-56-19.txt b/benchmarks/performance/results/bench_10000/execution_report_2026-09-03_12-56-19.txt new file mode 100644 index 0000000..7f8c82f --- /dev/null +++ b/benchmarks/performance/results/bench_10000/execution_report_2026-09-03_12-56-19.txt @@ -0,0 +1,135 @@ +pycircdb execution report +======================================== +Timestamp : 2026-09-03 12:56:19 +pycircdb version : 1.0.1 +Database version : 1.0 +Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_10000.json + +Global Parameters +-------------------- + max_tasks: 1 + output_dir: benchmarks/performance/results/bench_10000 + tmp_dir: tmp + +Samples +-------------------- + bench_10000: + file_path : benchmarks/performance/inputs/bench_10000.txt + reference : hg19 + +Databases & Algorithms +-------------------- + Annotation databases : arraystar, circatlas, circbank, circbase, circpedia, circrnadb, cscd, exorbase + FASTA databases : arraystar, circbank, circbase, circpedia, circrnadb, cscd + miRNA algorithms : miRanda, PITA, TargetScan + +Database Provenance +-------------------- + Annotation + arraystar : hg19, version 2.0, accessed January 2025 + circatlas : hg38, version 3.0, accessed January 2026 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + exorbase : hg38, version 1.0, accessed May 2026 + FASTA + arraystar : hg19, version 2.0, accessed January 2025 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + miRNA + circnet : hg19, version 2.0, accessed January 2026 + cscd : hg38, version 2.0, accessed January 2026 + RBP + cscd : hg38, version 2.0, accessed January 2026 + +Mapping Statistics +------------------------------ + Annotation + arraystar [2850/10000] 28.5% + circRNADb [5431/10000] 54.3% + circatlas [9495/10000] 95.0% + circbank [9594/10000] 95.9% + circbase [4664/10000] 46.6% + circpedia [8579/10000] 85.8% + cscd [9628/10000] 96.3% + exorbase [7752/10000] 77.5% + + Multi-Mappers + circpedia + hg19: + - chr1:145015859-145021167|- + - chr1:206566045-206567030|+ + - chr9:70863721-70875912|+ + cscd + hg19: + - chr1:206566045-206567030|+ + exorbase + hg19: + - chr1:206566045-206567030|+ + - chr9:70863721-70875912|+ + - chr9:70863721-70875917|+ + + FASTA + arraystar [2850/10000] 28.5% + circRNADb [5431/10000] 54.3% + circbank [9594/10000] 95.9% + circbase [4664/10000] 46.6% + circpedia [8583/10000] 85.8% + cscd [9629/10000] 96.3% + + miRNA + chr10 [458/10000] 4.6% + chr11 [382/10000] 3.8% + chr12 [501/10000] 5.0% + chr13 [245/10000] 2.5% + chr14 [314/10000] 3.1% + chr15 [414/10000] 4.1% + chr16 [295/10000] 3.0% + chr17 [410/10000] 4.1% + chr18 [239/10000] 2.4% + chr19 [234/10000] 2.3% + chr1 [1001/10000] 10.0% + chr20 [191/10000] 1.9% + chr21 [103/10000] 1.0% + chr22 [161/10000] 1.6% + chr2 [930/10000] 9.3% + chr3 [657/10000] 6.6% + chr4 [500/10000] 5.0% + chr5 [554/10000] 5.5% + chr6 [490/10000] 4.9% + chr7 [578/10000] 5.8% + chr8 [384/10000] 3.8% + chr9 [443/10000] 4.4% + chrX [200/10000] 2.0% + chrY [1/10000] 0.0% + + RBP + chr10 [456/10000] 4.6% + chr11 [382/10000] 3.8% + chr12 [500/10000] 5.0% + chr13 [245/10000] 2.5% + chr14 [312/10000] 3.1% + chr15 [411/10000] 4.1% + chr16 [293/10000] 2.9% + chr17 [410/10000] 4.1% + chr18 [239/10000] 2.4% + chr19 [233/10000] 2.3% + chr1 [997/10000] 10.0% + chr20 [190/10000] 1.9% + chr21 [103/10000] 1.0% + chr22 [161/10000] 1.6% + chr2 [930/10000] 9.3% + chr3 [656/10000] 6.6% + chr4 [498/10000] 5.0% + chr5 [553/10000] 5.5% + chr6 [489/10000] 4.9% + chr7 [576/10000] 5.8% + chr8 [381/10000] 3.8% + chr9 [442/10000] 4.4% + chrX [200/10000] 2.0% + chrY [1/10000] 0.0% diff --git a/benchmarks/performance/results/bench_100k/execution_report_2026-08-20_20-05-04.txt b/benchmarks/performance/results/bench_100k/execution_report_2026-08-20_20-05-04.txt deleted file mode 100644 index 1de8282..0000000 --- a/benchmarks/performance/results/bench_100k/execution_report_2026-08-20_20-05-04.txt +++ /dev/null @@ -1,24 +0,0 @@ -pycircdb execution report -======================================== -Timestamp : 2026-08-20 20:05:04 -pycircdb version : 0.1.5 -Database version : 1.0 -Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_100k.json - -Global Parameters --------------------- - max_tasks: 1 - output_dir: benchmarks/performance/results/bench_100k - tmp_dir: tmp - -Samples --------------------- - bench_100k: - file_path : benchmarks/performance/inputs/bench_100k.txt - reference : hg19 - -Databases & Algorithms --------------------- - Annotation databases : arraystar, circatlas, circbank, circbase, circpedia, circrnadb, cscd, exorbase - FASTA databases : arraystar, circbank, circbase, circpedia, circrnadb, cscd - miRNA algorithms : miRanda, PITA, TargetScan diff --git a/benchmarks/performance/results/bench_100k/execution_report_2026-09-03_12-57-16.txt b/benchmarks/performance/results/bench_100k/execution_report_2026-09-03_12-57-16.txt new file mode 100644 index 0000000..bae580d --- /dev/null +++ b/benchmarks/performance/results/bench_100k/execution_report_2026-09-03_12-57-16.txt @@ -0,0 +1,161 @@ +pycircdb execution report +======================================== +Timestamp : 2026-09-03 12:57:16 +pycircdb version : 1.0.1 +Database version : 1.0 +Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_100k.json + +Global Parameters +-------------------- + max_tasks: 1 + output_dir: benchmarks/performance/results/bench_100k + tmp_dir: tmp + +Samples +-------------------- + bench_100k: + file_path : benchmarks/performance/inputs/bench_100k.txt + reference : hg19 + +Databases & Algorithms +-------------------- + Annotation databases : arraystar, circatlas, circbank, circbase, circpedia, circrnadb, cscd, exorbase + FASTA databases : arraystar, circbank, circbase, circpedia, circrnadb, cscd + miRNA algorithms : miRanda, PITA, TargetScan + +Database Provenance +-------------------- + Annotation + arraystar : hg19, version 2.0, accessed January 2025 + circatlas : hg38, version 3.0, accessed January 2026 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + exorbase : hg38, version 1.0, accessed May 2026 + FASTA + arraystar : hg19, version 2.0, accessed January 2025 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + miRNA + circnet : hg19, version 2.0, accessed January 2026 + cscd : hg38, version 2.0, accessed January 2026 + RBP + cscd : hg38, version 2.0, accessed January 2026 + +Mapping Statistics +------------------------------ + Annotation + arraystar [2102/100000] 2.1% + circRNADb [4548/100000] 4.5% + circatlas [12570/100000] 12.6% + circbank [12754/100000] 12.8% + circbase [4109/100000] 4.1% + circpedia [10724/100000] 10.7% + cscd [13161/100000] 13.2% + exorbase [8306/100000] 8.3% + + Multi-Mappers + circatlas + hg19: + - chr13:52718050-52722604|- + - chr1:144873876-144874029|- + - chr1:144909868-144912294|- + - chr1:144909868-144918991|- + - chr1:144915444-144922638|- + circpedia + hg19: + - chr13:52718050-52722604|- + - chr17:36361696-36398302|- + - chr1:144863317-144868172|- + - chr1:144873876-144874029|- + - chr1:144909868-144912294|- + - chr1:144909868-144918991|- + - chr1:144915444-144922638|- + - chr1:144946624-144952689|- + - chr1:145015859-145021167|- + - chr21:44514580-44515853|- + - chr9:70860128-70863813|+ + - chr9:70863721-70874350|+ + - chr9:70863721-70875912|+ + - chr9:70871836-70889854|+ + cscd + hg19: + - chr13:52718050-52722604|- + - chr21:44514580-44515853|- + - chr6:136599002-136603825|- + - chr9:70863721-70874350|+ + - chr9:70863721-70874350|- + exorbase + hg19: + - chr1:144909868-144912294|- + - chr1:144946624-144952689|- + - chr21:44514580-44515853|- + - chr6:136599002-136603825|- + - chr9:70863721-70874350|+ + - chr9:70863721-70875912|+ + + FASTA + arraystar [2102/100000] 2.1% + circRNADb [4548/100000] 4.5% + circbank [12754/100000] 12.8% + circbase [4109/100000] 4.1% + circpedia [10738/100000] 10.7% + cscd [13166/100000] 13.2% + + miRNA + chr10 [659/100000] 0.7% + chr11 [562/100000] 0.6% + chr12 [698/100000] 0.7% + chr13 [367/100000] 0.4% + chr14 [506/100000] 0.5% + chr15 [541/100000] 0.5% + chr16 [415/100000] 0.4% + chr17 [550/100000] 0.6% + chr18 [324/100000] 0.3% + chr19 [317/100000] 0.3% + chr1 [1335/100000] 1.3% + chr20 [259/100000] 0.3% + chr21 [137/100000] 0.1% + chr22 [199/100000] 0.2% + chr2 [1230/100000] 1.2% + chr3 [867/100000] 0.9% + chr4 [627/100000] 0.6% + chr5 [782/100000] 0.8% + chr6 [645/100000] 0.6% + chr7 [759/100000] 0.8% + chr8 [536/100000] 0.5% + chr9 [618/100000] 0.6% + chrX [336/100000] 0.3% + chrY [4/100000] 0.0% + + RBP + chr10 [658/100000] 0.7% + chr11 [558/100000] 0.6% + chr12 [697/100000] 0.7% + chr13 [364/100000] 0.4% + chr14 [506/100000] 0.5% + chr15 [536/100000] 0.5% + chr16 [412/100000] 0.4% + chr17 [548/100000] 0.5% + chr18 [323/100000] 0.3% + chr19 [315/100000] 0.3% + chr1 [1325/100000] 1.3% + chr20 [259/100000] 0.3% + chr21 [135/100000] 0.1% + chr22 [199/100000] 0.2% + chr2 [1228/100000] 1.2% + chr3 [865/100000] 0.9% + chr4 [623/100000] 0.6% + chr5 [780/100000] 0.8% + chr6 [642/100000] 0.6% + chr7 [756/100000] 0.8% + chr8 [536/100000] 0.5% + chr9 [612/100000] 0.6% + chrM [10/100000] 0.0% + chrX [332/100000] 0.3% + chrY [4/100000] 0.0% diff --git a/benchmarks/performance/results/bench_200k/execution_report_2026-08-20_20-06-05.txt b/benchmarks/performance/results/bench_200k/execution_report_2026-08-20_20-06-05.txt deleted file mode 100644 index a4c0827..0000000 --- a/benchmarks/performance/results/bench_200k/execution_report_2026-08-20_20-06-05.txt +++ /dev/null @@ -1,24 +0,0 @@ -pycircdb execution report -======================================== -Timestamp : 2026-08-20 20:06:05 -pycircdb version : 0.1.5 -Database version : 1.0 -Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_200k.json - -Global Parameters --------------------- - max_tasks: 1 - output_dir: benchmarks/performance/results/bench_200k - tmp_dir: tmp - -Samples --------------------- - bench_200k: - file_path : benchmarks/performance/inputs/bench_200k.txt - reference : hg19 - -Databases & Algorithms --------------------- - Annotation databases : arraystar, circatlas, circbank, circbase, circpedia, circrnadb, cscd, exorbase - FASTA databases : arraystar, circbank, circbase, circpedia, circrnadb, cscd - miRNA algorithms : miRanda, PITA, TargetScan diff --git a/benchmarks/performance/results/bench_200k/execution_report_2026-09-03_12-58-25.txt b/benchmarks/performance/results/bench_200k/execution_report_2026-09-03_12-58-25.txt new file mode 100644 index 0000000..0e48ac2 --- /dev/null +++ b/benchmarks/performance/results/bench_200k/execution_report_2026-09-03_12-58-25.txt @@ -0,0 +1,176 @@ +pycircdb execution report +======================================== +Timestamp : 2026-09-03 12:58:25 +pycircdb version : 1.0.1 +Database version : 1.0 +Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_200k.json + +Global Parameters +-------------------- + max_tasks: 1 + output_dir: benchmarks/performance/results/bench_200k + tmp_dir: tmp + +Samples +-------------------- + bench_200k: + file_path : benchmarks/performance/inputs/bench_200k.txt + reference : hg19 + +Databases & Algorithms +-------------------- + Annotation databases : arraystar, circatlas, circbank, circbase, circpedia, circrnadb, cscd, exorbase + FASTA databases : arraystar, circbank, circbase, circpedia, circrnadb, cscd + miRNA algorithms : miRanda, PITA, TargetScan + +Database Provenance +-------------------- + Annotation + arraystar : hg19, version 2.0, accessed January 2025 + circatlas : hg38, version 3.0, accessed January 2026 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + exorbase : hg38, version 1.0, accessed May 2026 + FASTA + arraystar : hg19, version 2.0, accessed January 2025 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + miRNA + circnet : hg19, version 2.0, accessed January 2026 + cscd : hg38, version 2.0, accessed January 2026 + RBP + cscd : hg38, version 2.0, accessed January 2026 + +Mapping Statistics +------------------------------ + Annotation + arraystar [4053/200000] 2.0% + circRNADb [8975/200000] 4.5% + circatlas [24860/200000] 12.4% + circbank [25249/200000] 12.6% + circbase [8019/200000] 4.0% + circpedia [21219/200000] 10.6% + cscd [26210/200000] 13.1% + exorbase [16505/200000] 8.3% + + Multi-Mappers + circatlas + hg19: + - chr1:144873876-144874029|- + - chr1:144909868-144912294|- + - chr1:144915444-144922638|- + - chr1:144921834-144922638|- + circpedia + hg19: + - chr17:36353600-36353765|- + - chr17:36353600-36361804|- + - chr17:36357157-36361804|- + - chr1:143915699-143916308|+ + - chr1:144863317-144868172|- + - chr1:144873876-144874029|- + - chr1:144909868-144912294|- + - chr1:144915444-144922638|- + - chr1:144921834-144922638|- + - chr1:144946624-145016011|- + - chr1:144994590-145016011|- + - chr1:144994590-145021167|- + - chr1:145109523-145112519|+ + - chr1:145227040-145248894|+ + - chr1:145227040-145281704|+ + - chr21:44514580-44515853|- + - chr9:42429408-42434306|+ + - chr9:70860128-70863813|+ + - chr9:70860128-70881222|+ + - chr9:70863721-70873485|+ + - chr9:70863721-70874350|+ + - chr9:70863721-70875912|+ + cscd + hg19: + - chr17:36357157-36361804|- + - chr1:143915699-143916308|+ + - chr1:145227040-145248894|+ + - chr21:44514580-44515853|- + - chr6:136599002-136603825|- + - chr9:70863721-70874350|+ + - chr9:70863721-70874350|- + exorbase + hg19: + - chr1:143915699-143916308|+ + - chr1:144909868-144912294|- + - chr1:144921834-144922638|- + - chr1:144994590-145021167|- + - chr1:145109523-145112519|+ + - chr1:145227040-145248894|+ + - chr1:145227040-145281704|+ + - chr21:44514580-44515853|- + - chr6:136599002-136603825|- + - chr9:70863721-70874350|+ + - chr9:70863721-70875912|+ + - chr9:70863721-70875917|+ + + FASTA + arraystar [4053/200000] 2.0% + circRNADb [8975/200000] 4.5% + circbank [25249/200000] 12.6% + circbase [8019/200000] 4.0% + circpedia [21244/200000] 10.6% + cscd [26217/200000] 13.1% + + miRNA + chr10 [1260/200000] 0.6% + chr11 [1087/200000] 0.5% + chr12 [1363/200000] 0.7% + chr13 [636/200000] 0.3% + chr14 [1002/200000] 0.5% + chr15 [1152/200000] 0.6% + chr16 [810/200000] 0.4% + chr17 [1130/200000] 0.6% + chr18 [569/200000] 0.3% + chr19 [672/200000] 0.3% + chr1 [2626/200000] 1.3% + chr20 [502/200000] 0.3% + chr21 [277/200000] 0.1% + chr22 [388/200000] 0.2% + chr2 [2486/200000] 1.2% + chr3 [1729/200000] 0.9% + chr4 [1320/200000] 0.7% + chr5 [1529/200000] 0.8% + chr6 [1308/200000] 0.7% + chr7 [1544/200000] 0.8% + chr8 [1078/200000] 0.5% + chr9 [1174/200000] 0.6% + chrX [710/200000] 0.4% + chrY [16/200000] 0.0% + + RBP + chr10 [1257/200000] 0.6% + chr11 [1082/200000] 0.5% + chr12 [1358/200000] 0.7% + chr13 [632/200000] 0.3% + chr14 [999/200000] 0.5% + chr15 [1141/200000] 0.6% + chr16 [806/200000] 0.4% + chr17 [1120/200000] 0.6% + chr18 [569/200000] 0.3% + chr19 [667/200000] 0.3% + chr1 [2607/200000] 1.3% + chr20 [500/200000] 0.2% + chr21 [276/200000] 0.1% + chr22 [388/200000] 0.2% + chr2 [2476/200000] 1.2% + chr3 [1723/200000] 0.9% + chr4 [1310/200000] 0.7% + chr5 [1518/200000] 0.8% + chr6 [1302/200000] 0.7% + chr7 [1537/200000] 0.8% + chr8 [1074/200000] 0.5% + chr9 [1167/200000] 0.6% + chrM [19/200000] 0.0% + chrX [698/200000] 0.3% + chrY [15/200000] 0.0% diff --git a/benchmarks/performance/results/bench_300k/execution_report_2026-08-20_20-07-26.txt b/benchmarks/performance/results/bench_300k/execution_report_2026-08-20_20-07-26.txt deleted file mode 100644 index 4dd6669..0000000 --- a/benchmarks/performance/results/bench_300k/execution_report_2026-08-20_20-07-26.txt +++ /dev/null @@ -1,24 +0,0 @@ -pycircdb execution report -======================================== -Timestamp : 2026-08-20 20:07:26 -pycircdb version : 0.1.5 -Database version : 1.0 -Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_300k.json - -Global Parameters --------------------- - max_tasks: 1 - output_dir: benchmarks/performance/results/bench_300k - tmp_dir: tmp - -Samples --------------------- - bench_300k: - file_path : benchmarks/performance/inputs/bench_300k.txt - reference : hg19 - -Databases & Algorithms --------------------- - Annotation databases : arraystar, circatlas, circbank, circbase, circpedia, circrnadb, cscd, exorbase - FASTA databases : arraystar, circbank, circbase, circpedia, circrnadb, cscd - miRNA algorithms : miRanda, PITA, TargetScan diff --git a/benchmarks/performance/results/bench_300k/execution_report_2026-09-03_13-00-01.txt b/benchmarks/performance/results/bench_300k/execution_report_2026-09-03_13-00-01.txt new file mode 100644 index 0000000..ec65915 --- /dev/null +++ b/benchmarks/performance/results/bench_300k/execution_report_2026-09-03_13-00-01.txt @@ -0,0 +1,198 @@ +pycircdb execution report +======================================== +Timestamp : 2026-09-03 13:00:01 +pycircdb version : 1.0.1 +Database version : 1.0 +Config file : /home/barry/Desktop/pycircdb/benchmarks/performance/configs/bench_300k.json + +Global Parameters +-------------------- + max_tasks: 1 + output_dir: benchmarks/performance/results/bench_300k + tmp_dir: tmp + +Samples +-------------------- + bench_300k: + file_path : benchmarks/performance/inputs/bench_300k.txt + reference : hg19 + +Databases & Algorithms +-------------------- + Annotation databases : arraystar, circatlas, circbank, circbase, circpedia, circrnadb, cscd, exorbase + FASTA databases : arraystar, circbank, circbase, circpedia, circrnadb, cscd + miRNA algorithms : miRanda, PITA, TargetScan + +Database Provenance +-------------------- + Annotation + arraystar : hg19, version 2.0, accessed January 2025 + circatlas : hg38, version 3.0, accessed January 2026 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + exorbase : hg38, version 1.0, accessed May 2026 + FASTA + arraystar : hg19, version 2.0, accessed January 2025 + circbank : hg19, version 1.0, accessed January 2026 + circbase : hg19, version 1.0, accessed January 2026 + circpedia : hg38, version 3.0, accessed October 2025 + circrnadb : hg19, version 1.0, accessed March 2026 + cscd : hg38, version 2.0, accessed January 2026 + miRNA + circnet : hg19, version 2.0, accessed January 2026 + cscd : hg38, version 2.0, accessed January 2026 + RBP + cscd : hg38, version 2.0, accessed January 2026 + +Mapping Statistics +------------------------------ + Annotation + arraystar [6000/300000] 2.0% + circRNADb [13354/300000] 4.5% + circatlas [37141/300000] 12.4% + circbank [37728/300000] 12.6% + circbase [12030/300000] 4.0% + circpedia [31791/300000] 10.6% + cscd [39155/300000] 13.1% + exorbase [24605/300000] 8.2% + + Multi-Mappers + circatlas + hg19: + - chr1:144873876-144874029|- + - chr1:144909868-144912294|- + - chr1:144909868-144918991|- + - chr1:144915444-144922638|- + - chr1:144921834-144922638|- + circbank + hg38: + - chr7:75017597-75020149|+ + circbase + hg38: + - chr7:75017597-75020149|+ + circpedia + hg19: + - chr17:36353600-36353765|- + - chr17:36353600-36359042|- + - chr17:36353600-36361804|- + - chr17:36357157-36361804|- + - chr17:36361696-36398302|- + - chr1:143915699-143916308|+ + - chr1:144013900-144053668|+ + - chr1:144863317-144868172|- + - chr1:144871695-144877271|- + - chr1:144873876-144874029|- + - chr1:144909868-144912294|- + - chr1:144909868-144918991|- + - chr1:144915444-144922638|- + - chr1:144921834-144922638|- + - chr1:144946624-144952689|- + - chr1:144946624-144994701|- + - chr1:144946624-145016011|- + - chr1:144994590-145016011|- + - chr1:144994590-145021167|- + - chr1:145109523-145112519|+ + - chr1:145227040-145281704|+ + - chr1:206566045-206567030|+ + - chr21:44514580-44515853|- + - chr9:42429408-42434306|+ + - chr9:70860128-70863813|+ + - chr9:70860128-70881222|+ + - chr9:70863721-70873485|+ + - chr9:70863721-70874350|+ + - chr9:70863721-70875912|+ + - chr9:70871836-70889854|+ + cscd + hg19: + - chr17:36351935-36353765|- + - chr17:36357157-36361804|- + - chr1:143915699-143916308|+ + - chr1:144946624-144952689|+ + - chr1:145231774-145248894|- + - chr1:206566045-206567030|+ + - chr1:206566045-206567030|- + - chr21:44514580-44515853|- + - chr6:136599002-136603825|- + - chr9:70863721-70874350|+ + - chr9:70863721-70874350|- + exorbase + hg19: + - chr17:36351935-36353765|- + - chr17:36353600-36359042|- + - chr1:143915699-143916308|+ + - chr1:144013900-144053668|+ + - chr1:144909868-144912294|- + - chr1:144921834-144922638|- + - chr1:144946624-144952689|- + - chr1:144994590-145021167|- + - chr1:145109523-145112519|+ + - chr1:145227040-145281704|+ + - chr1:206566045-206567030|+ + - chr21:44514580-44515853|- + - chr6:136599002-136603825|- + - chr9:70863721-70874350|+ + - chr9:70863721-70875912|+ + + FASTA + arraystar [6000/300000] 2.0% + circRNADb [13354/300000] 4.5% + circbank [37728/300000] 12.6% + circbase [12030/300000] 4.0% + circpedia [31825/300000] 10.6% + cscd [39166/300000] 13.1% + + miRNA + chr10 [1926/300000] 0.6% + chr11 [1663/300000] 0.6% + chr12 [2057/300000] 0.7% + chr13 [976/300000] 0.3% + chr14 [1453/300000] 0.5% + chr15 [1698/300000] 0.6% + chr16 [1232/300000] 0.4% + chr17 [1648/300000] 0.5% + chr18 [876/300000] 0.3% + chr19 [976/300000] 0.3% + chr1 [3920/300000] 1.3% + chr20 [755/300000] 0.3% + chr21 [403/300000] 0.1% + chr22 [572/300000] 0.2% + chr2 [3707/300000] 1.2% + chr3 [2628/300000] 0.9% + chr4 [1890/300000] 0.6% + chr5 [2187/300000] 0.7% + chr6 [1991/300000] 0.7% + chr7 [2271/300000] 0.8% + chr8 [1626/300000] 0.5% + chr9 [1781/300000] 0.6% + chrX [1041/300000] 0.3% + chrY [21/300000] 0.0% + + RBP + chr10 [1922/300000] 0.6% + chr11 [1654/300000] 0.6% + chr12 [2046/300000] 0.7% + chr13 [970/300000] 0.3% + chr14 [1448/300000] 0.5% + chr15 [1687/300000] 0.6% + chr16 [1223/300000] 0.4% + chr17 [1635/300000] 0.5% + chr18 [875/300000] 0.3% + chr19 [970/300000] 0.3% + chr1 [3896/300000] 1.3% + chr20 [752/300000] 0.3% + chr21 [401/300000] 0.1% + chr22 [571/300000] 0.2% + chr2 [3687/300000] 1.2% + chr3 [2623/300000] 0.9% + chr4 [1880/300000] 0.6% + chr5 [2175/300000] 0.7% + chr6 [1983/300000] 0.7% + chr7 [2261/300000] 0.8% + chr8 [1618/300000] 0.5% + chr9 [1765/300000] 0.6% + chrM [25/300000] 0.0% + chrX [1021/300000] 0.3% + chrY [20/300000] 0.0% diff --git a/config.py b/config.py index 3c64d13..f202f33 100644 --- a/config.py +++ b/config.py @@ -238,6 +238,7 @@ def _db_line(key: str) -> str: # Mapping statistics — scanned from result files after all modules complete # --------------------------------------------------------------------------- import csv as _csv, gzip as _gz + from collections import Counter as _Counter lines += ["", "Mapping Statistics", "-" * 30] @@ -263,15 +264,48 @@ def _fmt(n: int) -> str: ann_files = sorted(sample_dir.glob("*_hits.txt")) if ann_files: lines.append(" Annotation") + # circRNA -> native DB ID matching can be one-to-many in either build + # (e.g. segmentally duplicated loci), which inflates raw hit counts + # past 100%. Track duplicated hg19/hg38 loci per db so they can be + # reported separately, and dedupe on the sample's own reference + # build to keep the percentage meaningful. + reference = str(sample_info.get("reference", "")).lower() + multi_mappers: dict = {} for f in ann_files: db = f.stem.replace("_hits", "") - n = max(0, sum(1 for _ in f.open()) - 1) # subtract header row + with f.open(newline="") as fh: + rows = list(_csv.DictReader(fh, delimiter="\t")) + fieldnames = rows[0].keys() if rows else [] + + if reference in ("hg19", "hg38") and reference in fieldnames: + n = len({row[reference] for row in rows if row.get(reference, "").strip()}) + else: + n = len(rows) lines.append(f" {db:<18} {_fmt(n)}") + for build in ("hg19", "hg38"): + if build not in fieldnames: + continue + # Some source databases store a blank placeholder (e.g. a single + # whitespace char) where a coordinate failed to cross-map builds. + counts = _Counter(row[build] for row in rows if row.get(build, "").strip()) + duplicates = sorted(val for val, cnt in counts.items() if cnt > 1) + if duplicates: + multi_mappers.setdefault(db, {})[build] = duplicates + + if multi_mappers: + lines += ["", " Multi-Mappers"] + for db, builds in multi_mappers.items(): + lines.append(f" {db}") + for build, loci in builds.items(): + lines.append(f" {build}:") + for locus in loci: + lines.append(f" - {locus}") + # FASTA: one fasta file per database (e.g. arraystar_hg19.fasta) fasta_files = sorted(sample_dir.glob("*.fasta")) if fasta_files: - lines.append(" FASTA") + lines += ["", " FASTA"] for f in fasta_files: db = f.stem.rsplit("_", 1)[0] n = sum(1 for ln in f.open() if ln.startswith(">")) @@ -280,12 +314,12 @@ def _fmt(n: int) -> str: # miRNA: unique circRNAs per chromosome file mirna_files = sorted(sample_dir.glob("hg38_*_mirna_hits.txt.gz")) if mirna_files: - lines.append(" miRNA") + lines += ["", " miRNA"] for f in mirna_files: chrom = f.name.split("_mirna_")[0].replace("hg38_", "") try: with _gz.open(f, "rt") as fh: - unique = {row.get("circRNA", "") for row in _csv.DictReader(fh, delimiter="\t")} + unique = {row.get("hg38", "") for row in _csv.DictReader(fh, delimiter="\t")} n = len(unique - {""}) except Exception: n = 0 @@ -294,12 +328,12 @@ def _fmt(n: int) -> str: # RBP: unique circRNAs per chromosome file rbp_files = sorted(sample_dir.glob("hg38_*_rbp_hits.txt.gz")) if rbp_files: - lines.append(" RBP") + lines += ["", " RBP"] for f in rbp_files: chrom = f.name.split("_rbp_")[0].replace("hg38_", "") try: with _gz.open(f, "rt") as fh: - unique = {row.get("circRNA", "") for row in _csv.DictReader(fh, delimiter="\t")} + unique = {row.get("hg38", "") for row in _csv.DictReader(fh, delimiter="\t")} n = len(unique - {""}) except Exception: n = 0 diff --git a/docs/conf.py b/docs/conf.py index 4ca1a39..defece6 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -11,7 +11,7 @@ author = 'Barry Digby' release = '1.0' -version = '1.0.1' +version = '1.0.2' # -- General configuration diff --git a/docs/outputs.rst b/docs/outputs.rst index 704ad31..438a08c 100644 --- a/docs/outputs.rst +++ b/docs/outputs.rst @@ -76,7 +76,7 @@ An example report is shown below: Mapping Statistics ------------------------------ - -- Annotation + Annotation arraystar [33/100] 33.0% circatlas [94/100] 94.0% circbank [95/100] 95.0% @@ -85,23 +85,32 @@ An example report is shown below: circrnadb [52/100] 52.0% cscd [95/100] 95.0% exorbase [77/100] 77.0% - -- FASTA + + Multi-Mappers + circatlas + hg19: + - chr10:47121120-47122996|- + + FASTA arraystar [33/100] 33.0% circbank [95/100] 95.0% circbase [49/100] 49.0% circpedia [84/100] 84.0% circrnadb [52/100] 52.0% cscd [95/100] 95.0% - -- miRNA + + miRNA chr1 [12/100] 12.0% chr2 [7/100] 7.0% ... - -- RBP + + RBP chr1 [12/100] 12.0% chr2 [7/100] 7.0% ... + Annotation ----------- diff --git a/pyproject.toml b/pyproject.toml index 71a952e..7aa1b4a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pycircdb" -version = "1.0.1" +version = "1.0.2" description = "pycircdb: integrated circRNA database annotation for computational workflows." readme = "README.md" authors = [{ name = "Barry Digby", email = "b.digby237@gmail.com" }] diff --git a/uv.lock b/uv.lock index 6eecdae..4ed0191 100644 --- a/uv.lock +++ b/uv.lock @@ -1040,7 +1040,7 @@ wheels = [ [[package]] name = "pycircdb" -version = "1.0.0" +version = "1.0.1" source = { editable = "." } dependencies = [ { name = "apache-hamilton" },