From 0748d486e94cde0a7766847f43491abc5e1dde95 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Tue, 14 Apr 2026 15:26:50 -0400 Subject: [PATCH 1/6] remove the hard-coded "0" for GROUP --- R/utils_checks.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/utils_checks.R b/R/utils_checks.R index 601f1685..3596e74d 100644 --- a/R/utils_checks.R +++ b/R/utils_checks.R @@ -295,8 +295,8 @@ setMethod(".checkDataValidity", "MSstatsValidated", .prepareForDataProcess) skip_absent = TRUE) input[, FEATURE := paste(PEPTIDE, TRANSITION, sep = "_")] - input[, GROUP := ifelse(LABEL == "L", GROUP_ORIGINAL, "0")] - input[, SUBJECT := ifelse(LABEL == "L", SUBJECT_ORIGINAL, "0")] + input[, GROUP := GROUP_ORIGINAL] + input[, SUBJECT := SUBJECT_ORIGINAL] cols = c("PROTEIN", "PEPTIDE", "TRANSITION", "FEATURE", "LABEL", "GROUP_ORIGINAL", "SUBJECT_ORIGINAL", "RUN", "GROUP", From eb86e66d070b16616d34a36a9e21fa87374c6ed6 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Tue, 14 Apr 2026 15:41:51 -0400 Subject: [PATCH 2/6] change group number to process qc plots properly --- R/dataProcessPlots.R | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/R/dataProcessPlots.R b/R/dataProcessPlots.R index dd3e1f66..3af5c5eb 100644 --- a/R/dataProcessPlots.R +++ b/R/dataProcessPlots.R @@ -261,15 +261,10 @@ dataProcessPlots = function( labels = seq(1, length(unique(RUN))))] summarized[, RUN := as.numeric(RUN)] - ## Meena :due to GROUP=0 for labeled.. extra care required. tempGroupName = unique(processed[, c("GROUP", "RUN")]) - if (length(unique(processed$LABEL)) == 2) { - tempGroupName = tempGroupName[GROUP != '0'] - } - tempGroupName = tempGroupName[order(RUN), ] ## Meena : should we order by GROUP or RUN? I guess by RUn, because x-axis is by RUN + tempGroupName = tempGroupName[order(RUN), ] level.group = as.character(unique(tempGroupName$GROUP)) - tempGroupName$GROUP = factor(tempGroupName$GROUP, - levels = level.group) ## Meena : factor GROUP again, due to 1, 10, 2, ... if you have better way, please change + tempGroupName$GROUP = factor(tempGroupName$GROUP, levels = level.group) groupAxis = as.numeric(xtabs(~GROUP, tempGroupName)) cumGroupAxis = cumsum(groupAxis) @@ -457,15 +452,10 @@ dataProcessPlots = function( processed = processed[order(LABEL, GROUP, SUBJECT)] - ## Meena :due to GROUP=0 for labeled.. extra care required. tempGroupName = unique(processed[, list(GROUP, RUN)]) - if (length(unique(processed$LABEL)) == 2) { - tempGroupName = tempGroupName[GROUP != '0'] - } - tempGroupName = tempGroupName[order(RUN), ] ## Meena : should we order by GROUP or RUN? I guess by RUn, because x-axis is by RUN + tempGroupName = tempGroupName[order(RUN), ] level.group = as.character(unique(tempGroupName$GROUP)) - tempGroupName$GROUP = factor(tempGroupName$GROUP, - levels = level.group) ## Meena : factor GROUP again, due to 1, 10, 2, ... if you have better way, please change + tempGroupName$GROUP = factor(tempGroupName$GROUP, levels = level.group) groupAxis = as.numeric(xtabs(~GROUP, tempGroupName)) cumGroupAxis = cumsum(groupAxis) From 241c30e7dc44c17f3f7ebb10c13f47830042204d Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Tue, 14 Apr 2026 15:47:50 -0400 Subject: [PATCH 3/6] use is_labeled_ref --- R/dataProcessPlots.R | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/R/dataProcessPlots.R b/R/dataProcessPlots.R index 3af5c5eb..d807c4c8 100644 --- a/R/dataProcessPlots.R +++ b/R/dataProcessPlots.R @@ -286,7 +286,12 @@ dataProcessPlots = function( Name = levels(tempGroupName$GROUP)) - if (length(unique(processed$LABEL)) == 2) { + if ("is_labeled_ref" %in% colnames(processed)) { + processed[, LABEL := factor( + ifelse(is_labeled_ref, "Reference", "Endogenous"), + levels = c("Reference", "Endogenous") + )] + } else if (length(unique(processed$LABEL)) == 2) { processed[, LABEL := factor(LABEL, labels = c("Reference", "Endogenous"))] } else { if (unique(processed$LABEL) == "L") { @@ -295,7 +300,7 @@ dataProcessPlots = function( processed[, LABEL := factor(LABEL, labels = c("Reference"))] } } - + if ("feature_quality" %in% colnames(processed)) { processed[, feature_quality := NULL] } @@ -437,7 +442,13 @@ dataProcessPlots = function( processed[, RUN := factor(RUN, levels = unique(processed$RUN), labels = seq(1, data.table::uniqueN(processed$RUN)))] - if (length(unique(processed$LABEL)) == 2) { + if ("is_labeled_ref" %in% colnames(processed)) { + processed[, LABEL := factor( + ifelse(is_labeled_ref, "Reference", "Endogenous"), + levels = c("Reference", "Endogenous") + )] + label.color = c("darkseagreen1", "lightblue") + } else if (length(unique(processed$LABEL)) == 2) { processed[, LABEL := factor(LABEL, labels = c("Reference", "Endogenous"))] label.color = c("darkseagreen1", "lightblue") } else { From 7483f5ee5cab0b282413a0bfb5ef3e2584c11054 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Tue, 14 Apr 2026 15:54:29 -0400 Subject: [PATCH 4/6] adjust plots for protein turnover --- R/dataProcessPlots.R | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/R/dataProcessPlots.R b/R/dataProcessPlots.R index d807c4c8..684a2c5a 100644 --- a/R/dataProcessPlots.R +++ b/R/dataProcessPlots.R @@ -291,13 +291,14 @@ dataProcessPlots = function( ifelse(is_labeled_ref, "Reference", "Endogenous"), levels = c("Reference", "Endogenous") )] - } else if (length(unique(processed$LABEL)) == 2) { - processed[, LABEL := factor(LABEL, labels = c("Reference", "Endogenous"))] } else { - if (unique(processed$LABEL) == "L") { + label_levels = levels(factor(processed$LABEL)) + if (length(label_levels) == 2) { + processed[, LABEL := factor(LABEL, labels = c("Heavy", "Light"))] + } else if ("L" %in% label_levels) { processed[, LABEL := factor(LABEL, labels = c("Endogenous"))] } else { - processed[, LABEL := factor(LABEL, labels = c("Reference"))] + processed[, LABEL := factor(LABEL, labels = c("Heavy"))] } } @@ -448,15 +449,16 @@ dataProcessPlots = function( levels = c("Reference", "Endogenous") )] label.color = c("darkseagreen1", "lightblue") - } else if (length(unique(processed$LABEL)) == 2) { - processed[, LABEL := factor(LABEL, labels = c("Reference", "Endogenous"))] - label.color = c("darkseagreen1", "lightblue") } else { - if (unique(processed$LABEL) == "L") { + label_levels = levels(factor(processed$LABEL)) + if (length(label_levels) == 2) { + processed[, LABEL := factor(LABEL, labels = c("Heavy", "Light"))] + label.color = c("darkseagreen1", "lightblue") + } else if ("L" %in% label_levels) { processed[, LABEL := factor(LABEL, labels = c("Endogenous"))] label.color = c("lightblue") } else { - processed[, LABEL := factor(LABEL, labels = c("Reference"))] + processed[, LABEL := factor(LABEL, labels = c("Heavy"))] label.color = c("darkseagreen1") } } From d2df26796d1f673cd42f033eee2a991dfd29b4a3 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Tue, 14 Apr 2026 16:17:21 -0400 Subject: [PATCH 5/6] fix srm test file --- .../processed_data/quant_data_srm.rds | Bin 13195 -> 13323 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/inst/tinytest/processed_data/quant_data_srm.rds b/inst/tinytest/processed_data/quant_data_srm.rds index 9505b35974018c7a3003ef48e4d193ef0d6f9c72..3edcd6d64e0ead37156721cc089ec10e1fc82aa5 100644 GIT binary patch literal 13323 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 literal 13195 zcmZX)bx<5m@aUP~1b2cj5*)%3+%4$huEE`Xad#)U1$VMIEEe3|-QC@J-@AJE>h6Bi zRnuM5Rb4$(Ju`pwhdc`D)BinS&wP;i)mNT7QIVywheuyJs7=c0%4+23Zxk&Pd4ffe z@rLF0%S^tBF(k+o@KDkKRfDMuTcmdU+~r%doiAE)`Er~;I_nk=Ztf}@?w7r)%+V&m z^K}m=S`#vok^{m6gW|6=!jc0fX5};ma*~o0cQf$d&>EL-Sf;esc34;R)Kc*jBHMo0 zxBuI~iZ(dH<^9QvA1J?O2VHT4@~tTlaXQ`|=>8;)Q9Dj@6cexwF<9#}X%XWUn1s^tkDWm^Ru9RnE<)DJ(f`*(VpU9J z?K)3nWo2c3Or%5SJ+eRj9XPk}UE8`_L`0TU z#B5<|Zg!q+YI1V&N&CKJ`Hn(U+8nhy-KQ3x;#!COxS(w&_|DLA#YAkv* z5PTgML1TdP5v~0pSwT}sB%bji#U@iOQb=^$bR|iiQ>U2gefbUDI=OGCz=lQGntl3_PyvL{IGLtVZ-?K`R%P{ z#n!eHXgjUxPa6)Y62m8Qv=?#0qHTv}5Ub`O9UNLp zZqcYa|EGK)baqajhxk^_e!P^w)?gssUie@wj}5P-`lR-go=gPO75-o9ePj3| z^CRi7#z5fJL*@yw-nmuiL?K@KzmgAxL&pBE(DNq0dfx*KP^XOGl__KKoVg_T9_fPMxCJPD#D!I{eN{DE9uSQ1n7e zSUR(=z43PnI!AqD6f&}5^z}>#ex(TYvuTcO0DmCNxkbP#ZangD@@coNW;i zazA}nJZxh_;I7`U^qBPzNbpIyN%?NHxygpGuTh>h=(j1T+=^yw|5L6Be|g)HXJXlv zoP>?;;rxCiFwO(_uhSoATRt*$ZHsHVcD$wd!)cyy-^{4yMd#D*R8^n_A9RU*k{Mp6#nl+ic;A8* zyX-rGY431Sh>P<9bm!lBn~oRkc(G_;M$;_tv<1YA065J^a-w1QI|r+9XC%qt9}KA*}KR1N)9KD9d`8|R95=6Tt0gJ168Ed(bV z0phRRc3E0j9fHcpTsNhAF)J>US?%@@`2)v?zqPIwKQ`f>Q?4MTb5Z$6_#?L2pT$;9 znz)9@OuJ&NeJNqw*9)F1S#^5D;tp{zfU!Dj;p-$VhOx+8tL21twZ3Jc_;dR{zB)_} z#w8Z1HFG?xghm9WNR>T3efFFdMXknN@)TEZ0e~M1ES()Jtb|P&Vn&wNb(0w^KE(=` zKy6mK)fTPAXndg^Cz*MrLspgWi3(u%T>@9gfpaEA-%A0ZAsvxR{H|p6FE`9i1H0Eo zgT81c^2z~-jrseiMwM(FrkL2Skypjn9?f2!y|y*~FIFWj9M(tTVgfWJKEDh&mRT60 zubSz*=+b(;hgyp)tPDF(dK%%18HfwO_-zse?JH2k_2=)h)7Lc-9f5AnWwOdwdYUh# z?oD&WO0!WKcCX#d=*Rd@(mB4drLsa-*Tb2r%>&2w$qt5Hq!3Bt4zR|i{r5HoPa6g+ z1n@dGZ1@~kJ1`2pFTYsz_W3^Abg|IndA#X{ofkyignoiS(WK&;bDU3GdU7R~In3tI zeWER&^XjCV>1;V=N~J|@*ihN>b zAk4gRbdQ9nrFtXA}6&Tv`tqVa@(*SX= z<<$MrW{kniggTT6(wAA%lb*}@aPyT%#WT_%Fy`v7`fCSydhsR6DhbT3b5Z7E%tc?~hHV&UK{Cqd(9=oyxJRJSj>>(VRb52Dp`8N91eYfrxyox+T zkQPUNjQj5orxMOtkkt;{^|DejSN6HLIC`?48KLq8sj%Y(5Tyi_v9u$TtyX9nk#;(I z&2(KpWEs;S`>5wv7E;?~qB1*q>w)t9MarOr)`WI-bSv;sCMG@0raf>K;s6mtL;Tg| zo__d`jCohN3eJu?Qdr46g!)7RluV!9UilIMUu>Mem!Rx9m~f&0-wpj1oiFRnoqI#^ zqB@O5+cUFC5UFkaq=jnw9z;s2wt%Hc&||2Y9C&KmAoKE6unEa_Jq95Q?w&4!=iHCc zPYKi1`2hye)2z`taLrnZ(?1+pwa&O}bI4nqy1PiUpz2`)obeLsU2JGOcq{P$Js_6> z6pqGc3sghdrUblw?XIkq94tGIZ~wl><3z3+c^l(S!Pv{Z)^-G2J0j5sYX>Ya*?j(N zI7FCi_HBZdP$(+v>mEkpm#FxvXL_qva||cD1!s72HL=D}h1Bd?UK#n4Omd$7z-g#m zQ@K4c6;xwwvPA%I3G~fW7B@Pc+1y^*bY9dgykn4)U8RsEX_-64k-Rbcl??o)XnEUf6TB-(qK)3I6w}uM#*$B|U+!lYX7_3#b_8;%*NY8yK}x zq1`Nw^7K4t$6IEzk4)WvJH1ZZ(-f-#v}PMPuk))}&?v&$uuxM}gI=uUvoRYHOnh$_ z^CCv$<3XrVEnBX8>Z(gNq`lQYK1f^~zH&l0d_Kl?NtI3!)0@~qVZS$1;dO`A1}%OV zR~yv9eh*zk@Bc5o~QnS5W0%jG_$!y-Tt&3OSo zlk7&PY>2iOf%|@~!~u)rHwTYBKujv&e3S2jiwToD)cbN%+T`|aO+#8_G=%rLYie(B2$Ppvm=E4-fNKU}K@zZYuFk~sPQ({0n@RAk z98h<7IP}}HarWH0AmFSHqQr(Y50&*>U zh$Nz?f|-8DdM%ONS9|ePd3RCeBd@8p7E=fQ_f6gAE`Dlz;+nWyUUWX$@%VTh(LqMd zO%Dv9!*HT%+&WGqH(%AafK%PWuS5}crSc-v{$H{+=0!9?LeRsjVX8s2j;DaDCH+Uv zQRxlN!&sAtdNFs6?7s7N%L$F5utxj9xJn z88;>L`~I8{J@qK547OH!_^#RA!}!EW0xO;3oW5dImP^p|_&U8*apSH>i8PfK)r0G6 zi!zBm1^CAKiiO(#M@21E?1hkF&(3X%+h3ib z)#}XDtIDsUUc1rF;kLlxLhWqO$iy?;c2sLUMZ`WlGRR5+kLy>-b!9G zNx0n>jM7yeIf>cs9%AY_b;^;qQzvO2@?P<#G|)s_gz=JGO67x2!sJQ4SXRg9khjKL z!$5MZ_rdzZSxrW#=k!zRdn-WsGF3F6C%RMX5)AH24S@T^qo9wn z2W8UCprCydm4F5Tp!jPA=U)NQ6s?(CW0$^g5Ae8v4}eeE$}^A*gGE@=%U3^k5^N&X zmLtGmGZa6m4v~L zv~#a&6+(H+f_T-mRtkro@WM91zYbnnu}LE%|4fE?XbBJHFTCbOT)H1NvY#H=87bie zw6t$7r;>3!+7Ag#sqICXs6X^fV})`LrfU6RQy?FzmD4ZThwEW~?7{oIBuHX}FhUse z6)|%=r&I2iaAMq|^Sor#mS<YD*BUcCiMO$S8)z>?&nRp>A*HXPlJ}te+ z1eV+=P9Rf9umBVB=fc{bWNj+5{rPp;`?*U$hhL44=3Lb7`k3iwjpSbDX$0dJ>|!K- zzBjQ&w>?RidEg+0+YQKEbaA$IN0|BLhs#;Ss&2dU7vTsrj}Ba>*ZeQCniR)~8EsuYc&@ zzf*E}L6!GQR#M&)F1)d8%DE_^*#d-~FBd!a5|fYdJIg znh(0vWjZ3he@BAJwdmAV-w0ZJ*5|Qyn#Fpn1Ppi=GkBZf4Xxm1>|jUK)$+%|&x<7K|Ak&8NmnsjZnh4-;;3btbiIOQR~u)|o`R35ri<<2;<(qDvS} zrx-J=P;MUeQ*JK{;b3Xtu^*4a8ReSZc|4k$2D3LoOhm|vYn!?`$2_7Qy(8XXx#Q3- zVt5i=Ca9Jkl_D9O1>{m5_=c1T|u=GyR;CwP#9fO%s!mRARWGT3I17)kl1Yi2F zUYzc$|MlH$T^&bq742efn>Rpm_+3dFVQmhqsEer#RU3NFe{r-O;MT7uq5iD=V4kml z);a!7ldf_e3?;ls2ezNSE;eRSHXP@{#p-%8XWV&^oXjNZA4tnm0$wIBJIYf3K0h_i zdpe~{d3ZTZWZ^*^xECw+EFFoq%1Nw4@df;Cb<&jD<=OIWSpNEf$&hZMB%@hea>Yh_ zN~l1PI;?mh$g&EWDY8D^BQw$}9%{46SxOIG)e*fptT+-*>ofQ*~V( z&QJT@TlUT6aV^F+y-5QOLfJu7$(s4MracLP9+5;Q-SJoGoS`PI%)nZWs_3VlDx01a z-@o?7b$MbyN`tB&e?jL#XU<&1jVQL^B%^f+&FUx^7Z~V8Mk<&>OuLEptzV$zW$hVr zTd{}Hd2d$F9S*Cth7(1i6rojTqkoFx5?tyjgeucR3nkz|WCy7fR&%tWy<$)-9g{KA zheKGSiC&J$dm9Otj9HkR<}cL$m3RlWT>Y=@Q@V>J6{H+@ujPIoGb9xDK`_LS7G3MC zOb%=kRJwP9)UXNzVb1y^V_p5PCa4&1ttYVb0AQEcGlTh+S+%>;z`s-?#nL?WFIA-n zpUSD6DTyx!P|io>aI_%V+@ITo9}zQLPk7$%o|@jL;Rzt z#8ka9>gOUDqXEkzr0EL&{%XsZUoH3*p1K)G`0^PRenTNHQ?J^tB^J9Q+M%r6%i-~Q zqhlm$1>9BxMp|c^5r2!ch0cT`FoFVujf@j^`_(o&BNlV_+bz%9D8KGcht_b+cJ+`x~2jPFGgSjy^@?8eMg zv8SZ^i5f>i^+e|PnV?L}HC%x6_A4dzb`Sp!d^(a4M4YED4IP=69Zq>Rh0?nq=4sS4 zLCUhlH!I;=gbBy**e225$AJaYQJ})WpD5NNIIbZoe)}5;NeoXo(Vn$$|DVW$Z|psh z*qNAQ+ZLz4I`ANFQ#Hv+;ZIBslLwQLJi&q{*(!~kU#3!+(xFfV3cIHFRM3j~*5J_! zpMF?4AeQD#7JP{Ux4^}t?r0$Fl0TpT)}ZjaD~_o^!Q|un(ZTwHrmU%eK9Q0rHhZ4M z33|~&Dl^FHhDMSrNy?k9J}0(W|u3htQ|3i?;~llS$p!-)PaOuq3Xm55PdOxVWblik9!?lY#WvqjNegVI8*%qOaqnKpv@}Vjk3Xcx)f7|>f_(<7 z^-%@CYfM($*T-RaJ=y8EE|LZfcKE;_6BGR{NYro?J;vXj2EE2OC1ZJb_9!^f3^*hd zJWazd9%vN2U*Qs9H<_aBHb9MYV?mi16MWR5OUq*cGLbZ}^8*8j#pKaG#rS$5;DQ5` zfZw7ozL7ps+{lIUKC)Zx`qZ7!)%JYpH6D23X0cQksa%(BF7|6Q#y1KR(Ik!uH=S1u zX|{-g3!Vk%2o`c&=foro3Rfns_<-Tb(X~d2@>cw9`Xw}`TGTB{(lUBVT9ItfNq^$X zzmlw{>vxE?u&Fjy;gndw>MZ1hlvduK!Q-_m%U{sMt0)m%oa_~1CrHgmfYz=^bL^$41~`}Ici$?8>YHcGMC1?W z^Ob%t#qY>ZoI^x$T3M?aAc7}swQhGKkk1$kb8vL_~JR5roc zN&C=mpMa+l@8gwLm_`p$+64WdEbE4QanO%9kD@P>^s+FHIC2oDiM6{r4Vga>Tco5q zIlR5j-t`@zkRo?dgU?4N6&V7Axq&ZEb5&18H55MAT7S=CXw&#EOJ6hEc}&Dd(vN8w z*xYrNXdFANq?!tygc^t8$XQ_zO6y??5$iv6hLU@k4~{nGin|>RDJ$nn#kLQI`Wr zj;jJph1BcjdM$k5F*J^16=T~J@fj`B39#k@s+#Xbn|2I9JT!6>X*G_+EEqtPG8jrS zAaKT<&i7E(W4POk!+6zY`FyqSnXKQ=raQ_w!_t)leyI}cb-kq_!sZ{^P>JroV`%%4ExpKL^Q*z z(p04g)&y)uawDZ1317*8_lGAAKy`CnWb&l9%`=?q#VQya-99m*I;Rlt=!DXt;eexD zuCTGEMi<1#2h{0Ng;!<_@n*a^|8<_E&eu7x9Ix!Pzf{MG*OnbUVJ65DHhZV9&P9cB z*~|$%S&B7!N3>ekz84-nCE>LmvkrY)OL@N`UkF+eA1q;~#=AsP)|bS1u*NX7BgvMAw2~HQ{eE)nKxekv2d4n@ba z++;!JWuI|CQs%32)^ZyQI-G4dAmp+MQB`=@MvGO))T`_1sYvzE@9NiLc-CMWum(q} zpIAv%O(tkBSilCTp(q%Try*MwII}OT$%k;a&(F=aX2*jUm!AUZk$!~Hs(YJZ#b-3@ z6_@G4XorL;VHxulqM!Px?(Tk}Z}IBBo$HIg_BbJ*8H6i4`_cn`v87PE^~hV8B2+$> zV`@q?1&sN2NV}Y(6h7I>AC!@Fy&~%5fSSksagCq<*^Xz#Yg_!T!M%i2uE+_#V)qc! zHi2}K>TwsAjIZ^6`;MV3ys5w>%|le{F!zsfRwQ7Su^c%;-# z7Qgd|rTwx@dC3vs{A=a%_X4a@8SqweYZ*CqpfypWodu%#;>*gy&M82NNRi8Q-evS2 zv^V%iRV4qBE^6`R%O!)o7LCOYOa%64$2wd6G@k{l{kvC{`1lY0)4f&ymd1Wwwfd)c zO$b{6BLh~J@rAk17rQWVgR*{?t%Xg2GssBS8UnU_6ti`VTY!B=`bIYa3g90tYd5-% z+|Gi{{w8){uV&En&Amgoujkcej*cKT2?`MjjW&R&>iTFo<#)Uk#`BLn3WO;w+MZ+u zd0`_R2|ovaMrzgMYxmwbvF;cyMWZKMDNVXD!Vzx_RJu6Tr!J}9u2c-ed%ewG^X=a=TMejGV;jH*i8FHsj9T5~r$m?@A?M>ly zor99cdKAG6Wrm7ITB6<6>Q-(iHCugIaeVS*wK1|JPH8rU%0*%bSFt)HA zEVfcTu``L(5qPinH(@w0FYjlW^1>g3JR4)287YF7T^m%qM2uHj%r$0+E@|}?QiXgz z|9HFM)a!1*%yYWGA|`82W$pkzpF@C^7w zV_ppja-T#aPOV>7d3~FvC_TRX*TP6L%Q?Y2lwYCr^I}+|KotjK_ zAY4#Bn%Pf}WHqSOcLn5`)Fh|Y2GU_2eHCF6mCj>kG3;P#M6Gw>&G0xeSDdI$GS|zH zJ7ksBaA@rfTK4HMFYHIFKYG1+Skp$;p8VW50V9?t(HPaS21TAdh{Aw#cL*wW`Fr~yy>M=-wb!o=G6j}m_gy77j6%Ma{=+$t*U?`nZa>1U-2 z93X@-tC*iwq42@QRmGEBbph(DJ}Xh&O~`!w+Xj9Cc-xhf)-uKqVtI%2IPPGU$*i<9 zRxTIOL#6gq|4H`ACGg7PJH37-G~Uwx1bRYbfBZl)S8kc0Ub z^vuQ_;l`%&9-4oX24nE!EGlmzYm5B4Xl(UGS`#D(p;-kscXw|UP&ENcRb=LvnLdG7 zRkfyHvG={bft6TV63GT_CTl~cnEX^P*H3o&SxUH*2|4>@A9*uwKIQ8*OK zG91!t|70D`XBlQwL3tl^RY8o%r6f$uba9UtgJ4VTuzo)*H;GMt!)ikDcOCgx0{iCfGgXsOJfnqa$(pQcY#{b;9P;6L zc*ouH?5iv4+v%zqB4#`QM0Lzeh8^O2TU~9w!-sIS(9MZgrI+`sXfU$QCC`@cPwVq< zq0(5DCXPuYo-zma-qoLQvuN`J-hF(4_sg-Kza!pxOddJbKhgXj<*d^s^#k%&vt4t` z8i}{fcA(0j7~$W!&W^8tFncB4S^gB!VS}sZ0)n6x|8=gYp4)m*lHcoBLSWY7(|r4= zYFIF4&qfmlcoP8-I$+;n0&edvX}&(m144s|td7ixwPGR*$-)WcZu1kQ$KK*CFN=8) zS(!E9u|Va;4nIn?a?ff|WT7rEg)EXB(~4qwM88ZJDq64Mt?EewurHV33N8O4{JJl0 zm@)`dlnZP9O5-FVOGmgxM>(JHvLA8!m61X)zQHj$;V?J+`f?6t8?#0cTdTYS2A54j ztV~Tbcr{!uRj~o4LE%iIUl^^|+Rf$e@9#kEb!e?o4^r=*LY16;6%1sU`TTt}F)zZA ztv|K~hGT;vyVeS?w|$=F7f+Ua<;nrU`Bj`)mX$|o*w4YwMPC(M?@>khyG$F!r|3!% zZ;EfIK_R{K@sF`*z2MH*Z%%o)aJ@ZDlodslfJAaZS<7{bQf_Jhu=#6#ZjT+f(;VSW z3*n-lg9_7_gYFbMEIfE6Fc9~GC@LPobu2Te6~2}t;{o>l+?!%vx`sZ3c&9wfnW?ak zsh5$0=QV&e>odA1Sb{EE=w$Rwr2zFm^kM!f(tyIFn(w|p;vmn?S6yw#lf-DHIa^Pz zP-IU?pzd$#7bTH%inG;+ym6PxKg2Gfhrcv7u9?^JI3u%3NLt|7`U%i~Lb!x?d?5dL z>*2d)ybSsdAfh%Mhe~QqmY90v?U#^n4vU-AIrR;zfW-_5?))j2_*2iA>kB2|wK~sm zv7kdzRzchSy8^> zB@X>WxkmyvzL^gkc5F^L^5yGQw_;)@!bdfsufqX0F@DLsRD!p&L-VzTLi0FoSWJYOq zzTs#_2PenE|`)880XkFWl32eOjK<4E`}NC?FZoGJiDYrGqpaAeK%=+>a24lu}$qP(20zY>2L{;CeNsVzsfj&KtsGxP`&Lhmm` zGiIrfxETPUvn7gJMA}9N2W_=pE83q-!HMzkdH?A}`T>9t`k$o8hroFpu&jPEOWX$vW8UH-`}+3xe>yz&q`HXIzK_O-M68FYk42N-LlITwgl%cq1>XzG}?uik#KOV)}6;cfCn zvcX8u(HD)aIuSgiy#i~Our%rXFUA${f0`p~u&38>@Ao#son2u7e;QyLc*VWulOmr8lv0ojqeyo^`K#l-;-uny7s=A-bIciSk z?oI&ewb>GP7F2X?b^I<1Lhwan+m%bjuzB)4o?Q7CJapscn!t<=;pC6&b=qzWVNYO< zS<|+$Vs&oI15Y7ba&_f_{0@c)WQWC%{v5qLE6y9yn6*^pz`nkc4$)Qm*5Rwz_ulal zUCU&1z`n%P;EB9wtdI`S`aEhTull%s_L}CuqvuDxc2yAJm~O^S8G?(1I&9IPa4061 zo@K`EVc(3z551#8Vw1;tD6Iubw=-Fj&pBZB1}U=z40H18D+}CFaX#-EpYS%Opula= z{yZ}y2ml{P$~DZeO|G+WdF(D=lry;t#m%FHmw+#G>g{RnYqGOPj{}0&r^k3r4G~Ip z$S2NHaB1#czo=PiAkvvW$i^o(7-f*toIj@ z&iY0sQyeYgO&UCE^mXb(cZ)ac6^hKGVpu@)vrBkqiDvLuI9bJj^sWMWe|Zn`1_Vu8EwV^KfMd*2BFN`D7~agz5?3Vqy< zuDyzC0^g!BYJutQ+1uV(>Y;P!C@jOU-NyuiggOJmr;h#f5#*a+2m<{w{71N zJtaS|?_WKm*oPdCq*_jgiFm5C+;qVKxQf}#Vk;^8H-v@rMp;mj!(0p4wVH6iuaFn- z+;$Pq-Q-700?5RXE;QRMezIWBNChgt{`oGy{a)Y>OEL0-&g;iGjH}Jx-GA^#e#vG) zUas~}$%tDTa%~3wPMU2k8;NOg-G4wQxBbG>bM8cBkq8av`G^g&pOcGOeWJnwMUd5q zGSoU^H6?Ye z7ji`z+7WOea;ko zSg+eCgLAgt+{Ed&Ab@1^8|W^$N&o@u4y3=Ghj4vL;Fu>*C)E}f zSW?OWrJ^JpKUQf;yyiV3#GvS226icXv5@`=$upY^PHhLHD3u}aoVI= z)$aa@<#%M51F-kRy|Rd9)SX%b^R<+|H)l>xxTRT>qs@H|d74FAg7J5wrZUCRqp=M8 zb~af^no%#7!mj6ie{rI1Y9~aAidwmUP!hPDyo{nm+boE$16q&a3SjIg|L04>PTNZNr~TLYHOOeb6|3?uJ6;+#z?b zu4E(V+sNqiWE~G~Oc|muZ5- zLX62H7r(0yo}&ln>5YTJ+zIKA9D}#tzIPWqM>Q_f3P**0(?X@|ofp=(Q1ZzOLEaCo ziLB1tiRq0VwIdCTq7VO?DFeA;A(&e~RA09A!_GU@g4lkByP@VkIgQ;yyH$55v-${R zZz5Zsl!==L=Q;^$Y8da8hIIm`8sFW8R5n&i&o=8asuSbY16$n6fjreCY_!Ma7Ol7V zmrE-*%SdRfo#|kRm{codQ^AVNuj%j=Spz0nc={YI zFdmzKW?$%bphR})h;-v9C^nN1q>_N(LNb+xo zaw%GFl7kjS&82>F#Z>fiivoWeLo=;^P=gT8&ux!FcUj(Fa@1_%f7JO6edrP;@)13A z*!2rvE2jNRLBN-4)y03nTS8d=clrG1ooR9&&Xu6mG_YUks=Rd`L-ik0OGiIY(O{aK zP(bg?^0by5t?rHpJ5=h#Zx|-yGc?e+9$0#|R>Ose7>LgnvPRcMR1t_NX^|QlZg%^eR@N06(eKyO0nfYLpbR?eM3_XHsi3X zir%UvuVu^`ZBy%u75q)!!~nJ88iD&@@CE!G#5eI`5K*xPEz2Dz9nGpaC5gEY;l~x2 zg)d4hkMrxI5PKs`Ltpg{?gybolm;BoukzDfGT>m;s?MM)S$bi-lZNs`>FO~qvY*FK zx4kgx;3F{Vpp)M1>*4$I#zUN7r{C?%TfxNz`J3OzA*{Dk7wuI6(reK1Tc3&1+u6|V z#l`-|DTQ2hmXOFRK~UHCG8E#K^Tq0WW23z|VK^rqqs!73( zDd*5tn`~P>{%_=*vVN&IO*X{LIQngU$2vO(T1Y6Eo22FH0fMfVHK$F}H-Q zn~79fS)7R}$92fa4r|<#=fn#nj!^CnwbQ+u^<9xbd%@(Q`bT~ZpYA Date: Tue, 14 Apr 2026 16:21:13 -0400 Subject: [PATCH 6/6] fix profile plots --- R/dataProcessPlots.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/dataProcessPlots.R b/R/dataProcessPlots.R index 684a2c5a..cd2e1567 100644 --- a/R/dataProcessPlots.R +++ b/R/dataProcessPlots.R @@ -358,10 +358,11 @@ dataProcessPlots = function( } if (summaryPlot) { - protein_by_run = expand.grid(Protein = unique(summarized$Protein), + protein_by_run = expand.grid(Protein = unique(summarized$Protein), RUN = unique(summarized$RUN)) summarized = merge(summarized, protein_by_run, by = c("Protein", "RUN"), all.x = TRUE, all.y = TRUE) + summary_label = if ("Light" %in% levels(processed$LABEL)) "Light" else "Endogenous" if(!isPlotly) { savePlot(address, "ProfilePlot_wSummarization", width, height) } @@ -385,7 +386,7 @@ dataProcessPlots = function( Protein == all_proteins[i], list(PROTEIN = unique(Protein), PEPTIDE = "Run summary", TRANSITION = "Run summary", FEATURE = "Run summary", - LABEL = "Endogenous", RUN = RUN, + LABEL = summary_label, RUN = RUN, ABUNDANCE = LogIntensities, FRACTION = 1, UPPERBOUND = if("Variance" %in% names(.SD)) LogIntensities + 1.96 * sqrt(Variance) else NA_real_, # 95% confidence interval LOWERBOUND = if("Variance" %in% names(.SD)) LogIntensities - 1.96 * sqrt(Variance) else NA_real_