From 9edaf075e6d54242bee19924ed4d9c3699249c56 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Thu, 9 Jan 2025 15:58:56 +0000 Subject: [PATCH 1/4] Updated code to use atria --- configs/containers.config | 3 +++ modules/local/atria/main.nf | 16 ++++++++++++++++ subworkflows/local/extractViralReads/main.nf | 16 +++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 modules/local/atria/main.nf diff --git a/configs/containers.config b/configs/containers.config index dbff9cab..06bf33ac 100644 --- a/configs/containers.config +++ b/configs/containers.config @@ -73,4 +73,7 @@ process { withLabel: fastp { container = "staphb/fastp:0.23.4" } + withLabel: atria { + container = "harmonb/atria:latest" + } } diff --git a/modules/local/atria/main.nf b/modules/local/atria/main.nf new file mode 100644 index 00000000..e4901745 --- /dev/null +++ b/modules/local/atria/main.nf @@ -0,0 +1,16 @@ +process ATRIA { + label "atria" + label "large" + input: + // reads is a list of two files: forward/reverse reads + tuple val(sample), path(reads) + val(adapters_ch) + output: + tuple val(sample), path("*{1,2}.atria.fastq.gz"), emit: reads + shell: + ''' + par="--adapter1 !{adapters_ch.join(' ')} --adapter2 !{adapters_ch.join(' ')} --kmer-tolerance 2 --kmer-n-match 9 --trim-score-pe 10.0 --quality-score 10 --quality-kmer 4 --quality-score 15 --length-range 20:999999 --no-consensus" + in="--read1 !{reads[0]} --read2 !{reads[1]}" + atria ${par} ${in} + ''' +} \ No newline at end of file diff --git a/subworkflows/local/extractViralReads/main.nf b/subworkflows/local/extractViralReads/main.nf index 6520211e..47ed23ab 100644 --- a/subworkflows/local/extractViralReads/main.nf +++ b/subworkflows/local/extractViralReads/main.nf @@ -5,6 +5,7 @@ include { BBDUK_HITS } from "../../../modules/local/bbduk" include { CUTADAPT } from "../../../modules/local/cutadapt" include { TRIMMOMATIC } from "../../../modules/local/trimmomatic" +include { ATRIA } from "../../../modules/local/atria" include { BOWTIE2 as BOWTIE2_VIRUS } from "../../../modules/local/bowtie2" include { BOWTIE2 as BOWTIE2_HUMAN } from "../../../modules/local/bowtie2" include { BOWTIE2 as BOWTIE2_OTHER } from "../../../modules/local/bowtie2" @@ -63,11 +64,24 @@ workflow EXTRACT_VIRAL_READS { bbm_human_index_path = "${ref_dir}/results/bbm-human-index" bbm_other_index_path = "${ref_dir}/results/bbm-other-index" virus_db_path = "${ref_dir}/results/total-virus-db-annotated.tsv.gz" + + // Load in adapter channel + adapters_ch = Channel + .fromPath(adapter_path) + .splitText() + .collect() + .map { lines -> + lines.withIndex() + .findAll { line, idx -> idx % 2 == 1 } // Keep only odd-indexed lines (0-based, so these are the second lines of each pair) + .collect { it[0].trim() } // Extract just the sequence, removing whitespace + } // Run initial screen against viral genomes with BBDuk bbduk_ch = BBDUK_HITS(reads_ch, viral_genome_path, min_kmer_hits, k, bbduk_suffix) // Carry out stringent adapter removal with Cutadapt and Trimmomatic adapt_ch = CUTADAPT(bbduk_ch.fail, adapter_path) - trim_ch = TRIMMOMATIC(adapt_ch.reads, adapter_path, encoding) + // trim_ch = TRIMMOMATIC(adapt_ch.reads, adapter_path, encoding) + atria_ch = ATRIA(adapt_ch.reads, adapters_ch) + trim_ch = atria_ch // Grouping for deduplication if (grouping) { // Join samplesheet with trimmed_reads and update fastq files From d4e20abdcc3330cbe21583ed6b4a6fd83189e0e5 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Fri, 10 Jan 2025 16:41:09 +0000 Subject: [PATCH 2/4] Updated the snapshot to have the new output of replacing atria with trimmomatic, and confirmed that new output was correct, by comparing the new files to the old files by using a diff, then checking where the files different manually. --- .../blast_hits_paired.tsv.gz | Bin 1427 -> 1424 bytes .../virus_clade_counts.tsv.gz | Bin 892 -> 893 bytes .../virus_hits_1.fasta.gz | Bin 1968 -> 1954 bytes .../virus_hits_2.fasta.gz | Bin 1907 -> 1902 bytes .../virus_hits_db.tsv.gz | Bin 11691 -> 11629 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test-data/gold-standard-results/blast_hits_paired.tsv.gz b/test-data/gold-standard-results/blast_hits_paired.tsv.gz index 16d3c1b5fe62ff34b701d4002bffb564de2de2d8..2c8ea90b474640b0dcd6e66505476a6651514ac6 100644 GIT binary patch literal 1424 zcmV;B1#kKviwFP!000001I1WfbL%t^eHQB{BT-~K}LZe6e2)n`1}+_#VAzI|QY ze`-tfdcEy#o?hzB=H}_OD=mz?+x}jf&+FUvaa)=X>+WH-y{Y|otLLZZ{)Jt)eOWzL zqZ?RzspB_o-`5@bx}gsf{_GzXz%T7<0j$@8R2w}~ZSIkl0R^eHdZgOyk!o{~RBr~P z#X^s?yriNk&9?9B4t?FwSCDE$U$MIF4p1IepGP)>8z;`V#^?5evT-cNSz9_2Hz6fMY^-^{|I`^* zx-r)p#%pkY`SrZNe#UX+1e{i^^-huhc;(neCPjXDV$kQ3yLI5VS$zaCOWY^>fuw&rbt+Xr$+@5O5Nq~h2*9f6M6br&8r6%F^E{qqLP1F$% zLktx>m~ouy%uss=)srkOO;rL*%E6zps(52V(q6DFWR#zECR1Z$HZWCj=rDW&_J9fO z^HSkB20n9*<^d0|5n@;@8%#Vdtmq`#;_+`Y#TZlZ`2L9@LYB(a1?>jrY3K`eyD zLS>A5_ICal+({4xVjab7&+#`SNd(E`pSVvMwf-H=87?}EOI~JWV6Cx4*i^W|RP_{m zl0qX|b@SK+tOuQwNNQqIOkR$YpSfrYl0PvgFHD|+L}E_!7ap}FfENN5P5`|Uu-;^- z2EJ>)hQ2iM-eR^!MNr}@U=+p)jP$8=m@Ht9$-a@~J?1>Az zG+Cd>W|1?>Edq()tAn!0Rs3-iy-6dkIuNtrCY`oOCK{ujw?rR@I%^6cs4fWp*}9vv zNloVVB48P%Uw3ro2sKV-d|+S&j)IKEOG9X#U<%0%r6tlNOCip%;;Q9~w2x{p0MFPS zdP#Q+jMfCA_%P=Ubwd8c8WcQG2T)(ZRgv*ahzTmA;MqSh2wIgxB6?H`{TYM%fETTJ z3AdAEDTXW*2I`{kiJxL9B!hQJFJdf00kTlvPgA0yrn;ta%GBdXU_6!&Ku$FUrmk2(jX`wwM4>Wq@e`t2tBkk7l?8nh$=+%tM@BHy zS;`B~5@-Ut9nQX1aU_p0wA0!|r2kYi&L|0R7tS}n&ysxDEdrT6+UEUkaaKJpLy~00 zb)4>O!S)Wirxk^z=_Z%q*8+eOh-Bniwg25uggPdo_V*7^V*-az%MeZj)Kjh66y|Z% zjG7r}EKU)-jFXO+fa_FHD0nT{Up_!haSv-T3-@^kfcN3nZ67TE5B`QO=Emh|9F`oC zaK4>>U4`L+%Qr~zG~EB8zn8?VDgxzZ?C=~J+kGZ*K>-iq#qVyf|JZ&1O(YIflK0_J zRT$WqZ)9IDGfN65Redf&6^t{us7NqD>)RLeF+pQySR7JzUnOQyIHmeXk#FjGJ=p43 eAwzvFr)M|DteGoYBjpghNBuVm`N(_|8UO&EwXIeF literal 1427 zcmV;E1#J2siwFP!000001I1WNbL2D-K8ybnm(<;Q9Vx0fP!Ni6;7Cmp69)2{csA@| zemq}G_KYXBvt>^V$!=m99;puZNcCnw zS|s#H%S$S%GHm;~?l9L4a|Njm^cAby?f~Us^?7u&e*EUwt1CxjC9*WmQj#Dkn7j4P z#hh&tPJVZHz5D6Xvh~q5Zf6cp427J9y>a4zIOoV8^#aT8K9#KxNE`%j&5 zWg2^}VY~+Sm*39&-|sk$oPg7cwcaW6pRXL-$fU>*PYmW|4XntyAqQq77P`+zYXt9Gj70!Yw&!?` zHPrafUI@TsHW|z~n(Ue!0d@>rrm4gLy;hCQfd-j@50!?Y@)7k zSYoK)!H&~ZXS&)us7{i!G*t;KDF=UsRq@7#q`hEU$S6PSOs2-hY#^%Q&}H}yI0GiI z&r7-E82C&Z%>y1FBgC*+G&s_@u%eS_i^jjt6k|+904}%jegWM-hnO!_90&qh(79QS9K&62gk;^y1L&by7)&t}`gIEZQ zxyl&#?Bo0~xRbyO#5#)Eo}+I@kO-2;KXD&2YW_PJGhB37m%Pl1z?x%;aHw#Dt*R;L zB!xya>*lctNDsOvk<`GXn7o`OKhtOnlAjop7bed@A~C1=hDR<5;01?;5W|1?}EgXrUt3zdxYw^cT^d^nC>O$;>nsnPDk!Xy1o{2sVb=D9U zo77}(F9OUcz1=aHBdT#S6GAPT_^sU^};l!BkZ;#$j>(mtxZ06b%P zm?b?e5LyF>;=`Ud)CutuHYj*d9iaLOt`-@;g_uxf6g>MU22QKxkchTQq35CW(S3p^)@26v;p~Paq(Gr&QUxo7(p7XMV;AofB z4qd_}M@-eG@tCPcOJF?A2Ov{LfvGDJkYnJTJyBGdxcDQYnyZYr!4-qP@nmn+lOw~K z>8#2N&k|??x*d97t2mN}8`|UCM5KSTW}J}{pf2<`zK@c8I4y!QdvwhE)8edZT!tXY zit9Ap*#+A>=uS%tOVdp*L$3t@ClJYqwJQIIUkG_jMCI=vAjbp_p{5~p1JqNkwJF4- z)r=Y$Xk47acNv|Im*kcRt_nJn_jJzJfSR@ao4_YHEa-8D6ps9=-Rjs}m==Ua?|Eij z$_=ZQpnhB1WiAOwA}-_ir{Xaz^%Ux2AUa9##fDM*AnB9zjiP9or(YLj9I}H}1tw_M`o#cDC@M3A3^BS-3$sv9NjFmJHC48D hvij{~NT{V3a95{{>ng*Zc$;007}o$~FK1 diff --git a/test-data/gold-standard-results/virus_clade_counts.tsv.gz b/test-data/gold-standard-results/virus_clade_counts.tsv.gz index 26034fbc4b4020ddc28c5ea91b3d56b416bd8550..2326152c4db1b7e5abdb30e30920d096303e8aff 100644 GIT binary patch literal 893 zcmV-@1A_b?iwFP!000001D#gMZreZ%JyT!dFDPc0=9so<1EfWR7Uq@_ETGMvTcHb4o zpFe)Jb!&IEY3=#D*0!~&$_rqHDGHOHKi|1JgT@q9ZozMBYqDmWxf=hp{7iF`*@zOx zHT-sU*VqP{uCn!u^UqmX00p*up36Mzv3+I`m;hI3sVRe>Wour0Yk0OEznK<_CMsYm zBg%+O;L)XJ?R#UF84FLQaQR;lN)Rn?nJYe!obJoP_vVg*FE<1EG$C9|h0%{6a)N-* z5J4~vokt3q#yvTkZC)n^7MOvT>tWD{B}ps~`ETx^sch;HV`S!900KnBm0vS}D7M)5Zy#6liE|}ma$`O@=ZwI<^WL3LxZqS^50Nkeihw+> z^@c8eKIL&Oh#2B%4)hp8y%mCtIulbWPPpI;#MA^qDmdi~=^V!NjEZrXui3L{S{V`W z#pcf2%_^Lz$l#BdAU3uEuTX!qcjFvB2kIL?RVc_0jqMnwI?)6 z5hIMoyvN8~Gi{Kj`fvziSZ|@O!Zm@-iyO%82Ej2fTmv_^9+y!sC|oP}QMdb9ZY<0< z!wh^ALJ(B)uFB^VAjMq>)&6hZ6)?L99RVXoe?>Ii`|UXy0i=eXw!vdQ02=)R2i5Ba1`GfI8DXXc literal 892 zcmV-?1B3h@iwFP!000001D#geZreBzeWt#`U$Ed^;$zxk8=x&VXo0>Ow8X?jB~lQj zVEgwST`k)(ofHNPSn`~iIdkUH>i=zloURONwEKl>-5A&I+u^Zw&n9oJcl*%lwhQ}X zS7~?s_|-J6IW)R8*Y8@>HoEp3V3n>aU0y#w*rq^1S9NKS+c!oRVPDt={ioW|+zxLMX#W?t;ic6Bo zh^a^j#UevbHusI|jcuU~de)UKe07F2W z*Lp`5olkk(3PM7K=0MLOBq_yreiftW-PrGgPgfzF{#uc#QC`IbGMx|L#% z{xzj_X1B_OE@4dNkMh}b4pa4UsmQu5)n7t!Jihi`Fto2_&s1bq_NW@+6V diff --git a/test-data/gold-standard-results/virus_hits_1.fasta.gz b/test-data/gold-standard-results/virus_hits_1.fasta.gz index a73978bbd50c3b3dfbd6e0cbab7697e7348f3369..6115462b0779fc4f449805f3f5b5c9966e4dcb13 100644 GIT binary patch delta 1933 zcmV;82XgqZ526o{D}PBGKkG>p)dU)iCV&0?`}b>}r}bFYpRZ{?*L^+rzg|CD3wJm3 z)~q%67S{jtf15Xp=ui9o{y3WV`#HEj=r{ZCo+B-vYDk3jF@36hvrnsc`*r^9ulF1I zEc#{Soj#_&-fy~Yb`TLietp55=lz(rW9l#?higvFm(zJp*?-^6|MSD+PUK7)ZaGYE zL_*MSX57-4s5x`-9e^iBA?8b((_^dv1j65*P?vdMw{1Q%qJ5pYRD#nlELWbd_Z#`M zX{JUT6|;;)0Y*>=I|{U*4b%E;e5lKH~Qdy<;t3dCYIz|{p-+Ni&nBD_(D@mpg=x(;M~sT zyq4FYXd3fpvQ4bX?;851YQxo^| zBD3%fZu@zx=dm8st7EgEl&!TQzrz$>ZUI$v7a}RzN??^i6z58lhDtQ)460B?&KPB1 zi59y|xqmi_=?m()9vR2uwO&hBwZfko*jT12#bG;y)wkRfjay9-kR)ipLoyi9Ky_lo z-W*n{M5LmIK4z3%WLD(0s($?m_3Q;Sz2@VZl9;a0Wciqe3#sz%N>E9Nn55|hlFC7k zUG!CeTxp16b|-?6pb;uc@lfFu!wrUurJ~Xk=zlhy+x1$MekTAXL1~plxESv{&F@DQ zb;A12I}wi<={CKko>MI$*IXo1{Xt>Xt#b7Zaz0<%J}n6nxkh8nD;>N;$wA|S{GndOC{2!yYWD`yw+tsE?5~TUxt8%Awv33aY5r-NuThD ztAFTPuO23N1v~eSp4}jM-&BvDVBRodKpehOlgtQlLyqaUlY{NxWwhTspB7eKOL3>@-HeVS*EkEO|Z#8DaVW=aTD!mOu zpzs+PD$k)Z@zM^b<20N|m8o2Z(OD%??OC`TQ};OQ_PP$4MiQk}14aBL;*#wu$bjKW z1W7WS;3yy)gV-3MI#;h6V5s>{g2>~efc4$Ibk87I~EH!Q+&j2C0^4PoPW_O zJmsjoFMZQWL90u$;1bD_a1%c>EDxL=EKgup6RPPt((AQIXm zuTe^Ohh1rgwvILQA>|@q)SjSBe1D(w33Be8?s&;)HxBvtc5e zRn1~QINX}ic3zIyN*x2%3$8_i&rHk=ZGs%w|a>rwgs#IjE3+&O_zQtg#-Hh)pO zHq8~NZ&jFK!?kOurVW4m9X=_Uv2WBi4QK19UBhO{PO^DGH}t|I^vjidMCkyV(|4(= z`(msEQEg-6+RD7Tp;GW$e1CB^rCO3#H>nrByt6@|Hg=p*E<=!Q=-nSI*|+7KUzN9N zbYf?5vsITH7|79c!QBAtd$$24C;o53C%Ul>v;QT0@gaQdcKkmH-#M-GG3}~}D!_Q# zHR{&xO_%0<{}fRxxTKO@R`cRa)V3w=6ACCryT(q$*n2fPIBWCIQ-6kYo4PI7&U4$h z4U?}D#4DLZ0oBmrOa4?z_h#t!OJ0V{Z-Mbv1`tWOx1$u5w_99?x2A&I8)|!CU8gQJ z^EIn7A2#1VeEq}b-$xL)&9{fm_uGcy70c$^ZS!xMw0PS5FZt*w=ku7ZdC9{O4iDJ& zC4My3Gk!$gjS z*R*J7&t~4ofdNN|> zKaa$p*Su}BPQ_^C9L5;uLbY#hGz8_hPVq`FhiBsu%GkeQl)Ng$i>UUIFCY0TeZKSc z$oO?!+p_JP-;gGxAzB$N?Pv&b9Sb2Ub)wbkumG~S!^Yr{rCuyxwF}WGv*DP@mHR*+ T9Q|c9fBXYM8wNIHOcnqDp{&fr delta 1947 zcmV;M2W0r753moAD}RZf-#m>(Qca-I0Ql?g-@jk;JgvvF{(MdIx$f(^|MmLOTDZHJ zw`Q%mx3K=x|2A(H(VzDF{c$w!_j7Q6&~Ntdo+B-vYDk3jF@33=*_YMaex1L4dcTp+ zqF+Yd>0|oze$#ccgNXR?>kH;Q@5i(qQ->KjTx)8*T+VaJK7TX+=ZnXk$dxqQa+qdB zLeMueZfQ)^nz{K7z!Reo^Cqq7F?Ij~;cri<%e=4KHlJzHzR%n$#_1Q9JJ0F;Mt(M} z)Ucy$me$aN)-V&A=3)aew7y8BNp}P6L(Dh#yhg4F<7n0m}&Qp z2#=fIEK@dzZ^^LEPD={s40C4m!TrkRH4RNH$+!CJ&|I6Avm!-6#tjYH#yJatJRiu}FT~?6Un?Mm^gKXMs(|=O{$;-($Q6z9ow707js&c{~ zD6jQ8y3beGD1VqZLjVe1-cMxaJQ5qro&uc2RJi9B#6*J<8FFyQYvQSi`+1RG z_y)KAJl6AAkLlI1SrE$BT9Myj3X@wv72SnMvbG#pVGzZ+(xjmhO*(@rRFE@9-j}1r zE|af~V1N38dag&>@p!G*LR8BEse+A-Dpnl6Ls`AeP4>9;6bVU+228|<0TC1_hV{+i zrGi8{YA9sd*+pmBUi<3TpJ2}(LepzLt|_VMGEN4NX}FNe^DY;ah=@yCP9TXL6xl^! znaJgcC~kKu2ni~ouoM$zP;uPgxOgfuJ%Mi1xqn@+MFemRV3L$pZiJ2TzSI1ER945V zZ_i`#h~aS4EM=Wa3c2T^nIaGpD{|$lZ;l1Ay1kd#tc zG9!ng=&nRl;yuE}Z6q(iDw;~BOL^mgZh5WCdR)m%y-iW+Q5!>s^iOs{+gGM`Ms z9T`DU6fy{IFWz{i#}e8`9aY{k82yRt>VGBL>$V?j_y{lIBl}$+yA{GgS@&v=mR!+oGV?ZS2 zM+HZT-EDTc8QMDap$|0|0izm&s(q01??@=;L(^9!O zK60^*TucmU0ZO&X#f_>)q#xgnw_DNTPlB$?>)QA0l2YSU982n?ZbDWRH_a-^p_z?J zvRTC}6^KexYLFm%e-`0JaE$^szKU%?9lakQxmo4VVQfex6{E;NPt_f{Tz{C?F$(G! zR*G_VwTO=w?o+4KmPWu+qtT(&a>@!T8IlH!2%xA|Qm=kAcu5=O6nHDOS25Vv`$n*= z(>Zt62th*+iWBsRQO%v!3M9H>(5TkcTvTRMxN6!uSDq-Jytx$sF|0a!MBi)+)FKLVqX{0Ig z|0Ip)w9d!0XViFwXuNAWBHQlXOzXZsMbt7buA~`jUYv>QZsI=3fPYdXbZU+mEm|YT zvp4@dj5xQc*AClxZu_>;2`EA-s7$hfu4wZmkcygIiJUL%}bu4aDT=?ZzLDc?a~{2Nh2Agq(bIQeDuyyB|=ovqy(vxFdgR5e#f{; z3|du{;T*@L27H6udal{8IYEMJ6xRAQTtxkkZ@f-b9Dj0pr=n;GJ2C}WAC-2AUFii) zw*`lJjhcb;L4&z{%s0^Ubxn&70OrNSFrw@eeM|;~91q005oEzXSjP diff --git a/test-data/gold-standard-results/virus_hits_2.fasta.gz b/test-data/gold-standard-results/virus_hits_2.fasta.gz index 74e7262007b4544e46b2e75324d0d4fb7c79a909..a32abfcbda5fd6bbc8416e46483aea1cc3cebb41 100644 GIT binary patch literal 1902 zcmV-!2a)(6iwFP!000001Fe`xjwMG7ME7$FonTPjYz9bh!Tl)je-@GPm^Htv0YMA3 z`KAn$NfQyQUw{ApJul0&o$K~9SCNI4437Od`&xRx*6Uv9GpnJqrb>@1FB8V9GS+2GmElqWk)iU@X@ zu{0oX0`pu5Ayj+^GThv!Yrp4JC~81L!KYDaY1pb8)kHu+MZ8K&D58pOPRFQLjJ_=x zqRCa#1zZZJ7j3v`f{yU7UM|f{n@A3cY;5u*X zcHS2bdQ~>P3RCooR&KBtqdX3Ip)+u7T%(AH{tC`uDj>k$aOU(iaMlK#2@75+U+;Tb z&V5s1>dp*@!bhVt2cX4D;yec_0mfeZs!Xe+9Ujw{^fFnMQ&eUb7?(WImOyqu6t8pf zSJwAyneJ_aPH42;wJ1tibiyh;vrhd8MRch@_+CA4AfA0dmngRY@xfexNEHp^s1+(D zpDx}Zmgf83m%DHsb-}75k;Db$C8fPuG%;JDH!ozAdr+SGqc|^1`L%B7ify0ovtm=C ztM`gUb&{e>4?|q77dn_1vyDzJo;P5-v2V6sH%K>-Fsln%A98E(pWeRtx-Dz`CdMGP z)E5-?qfkm^^frLC^|G9)d6^7z*B+nLZ-wh7y+&D9wSWLXqvT83G=dLBDngKK7N__I zm5S2sg(~jkMc7C^OA*4s)Fdtca(0`R`-~uH|0PO_QQ;z^wyIwo0v|o69X(+3a2T}a zl+DndmCV*kv{6yuS=Qm(u_Z|AoG+0*s4h?u<59NGLVYm0w?R2pl3MVpu)VFX^L-rm zT_rlEhh89sX6lsyl2(=I4?rRUG!Zm(llK8|Rcz!&2#Y%Jqk*34B*4A;Ja2uwdWOP= zUld5E^G#5pphG!8nswBmcAshYAtSSBy8*c)Q9Ab3%(_k264}qh8AcAqh3W87<+CgwIaFj4LjC5=O^_!r2}D&jVlvYCCErN+-nGAGeT3vhAIFN z$TNbjsKe`3)1Vbs3mpV5{u+AH!((5sWmZP47Z(AvRvpCHNK9;CQ72EN-G_FrGS^9_ zx>ilndPUA?@eU{#N(<1ueXNImex*G~|2TsBC7S;umeJfaU7j}#*H}Do8*$Q0VvTB` zN2?Ee$$4>F)3nmxoPYnkrfoT=LwXbyTfE`}gEZCjg6QHT3E~<=gkZ?SK}h(FQmwh7 zY855_=q8c1#wew`J%YIS?!(u83i98tYd`iK79xubMB1AOrlbm7KeRxBG@%@XUBuJt zw1Exm)hmdSFZ7{;Zf%JD#u(CHE^bpm+j7Ibxg{}yBf)Gahid9pdXY&=rRB^K(nVZO z6L(xL;cgI8FA+)T#v>6RjeF$#7d8(km+PGFWj!8suZ}?ecqt%IOeLgXN)t&*@i@Y* zL@NP@7V06B4SZ5pNH#j7wpl%RY1D%(>Kc`^#-LZy_n@`oUJh7|bhLT~#E9dxBd965 zp-)E}8RY>`4Bn;b;E*azr`W+^o(MR{t3!!Hw^z=u`JPry@VXW78lg}OWR+P_oudb1 zij0q08U0I?S_PR0HVh?hr4qa}FHbA9lIRTfczJd&`@ZN|me-VN18^v5_)*X6YEY_P zl2x=x$(w5S(hJXDq oH9QipQlW*FM!$|JrTy!aVq;2aA5)5dol<`M18FvAYOWOk0OT>URsaA1 literal 1907 zcmV-(2aNb1iwFP!000001Fe`zuH;4xME89PpP-@AP?9zcB)H(-&ikLm$#{{~|I2{k zh5t~41}2k3L{Pu}`t#4%x-R>@9=I?{S(tCQpS zI2<|^<1Mm}6XU0kgITwY1NGYKmR?_b9Ud3=`WuJGExIg*;qf=DjE`A%>W1-M7HX0B z@#~wT>-s*I<6MTLb;YuBM=C;1~<5;iZrUFm_)y`{~3TCSaC|KidEcv{@cDXH; zkMbvHKE_^ZSHqo(>Trkn4J*?VdDiW>_C*HjKeS1i30asM8R3Y~f3Q*#7uoh*TBKHa z`ntcj{kq>r?X}m{b|Lr{mD-TeEc3O1)=)51K}{7D18S65p;z%rJpZ!s0X=iow z`0~})@ydc{|pZiEu7i3+*``te4oF7w`J#ZaXv+$ke8 zU458+KbtC5j&)FlGLC-r@EZNFyw>wxPOvo9o=FFhZ*5tId)cp)1Fvdauq*I}@^dD# zPBx<%w^PiKWULGbpMbp-NC+68fgElg%XQqZO+Xr;f)O;Rv@#rSNc9nD;E21l1SG21 zmNboOC1_nE5q++bHg+kTY3@jI1s##!ydp#>!bhXD1fxYvqP+wx!NzWiRi@R^36<$fd0E8DDJruIkF623 zCBPjV#p_!9k@e$RmwVq~6dJ8|EtXOilduZUqEkOY5nY-eh6@g)Cx|?R~PT0m|pjNtak;I#u2eW1|*WWfV`x%yG0AL75Ydcquhh_)E}n3D&@zz zLt5;|>pmSDE3e)i3wM&DOAo_cts5O8O>VQ3P4xk6H}=ieeS@R}2@7A)`czz#0`>L} zU-xwzzlAaAE%gP3{She^8ofGWnGrft(UOI*FjYy@Kb+l{^*%=!6agy}b1G~URF^v@q43#t z+R+D2J}d^YC51BusMFb+l^Zn$qE#h69a{%Yov%xD53UPV#Ca5MvQVF#o^6s&SXT>R z6}G4K?RCH3_w6E`Lqs=BA)LAsK+;@``GH7efCd9Ar|c8rTyEq>7>h*jvxPqONr1aM zy>5NFdJdTl!zhqR?}xxbL5Flaj&vlUc3)}FDJiHvB}q8PAcM5kec)2(MYlHtP0W%d zGH85d^5N@y8MSm&RHwLaA{>Sl%DVx(GgUhF-ORQx*E;fFsSidlW!ZfR%clj@YyT&MWI>iHN&5bJ;;UZ)*o9;D4 zas;7qxuFce1Tu}NGkv6AH57*VTKFJ%$;a$d9=?z5T3^aYbn_8l8}1>dM`98ajXHTE z@j3Og3tcA}?wZ@Abw@5}@(wT?sRe1-zO09aex!X6|NA}YU&8r6q8aT?+tvBNu&3jR z-3XL!nKi3{E_Ek%OM3BI)5OxBynp|^mVG^!w=^kA*4&a4g*4f8gS2@`qS(WTFbs(} zNeQ1(tDY@ftEl;pb`oK0lv29eM--d$zW919LjWAtb-a%Q9wLhjMcSJv#&QL|pL)PB zO(-X6n|iuW2k5|F(?OJkp$`@GXjAYvMv?w-abE_wtvCEzTM`!}GAyQga8oyHMy4s1 zRx(RS8*w>J+;Q3BJ)op+AxY@wlMz6Td*pk>cPH2DT<&#ye-yqt0tu8>L7flrRiW17iLoI;4n`GlH=}B;?U!f^Xqjlo2Gc(3V6*>C8bQHOXj`#9Ar*N-7WFm%lo{K?Re{njh_n`QjN_3 tPg;|pV>Lh$FY8caWzes4QfdD>sl=RA+LuWszfUSZ{s#O6j=i@P0027Is?Goa diff --git a/test-data/gold-standard-results/virus_hits_db.tsv.gz b/test-data/gold-standard-results/virus_hits_db.tsv.gz index 6f3d4ed8cfdac7ffd6087f5b3d6c4c9b1b073ca4..36dceca7eba63518ee95e6eac4069648e3fa1d17 100644 GIT binary patch literal 11629 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

% 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 BwXy&J From e32b47d20aa7e11518aa00a7302bd7a4e9f892eb Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Fri, 10 Jan 2025 16:41:45 +0000 Subject: [PATCH 3/4] Forgot the updated snapshot in the last commit --- tests/main.nf.test.snap | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/main.nf.test.snap b/tests/main.nf.test.snap index 5dd01022..0134bccf 100644 --- a/tests/main.nf.test.snap +++ b/tests/main.nf.test.snap @@ -7,16 +7,16 @@ "qc_basic_stats.tsv.gz:md5,fd1a20ad7bb06eecaaa9cc51b81efa8d", "qc_quality_base_stats.tsv.gz:md5,1e75fe721479280f83d7e2f8c9fa975b", "qc_quality_sequence_stats.tsv.gz:md5,0d835c1d9417df961b4aadd7ac42137d", - "virus_clade_counts.tsv.gz:md5,3fcf57def952c95bf43cad8cfb268926", - "virus_hits_db.tsv.gz:md5,2232a0cfa4a2812621bb852c276ef9a1", - "blast_hits_paired.tsv.gz:md5,f2d110487d36ca58b1232f6d02aa69af", - "virus_hits_1.fasta.gz:md5,6024105b15a879de8616e54cb2dc3bb0", - "virus_hits_2.fasta.gz:md5,a08a14e81a6277d56ec16d04f3be7b8e" + "virus_clade_counts.tsv.gz:md5,89f68c2cc7912f37b22745168b2fc7e4", + "virus_hits_db.tsv.gz:md5,72e692fb3d168dc5199ab97ac4c58426", + "blast_hits_paired.tsv.gz:md5,6dce9cbf1aa6397a9145c9752aa4c723", + "virus_hits_1.fasta.gz:md5,941487995f144f88df4c2994f2fc551c", + "virus_hits_2.fasta.gz:md5,e285ccfb350fed7f0e73e29aaa1f10c1" ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.1" }, - "timestamp": "2024-12-20T21:16:59.561007756" + "timestamp": "2025-01-10T16:29:00.730413741" } } \ No newline at end of file From 4b76ce54543fcd64f2ddbd104b8aa5b26c43088e Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Fri, 10 Jan 2025 22:26:58 +0000 Subject: [PATCH 4/4] Added dockerfile for atria, updated the CHANGELOG, fixed atria to only use parameter to set quality score once, removed trimmomatic, updated adapter_ch to use splitfasta. --- CHANGELOG.md | 6 +++ docker/atria.Dockerfile | 50 ++++++++++++++++++++ modules/local/atria/main.nf | 4 +- modules/local/trimmomatic/main.nf | 38 --------------- subworkflows/local/extractViralReads/main.nf | 14 ++---- 5 files changed, 63 insertions(+), 49 deletions(-) create mode 100644 docker/atria.Dockerfile delete mode 100644 modules/local/trimmomatic/main.nf diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ca7e722..526d35ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v2.6.1.0 +- Replace Trimmomatic with Atria + +# v2.6.0.0 +- Updated verison to reflect the new versioning scheme, which is described in `docs/version_schema.md`. + # v2.5.3 - Added new LOAD_SAMPLESHEET subworkflow to centralize samplesheet processing - Updated tags to prevent inappropriate S3 auto-cleanup diff --git a/docker/atria.Dockerfile b/docker/atria.Dockerfile new file mode 100644 index 00000000..a5c4caeb --- /dev/null +++ b/docker/atria.Dockerfile @@ -0,0 +1,50 @@ +# Use Ubuntu as the base image +FROM ubuntu:22.04 + +# Prevent interactive prompts during package installation +ENV DEBIAN_FRONTEND=noninteractive + +# Install essential dependencies, R, and system libraries needed for R packages +RUN apt-get update && apt-get install -y \ + wget \ + pigz \ + pbzip2 \ + r-base \ + r-base-dev \ + libcurl4-openssl-dev \ + libssl-dev \ + libxml2-dev \ + libfontconfig1-dev \ + libharfbuzz-dev \ + libfribidi-dev \ + libfreetype6-dev \ + libpng-dev \ + libtiff5-dev \ + libjpeg-dev \ + libcairo2-dev \ + && rm -rf /var/lib/apt/lists/* + +# Install pacman first, then use it to install other packages +RUN R -e "install.packages('pacman', repos='https://cran.rstudio.com/')" && \ + R -e "pacman::p_load(argparse, plotly, ggsci, tidyverse)" + +# Set working directory +WORKDIR /opt + +# Install Atria +RUN wget https://github.com/cihga39871/Atria/releases/download/v4.1.0/atria-4.1.0-linux-ubuntu22.tar.gz && \ + tar -zxf atria-4.1.0-linux-ubuntu22.tar.gz && \ + rm atria-4.1.0-linux-ubuntu22.tar.gz + +# Create symbolic link +RUN chmod +x /opt/atria-4.1.0/bin/atria && \ + ln -s /opt/atria-4.1.0/bin/atria /usr/local/bin/atria + +# Set environment variables +ENV PATH="/usr/local/bin:/opt/atria-4.1.0/bin:$PATH" + +# Verify installations +RUN which atria && \ + atria --version && \ + Rscript --version && \ + R -e "pacman::p_loaded()" diff --git a/modules/local/atria/main.nf b/modules/local/atria/main.nf index e4901745..b91c0981 100644 --- a/modules/local/atria/main.nf +++ b/modules/local/atria/main.nf @@ -9,8 +9,8 @@ process ATRIA { tuple val(sample), path("*{1,2}.atria.fastq.gz"), emit: reads shell: ''' - par="--adapter1 !{adapters_ch.join(' ')} --adapter2 !{adapters_ch.join(' ')} --kmer-tolerance 2 --kmer-n-match 9 --trim-score-pe 10.0 --quality-score 10 --quality-kmer 4 --quality-score 15 --length-range 20:999999 --no-consensus" + par="--adapter1 !{adapters_ch.join(' ')} --adapter2 !{adapters_ch.join(' ')} --kmer-tolerance 2 --kmer-n-match 9 --trim-score-pe 10.0 --quality-kmer 4 --quality-score 15 --length-range 20:999999 --no-consensus" in="--read1 !{reads[0]} --read2 !{reads[1]}" atria ${par} ${in} ''' -} \ No newline at end of file +} diff --git a/modules/local/trimmomatic/main.nf b/modules/local/trimmomatic/main.nf deleted file mode 100644 index 6967e5de..00000000 --- a/modules/local/trimmomatic/main.nf +++ /dev/null @@ -1,38 +0,0 @@ -process TRIMMOMATIC { - label "trimmomatic" - label "large" - input: - // reads is a list of two files: forward/reverse reads - tuple val(sample), path(reads) - path(adapters) - val(encoding) - output: - tuple val(sample), path("${sample}_trimmomatic_{1,2}.fastq.gz"), emit: reads - tuple val(sample), path("${sample}_trimmomatic_unpaired_{1,2}.fastq.gz"), emit: unpaired - tuple val(sample), path("${sample}_trimmomatic_{trimlog,summary}.txt"), emit: log - shell: - /* Explanation of trimmomatic filters: - ILLUMINACLIP: cut Illumina adapters - * max 2 mismatches in a match - * min match quality of 20 between reads for paired end read alignment - * min match quality of 8 between adapter and read - * adapters must be >= 5 bases - LEADING/TRAILING:10 remove leading/trailing bases with quality < 10 - SLIDINGWINDOW:4:15 cut the read after the average quality of a 4-base - window falls below 15 - MINLEN:20 drop reads below 20 bases (does not drop paired reads) - */ - ''' - op1=!{sample}_trimmomatic_1.fastq.gz - op2=!{sample}_trimmomatic_2.fastq.gz - of1=!{sample}_trimmomatic_unpaired_1.fastq.gz - of2=!{sample}_trimmomatic_unpaired_2.fastq.gz - log=!{sample}_trimmomatic_trimlog.txt - sum=!{sample}_trimmomatic_summary.txt - io="-trimlog ${log} -summary ${sum} !{reads[0]} !{reads[1]} ${op1} ${of1} ${op2} ${of2}" - par="ILLUMINACLIP:!{adapters}:2:20:8:5 LEADING:10 TRAILING:10 SLIDINGWINDOW:4:15 MINLEN:20" - cmd="trimmomatic PE -!{encoding} -threads !{task.cpus} ${io} ${par}" - echo ${cmd} - ${cmd} - ''' -} diff --git a/subworkflows/local/extractViralReads/main.nf b/subworkflows/local/extractViralReads/main.nf index 47ed23ab..083c980d 100644 --- a/subworkflows/local/extractViralReads/main.nf +++ b/subworkflows/local/extractViralReads/main.nf @@ -4,7 +4,6 @@ include { BBDUK_HITS } from "../../../modules/local/bbduk" include { CUTADAPT } from "../../../modules/local/cutadapt" -include { TRIMMOMATIC } from "../../../modules/local/trimmomatic" include { ATRIA } from "../../../modules/local/atria" include { BOWTIE2 as BOWTIE2_VIRUS } from "../../../modules/local/bowtie2" include { BOWTIE2 as BOWTIE2_HUMAN } from "../../../modules/local/bowtie2" @@ -65,17 +64,14 @@ workflow EXTRACT_VIRAL_READS { bbm_other_index_path = "${ref_dir}/results/bbm-other-index" virus_db_path = "${ref_dir}/results/total-virus-db-annotated.tsv.gz" - // Load in adapter channel + // Read adapter file and create a channel containing just the adapter sequences adapters_ch = Channel .fromPath(adapter_path) - .splitText() + .splitFasta(record: [seqString: true]) + .map { it.seqString } .collect() - .map { lines -> - lines.withIndex() - .findAll { line, idx -> idx % 2 == 1 } // Keep only odd-indexed lines (0-based, so these are the second lines of each pair) - .collect { it[0].trim() } // Extract just the sequence, removing whitespace - } - // Run initial screen against viral genomes with BBDuk + + // Run initial screen against viral genomes with BBDuk bbduk_ch = BBDUK_HITS(reads_ch, viral_genome_path, min_kmer_hits, k, bbduk_suffix) // Carry out stringent adapter removal with Cutadapt and Trimmomatic adapt_ch = CUTADAPT(bbduk_ch.fail, adapter_path)