From 40bede0c2b96b5bb496eb23a760a192a3075b3b9 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sun, 22 Nov 2020 18:47:13 -0800 Subject: [PATCH 01/35] bugfix remove sys.time for weird error in R 4.0 --- .DS_Store | Bin 14340 -> 14340 bytes R/FilterCells.R | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index 81914b4f67252247a22d169e8ec55185b6100a30..18e5b820c2bf2a36e2c9fb7519b302e6d21adbd4 100644 GIT binary patch delta 602 zcmb8rOGs347>4ohu^P_Fll~`loSQjf3KIj9HWP|e17nv->1II?gr+W}ypUAtIObx& zs9YVoC=pZ?g-OC_7b;vtkP@~?ksu@5xXeZOHXWLRwtc&gXZ8M)9m$TdD#esJ>FD=6 zRY>e;=PH!A@hBpkYUqi51LQ?QS+F+ zCi7rRV|!a&OHZ>RHD@n^UUM{W&FSLEdP$!q1yU~6QY-axT;eh)mt{o8<-R}4N^sOJccG|@^YCpgI|`Z>c{ z&T*a#rCjA2*SW!6M!Clrle}PxX=a(@9g8gSnJ;E4CuZBeBev71{X5A0&mjFxR<^RQ z&dJSloXPEK&MfsBYC_XzJubI%U8&crGBj=0>2iCFptnp{4Vqf^`}Ky5 zjhbrG)rxejG^%vfsjKDby4i?mszz6~bd4HYbvv(gC0cRhe;B9bwS2G$eqZVEp?R3#ioL>4E_(M3zMJ_S4mSL`NlUv;8 i4kL^+!9yPLm?u1EhI!tyU^?7|sib2-Pp$O*$o~cT{FX%k delta 556 zcmaLTOKePG9ES1#Q&s20!8iBmbZSnOsW6cl(@sZAv?8UQNGzypBm@l-nh+ILQl{xf z;_``=q(UTExO9ruG$B}6m^PY-OT`6{6R2rnU$@N3YtE#)9Rc3M(F7ZmQjen(=Rj>#TZ1?KRcRVr{Tin(C;jN{e;1)oiGYsmh9Vt<_?> zD40r&>ZT&$e*s73y?m8PN|?nQ2QK8GEq1_CG|}RKwUJ>1?GD*?cCeFu)7XyF#R+;j zOO`$d@1ldJxx!TjxXul3I*9kExX(id9mG7tJmneBdBJPm@|kh%3q^A0{QYKbw*4dU E7o~)VqW}N^ diff --git a/R/FilterCells.R b/R/FilterCells.R index 6ef51514..54a89ac1 100644 --- a/R/FilterCells.R +++ b/R/FilterCells.R @@ -99,7 +99,7 @@ filterDoublets <- function(ArchRProj = NULL, cutEnrich = 1, cutScore = -Inf, fil } ArchRProj <- addProjectSummary(ArchRProj = ArchRProj, name = "filterDoublets", - summary = c("Date" = Sys.time(), cutEnrich = cutEnrich, cutScore = cutScore, filterRatio = filterRatio)) + summary = c(cutEnrich = cutEnrich, cutScore = cutScore, filterRatio = filterRatio)) ArchRProj From 4820aa76901541f7c5824000f6bd0e4a675b2303 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sun, 22 Nov 2020 18:58:48 -0800 Subject: [PATCH 02/35] bug fix new uwot save and loading features --- R/Embedding.R | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/R/Embedding.R b/R/Embedding.R index ba59be35..c7edb013 100644 --- a/R/Embedding.R +++ b/R/Embedding.R @@ -207,9 +207,18 @@ addUMAP <- function( } +#New Save UWOT +.saveUWOT <- function(model, file){ + tryCatch({ + uwot::save_uwot(model = model, file = file, verbose = TRUE) + }, error = function(x){ + .saveUWOT_Depreciated(model = model, file = file) #backwards to previous version + }) +} + #save_uwot does not work because tarring doesnt work for some reason on Stanford's compute server #Adapted from save_uwot -.saveUWOT <- function(model, file){ +.saveUWOT_Depreciated <- function(model, file){ file <- file.path(normalizePath(dirname(file)), basename(file)) wd <- getwd() mod_dir <- tempfile(pattern = "dir") @@ -243,8 +252,17 @@ addUMAP <- function( return(o) } +#New Save UWOT +.loadUWOT <- function(file){ + tryCatch({ + uwot::load_uwot(file = file, verbose = TRUE) + }, error = function(x){ + .loadUWOT_Depreciated(file = file, nDim = nDim) #backwards to previous version + }) +} + #Adapted from load_uwot -.loadUWOT <- function(file, nDim = NULL){ +.loadUWOT_Depreciated <- function(file, nDim = NULL){ model <- NULL tryCatch({ mod_dir <- tempfile(pattern = "dir") From 523cc7cfb28f0f570846ee88af3de87a3dd529d2 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sun, 22 Nov 2020 19:06:01 -0800 Subject: [PATCH 03/35] deprecated --- R/Embedding.R | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/R/Embedding.R b/R/Embedding.R index c7edb013..e0ead19c 100644 --- a/R/Embedding.R +++ b/R/Embedding.R @@ -211,14 +211,14 @@ addUMAP <- function( .saveUWOT <- function(model, file){ tryCatch({ uwot::save_uwot(model = model, file = file, verbose = TRUE) - }, error = function(x){ - .saveUWOT_Depreciated(model = model, file = file) #backwards to previous version + }, error = function(e){ + .saveUWOT_Deprecated(model = model, file = file) #backwards to previous version }) } #save_uwot does not work because tarring doesnt work for some reason on Stanford's compute server #Adapted from save_uwot -.saveUWOT_Depreciated <- function(model, file){ +.saveUWOT_Deprecated <- function(model, file){ file <- file.path(normalizePath(dirname(file)), basename(file)) wd <- getwd() mod_dir <- tempfile(pattern = "dir") @@ -256,13 +256,13 @@ addUMAP <- function( .loadUWOT <- function(file){ tryCatch({ uwot::load_uwot(file = file, verbose = TRUE) - }, error = function(x){ - .loadUWOT_Depreciated(file = file, nDim = nDim) #backwards to previous version + }, error = function(e){ + .loadUWOT_Deprecated(file = file, nDim = nDim) #backwards to previous version }) } #Adapted from load_uwot -.loadUWOT_Depreciated <- function(file, nDim = NULL){ +.loadUWOT_Deprecated <- function(file, nDim = NULL){ model <- NULL tryCatch({ mod_dir <- tempfile(pattern = "dir") From 4df7d49303a5b4c0a7d69ef8af2e65d3e862df8f Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Mon, 23 Nov 2020 09:05:09 -0800 Subject: [PATCH 04/35] version number --- .DS_Store | Bin 14340 -> 14340 bytes DESCRIPTION | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 18e5b820c2bf2a36e2c9fb7519b302e6d21adbd4..64133a6900dd3db7e172aaa8b487916cad075a52 100644 GIT binary patch delta 373 zcmXBK&nv@m9LMqZi%p-8Z}@C{?Q8q4O=c6)B3bfdHpEE6!NqTi5-SI7(GmxmTt0t%$2~BJIFI@ejyRF2r89XOGufcrASXmCuzNy`wYK)$NvWsWRxPl#3=GADo$( zpX;BAPDvD~D(5e`dBSAQFHj3D&eHO#8ed~TJ{mMR?5bm0k=3T#6^D#znzXCM({7Kh z2#5sZDO-_MtMKT$$Y3n>cT~K3H5X${Wd5gKtJE#7g|5Z}QWu$4dNON{^A9ycD1i4O5sR6sK)Eq)SRrlJ4n=-sywB=?6w+ z!wd_YC_@!|XhJgr2%-%==tUp;F@PbAU<~7!z%1r4k1!&LVhPKLVI3QYV-s80!LAE? k*vA2maEue2;tUBSafNH#;1+jyz%yQ@YIR(!7OoWk0!bcIu>b%7 delta 304 zcmXBKO(=t50KoD0?_<4Bd(5-Vws+gRSh1SRQlh0;&BuI{gxr?NO;|Y~vSdZ%^cImT zk&9wQIJ!7+u#)29>aeSF5j+0-{qxy;_Tt+uWR2OE>K~9p)_pW-EjlM0Z;o2!bh+z1 zUSC5~)G7r+R=TlWH~fL18Itu@&M+*~6VBKprc?!86odYN(Ht>NRiW#}zfH!>7NIh_ zs{Bv0RkrDBTBz!>#$|_43qn Date: Mon, 23 Nov 2020 14:01:57 -0800 Subject: [PATCH 05/35] handle error where spurious fragments seem to be 1 tile above max --- R/GroupExport.R | 2 +- R/MatrixTiles.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/GroupExport.R b/R/GroupExport.R index b13b5a1e..84d1462f 100644 --- a/R/GroupExport.R +++ b/R/GroupExport.R @@ -323,7 +323,7 @@ getGroupBW <- function( }else{ #N Tiles - nTiles <- trunc(chromLengths[availableChr[k]] / tileSize) + 1 + nTiles <- trunc(chromLengths[availableChr[k]] / tileSize) + 2 #Create Sparse Matrix matchID <- S4Vectors::match(mcols(fragik)$RG, cellGroupi) diff --git a/R/MatrixTiles.R b/R/MatrixTiles.R index fa22896f..b7e01761 100644 --- a/R/MatrixTiles.R +++ b/R/MatrixTiles.R @@ -191,7 +191,7 @@ addTileMatrix <- function( fragments <- .getFragsFromArrow(ArrowFile, chr = chr, out = "IRanges", cellNames = cellNames) #N Tiles - nTiles <- trunc(chromLengths[z] / tileSize) + 1 + nTiles <- trunc(chromLengths[z] / tileSize) + 2 #Match Cells matchID <- S4Vectors::match(mcols(fragments)$RG, cellNames) From d23ee9d73b4d6a47aa88ffdb78f57391877ca857 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Wed, 25 Nov 2020 23:44:24 -0800 Subject: [PATCH 06/35] update bugfixes --- .DS_Store | Bin 14340 -> 14340 bytes R/GroupExport.R | 2 +- R/MatrixTiles.R | 2 +- R/Trajectory.R | 4 +++- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.DS_Store b/.DS_Store index 64133a6900dd3db7e172aaa8b487916cad075a52..b4b029e000494a2f2e504a0b036bf9ee63f3eb31 100644 GIT binary patch delta 428 zcmaivODM!q9EE>pJi52JxPLRl-?-DvVQFK*g0itv*6fwU>};If={ueJqNCB#Bfnv36Z*y%(i29Np0-=HyT~5DH$1RJ zr2fcMp1fcw{e}}G7x}4<+NhVtXoh06K|8wGwumo%Y-`{mO*J+(x3vB}bfl$cNF&o` zcVuOI3VizA>C!#<|>zP>p9cZ%HbWb7Ahf68Gp*nahgSiN=XZ2Pd_tJqRO}o zGnw>TRk^5OvY*S81PzF4F2}h{PS6?=WU`gZ)C3KQdT!u>OJaG!gx1`DT698ZbWV5l zNU!uxpCF{d3L8v#;X?@ms6`MV)S&_G=s+jB(2XASB8)x^VhF<+!6c?IgIPqdgk`K? s6)~(~9R-`%!ZvoXhkYF25GOdr1uk)gYuw@<&v?O`b~xSfg{*n+H{DcUQ2+n{ delta 430 zcmXAk&r6eW9LGQJ`GfD*$MXB^*`tr!Gu+tbqGXJPI6|9kHf&oFtwR@=W`RO%Ll5FF zhPXgcyL_Rfh;D`2LDUTjy$0f8As*@w)ISiOJa{p6@7tT#>+&k*i}}rvYH7SLVVjmC zZjC<~9nNLbqf;-o4^$5NKr~qhVnE?OZ0|5(hilVO#5_5 zf9W5c(i!T|04rMH!ZidC#%)9pMGSZG01xp9X*|XNo?-~kFpQVTB8NOCF@+h-qJRY~ vVhPK5jkj3EJG{pSe1hXM*07E*D4~q6_=a8V;X5k$iQiJUw{6ci&$<5tr^#WQ diff --git a/R/GroupExport.R b/R/GroupExport.R index 84d1462f..b13b5a1e 100644 --- a/R/GroupExport.R +++ b/R/GroupExport.R @@ -323,7 +323,7 @@ getGroupBW <- function( }else{ #N Tiles - nTiles <- trunc(chromLengths[availableChr[k]] / tileSize) + 2 + nTiles <- trunc(chromLengths[availableChr[k]] / tileSize) + 1 #Create Sparse Matrix matchID <- S4Vectors::match(mcols(fragik)$RG, cellGroupi) diff --git a/R/MatrixTiles.R b/R/MatrixTiles.R index b7e01761..fa22896f 100644 --- a/R/MatrixTiles.R +++ b/R/MatrixTiles.R @@ -191,7 +191,7 @@ addTileMatrix <- function( fragments <- .getFragsFromArrow(ArrowFile, chr = chr, out = "IRanges", cellNames = cellNames) #N Tiles - nTiles <- trunc(chromLengths[z] / tileSize) + 2 + nTiles <- trunc(chromLengths[z] / tileSize) + 1 #Match Cells matchID <- S4Vectors::match(mcols(fragments)$RG, cellNames) diff --git a/R/Trajectory.R b/R/Trajectory.R index c1931e30..5ebd2f2d 100644 --- a/R/Trajectory.R +++ b/R/Trajectory.R @@ -72,7 +72,9 @@ addTrajectory <- function( } if(sum(unique(groupDF[,1]) %in% trajectory) < 3){ - .logStop("trajectory must span at least 3 groups in groupBy!", logFile = logFile) + if(!force){ + .logStop("trajectory must span at least 3 groups in groupBy!", logFile = logFile) + } } if(is.null(embedding)){ From 9e92f5269525b0ff9aedfa3b2663b0e6658285da Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Wed, 25 Nov 2020 23:46:33 -0800 Subject: [PATCH 07/35] let quantCut in plotTrajectory be null --- .DS_Store | Bin 14340 -> 14340 bytes R/Trajectory.R | 6 +++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index b4b029e000494a2f2e504a0b036bf9ee63f3eb31..039819cc57c79da1c68b60056e1c0e1dbd034bfd 100644 GIT binary patch delta 15 WcmZoEXeromRDj9UVDoVSTXg_4zy-qq delta 15 WcmZoEXeromRDj9Ea`SNkTXg_4?*+>M diff --git a/R/Trajectory.R b/R/Trajectory.R index 5ebd2f2d..232bd313 100644 --- a/R/Trajectory.R +++ b/R/Trajectory.R @@ -678,7 +678,7 @@ plotTrajectory <- function( .validInput(input = pal, name = "pal", valid = c("character", "null")) .validInput(input = size, name = "size", valid = c("numeric")) .validInput(input = rastr, name = "rastr", valid = c("boolean")) - .validInput(input = quantCut, name = "quantCut", valid = c("numeric")) + .validInput(input = quantCut, name = "quantCut", valid = c("numeric", "null")) .validInput(input = quantHex, name = "quantHex", valid = c("numeric")) .validInput(input = discreteSet, name = "discreteSet", valid = c("character", "null")) .validInput(input = continuousSet, name = "continuousSet", valid = c("character", "null")) @@ -695,6 +695,10 @@ plotTrajectory <- function( .startLogging(logFile = logFile) .logThis(mget(names(formals()),sys.frame(sys.nframe())), "Input-Parameters", logFile=logFile) + if(is.null(quantCut)){ + quantCut <- c(0, 1) + } + #Make Sure ColorBy is valid! if(length(colorBy) > 1){ stop("colorBy must be of length 1!") From 7a71a538dfd6e1ae5fc387280b7baaecf6917a90 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Wed, 25 Nov 2020 23:50:23 -0800 Subject: [PATCH 08/35] grepExclude in plotTrajectoryHeatmap --- R/Trajectory.R | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/R/Trajectory.R b/R/Trajectory.R index 232bd313..ceee126d 100644 --- a/R/Trajectory.R +++ b/R/Trajectory.R @@ -477,6 +477,13 @@ plotTrajectoryHeatmap <- function( } mat <- assay(seTrajectory) + + if(!is.null(grepExclude)){ + idxExclude <- grep(grepExclude, rownames(mat)) + if(length(idxExclude) > 0){ + mat <- mat[-grep(grepExclude, rownames(mat)), , drop = FALSE] + } + } #Rows with NA rSNA <- rowSums(is.na(mat)) From 17c28242171d5c315a2b02f12224057454c2341f Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 28 Nov 2020 17:15:41 -0800 Subject: [PATCH 09/35] bugfix integrative analysis coaccessibility and peak2genelinks --- .DS_Store | Bin 14340 -> 14340 bytes R/IntegrativeAnalysis.R | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 039819cc57c79da1c68b60056e1c0e1dbd034bfd..8d3d0931dac067588f65ff0540664230cd885d9a 100644 GIT binary patch delta 657 zcmZ|LPe{{Y9LMqRdrtlR@@GBMZR(u=T1_d4p{2`;W`vmr{s>UJ43$^)bs^eMz*J6b3>!iY!;Q(nB9(`dAO`9k#rQ(BeTaBsz|+Bj<+6b z(-opgk@zJjA!(6=(jmQaK?Y<<){3XKL|QGIC0^ogi;pcBfx5E zS;Ho_vYnmmVmDz9(asT$(#c6qt>iRk=;I>&T*l-&x4FYz?vY@KCp_g9Nk$pt1CxAV zif?>3U7nJ_v{e_`7KwF5!;y}#i0$hCr+a6n`{zur%zeLbk#gkZI$iF((xuB*R0Y>< zFh}kA=Kdu$<}YVmkH6e&DAZ$3A1^HMMEuydn#RT)M=_oR~e~vqfxIrNa{*7-#qjde9!#yV=^IMWf~iqWLx4M zOS{67t|mmiCEZ99Ti9V)?_n?dXq)5RMK>qtg8%m~kT&I?}hhIdS+3fq`1-u!Ps>gHo2?(Wn3&$<&?r9bli0_n_;(*OVf delta 693 zcma*kO-NK>6vpxMA4j{lx#~MPj*ec_m=YCAGpQt~3GKraE3;K0I@u!fV`$0>!)YNH zm8(miL}XDI6$xq|7_^9>ENYP=M70RYWi5)5AiH{}jf?2rJRHvEyw9&Y(j6J_dl!y` zBQ5))2TMxc;!1EQCe73I`5q%VYjf3>>KenE&Pca*yO&u@eXA{BQSRWlH7oy4TegbSr<)mq*N-UMjGXSbV{$Bmp&Pidvaf%$V-`!_cAG8R^|)|793%#&{#YFN|9vIAL}Mfs+wT$(nP z8OX{uip}M^YSL7~>}Zx5D>c=ut3+p8ZmiK&R99|iyVeM4s#;e`&bGqXpnG|(E75}g zGK&2_(x|+Vk2cURgd`g$&4yWIqZCulIvb^eN;b09X4yeKJ87_Gnrxf>woDuC9N{RP z9HWb#xKA%<3pmFGE^>+M+@PPE++v7f9`KM69`Te{Oz@6R)^s43&x39L9(~Z0H Date: Thu, 3 Dec 2020 22:09:58 -0800 Subject: [PATCH 10/35] change file locking location groupcoverages --- .DS_Store | Bin 14340 -> 14340 bytes R/GroupCoverages.R | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.DS_Store b/.DS_Store index 8d3d0931dac067588f65ff0540664230cd885d9a..0d116f20849ec07cb601cfc57f96ea997c45cc76 100644 GIT binary patch delta 723 zcma*kOGs2<7{>AUKaO@zbJSyAXFS%#lxS355=(-b&@QHFsXy(Jbd4~dB5k^6X*#HjOt49 zs*fM++|;GE=#F! z>}YN3@Yl8;Y|$AEC%FlEyBg&8@pyA)Qaq6msq;6sx2PU(e)K_+EGd*SsgwrUBi+&` zXQW?-bljbF-q^7027w4MK>{(|0 zqLt=U%DRvv+tBo3MGa>My4g& zYE=)ax;-*oqj?p*Le=9U(^74{n#4<07sc~0tkC~!jmazdU`hQ%h_jTEEun>$P97z! zwRB1;V*}NePc3z9r`{rJw2*dNM1DFrKo{K{;xN5Ys6I~RaGJB6<2+Zn#&vGc&k)1h e<31xi;1Mqv=N%K~v~vL;2mNWi>Y&3tmHrF5pP#V+ delta 670 zcmZ|LOGs2v9LMqhcO3QJyw({XqmHAFO^s3!Lpf?zq!DJ0QG~rCaLB@%a$rQGml+do zg0fq!0;343MOkCD(kOaBi&PRKvsSfe7kM`49DbYM?-Pr}B7IMk7N{&+ z;t2%&<}071x9|WBY zvdG3s5gz8_#m@?=Sjl=evz6`aU?(9C(856u(Z(@OlyQ<%baS2_E@E<(o800ycZk!^ zBOddTA%+>@1LJ&Qf^U2`vt330NvkfhB^+&!gu<;M5!>bePj^pE_sy7Il=*({Jmtv9 z%*uA=cor^Ny1a7rT65T*Ywlf8VgAah>GYMj4TXBB>7)61uH3~XZnv^&+GuW`E8px^36!H}**^UgwV!FSFs zKO$rDRVJ~KO1dTPvb0Mr>2j*6wWR9_vXO0;^)7a^hvpgH?R0RIF3u3+tc8BTLN~d@ z6?(bGb#7Srce%&?avoUv0}S$%XFTTxZ+OReqOgtW;tl@>ByK*&W6o~9=d?4P=J}EH E7jk}+=>Px# diff --git a/R/GroupCoverages.R b/R/GroupCoverages.R index 549ec840..55adc352 100644 --- a/R/GroupCoverages.R +++ b/R/GroupCoverages.R @@ -218,9 +218,6 @@ addGroupCoverages <- function( nCells <- lapply(seq_along(batchOut),function(x) batchOut[[x]]$nCells) %>% unlist nFragments <- lapply(seq_along(batchOut),function(x) batchOut[[x]]$nFragments) %>% unlist - #Enable Hdf5 File Locking - h5enableFileLocking() - #Add To Project coverageMetadata <- DataFrame( Group = stringr::str_split(names(unlistGroups), pattern = "\\._.", simplify=TRUE)[,1], @@ -245,6 +242,9 @@ addGroupCoverages <- function( ArchRProj@projectMetadata$GroupCoverages[[groupBy]] <- SimpleList(Params = Params, coverageMetadata = coverageMetadata) + #Enable Hdf5 File Locking + h5enableFileLocking() + .logDiffTime(sprintf("Finished Creation of Coverage Files!"), tstart, addHeader = FALSE) .endLogging(logFile = logFile) From d9eac9c19aa338e962336370dd9ed36c9fb90f2f Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 12 Dec 2020 14:34:31 -0800 Subject: [PATCH 11/35] throw error if no peakset for adding annotations --- .DS_Store | Bin 14340 -> 14340 bytes R/AnnotationPeaks.R | 9 +++++++++ 2 files changed, 9 insertions(+) diff --git a/.DS_Store b/.DS_Store index 0d116f20849ec07cb601cfc57f96ea997c45cc76..08cd7d095fab3df07abb6da2f72df422ab318a49 100644 GIT binary patch delta 853 zcmaKpOH30%7{}+2V0IlT(?X#v3$&rM1R5+a3#h!R1VMa(vA!UMU1KA(l@<&rAx07( z7%ywoXpE18MloVkH1UP;pb`%n=|K)0jEP4v>cN;8owgo4sB@Ui{=Y9X-~N81!O`H& zDVA1NS>-U7IfotQeI+GMes+~tXfwG_k{;p zo*=|qb0o9KCWY;aH>|b>6yHvts>CW%j${>tZPDD_r}ABiU1PILv^~ThXI?>!B}EQO z+jsl?3JZzx#92b6O+DT&m)gS=QHXU_ETz)s0ktpW3;0>f@349ql|0>n-d@!o4(Z|G zaddud%3#Wj9{3E6g0LkzL%pJ?ijY^=`9%9WvE3HTCoo6u>o7r z2`{?PjUMzNjD8GY1cz`0M=@4_6F7$pxQI&_$93Gm1Rmo#USJwCh+qyMFpsbJq1{St z>~F{N*U27=tS`^u>XsCn!F+JIOgx L?(Ku=2Q0q;dJ@Z5 delta 835 zcmb7?OH30%7{}+2N_N8l)0RiOEYOBmicNS}DwPCliYNlUfLMbe6n2RlphZeiL`5Ts zM&-0o(HIjo8VwqWf{*y%U`&)4Jy1hT#Df=(c<>o7PFoIKox^12`)0oR^83wb-)P_D z3`=uWx*gUsr|YQ0I$T*%?yx#5ocbK|i8NW-TDPs9HtH|zUOjB6)c4y=HlNlR3^Zwn zRR(b)B~!K)6qh*N)!s-dGZ;;2l_x7uNR$^reizM0{ioWU>;)T~bC~fZ60tyQ) zKUG>rrIsFlhuXuOiYUbHRk*0MXHe}AX~6)iUk+}lqLQyO*xRcH20{incsSaW{?cf+ zL>Ih=T0z(w?O~ImsEUy18EV&;jPi(>=P4!eA&_iRPHIR4X(#<;n2eEeGC`)uBl4KM zBJapNSs;sKiF_x&$Zzro2}nXRQjiKWEXaZkJIb*RPIyp`&@eM!lQ-5Hp<@)3;+#hXN zsZUy|?^8vFoSE2&VXT$UKgvPkCQLRn@B z++*|@Es@Jau7s_MZDl8Q2}}{$nt0Ytt3 Date: Sat, 12 Dec 2020 20:08:56 -0800 Subject: [PATCH 12/35] make it so predictionScore is not needed for peak2gene links --- R/IntegrativeAnalysis.R | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/R/IntegrativeAnalysis.R b/R/IntegrativeAnalysis.R index e6e49a28..086703e5 100644 --- a/R/IntegrativeAnalysis.R +++ b/R/IntegrativeAnalysis.R @@ -1028,9 +1028,16 @@ addPeak2GeneLinks <- function( tstart <- Sys.time() dfAll <- .safelapply(seq_along(ArrowFiles), function(x){ + cNx <- paste0(names(ArrowFiles)[x], "#", h5read(ArrowFiles[x], paste0(useMatrix, "/Info/CellNames"))) + pSx <- tryCatch({ + h5read(ArrowFiles[x], paste0(useMatrix, "/Info/predictionScore")) + }, error = function(e){ + message("No predictionScore found. Continuing without predictionScore!") + rep(9999999, length(cNx)) + }) DataFrame( - cellNames = paste0(names(ArrowFiles)[x], "#", h5read(ArrowFiles[x], paste0(useMatrix, "/Info/CellNames"))), - predictionScore = h5read(ArrowFiles[x], paste0(useMatrix, "/Info/predictionScore")) + cellNames = cNx, + predictionScore = pSx ) }, threads = threads) %>% Reduce("rbind", .) From f4613ac57792e03923cb11c787b794cab83f2d36 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 12 Dec 2020 20:25:25 -0800 Subject: [PATCH 13/35] update addPeakSet --- .DS_Store | Bin 14340 -> 14340 bytes DESCRIPTION | 2 +- R/ProjectMethods.R | 34 +++++++++++++++++++++++++++++++++- man/ArchRPalettes.Rd | 4 +++- man/addPeakSet.Rd | 10 +++++++++- 5 files changed, 46 insertions(+), 4 deletions(-) diff --git a/.DS_Store b/.DS_Store index 08cd7d095fab3df07abb6da2f72df422ab318a49..db01ebf29c55097e46b6945710aea2277a1366d6 100644 GIT binary patch delta 835 zcma))OGs2v7{||F)9%Hip3xb-j*izS)5zpwltu|(j9R`Z%0Wf3M(?dI>Wn(R($qvD zqFh}Hdn}5GC|g8n56WCbAQ3Hc!cDaZ!lf;WiXb{O)1qaY1K;<*eCNBr-Z>-FK4Ng`a-Pw&6qlTqnVVNo zQdZ###4|%eqLEU)Ub4+ZPK#n7ff?eZ6e(3;*+Sb$w>CJU4WA5sXGxc6r{Wn_n|+FQ zOj8xMB8Z_RD_xR0f{ANL<)zR3JyORwft!dDg1Vu2~5 zyU$bFt@ed`duXY^8pYO8b;z&zyy50vS}qu17u$M#{r#$U*dMyOvPzQl>J+0f_$M`d zkM`gm)ru0_LceCpn-PgXEW|--NE10qhR7sYAdBQWStbw3Bl3d0CY$5~*&^HIEBQ`- zke`S^B%%PpspjFEwaPIfR~OE#vRx2ZL?Adezd)uek_!_2liKFgM8x1e}Qn&F-YX7Gdb$raB|Gms6j32Z~zB6=)-V_Kzq=Q zUi5L?K8#}mr!a+SoWWU~d<@I?;%3a;WNZl&Qi?qCVaSixgF;R>GNCEj2Y@9|kT MndJv_Nwb-M0Nj?!AOHXW delta 854 zcmaKpOGs2v9LCS*qt5N*ct&S*ypB3kI))B5zVcCNIwj^Kdnnn<7`-0MDKi8wHF7QG zQ?w)U@g`3o*y2}xf38(W>9$ByqbRDPjhXX89E6e#;v%)Afpic*86>0R3>hQ$$RxQ> zo|9K(hRl)=cEf{CbfFu4 z2%;YY2;nG>;{--=8W(X1myvY^`Sax9)U&m(UEIq973q1kNLTxjS*dB3v*eEB%zJR>Z7%kl~Lh`$4A>rwn`ETd0e!u zW;IlZ;tTXe?zN0@5^sz#NRp2Hzrd%-Tk>AO{!V@(UVu&#kZl5R0m@M&0N28eb=V*f zZ^jn1V%J}oedvWBgBZdg3=7!D1ng0q#3`J`Ih@A@0sSh{ui-jw2= 2) LinkingTo: Rcpp LazyData: TRUE -RoxygenNote: 7.0.2 +RoxygenNote: 7.1.1 Encoding: UTF-8 Imports: Rcpp (>= 0.12.16), diff --git a/R/ProjectMethods.R b/R/ProjectMethods.R index 5609cf0f..ef0f8204 100644 --- a/R/ProjectMethods.R +++ b/R/ProjectMethods.R @@ -363,24 +363,56 @@ getPeakSet <- function(ArchRProj = NULL){ #' #' @param ArchRProj An `ArchRProject` object. #' @param peakSet A `GRanges` object containing the set of regions that define all peaks in the desired peak set. +#' @param genomeAnnotation The genomeAnnotation (see `createGenomeAnnotation()`) to be used for generating peak metadata such as nucleotide +#' information (GC content) or chromosome sizes. #' @param force If a `peakSet` object has already been added to the given `ArchRProject`, the value of `force` determines #' whether or not to overwrite this `peakSet`. #' @export -addPeakSet <- function(ArchRProj = NULL, peakSet = NULL, force = FALSE){ +addPeakSet <- function( + ArchRProj = NULL, + peakSet = NULL, + genomeAnnotation = getGenomeAnnotation(ArchRProj), + force = FALSE + ){ + .validInput(input = ArchRProj, name = "ArchRProj", valid = "ArchRProject") .validInput(input = peakSet, name = "peakSet", valid = c("GRanges")) .validInput(input = force, name = "force", valid = c("boolean")) + genomeAnnotation <- .validGenomeAnnotation(genomeAnnotation) + if(is.null(ArchRProj@peakSet) | force){ + #Index The Peak Set peakSet <- lapply(split(peakSet, seqnames(peakSet)), function(x){ mcols(x)$idx <- seq_along(x) x }) %>% Reduce("c", .) %>% sortSeqlevels %>% sort + + #Get NucleoTide Content + peakSet <- tryCatch({ + .requirePackage(genomeAnnotation$genome) + .requirePackage("Biostrings",source="bioc") + BSgenome <- eval(parse(text = genomeAnnotation$genome)) + BSgenome <- validBSgenome(BSgenome) + nucFreq <- BSgenome::alphabetFrequency(getSeq(BSgenome, peakSet)) + mcols(peakSet)$GC <- round(rowSums(nucFreq[,c("G","C")]) / rowSums(nucFreq),4) + mcols(peakSet)$N <- round(nucFreq[,c("N")] / rowSums(nucFreq),4) + peakSet + }, error = function(e){ + peakSet + }) + + #Add PeakSet ArchRProj@peakSet <- peakSet + }else{ + stop("Error peakSet exists! Set force=TRUE to override!") + } + return(ArchRProj) + } ########################################################################################## diff --git a/man/ArchRPalettes.Rd b/man/ArchRPalettes.Rd index 61cc1e60..c74ad672 100644 --- a/man/ArchRPalettes.Rd +++ b/man/ArchRPalettes.Rd @@ -4,7 +4,9 @@ \name{ArchRPalettes} \alias{ArchRPalettes} \title{List of color palettes that can be used in plots} -\format{An object of class \code{list} of length 30.} +\format{ +An object of class \code{list} of length 30. +} \usage{ ArchRPalettes } diff --git a/man/addPeakSet.Rd b/man/addPeakSet.Rd index 26b597d7..81dcd3e6 100644 --- a/man/addPeakSet.Rd +++ b/man/addPeakSet.Rd @@ -4,13 +4,21 @@ \alias{addPeakSet} \title{Add a peak set to an ArchRProject} \usage{ -addPeakSet(ArchRProj = NULL, peakSet = NULL, force = FALSE) +addPeakSet( + ArchRProj = NULL, + peakSet = NULL, + genomeAnnotation = getGenomeAnnotation(ArchRProj), + force = FALSE +) } \arguments{ \item{ArchRProj}{An \code{ArchRProject} object.} \item{peakSet}{A \code{GRanges} object containing the set of regions that define all peaks in the desired peak set.} +\item{genomeAnnotation}{The genomeAnnotation (see \code{createGenomeAnnotation()}) to be used for generating peak metadata such as nucleotide +information (GC content) or chromosome sizes.} + \item{force}{If a \code{peakSet} object has already been added to the given \code{ArchRProject}, the value of \code{force} determines whether or not to overwrite this \code{peakSet}.} } From c7ab39a02303fa3685ef4bbc1b8df05585507d44 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 2 Jan 2021 16:39:07 -0800 Subject: [PATCH 14/35] updated description --- .DS_Store | Bin 14340 -> 14340 bytes R/AnnotationPeaks.R | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index db01ebf29c55097e46b6945710aea2277a1366d6..741764df610b3298bc679fb1e015ce29155bd398 100644 GIT binary patch delta 945 zcmZ|NUu;WJ90%~aLs4=)@Z7wydqO*hXfy36af)Wl8H^T)MWj=D#A7 zy-1jgCkY`EJovZaX%m8o2eVirW<2rW#S2*?;?KEl6CSt^_uO;7x##?HKEK{*Z}ip! zZmaZGx}9F%A-D5Dd3ja2+v)dL7_a#9qFcdeNRP!mo^e>FWK7M>V$!tf@(iVMRb!Lf zViXqpj6GJrv8}k$7_rtQEPhEE%jVV``)oz&*d5e&?$+b`cnM=;Ioz5p7b#AO-({U@ zAg-;BsQMONQDzB`x_h`FfdL+!7(~H$hWTj(sq`O-S$75Ew#j;tHQmfQ6{)}~* zhqnY`@ikE`{HLr2#x|HqovLaoE1~pLQoA7a)fx_TYZ3=BDol`z{8US=w1pyclupnE z8l)i_rswpE-qQ#AOq2ATe$p=xB;>$`T;yR6oS2Iec(54NSb~*Ui#D{Q0~-*;R_NG{ z9f)H;4&o3FqYo$1kJB)49#?P`*Ki#J7)1U(+{aUl;3Y=!78Cf0&-j9`My@i)Gb!o? ztqa9^qQOukNMt$tZ(K(b*Yy`}#jH0oP1RYp+`N3}{Dq4u{WbN*%M82GHP2`KurVWH zw;_m%pv@xhKsdh`0E{v&w<)1BY)e*N5K~xVx^;i!@MUeexr=W+3=3x%!d~nV;^ZSOPL($9k zctNeV&g1g#^tiUy%=Y;_t{QKx&m84VrNhB!$cV+g-WPDBrDtSLVA8}aIa^uMvUFLi zY>pRBGP}~N&6x%DX2A^A9CJ1#(soHwGLJiRl_I5>aX0JO6g2ub8S$;jT<**(DOKby zEfCk2M>J!jp=nG+HOqyKiDz7phr+ib2`tst&y{7KE}~+q^BaVk zDKhbEYm>ZCa*Dii5>ONWqWa%ZAJHhi5kS9#1ja1n3y{+U$eHj7hzrn+g;<1@SS2v7 zL3;{g073MkDI{n{um#(&13R$``>-Dea1e(C&Z7e737o`PoWprsz(rieHQdB40r)l^ a;whfvCEl9jMJnE12~XZ9UCDBNEBpy$pWhPz diff --git a/R/AnnotationPeaks.R b/R/AnnotationPeaks.R index 1d659b1a..16382b90 100644 --- a/R/AnnotationPeaks.R +++ b/R/AnnotationPeaks.R @@ -98,7 +98,7 @@ getMatches <- function(ArchRProj = NULL, name = NULL, annoName = NULL){ #' binary value is stored indicating whether each region is observed within the peak region. #' #' @param ArchRProj An `ArchRProject` object. -#' @param regions A `list` of `GRanges` that are to be overlapped with the `peakSet` in the `ArchRProject`. +#' @param regions A named `list` of `GRanges` that are to be overlapped with the `peakSet` in the `ArchRProject`. #' @param name The name of `peakAnnotation` object to be stored as in `ArchRProject`. #' @param force A boolean value indicating whether to force the `peakAnnotation` object indicated by `name` to be overwritten #' if it already exists in the given `ArchRProject`. From 8cdf4e0ca3aff0a5dc3d375f5fdee7d336f63534 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 2 Jan 2021 16:40:30 -0800 Subject: [PATCH 15/35] bugfix named list --- R/AnnotationPeaks.R | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/R/AnnotationPeaks.R b/R/AnnotationPeaks.R index 16382b90..71a182fd 100644 --- a/R/AnnotationPeaks.R +++ b/R/AnnotationPeaks.R @@ -136,6 +136,10 @@ addPeakAnnotations <- function( }else{ + if(is.null(names(regions))){ + names(regions) <- paste0("Region_", seq_along(regions)) + } + regionPositions <- lapply(seq_along(regions), function(x){ .logThis(regions[[x]], paste0("regions[[x]]-", x), logFile = logFile) From 757f056309c566baa776716b795604b402e8e72b Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 2 Jan 2021 16:48:31 -0800 Subject: [PATCH 16/35] update error handling plotEnrichHeatmap --- .DS_Store | Bin 14340 -> 14340 bytes R/AnnotationPeaks.R | 6 +++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index 741764df610b3298bc679fb1e015ce29155bd398..bc9579d63a5842234d7be28e3573ac8421337fa9 100644 GIT binary patch delta 710 zcma*kOGs2<7{>AUKaO@zbJR0A&N$<-j49EeG?Pk#n$Rv@vQmSf5FK?P={PiH7o%|@ z7?rC-S0cJl6c!0;7YtfNP!?^PkRn^O$Ym|MNeeqU6G)5b+dO>VyLrFo*BkB)54xT6 zM}y(^w#dGsqPN(R?8zx}6m_mcOZ9E8sI1bqnA4t2bGLn&xzttV*xAzY^OHLE*c5aObZ=E*iRP+=;0X0 zIl)Ozagobh;VQSd%^e1L#8aLzMvT|IXOho+Fe zi0x9MGWTDd8Jn!qwCdTN`DS&dzDY~ho%1qWnQl++;sW!zJ;!WVw91@vt&ckL3{4+V z)L6FHm$f9%Fm#)u#In4;Y^~5(uIf#So-}hcO0<=V-lFQs@oA~HM%5##ZjVpbY5_&B zQuUPhv`pKeI&G^}T@?Snu%iF3H72j*gC+G7A;nV4u!I&`I)#+7&eAEPoQ-U?eCnuY z2MrcclZCX$A_~#TK@QQ)5suQAfa>RTK4&<`c`k5`>)hZb0}M05eI78%L!R)Gao#au SPJ0*daVX^OQ->V6Q=VVrvYQ3~ delta 657 zcmZ|LOGs2v9LMqhcO3QJyw({X<2YV*%u*?cp@&XZG)9=IL4>^{aLB@%azN4OH5n6b zg0fq!0;343MOkCDQYflLi&PRKvsSfeZ)B=ZYN!D)M%Wuv_j$m> sN*>wzgADPE=e*!0Z+ORqQ`p5!@y34xoSToygttfUJ?l+o1b*cG1+2J_V*mgE diff --git a/R/AnnotationPeaks.R b/R/AnnotationPeaks.R index 71a182fd..cf9ddf64 100644 --- a/R/AnnotationPeaks.R +++ b/R/AnnotationPeaks.R @@ -1074,6 +1074,10 @@ plotEnrichHeatmap <- function( mat <- mat[keep, ,drop = FALSE] .logThis(mat, "mat-mlog10Padj-Filter", logFile = logFile) + if(nrow(mat)==0){ + stop("No enrichments found for your cutoff!") + } + passMat <- lapply(seq_len(nrow(mat)), function(x){ (mat[x, ] >= 0.9*max(mat[x, ])) * 1 }) %>% Reduce("rbind", .) %>% data.frame @@ -1083,7 +1087,7 @@ plotEnrichHeatmap <- function( mat[mat > pMax] <- pMax if(nrow(mat)==0){ - stop("No enrichments found!") + stop("No enrichments found for your cutoff!") } mat <- .rowScale(as.matrix(mat), min = 0) From 01b544293e4ea6052365277747460bb7cd5cfa2c Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 2 Jan 2021 17:01:52 -0800 Subject: [PATCH 17/35] update error messages tilematrix --- .DS_Store | Bin 14340 -> 14340 bytes R/GroupCoverages.R | 2 +- R/ReproduciblePeakSet.R | 11 +++++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.DS_Store b/.DS_Store index bc9579d63a5842234d7be28e3573ac8421337fa9..3c4ac9415aaa76b1aa894a7bfc19f641f5cce49e 100644 GIT binary patch delta 14 VcmZoEXeromRDjW9^DzNCbpS5}1(g5* delta 14 VcmZoEXeromRDjWZ^DzNCbpS5@1(W~) diff --git a/R/GroupCoverages.R b/R/GroupCoverages.R index 55adc352..b82e8886 100644 --- a/R/GroupCoverages.R +++ b/R/GroupCoverages.R @@ -671,7 +671,7 @@ addGroupCoverages <- function( .getCoverageMetadata <- function(ArchRProj = NULL, groupBy = NULL, useGroups = NULL, minCells = NULL){ coverageMetadata <- ArchRProj@projectMetadata$GroupCoverages[[groupBy]]$coverageMetadata if(is.null(coverageMetadata)){ - stop("No Coverage Metadata found for : ", groupBy) + stop("No Coverage Metadata found for : ", groupBy, ". Please run addGroupCoverages!") } if(!is.null(useGroups)){ if(sum(coverageMetadata[,1] %in% useGroups) == 0){ diff --git a/R/ReproduciblePeakSet.R b/R/ReproduciblePeakSet.R index fd6393df..8699e748 100644 --- a/R/ReproduciblePeakSet.R +++ b/R/ReproduciblePeakSet.R @@ -262,7 +262,7 @@ addReproduciblePeakSet <- function( }else if(tolower(peakMethod) == "tiles"){ - .logMessage("Calling Peaks with TileMatrix", logFile = logFile) + .logMessage("Calling Peaks with TileMatrix. We recommend using the Macs2 Version.\nThis method is still under development.", logFile = logFile) useMatrix <- "TileMatrix" @@ -325,11 +325,13 @@ addReproduciblePeakSet <- function( #Compute Row Sums Across All Samples .logDiffTime("Computing Total Accessibility Across All Features", tstart, addHeader = FALSE, verbose = verbose) totalAcc <- .getRowSums(ArrowFiles = ArrowFiles, useMatrix = useMatrix, seqnames = chrToRun) + .logThis(totalAcc, "PeakCallTiles-totalAcc", logFile=logFile) nTiles <- nrow(totalAcc) gc() #Pre-Filter 0s topFeatures <- totalAcc[which(totalAcc$rowSums != 0), ] + .logThis(topFeatures, "PeakCallTiles-topFeatures", logFile=logFile) #Group Matrix #Consider reading in group-wise if this is getting too large? @@ -344,9 +346,12 @@ addReproduciblePeakSet <- function( asSparse = TRUE, verbose = FALSE ) - + .logThis(groupMat, "PeakCallTiles-groupMat", logFile=logFile) + .logDiffTime(sprintf("Created Pseudo-Grouped Tile Matrix (%s GB)", round(object.size(groupMat) / 10^9, 3)), tstart, addHeader = FALSE, verbose = verbose) expectation <- Matrix::colSums(groupMat) / nTiles + .logMessage(paste0("colSums = ", Matrix::colSums(groupMat)), logFile = logFile) + .logMessage(paste0("nTiles = ", nTiles), logFile = logFile) .logMessage(paste0("Expectation = ", expectation), logFile = logFile) ##################################################### @@ -401,6 +406,8 @@ addReproduciblePeakSet <- function( }, threads = threads) %>% Reduce("rbind", .) + .logThis(groupPeaks, "PeakCallTiles-groupPeaks", logFile=logFile) + groupPeaks <- groupPeaks[order(groupPeaks$normmlogp, decreasing=TRUE), ] ##################################################### From c7310a801b0492f450b8e1a5c02e65e5c9b221b3 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 2 Jan 2021 17:48:41 -0800 Subject: [PATCH 18/35] handle error with bsgenomes --- .DS_Store | Bin 14340 -> 14340 bytes R/AnnotationGenome.R | 9 ++++++++- R/AnnotationPeaks.R | 6 +++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 3c4ac9415aaa76b1aa894a7bfc19f641f5cce49e..4ff6f3296296521626db6657692493f66e207cd7 100644 GIT binary patch delta 818 zcmaKpTS(JU9LIm(dFlW6q@6A2=KN15c|(WIEp=KcZ57_SsZj(OPJI}yZ8$Tu#2y4I zBZ$+DBDy>jWt3nFMK^k=q=zC$P~<}|z68A#c6q7eW>8R_mvheV0$)C#q3}?6>>*Eg zR=Mpqr>k1i)rr79`l6*{z#9*@fNy-#H8d!ikiY$s->>JuA#9>AkQeg zg?6z|?^d__J3_%0e}9)iy3wSnqiH5BH@|rKimDoKbP3lRmZmc%>dnO>)sPJ)>;_j8 zYmLYS-ma*zi4r?wt-JlfP99O?6-ODfYz?&gx&pjYRboTs70j}&x2rqi4+VMSLa}-! z6Qc%?LJLPcDl!dnkU~~+kcS$mjl$GNBXo)`&~2KaNqS7r={3EhS^7wyXpX+nR{$wk zj8vq-1T!qiLJ`W~gbTH(!v<`^W^BO@>_R(y=s*D7=)qp}Vi3bPj3XGq37p48T!Qs7 zMsWi-aSIRd6wfe)X+$xDS$x1}VYK8p=44z@b0E?i_60&dBHhWq1J`1}3;qq)a|QW!WD# z{_A3jUeSB$;XD06l5}8@{B4qbDcq=$>^<;e9X3k(&1gX@cK&7{h!Dc)Lq85+KzcYN zJ&fQej^Q-U;4IEbA6HOy71wZG`k25Z?%*!&;Xa<=1)}kkIxM7Z`jt9YHI6P zgR-nkR`#nmD&cc*?!G(5o zpbJ49L=O(3A184Nr*Q^naRt|K9XD_f_c4M|Oye1zV+M10jrUl@7ktC_@Do*tJhk!9 zAHs=co}eaguqWX1`dvh-s}ZJ@RZjAD4#nzMI~o3VdZP*BB&X<1S-Hv!b(+$;zFbJv z8;o)qOIJoRQk4dyMoCZB_Qht)Oq$?YM!g|5FI$!+l_1QmR9T^H7CEF86}rl$%p!0y zDLTBZV3i_AmDJ&F6|)K4PKpU{?QE-}tn&ChTTDhB(%XM-$AN)9sBk093oWNj2ZwTjda2^+N372sbw{RPG kFpP0b;2|Di3Xky=uP~2ySWuSr>G(M2OBoc$VogiB->w0{6aWAK diff --git a/R/AnnotationGenome.R b/R/AnnotationGenome.R index d35fa9ba..3d75ac3a 100644 --- a/R/AnnotationGenome.R +++ b/R/AnnotationGenome.R @@ -41,7 +41,14 @@ createGenomeAnnotation <- function( ################## message("Getting blacklist..") - blacklist <- .getBlacklist(genome = bsg@provider_version) + + genomeName <- tryCatch({ + bsg@provider_version + }, error = function(e){ + strsplit(bsg@pkgname,"\\.")[[1]][4] + }) + + blacklist <- .getBlacklist(genome = genomeName) }else{ diff --git a/R/AnnotationPeaks.R b/R/AnnotationPeaks.R index cf9ddf64..909e7be0 100644 --- a/R/AnnotationPeaks.R +++ b/R/AnnotationPeaks.R @@ -616,7 +616,11 @@ addArchRAnnotations <- function( } } - genome <- tolower(validBSgenome(getGenome(ArchRProj))@provider_version) + genome <- tolower(tryCatch({ + validBSgenome(getGenome(ArchRProj)) + }, error = function(e){ + strsplit(validBSgenome(getGenome(ArchRProj)),"\\.")[[1]][4] + })) annoPath <- file.path(find.package("ArchR", NULL, quiet = TRUE), "data", "Annotations") dir.create(annoPath, showWarnings = FALSE) From a774b33eacbcd559ff24cf7be67377e1bc3f947e Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 2 Jan 2021 22:18:27 -0800 Subject: [PATCH 19/35] width is end - start + 1 --- R/CreateArrow.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/CreateArrow.R b/R/CreateArrow.R index 10db9ec3..c04e8ba8 100644 --- a/R/CreateArrow.R +++ b/R/CreateArrow.R @@ -1278,7 +1278,7 @@ createArrowFiles <- function( o <- .suppressAll(h5createDataset(tmpFile, chrRGLengths, storage.mode = "integer", dims = c(lengthRG, 1), level = 0)) o <- .suppressAll(h5createDataset(tmpFile, chrRGValues, storage.mode = "character", dims = c(lengthRG, 1), level = 0, size = max(nchar(RG@values)) + 1)) - o <- h5write(obj = cbind(dt$V2,dt$V3-dt$V2), file = tmpFile, name = chrPos) + o <- h5write(obj = cbind(dt$V2,dt$V3 - dt$V2 + 1), file = tmpFile, name = chrPos) o <- h5write(obj = RG@lengths, file = tmpFile, name = chrRGLengths) o <- h5write(obj = RG@values, file = tmpFile, name = chrRGValues) @@ -1314,7 +1314,7 @@ createArrowFiles <- function( o <- .suppressAll(h5createDataset(tmpChrFile, chrRGValues, storage.mode = "character", dims = c(lengthRG, 1), level = 0, size = max(nchar(RG@values)) + 1)) - o <- h5write(obj = cbind(dt$V2,dt$V3-dt$V2), file = tmpChrFile, name = chrPos) + o <- h5write(obj = cbind(dt$V2,dt$V3 - dt$V2 + 1), file = tmpChrFile, name = chrPos) o <- h5write(obj = RG@lengths, file = tmpChrFile, name = chrRGLengths) o <- h5write(obj = RG@values, file = tmpChrFile, name = chrRGValues) @@ -1650,7 +1650,7 @@ createArrowFiles <- function( o <- .suppressAll(h5createDataset(tmpFile, chrRGValues, storage.mode = "character", dims = c(lengthRG, 1), level = 0, size = max(nchar(RG@values)) + 1)) - o <- h5write(obj = cbind(dt$start,dt$end-dt$start), file = tmpFile, name = chrPos) + o <- h5write(obj = cbind(dt$start, dt$end - dt$start + 1), file = tmpFile, name = chrPos) o <- h5write(obj = RG@lengths, file = tmpFile, name = chrRGLengths) o <- h5write(obj = RG@values, file = tmpFile, name = chrRGValues) @@ -1686,7 +1686,7 @@ createArrowFiles <- function( o <- .suppressAll(h5createDataset(tmpChrFile, chrRGValues, storage.mode = "character", dims = c(lengthRG, 1), level = 0, size = max(nchar(RG@values)) + 1)) - o <- h5write(obj = cbind(dt$start,dt$end-dt$start), file = tmpChrFile, name = chrPos) + o <- h5write(obj = cbind(dt$start, dt$end - dt$start + 1), file = tmpChrFile, name = chrPos) o <- h5write(obj = RG@lengths, file = tmpChrFile, name = chrRGLengths) o <- h5write(obj = RG@values, file = tmpChrFile, name = chrRGValues) From af504715593cb69f2fbda81210fd7e9bf2164a0a Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 9 Jan 2021 18:54:01 -0800 Subject: [PATCH 20/35] bugfix checkCairo in iterativeLSI --- .DS_Store | Bin 14340 -> 14340 bytes R/GgplotUtils.R | 2 ++ R/IterativeLSI.R | 5 ++--- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.DS_Store b/.DS_Store index 4ff6f3296296521626db6657692493f66e207cd7..ab749fa1a80755b291cb58e637279340769ab70b 100644 GIT binary patch delta 846 zcma*kTS!xJ90%~wDMzf2TtW4>l5VzdJaL(b%E>`nF zFe;x8U5Ut|s4NuJEDQ=FD2rY+gs2{Z^06L@k{~B||GY}bwj6D%_ z?h3obNyXaIM%EGy9t{XS zj*o8?+Zk)=42C;|D6e!JPG)Ki`TT*9(7|)@rLuBn+S428i3YpFLPMgtp_)l|w3}j{ z`hHq|R!?C($*KfVOW4;HuzDOy%@apCro4AGB7{LT4@c<7ojYoKf*OxvcJy`jgah4OylJsmvxl={dcocQi*I=@ZS<7y1ey2}_ZT6j)({ zhAb4J4CQd64)xfG&Desi*ooa}haY29M`;D7t|6A_l5kyZaTQmE_Pq$tsaLFUrS zRT%}3i+%M9R;5UEo?vuq*lJbA!sCr@9b2nNeV%A^*Rc(1s>!2rQkMUb!G9B&rdRY{ z>VKynNRaYosqT>CrSPCuihJS1dTf&BE!c)u?E1~U3*88z9|JgqL8*U4>W|_$PT(xg z;XE$L6t1EAI&R>mOd*0v+{1l5z(YL23q*}AO<3Hv`PbIQjoFFej1l$Z;fx99_-6eH DZq2VG diff --git a/R/GgplotUtils.R b/R/GgplotUtils.R index c0339437..609caa08 100644 --- a/R/GgplotUtils.R +++ b/R/GgplotUtils.R @@ -952,8 +952,10 @@ theme_ArchR <- function( .checkCairo <- function(){ tryCatch({ + tmp <- dev.cur() Cairo::Cairo(type='raster') dev.off() + dev.set(tmp) TRUE }, error = function(e){ FALSE diff --git a/R/IterativeLSI.R b/R/IterativeLSI.R index 97f1dcac..57300734 100644 --- a/R/IterativeLSI.R +++ b/R/IterativeLSI.R @@ -803,9 +803,7 @@ addIterativeLSI <- function( UMAPParams$n_threads <- floor(threads / 2) uwotUmap <- do.call(uwot::umap, UMAPParams) - #Plot - pdf(file.path(outDir, paste0("Save-LSI-Iteration-",j,".pdf")), width = 6, height = 6) - + #Plot p1 <- ggPoint( uwotUmap[,1], uwotUmap[,2], @@ -831,6 +829,7 @@ addIterativeLSI <- function( theme(axis.text.x = element_blank(), axis.ticks.x = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank()) + pdf(file.path(outDir, paste0("Save-LSI-Iteration-",j,".pdf")), width = 6, height = 6) .fixPlotSize(p1, plotWidth = 6, plotHeight = 6) grid::grid.newpage() .fixPlotSize(p2, plotWidth = 6, plotHeight = 6) From 753f63b3028827b714df1f8a51c4bacbf0545fbc Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sun, 10 Jan 2021 20:31:22 -0800 Subject: [PATCH 21/35] update archr verbosity and logging for markerfeatures --- .DS_Store | Bin 14340 -> 14340 bytes R/AllClasses.R | 4 ++-- R/CreateArrow.R | 8 ++++---- R/GlobalDefaults.R | 24 +++++++++++++++++++++- R/IntegrativeAnalysis.R | 2 +- R/LoggerUtils.R | 43 ++++++++++++++++++++++++++++++++++------ R/MarkerFeatures.R | 4 ++++ R/VisualizeData.R | 32 +++++++++++++++--------------- 8 files changed, 87 insertions(+), 30 deletions(-) diff --git a/.DS_Store b/.DS_Store index ab749fa1a80755b291cb58e637279340769ab70b..b5f248f8a6e298a010d6f2042e866ae1e4e0c024 100644 GIT binary patch delta 582 zcmaixO=uHA9L49QUo*{0CLh&lH8D15TiD1Z)mjkkhW5~pU{Wm$r9!VDhva zjw%o2a5Xk{s-QJ#tlQ) z_*=?4$!JK3<#sY#)?24WY3CYgOiVDIrD?0x;5f2$l5vZrZyToORK=u8$~AT=pPkO> zdB>ZQrYT=ym+$Ch%P5+Tc~&|{y^vXEwOAbRrQX11WSh^ll0N`fR#=17uUCuLG4PskQ|ZOi`PMi2VX4-W*6V+`Y%Kpf{W z0~HHcL=q`nz%o{F71yAl023vw;Vw4u5H-~C7|-w=FYpqt@CNVj9v`rSkJ!Z?n)r-w z_>Ld=>2SEv)+W-In delta 565 zcmZuuOK1~O6n$sZ`X-s0mzrq%Ea^Z*t&T8>twsfj2E;bCtx~a45tGgn2J^EssXwFz zyC~{L9xmJn(XC=3eikBGxUh=2F+~t`Ctd17(Qee{1G?}o?tyc;=bX!(Da;h+Dl8D~ z*=6Wa^NOKgjzoGRh8~MW)oq zo~TXsTb8hBINm=kZwEU);kZfarOHY$I8`E#$P@CEydZDLd-9Pik}u>N`9Xe?B`ENs z6>H!_J36odo#;jsJJ5qT`Y?!L9KlhH;WW}1hlMO06fueOn8qxw;W}>M7Ve;gySRt@ zcz}nPLk07Ah1aNJ0iU*D5nu5gzZ#hoG>{B7u?hGsU#{J*B>#P!UcMPPzeY0O$daL;wH) diff --git a/R/AllClasses.R b/R/AllClasses.R index 9ba68568..f87ff98c 100644 --- a/R/AllClasses.R +++ b/R/AllClasses.R @@ -130,7 +130,7 @@ ArchRProject <- function( message("Getting SampleNames...") sampleNames <- unlist(.safelapply(seq_along(ArrowFiles), function(x){ - message(x, " ", appendLF = FALSE) + if(getArchRVerbose()) message(x, " ", appendLF = FALSE) .sampleName(ArrowFiles[x]) }, threads = threads)) message("") @@ -159,7 +159,7 @@ ArchRProject <- function( #Cell Information message("Getting Cell Metadata...") metadataList <- .safelapply(seq_along(ArrowFiles), function(x){ - message(x, " ", appendLF = FALSE) + if(getArchRVerbose()) message(x, " ", appendLF = FALSE) .getMetadata(ArrowFiles[x]) }, threads = threads) message("") diff --git a/R/CreateArrow.R b/R/CreateArrow.R index c04e8ba8..44ae6334 100644 --- a/R/CreateArrow.R +++ b/R/CreateArrow.R @@ -473,7 +473,7 @@ createArrowFiles <- function( .logDiffTime("Continuing through after error ggplot for Fragment Size Distribution", t1 = tstart, logFile = logFile) #print(x) - message("\n") + if(getArchRVerbose()) message("\n") }) gc() @@ -537,7 +537,7 @@ createArrowFiles <- function( .logDiffTime("Continuing through after error ggplot for TSS by Frags", t1 = tstart, logFile = logFile) #message(x) - message("\n") + if(getArchRVerbose()) message("\n") }) @@ -1119,7 +1119,7 @@ createArrowFiles <- function( TRUE }, error = function(x){ tryCatch({ - message("Attempting to index ", file," as tabix..") + if(getArchRVerbose()) message("Attempting to index ", file," as tabix..") indexTabix(file, format = "bed") TRUE }, error = function(y){ @@ -1138,7 +1138,7 @@ createArrowFiles <- function( } }, error = function(x){ tryCatch({ - message("Attempting to index ", file," as bam...") + if(getArchRVerbose()) message("Attempting to index ", file," as bam...") indexBam(file) TRUE }, error = function(y){ diff --git a/R/GlobalDefaults.R b/R/GlobalDefaults.R index 26854c57..7e123a32 100644 --- a/R/GlobalDefaults.R +++ b/R/GlobalDefaults.R @@ -8,7 +8,8 @@ ArchRDefaults <- list( ArchR.logging = TRUE, ArchR.genome = NA, ArchR.chrPrefix = TRUE, - ArchR.debugging = FALSE + ArchR.debugging = FALSE, + ArchR.verbose = TRUE ) .onAttach <- function(libname, pkgname){ @@ -27,9 +28,30 @@ ArchRDefaults <- list( if(!.checkCairo()){ packageStartupMessage("WARNING : Cairo check shows Cairo is not functional.\n ggplot2 rasterization will not be available without Cario.\n This may cause issues editing plots with many thousands of points from single cells.") } + if(.checkJupyter()){ + packageStartupMessage("Detected Jupyer Notebook session. Disabling Log Messages!\n\tIf this is undesired use `addArchRVerbose(TRUE)`") + addArchRVerbose(verbose = FALSE) + } invisible() } +#Check Jupyer Status +.checkJupyter <- function(){ + tryCatch({ + sysID <- Sys.getenv("JPY_PARENT_PID") + if(!is.character(sysID)){ + return(FALSE) + } + if(sysID == ""){ + FALSE + }else{ + TRUE + } + },erro r= function(e){ + FALSE + }) +} + #' Install extra packages used in ArchR that are not installed by default #' #' This function will install extra packages used in ArchR that are not installed by default. diff --git a/R/IntegrativeAnalysis.R b/R/IntegrativeAnalysis.R index 086703e5..543d1eff 100644 --- a/R/IntegrativeAnalysis.R +++ b/R/IntegrativeAnalysis.R @@ -1032,7 +1032,7 @@ addPeak2GeneLinks <- function( pSx <- tryCatch({ h5read(ArrowFiles[x], paste0(useMatrix, "/Info/predictionScore")) }, error = function(e){ - message("No predictionScore found. Continuing without predictionScore!") + if(getArchRVerbose()) message("No predictionScore found. Continuing without predictionScore!") rep(9999999, length(cNx)) }) DataFrame( diff --git a/R/LoggerUtils.R b/R/LoggerUtils.R index f704cf94..bc498e08 100644 --- a/R/LoggerUtils.R +++ b/R/LoggerUtils.R @@ -56,6 +56,33 @@ getArchRDebugging <- function(){ ArchRDebugging } +#' Set ArchR Verbosity for Log Messaging +#' +#' This function will set ArchR logging verbosity. +#' +#' @param verbose A boolean describing whether to printMessages in addition to logging with ArchR. +#' @export +addArchRVerbose <- function(verbose = TRUE){ + .validInput(input = verbose, name = "verbose", valid = "boolean") + message("Setting addArchRVerbose = ", verbose) + options(ArchR.verbose = verbose) + return(invisible(0)) +} + +#' Set ArchR Verbosity for Log Messaging +#' +#' This function will get ArchR logging verbosity. +#' +#' @export +getArchRVerbose <- function(){ + ArchRVerbose <- options()[["ArchR.verbose"]] + if(!is.logical(ArchRVerbose)){ + options(ArchR.verbose = TRUE) + return(TRUE) + } + ArchRVerbose +} + #' Create a Log File for ArchR #' #' This function will create a log file for ArchR functions. If ArchRLogging is not TRUE @@ -113,9 +140,9 @@ createLogFile <- function( }else{ msg <- sprintf("%s : %s, %s %s %s", Sys.time(), main, dt, units, tail) } - message(msg) + if(getArchRVerbose()) message(msg) }, error = function(x){ - message("Time Error : ", x) + if(getArchRVerbose()) message("Time Error : ", x) }) } @@ -172,7 +199,7 @@ createLogFile <- function( } } - message("ArchR logging to : ", logFile, + if(getArchRVerbose()) message("ArchR logging to : ", logFile, "\nIf there is an issue, please report to github with logFile!") #Begin With @@ -220,8 +247,12 @@ createLogFile <- function( useLogs = getArchRLogging() ){ - msg <- utils::capture.output(message(...), type = "message") - msg <- paste0(msg, collapse = "\n") + if(getArchRVerbose()){ + msg <- utils::capture.output(message(...), type = "message") + msg <- paste0(msg, collapse = "\n") + }else{ + msg <- "SuppressedMessaged due to getArchRVerbose() is FALSE!" + } if(is.null(msg)){ stop("Message must be provided when logging!") @@ -556,7 +587,7 @@ createLogFile <- function( cat(paste0("Elapsed Time Minutes = ", mn), file = logFile, append = TRUE) cat(paste0("\nElapsed Time Hours = ", hr), file = logFile, append = TRUE) cat("\n\n-------\n\n\n\n", file = logFile, append = TRUE) - message("ArchR logging successful to : ", logFile) + if(getArchRVerbose()) message("ArchR logging successful to : ", logFile) }, error = function(x){ }) diff --git a/R/MarkerFeatures.R b/R/MarkerFeatures.R index 0cf5bf56..0ed03a5b 100644 --- a/R/MarkerFeatures.R +++ b/R/MarkerFeatures.R @@ -410,6 +410,10 @@ getMarkerFeatures <- function( } + .logThis(o, paste0(group, "_", seqnames[y], "_diffResult"), logFile = logFile) + + o + }) %>% Reduce("rbind", .) idxFilter <- rowSums(pairwiseDF[,c("mean1","mean2")]) != 0 diff --git a/R/VisualizeData.R b/R/VisualizeData.R index 6f2daa8d..d675abd4 100644 --- a/R/VisualizeData.R +++ b/R/VisualizeData.R @@ -95,12 +95,12 @@ plotPDF <- function( if(inherits(plotList[[i]], "patchwork")){ - message("Plotting Patchwork!") + if(getArchRVerbose()) message("Plotting Patchwork!") print(plotList[[i]]) }else{ - message("Plotting Ggplot!") + if(getArchRVerbose()) message("Plotting Ggplot!") if(!is.null(attr(plotList[[i]], "ratioYX"))){ .fixPlotSize(plotList[[i]], plotWidth = width, plotHeight = height, height = attr(plotList[[i]], "ratioYX"), newPage = FALSE) @@ -116,7 +116,7 @@ plotPDF <- function( }else if(inherits(plotList[[i]], "gtable")){ - message("Plotting Gtable!") + if(getArchRVerbose()) message("Plotting Gtable!") print(grid::grid.draw(plotList[[i]])) if(i != length(plotList)){ @@ -124,7 +124,7 @@ plotPDF <- function( } }else if(inherits(plotList[[i]], "HeatmapList") | inherits(plotList[[i]], "Heatmap") ){ - message("Plotting ComplexHeatmap!") + if(getArchRVerbose()) message("Plotting ComplexHeatmap!") padding <- 15 draw(plotList[[i]], @@ -135,7 +135,7 @@ plotPDF <- function( }else{ - message("Plotting Other") + if(getArchRVerbose()) message("Plotting Other") print(plotList[[i]]) @@ -147,7 +147,7 @@ plotPDF <- function( }, error = function(x){ - message(x) + if(getArchRVerbose()) message(x) }) @@ -320,7 +320,7 @@ plotEmbedding <- function( } if(!is.null(imputeWeights)){ - message("Imputing Matrix") + if(getArchRVerbose()) message("Imputing Matrix") colorMat <- matrix(colorParams$color, nrow=1) colnames(colorMat) <- rownames(df) colorMat <- imputeMatrix(mat = colorMat, imputeWeights = imputeWeights, logFile = logFile) @@ -367,7 +367,7 @@ plotEmbedding <- function( .logThis(colorMat, "colorMat-Before-Impute", logFile = logFile) if(!is.null(imputeWeights)){ - message("Imputing Matrix") + if(getArchRVerbose()) message("Imputing Matrix") colorMat <- imputeMatrix(mat = as.matrix(colorMat), imputeWeights = imputeWeights, logFile = logFile) if(!inherits(colorMat, "matrix")){ colorMat <- matrix(colorMat, ncol = nrow(df)) @@ -401,11 +401,11 @@ plotEmbedding <- function( } - message("Plotting Embedding") + if(getArchRVerbose()) message("Plotting Embedding") ggList <- lapply(seq_along(colorList), function(x){ - message(x, " ", appendLF = FALSE) + if(getArchRVerbose()) message(x, " ", appendLF = FALSE) plotParamsx <- .mergeParams(colorList[[x]], plotParams) @@ -483,7 +483,7 @@ plotEmbedding <- function( }) names(ggList) <- name - message("") + if(getArchRVerbose()) message("") if(length(ggList) == 1){ ggList <- ggList[[1]] @@ -663,7 +663,7 @@ plotGroups <- function( pl <- lapply(seq_along(colorList), function(x){ - message(paste0(x, " "), appendLF = FALSE) + if(getArchRVerbose()) message(paste0(x, " "), appendLF = FALSE) if(is.null(ylim)){ ylim <- range(colorList[[x]]$color,na.rm=TRUE) %>% extendrange(f = 0.05) @@ -692,7 +692,7 @@ plotGroups <- function( }) names(pl) <- name - message("") + if(getArchRVerbose()) message("") if(length(name)==1){ pl[[1]] @@ -764,7 +764,7 @@ plotGroups <- function( cellNamesList <- split(rownames(getCellColData(ArchRProj)), getCellColData(ArchRProj)$Sample) values <- .safelapply(seq_along(cellNamesList), function(x){ - message(x, " ", appendLF = FALSE) + if(getArchRVerbose()) message(x, " ", appendLF = FALSE) valuesx <- tryCatch({ o <- h5closeAll() ArrowFile <- getSampleColData(ArchRProj)[names(cellNamesList)[x],"ArrowFiles"] @@ -792,7 +792,7 @@ plotGroups <- function( valuesx }, threads = threads) %>% Reduce("cbind", .) values <- values[, ArchRProj$cellNames, drop = FALSE] - message("") + if(getArchRVerbose()) message("") gc() .logThis(values, "Feature-Matrix", logFile = logFile) @@ -804,7 +804,7 @@ plotGroups <- function( #Values Summary if(!is.null(log2Norm)){ if(log2Norm){ - message("Log2 Normalizing...") + if(getArchRVerbose()) message("Log2 Normalizing...") values <- log2(values + 1) } } From 3321710bd5eea119596a7d8c6daf943de4538b0b Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Mon, 11 Jan 2021 13:23:35 -0800 Subject: [PATCH 22/35] bugfix + documentation --- .DS_Store | Bin 14340 -> 14340 bytes NAMESPACE | 2 ++ R/GlobalDefaults.R | 2 +- man/addArchRVerbose.Rd | 14 ++++++++++++++ man/addPeakAnnotations.Rd | 2 +- man/getArchRVerbose.Rd | 11 +++++++++++ 6 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 man/addArchRVerbose.Rd create mode 100644 man/getArchRVerbose.Rd diff --git a/.DS_Store b/.DS_Store index b5f248f8a6e298a010d6f2042e866ae1e4e0c024..0a163eb0707bce779ae6d00ba33f336c20fa6c28 100644 GIT binary patch delta 432 zcmYLDIV?m`6rD4+_swJ8w|itFA;eOQHI_syiP*Q0AtN#~-jn>8jsJ(xP$&f5rJ!dl@k)pVXB=vc$vbk$(-;S zawH_QMNNvh!X3PV5O<94U6FrV#BD08IGxh94avMDVO(2B>C}=I6iiP>IqNB(_IrKO z&pbjQ@xSI4%3Z5+Mb|<>Hk2gWJ1C!72n7N%Xy_{H{^(dK-o<+edm!_%@L{iRjD=o?x3p?1w9`2!QdyZb|y{&K%4I0`eh@V7=pu*6ii&RuJq;;<3M*sA-gryZ7EpkIb zVzL?}jY+VY4Af$Y3N))qZT}+M_g)t?j0?XcZ+3Yi6xPbdX>sqHJZ9^ls52O4c?z6GA+kmi-B?Y$!4p zuL&(Top#1nO3idi{`;Je@{HhQZYqXJKvni+J?RnpsHoDwrV{5mYCsqwBBzVd@JK|C z>e;X`Lc}?`v@NGpB@x%dF=3oY=%K;&L@Xx9(`p$#>0wNpYHsK#8P5E9ESEf{I4@Zc zM^)t<9+w82H(LV(jIe;A3r@J;#vmpz2@iaj#XS62zzRZG#Tqzbh$D$D>>!7I93YQF z9ODG1IKu@laf4gj;T{io!ZV6^!5iN3flr-UjSAiWuc7s}nDAA2vW*HyIdj3>{@wHo D{vBb- diff --git a/NAMESPACE b/NAMESPACE index 398bf483..ce5679a8 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -17,6 +17,7 @@ export(addArchRDebugging) export(addArchRGenome) export(addArchRLogging) export(addArchRThreads) +export(addArchRVerbose) export(addBgdPeaks) export(addCellColData) export(addClusters) @@ -68,6 +69,7 @@ export(getArchRDebugging) export(getArchRGenome) export(getArchRLogging) export(getArchRThreads) +export(getArchRVerbose) export(getArrowFiles) export(getAvailableMatrices) export(getBgdPeaks) diff --git a/R/GlobalDefaults.R b/R/GlobalDefaults.R index 7e123a32..aae3753b 100644 --- a/R/GlobalDefaults.R +++ b/R/GlobalDefaults.R @@ -47,7 +47,7 @@ ArchRDefaults <- list( }else{ TRUE } - },erro r= function(e){ + },error= function(e){ FALSE }) } diff --git a/man/addArchRVerbose.Rd b/man/addArchRVerbose.Rd new file mode 100644 index 00000000..dadc3508 --- /dev/null +++ b/man/addArchRVerbose.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LoggerUtils.R +\name{addArchRVerbose} +\alias{addArchRVerbose} +\title{Set ArchR Verbosity for Log Messaging} +\usage{ +addArchRVerbose(verbose = TRUE) +} +\arguments{ +\item{verbose}{A boolean describing whether to printMessages in addition to logging with ArchR.} +} +\description{ +This function will set ArchR logging verbosity. +} diff --git a/man/addPeakAnnotations.Rd b/man/addPeakAnnotations.Rd index d96db49d..72775a9f 100644 --- a/man/addPeakAnnotations.Rd +++ b/man/addPeakAnnotations.Rd @@ -15,7 +15,7 @@ addPeakAnnotations( \arguments{ \item{ArchRProj}{An \code{ArchRProject} object.} -\item{regions}{A \code{list} of \code{GRanges} that are to be overlapped with the \code{peakSet} in the \code{ArchRProject}.} +\item{regions}{A named \code{list} of \code{GRanges} that are to be overlapped with the \code{peakSet} in the \code{ArchRProject}.} \item{name}{The name of \code{peakAnnotation} object to be stored as in \code{ArchRProject}.} diff --git a/man/getArchRVerbose.Rd b/man/getArchRVerbose.Rd new file mode 100644 index 00000000..0ed46322 --- /dev/null +++ b/man/getArchRVerbose.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LoggerUtils.R +\name{getArchRVerbose} +\alias{getArchRVerbose} +\title{Set ArchR Verbosity for Log Messaging} +\usage{ +getArchRVerbose() +} +\description{ +This function will get ArchR logging verbosity. +} From ad1f482550a9f98da6594a69fd5b5b1f42ca17a8 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Mon, 18 Jan 2021 11:05:46 -0800 Subject: [PATCH 23/35] update subsetting to metadata --- .DS_Store | Bin 14340 -> 14340 bytes R/ArrowUtils.R | 12 +++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index 0a163eb0707bce779ae6d00ba33f336c20fa6c28..fbef0b412e4aa92df506acc8750ef3ceb4dc92da 100644 GIT binary patch delta 33 ocmZoEXerpRUqHmn)Lciw)X=O}N1@un)JR9c#MET-WdTEV0JFadzyJUM delta 33 ncmZoEXerpRUqHmzR7XMApjJnr+R)4d$Tl=EGT(ezz)&3kvXBX- diff --git a/R/ArrowUtils.R b/R/ArrowUtils.R index 7fa584b5..f8e4af75 100644 --- a/R/ArrowUtils.R +++ b/R/ArrowUtils.R @@ -379,10 +379,20 @@ o <- h5createGroup(outArrow, groupName) mData <- ArrowInfo[[groupName]] + cellNames <- .h5read(inArrow, "Metadata/CellNames") + idx <- which(cellNames %in% stringr::str_split(cellsKeep, pattern="#", simplify=TRUE)[,2]) + if(length(idx)==0){ + stop("No cells matching in arrow file!") + } + for(i in seq_len(nrow(mData))){ h5name <- paste0(groupName, "/", mData$name[i]) - h5write(.h5read(inArrow, h5name), file = outArrow, name = h5name) + mDatai <- .h5read(inArrow, h5name) + if(length(mDatai)==length(cellNames)){ + mDatai <- mDatai[idx] + } + h5write(mDatai, file = outArrow, name = h5name) } #2. scATAC-Fragments From ad26c09d4956b4e1e9dde9be3da355977f98a580 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 23 Jan 2021 13:43:16 -0800 Subject: [PATCH 24/35] handling case n = 1 for deviations matrix --- .DS_Store | Bin 14340 -> 14340 bytes R/MatrixDeviations.R | 6 ++++++ 2 files changed, 6 insertions(+) diff --git a/.DS_Store b/.DS_Store index fbef0b412e4aa92df506acc8750ef3ceb4dc92da..074e372be9af2e2270425628d3222a1d93be553a 100644 GIT binary patch delta 865 zcmZvZTSyd99LCSL-p=Hdv$m_Fo6f4)s%+lYE23s=d8aTfL%ZxY8w~DESIsojXhEWU zh{3S(B_g5>5;UXC3VQLOr`leGqKBZDsGtk@*4Z6}9-N0W{Qn=E^YQxy{XzeHm7uO9 z1&yU;KpK-%vWewNj~}v7xDXQ>j^Y{jL|sg}5*z8ZxD% zic+Sun+mH`&_>=O#dA!WmRTe#rGhRbrlgwk3nX5MVyd{vXe;3*A%PtpE4a##PBEl24C!sm;vVkf0Ulxwi&(-lJjXI#s8a>W`qoYH U+8-Ymf=QFy^$Fubym>wO9|14PDgXcg delta 1009 zcmaiyTTE0}6o%J7D&0pmu(>G1VZ@pZ6`^v87!75Hb8L>zt;~SM z5yuA;o3{GEiESmucuAW!w9!N;8clpKO`xehVN8q|pY*Xl*s4#u=VIFjlfIml_5V40 zt-ZhhNbE@LVynQs`JOmjXH6!(o_CyfPosC-X-_tLnw)mG$2~r-u<|vH@3#+z#||V9 zjvqQ{K5(vfO%f5PI}{)F2Sd>yk>zSI7Bb=qm+LMpOO`IndxI&<^Lc@~rTwF=eA|R| zg~`kIn3HO0b-ytbjr14?bOB|mu-sO?roO@5vfjT?B#KK)%Q!b@YwJ_Zijonm6{^}l z5;Q&=F%o0K!Pr8HC@$hvs$CH?Y_}Fj=-Z;2vB%K0jH6bmZ!xwjt^0>{`PDMV)YPiH zH=Z6EVA+G$Iyvv%XGAm+&y8|5aQgr|F~ zcWnrqaLbX=EX|sv+o3n*){F@wvvf~&ZO-*5|ea1VS{c^6kT~#xs-2zUj7m= CBj`y0 diff --git a/R/MatrixDeviations.R b/R/MatrixDeviations.R index 6fd0d467..fd9de175 100644 --- a/R/MatrixDeviations.R +++ b/R/MatrixDeviations.R @@ -378,11 +378,17 @@ addDeviationsMatrix <- function( if("z" %in% tolower(out)){ z <- t(vapply(results, function(x) x[["z"]], rep(0, length(cn)))) + if(length(cn)==1){ + z <- matrix(z, ncol=length(cn)) + } }else{ z <- matrix(0, nrow = ncol(annotationsMatrix), ncol = length(cn)) } if("deviations" %in% tolower(out)){ dev <- t(vapply(results, function(x) x[["dev"]], rep(0, length(cn)))) + if(length(cn)==1){ + dev <- matrix(dev, ncol=length(cn)) + } }else{ dev <- matrix(0, nrow = ncol(annotationsMatrix), ncol = length(cn)) } From d154991811ea2011a6b62ce92e8da494b7413d27 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sun, 24 Jan 2021 19:23:40 -0800 Subject: [PATCH 25/35] bugfix ordering of scTrack --- .DS_Store | Bin 14340 -> 14340 bytes R/ArchRBrowser.R | 6 ++++++ 2 files changed, 6 insertions(+) diff --git a/.DS_Store b/.DS_Store index 074e372be9af2e2270425628d3222a1d93be553a..f3f37c33d443a9fbdfa9cd839a56e824b374265f 100644 GIT binary patch delta 1901 zcmc(fZERCz7>3`wbldqD+gVvp&&IlTtX;R!ZXKKZW|VcpV1qFnI%G^cdQ2L-wya~x zT(qb&5J956eoZB!iN?T;CUcmG`a=_uX#9Zv5Y3Fl1phffOw5eI_ncEii26qp`lIdh zJnw1GbFTZoCliy2HxFj6{+JsKhep-zP;#^hNA8KJVS2I3Lw_l^sNaxz@-6v+{6sF2pUGta0z_m(K?zpC1ve^Di#pV! z0j;(Ge}=s`cWV+RHh#xP>ojS);>5|3aX_Tw2G#Y=b@(|8>x@F6~>(FzBh%<|E8 zb8j}g85noOi8FbeY@R90wwiI8wn}>iWn!YX-s`OMH_%g3F{bEuUWflV{gSQG0rE6?k-SA_$qDiS`GlM$=g9ZuN3uXJF)+U}FeaFhfgIQvmNIxy zjvA~+8`kJZy3mbY+{vKq#2|Jd%D}`^NMH;p?8QTP7zgkqp2D-3Vr-7%9lVS8@IFrA zOPs-3%wZlEuz<_>-MC3p8WY)^-XZ;gE9?u1#v_sDarEzbI5Kr06*mI0^8C3Rjl!~g zt88<+E30Z7SGUtI%nBWJHDoCTh0BZVB3;aH9uPea24$9$Ft@y*P;q!1K8}-2bK03| zzeALkFk-x3*4-jHqznd!)61r2QIyP#o-u7(!={;xlQ9i;h$1~?E&L}!|H|hyIYZ7f zHjCs6BO<`Um^c{|FSAJ-0tljmS!FY`NiVjdPbYFWLTM^724$St<$gSX)GFqeM{y93 z;Slr96rRTmID%L48jdkW)0oBEjMPb;)kpXoUt#`mp#v9Y;_^P8icW>LNT1OKXGMm* zZhfb4Sh3P>Uzon)X-!$!=6WR9ob;cP?N5)<#j4_)5^?)!pmHbuEx#-!+mr%_({7ivowzxz98#HZjz!9jsX;*wbp(%K8RDNUK>ZTUy!FP;-Gzk%hHFkk2z&c!~Ta@Uw47 z{8AcOX&urvo68hifFjsY%#x%6E17nEOudb0LNn8^7WC_}MOW`O+>X0+^@gFcuurhC rPhynmH-!iFVA16JIGzAy0doY$X3o1^!c3O`l6lMjvBu5YqQvwEv}~(B delta 1775 zcmdUvU2Icj9LC?LYrAt!&$iQcYfno@JG!pjY}f8XwlOxg71;*^3=Elq%4(}tx^Ar7 zL?&+F0#Qd)-XQY>7h{x&UVudieka}-Br}1U2#Feu#>Ai)1&w;+d(Ih&CMI5SVK3Ue z|L0ts{{FxBnI4`VJ~m@SEB(-7(@TX#1@w5pS+FHOFq&916i?opOvLF9hi5WNPLq$w zJo%KIBj?HIu^xTch}&>C z?n4p}U>ioU3scyQJ$M4o;RPJVi#USgcoSKizE8U1!MUna@Y7TF zwIWNP#hfW?=4|?Gg;=7eUeA0GWPK_#9*w1jVua|9#fDSK%xENX5xP9R!I;nSf=Mip zySlr2R*TeK7Nuk6D1FLbVlA}0%6wJf`li-su1GRl#A1(g4?& zN$yN&c~Gq8r3~M#xyt;Hoa zyT?~auQ*HT)~W_hb~qQgN<}xFEw7+eCDyd)cbjS%+*;ZZWhpW18hM`cYPt~OZ3`T*7XJtL zGtBd^8S_6u7-1%ZNYETz>^eEO-q^@j6reBu?XPwu5)+lVQ8L_xfvUzxX0MZQI8`Jyk+Y z9+@@;&mQpW={1kfAhWyB&F;dK#p(72LbVOc+j9kswqOy8>7*>vKg@+o=J>w!z+fV$ z+-;j(mixzI$?apw(T5~2$Ej0_fNfHVJuX?^tla$QNP>OG7xHqSEU3z>8&DpstP%uO zd6l{{sSXRWro6frWmH!$$k&xu*P#p>n*_Q4o}t0PM0zx1Mv!eu8MplZ3TT)0f~de& z)n4ok1Z$Qyx6$_UO?0km`J`VlSwfBxcQ}2{n^c#TgHY{^C>HpUADD%2!i7BoZ@m@K-1$NRjo9MgDfF*kHbPGm(euOisLKt zEi3DvX_+h3yq4*DJMLh`a3|CCepbYau4z^bimnq(*S)H)kE;c7XhGJ)cokWiGP<++ Yiaa4}h+Nh8->82;CmfC&^y)g@UsbZ1od5s; diff --git a/R/ArchRBrowser.R b/R/ArchRBrowser.R index 27a01fbd..c496cc9f 100644 --- a/R/ArchRBrowser.R +++ b/R/ArchRBrowser.R @@ -1749,6 +1749,12 @@ plotBrowserTrack <- function( title <- paste0(as.character(seqnames(region)),":", start(region)-1, "-", end(region), " ", title) + #Re-Order + groupDF$group2 <- factor( + paste0(groupDF$group2), + levels = gtools::mixedsort(unique(paste0(groupDF$group2))) + ) + p <- ggplot(groupDF, aes(x=bp, y=y, width = tileSize, fill = group2, color = group2)) + geom_tile(size = scTileSize) + facet_grid(group2 ~ ., scales="free_y") + From 4e6aaf63d3c2c7df3ce40738cc8f9e7b2c902124 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sun, 24 Jan 2021 19:43:54 -0800 Subject: [PATCH 26/35] handle error where no barcodes passing on a small chromosome/scaffold --- R/CreateArrow.R | 60 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/R/CreateArrow.R b/R/CreateArrow.R index 44ae6334..fa12466e 100644 --- a/R/CreateArrow.R +++ b/R/CreateArrow.R @@ -1930,14 +1930,29 @@ createArrowFiles <- function( chrPos <- paste0("Fragments/",chr,"/Ranges") chrRGLengths <- paste0("Fragments/",chr,"/RGLengths") chrRGValues <- paste0("Fragments/",chr,"/RGValues") - o <- h5createGroup(outArrow, paste0("Fragments/",chr)) - o <- .suppressAll(h5createDataset(outArrow, chrPos, storage.mode = "integer", dims = c(length(fragments), 2), level = 0)) - o <- .suppressAll(h5createDataset(outArrow, chrRGLengths, storage.mode = "integer", dims = c(lengthRG, 1), level = 0)) - o <- .suppressAll(h5createDataset(outArrow, chrRGValues, storage.mode = "character", dims = c(lengthRG, 1), level = 0, - size = max(nchar(mcols(fragments)$RG@values)) + 1)) - o <- h5write(obj = cbind(start(fragments),width(fragments)), file = outArrow, name = chrPos) - o <- h5write(obj = mcols(fragments)$RG@lengths, file = outArrow, name = chrRGLengths) - o <- h5write(obj = mcols(fragments)$RG@values, file = outArrow, name = chrRGValues) + + if(lengthRG == 0){ + + .logMessage(msg = paste0(prefix, " detected 0 Fragments in cells passing filtering threshold for ", chr), logFile = logFile) + + o <- h5createGroup(outArrow, paste0("Fragments/",chr)) + o <- .suppressAll(h5createDataset(outArrow, chrPos, storage.mode = "integer", dims = c(0, 2), level = 0)) + o <- .suppressAll(h5createDataset(outArrow, chrRGLengths, storage.mode = "integer", dims = c(0, 1), level = 0)) + o <- .suppressAll(h5createDataset(outArrow, chrRGValues, storage.mode = "character", dims = c(0, 1), level = 0, + size = 10) + + }else{ + + o <- h5createGroup(outArrow, paste0("Fragments/",chr)) + o <- .suppressAll(h5createDataset(outArrow, chrPos, storage.mode = "integer", dims = c(length(fragments), 2), level = 0)) + o <- .suppressAll(h5createDataset(outArrow, chrRGLengths, storage.mode = "integer", dims = c(lengthRG, 1), level = 0)) + o <- .suppressAll(h5createDataset(outArrow, chrRGValues, storage.mode = "character", dims = c(lengthRG, 1), level = 0, + size = max(nchar(mcols(fragments)$RG@values)) + 1)) + + o <- h5write(obj = cbind(start(fragments),width(fragments)), file = outArrow, name = chrPos) + o <- h5write(obj = mcols(fragments)$RG@lengths, file = outArrow, name = chrRGLengths) + o <- h5write(obj = mcols(fragments)$RG@values, file = outArrow, name = chrRGValues) + } #Free Some Memory! rm(fragments) @@ -1995,15 +2010,26 @@ createArrowFiles <- function( chrRGLengths <- paste0(chr, "._.RGLengths") chrRGValues <- paste0(chr, "._.RGValues") - #HDF5 Write - o <- .suppressAll(h5createDataset(tmpChrFile, chrPos, storage.mode = "integer", dims = c(length(fragments), 2), level = 0)) - o <- .suppressAll(h5createDataset(tmpChrFile, chrRGLengths, storage.mode = "integer", dims = c(lengthRG, 1), level = 0)) - o <- .suppressAll(h5createDataset(tmpChrFile, chrRGValues, storage.mode = "character", dims = c(lengthRG, 1), level = 0, - size = max(nchar(mcols(fragments)$RG@values)) + 1)) - - o <- h5write(obj = cbind(start(fragments),width(fragments)), file = tmpChrFile, name = chrPos) - o <- h5write(obj = mcols(fragments)$RG@lengths, file = tmpChrFile, name = chrRGLengths) - o <- h5write(obj = mcols(fragments)$RG@values, file = tmpChrFile, name = chrRGValues) + if(lengthRG == 0){ + + #HDF5 Write + o <- .suppressAll(h5createDataset(tmpChrFile, chrPos, storage.mode = "integer", dims = c(0, 2), level = 0)) + o <- .suppressAll(h5createDataset(tmpChrFile, chrRGLengths, storage.mode = "integer", dims = c(0, 1), level = 0)) + o <- .suppressAll(h5createDataset(tmpChrFile, chrRGValues, storage.mode = "character", dims = c(0, 1), level = 0, + size = 10) + + }else{ + + #HDF5 Write + o <- .suppressAll(h5createDataset(tmpChrFile, chrPos, storage.mode = "integer", dims = c(length(fragments), 2), level = 0)) + o <- .suppressAll(h5createDataset(tmpChrFile, chrRGLengths, storage.mode = "integer", dims = c(lengthRG, 1), level = 0)) + o <- .suppressAll(h5createDataset(tmpChrFile, chrRGValues, storage.mode = "character", dims = c(lengthRG, 1), level = 0, + size = max(nchar(mcols(fragments)$RG@values)) + 1)) + + o <- h5write(obj = cbind(start(fragments),width(fragments)), file = tmpChrFile, name = chrPos) + o <- h5write(obj = mcols(fragments)$RG@lengths, file = tmpChrFile, name = chrRGLengths) + o <- h5write(obj = mcols(fragments)$RG@values, file = tmpChrFile, name = chrRGValues) + } #Free Some Memory! rm(fragments) From 73ff06613079f11982d6a26d1a46180a30146d9e Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sun, 24 Jan 2021 19:48:08 -0800 Subject: [PATCH 27/35] bugfix validBSgenome --- R/AnnotationPeaks.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/AnnotationPeaks.R b/R/AnnotationPeaks.R index 909e7be0..13df1f22 100644 --- a/R/AnnotationPeaks.R +++ b/R/AnnotationPeaks.R @@ -617,9 +617,9 @@ addArchRAnnotations <- function( } genome <- tolower(tryCatch({ - validBSgenome(getGenome(ArchRProj)) + validBSgenome(getGenome(ArchRProj))$provider_version }, error = function(e){ - strsplit(validBSgenome(getGenome(ArchRProj)),"\\.")[[1]][4] + strsplit(validBSgenome(getGenome(ArchRProj))@pkgname,"\\.")[[1]][4] })) annoPath <- file.path(find.package("ArchR", NULL, quiet = TRUE), "data", "Annotations") From 7a1d4fc950f4b9a78ec74280be3236284cc28b9e Mon Sep 17 00:00:00 2001 From: Ryan Corces Date: Mon, 25 Jan 2021 07:32:04 -0800 Subject: [PATCH 28/35] fix missing paren --- R/CreateArrow.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/CreateArrow.R b/R/CreateArrow.R index fa12466e..6260b008 100644 --- a/R/CreateArrow.R +++ b/R/CreateArrow.R @@ -1939,7 +1939,7 @@ createArrowFiles <- function( o <- .suppressAll(h5createDataset(outArrow, chrPos, storage.mode = "integer", dims = c(0, 2), level = 0)) o <- .suppressAll(h5createDataset(outArrow, chrRGLengths, storage.mode = "integer", dims = c(0, 1), level = 0)) o <- .suppressAll(h5createDataset(outArrow, chrRGValues, storage.mode = "character", dims = c(0, 1), level = 0, - size = 10) + size = 10)) }else{ From 7f1c505f584fc8f584c0445f3b01a18a0dd55f09 Mon Sep 17 00:00:00 2001 From: Ryan Corces Date: Mon, 25 Jan 2021 07:50:54 -0800 Subject: [PATCH 29/35] fix missing paren --- R/CreateArrow.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/CreateArrow.R b/R/CreateArrow.R index 6260b008..d793bc69 100644 --- a/R/CreateArrow.R +++ b/R/CreateArrow.R @@ -2016,7 +2016,7 @@ createArrowFiles <- function( o <- .suppressAll(h5createDataset(tmpChrFile, chrPos, storage.mode = "integer", dims = c(0, 2), level = 0)) o <- .suppressAll(h5createDataset(tmpChrFile, chrRGLengths, storage.mode = "integer", dims = c(0, 1), level = 0)) o <- .suppressAll(h5createDataset(tmpChrFile, chrRGValues, storage.mode = "character", dims = c(0, 1), level = 0, - size = 10) + size = 10)) }else{ From 670aecfe3e5eeb33a92607765d999fafcc03553a Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 30 Jan 2021 21:52:43 -0800 Subject: [PATCH 30/35] add feature for supplying custom gene list for rna integration --- .DS_Store | Bin 14340 -> 14340 bytes R/CreateArrow.R | 4 ++-- R/RNAIntegration.R | 7 ++++++- man/addGeneIntegrationMatrix.Rd | 3 +++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.DS_Store b/.DS_Store index f3f37c33d443a9fbdfa9cd839a56e824b374265f..117af1e9eb4713057ab0611b2987e04cf17fe80e 100644 GIT binary patch delta 46 zcmZoEXeroWEihSGp;g4vR7b(c*t}Lpq1w>E&`d|c+{|$D9tG3Q9D+>zo4FN!iUR;a CF%1p? delta 46 zcmZoEXeroWEx>qk@_w-fE{W=DV>2BE69elNe}XHGt+AkR2!Gn*hQ|7I?QU*Z6J CKMx-O diff --git a/R/CreateArrow.R b/R/CreateArrow.R index fa12466e..d793bc69 100644 --- a/R/CreateArrow.R +++ b/R/CreateArrow.R @@ -1939,7 +1939,7 @@ createArrowFiles <- function( o <- .suppressAll(h5createDataset(outArrow, chrPos, storage.mode = "integer", dims = c(0, 2), level = 0)) o <- .suppressAll(h5createDataset(outArrow, chrRGLengths, storage.mode = "integer", dims = c(0, 1), level = 0)) o <- .suppressAll(h5createDataset(outArrow, chrRGValues, storage.mode = "character", dims = c(0, 1), level = 0, - size = 10) + size = 10)) }else{ @@ -2016,7 +2016,7 @@ createArrowFiles <- function( o <- .suppressAll(h5createDataset(tmpChrFile, chrPos, storage.mode = "integer", dims = c(0, 2), level = 0)) o <- .suppressAll(h5createDataset(tmpChrFile, chrRGLengths, storage.mode = "integer", dims = c(0, 1), level = 0)) o <- .suppressAll(h5createDataset(tmpChrFile, chrRGValues, storage.mode = "character", dims = c(0, 1), level = 0, - size = 10) + size = 10)) }else{ diff --git a/R/RNAIntegration.R b/R/RNAIntegration.R index 53a367f6..f0f49e39 100644 --- a/R/RNAIntegration.R +++ b/R/RNAIntegration.R @@ -43,6 +43,7 @@ #' @param reduction The Seurat reduction method to use for integrating modalities. See `Seurat::FindTransferAnchors()` for possible reduction methods. #' @param addToArrow A boolean value indicating whether to add the log2-normalized transcript counts from the integrated matched RNA to the Arrow files. #' @param scaleTo Each column in the integrated RNA matrix will be normalized to a column sum designated by `scaleTo` prior to adding to Arrow files. +#' @param genesUse If desired a character vector of gene names to use for integration instead of determined ones from Seurat::variableGenes. #' @param nameCell A column name to add to `cellColData` for the predicted scRNA-seq cell in the specified `ArchRProject`. This is useful for identifying which cell was closest to the scATAC-seq cell. #' @param nameGroup A column name to add to `cellColData` for the predicted scRNA-seq group in the specified `ArchRProject`. See `groupRNA` for more details. #' @param nameScore A column name to add to `cellColData` for the predicted scRNA-seq score in the specified `ArchRProject`. These scores represent @@ -77,6 +78,7 @@ addGeneIntegrationMatrix <- function( reduction = "cca", addToArrow = TRUE, scaleTo = 10000, + genesUse = NULL, nameCell = "predictedCell", nameGroup = "predictedGroup", nameScore = "predictedScore", @@ -110,6 +112,7 @@ addGeneIntegrationMatrix <- function( .validInput(input = reduction, name = "reduction", valid = c("character")) .validInput(input = addToArrow, name = "addToArrow", valid = c("boolean")) .validInput(input = scaleTo, name = "scaleTo", valid = c("numeric")) + .validInput(input = genesUse, name = "genesUse", valid = c("character")) .validInput(input = nameCell, name = "nameCell", valid = c("character")) .validInput(input = nameGroup, name = "nameGroup", valid = c("character")) .validInput(input = nameScore, name = "nameScore", valid = c("character")) @@ -385,7 +388,9 @@ addGeneIntegrationMatrix <- function( .logDiffTime(sprintf("%s Identifying Variable Genes", prefix), tstart, verbose = verbose, logFile = logFile) subRNA <- FindVariableFeatures(object = subRNA, nfeatures = nGenes, verbose = FALSE) subRNA <- ScaleData(object = subRNA, verbose = FALSE) - genesUse <- VariableFeatures(object = subRNA) + if(is.null(genesUse)){ + genesUse <- VariableFeatures(object = subRNA) + } ############################################################################################## #2. Get Gene Score Matrix and Create Seurat ATAC diff --git a/man/addGeneIntegrationMatrix.Rd b/man/addGeneIntegrationMatrix.Rd index 9b89ffdb..dba7957d 100644 --- a/man/addGeneIntegrationMatrix.Rd +++ b/man/addGeneIntegrationMatrix.Rd @@ -28,6 +28,7 @@ addGeneIntegrationMatrix( reduction = "cca", addToArrow = TRUE, scaleTo = 10000, + genesUse = NULL, nameCell = "predictedCell", nameGroup = "predictedGroup", nameScore = "predictedScore", @@ -98,6 +99,8 @@ correlation to sequencing depth that is greater than the \code{corCutOff}, it wi \item{scaleTo}{Each column in the integrated RNA matrix will be normalized to a column sum designated by \code{scaleTo} prior to adding to Arrow files.} +\item{genesUse}{If desired a character vector of gene names to use for integration instead of determined ones from Seurat::variableGenes.} + \item{nameCell}{A column name to add to \code{cellColData} for the predicted scRNA-seq cell in the specified \code{ArchRProject}. This is useful for identifying which cell was closest to the scATAC-seq cell.} \item{nameGroup}{A column name to add to \code{cellColData} for the predicted scRNA-seq group in the specified \code{ArchRProject}. See \code{groupRNA} for more details.} From 58686563ef8e33b84d2e629994881c58a08c7c23 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 30 Jan 2021 22:26:50 -0800 Subject: [PATCH 31/35] add sanity check to partial matrix --- R/ArrowRead.R | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/R/ArrowRead.R b/R/ArrowRead.R index 0fa26ae1..416d6a84 100644 --- a/R/ArrowRead.R +++ b/R/ArrowRead.R @@ -783,6 +783,11 @@ getMatrixFromArrow <- function( matFiles <- lapply(mat, function(x) x[[2]]) %>% Reduce("c", .) mat <- lapply(mat, function(x) x[[1]]) %>% Reduce("cbind", .) + if(!all(cellNames %in% colnames(mat))){ + .logThis(sampledCellNames, "cellNames supplied", logFile = logFile) + .logThis(colnames(mat), "cellNames from matrix", logFile = logFile) + stop("Error not all cellNames found in partialMatrix") + } mat <- mat[,sampledCellNames, drop = FALSE] mat <- .checkSparseMatrix(mat, length(sampledCellNames)) @@ -793,6 +798,11 @@ getMatrixFromArrow <- function( }else{ mat <- Reduce("cbind", mat) + if(!all(cellNames %in% colnames(mat))){ + .logThis(cellNames, "cellNames supplied", logFile = logFile) + .logThis(colnames(mat), "cellNames from matrix", logFile = logFile) + stop("Error not all cellNames found in partialMatrix") + } mat <- mat[,cellNames, drop = FALSE] mat <- .checkSparseMatrix(mat, length(cellNames)) From 113325b5f7ad0d455b1bf0a00e8df70a0fb5ad33 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sat, 30 Jan 2021 22:58:37 -0800 Subject: [PATCH 32/35] update cellsInArrow in case user overrides sample in ArchRProj --- .DS_Store | Bin 14340 -> 14340 bytes R/GroupCoverages.R | 6 +++++- R/GroupExport.R | 6 +++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 117af1e9eb4713057ab0611b2987e04cf17fe80e..0a213810225d222e3d497b3ed6fec86d079511ea 100644 GIT binary patch delta 652 zcma*jO-Pe*90%~~XvL`2yk(2UaR5J5zA$VC*XHZi`u8Yj?UDeXZ@mP`*Yn7@3(_c}7+FvcV6=ea5B%=2ktj5|IYe z@yS^E6z~gw_>8GXuxZ!zSss|03w?FxyN47z|UOKbj%@)a%87s0p;5_r`x2|lObYeJi#+k$RvMGpqB zQ{e5!Pzf)B5sV@s2*+>)lQ@RsIDs=bi*o{TN+9M0;x$~yE!?)_4(?(avzWspJQl1A Uc!4)~k5BlzStx9lxLV_w*Xgjpn8U7RFa- zon77Wo~>fq?GVpg0ddq46CRJv#n`0TwaQad7i?~g#EL6bi($2ShOY{Qq+F7Gt;*}l_^avJglg3wrenTB%dD0 zmc|WSOj)BQBJs)U8&*LIt)@nbQaANdj)rKAF4GOVO9i?|Pw5rS(LBAUkF-di=?i@W zU_u$nVTKD{_~6G{G@%U^Pgv()-h}9A? zfEEe35ixXNGqxci33niA5bi_Y5@S{}4&gXX;H1PngR?k?^SFRZ$bsKji b>J$pNFKHhdxX Date: Mon, 1 Feb 2021 07:33:46 -0800 Subject: [PATCH 33/35] Add null option for genesUse to validInput --- R/RNAIntegration.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/RNAIntegration.R b/R/RNAIntegration.R index f0f49e39..8e11b27e 100644 --- a/R/RNAIntegration.R +++ b/R/RNAIntegration.R @@ -112,7 +112,7 @@ addGeneIntegrationMatrix <- function( .validInput(input = reduction, name = "reduction", valid = c("character")) .validInput(input = addToArrow, name = "addToArrow", valid = c("boolean")) .validInput(input = scaleTo, name = "scaleTo", valid = c("numeric")) - .validInput(input = genesUse, name = "genesUse", valid = c("character")) + .validInput(input = genesUse, name = "genesUse", valid = c("character", "null")) .validInput(input = nameCell, name = "nameCell", valid = c("character")) .validInput(input = nameGroup, name = "nameGroup", valid = c("character")) .validInput(input = nameScore, name = "nameScore", valid = c("character")) From 587fa252840d8766048d81c041d5d06ee8234787 Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sun, 21 Feb 2021 19:27:18 -0800 Subject: [PATCH 34/35] bugfix NA in combined vars --- .DS_Store | Bin 14340 -> 14340 bytes R/ArrowRead.R | 12 ++++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 0a213810225d222e3d497b3ed6fec86d079511ea..5b6078f82a53238d9d36fbf975e4f1e495ed36f5 100644 GIT binary patch delta 880 zcmaKpNlX)A6vw|mD9o4@yR%k(52wN!xl#7YW zxI|+@jFPAaLj;!#7>yeBfD%cJON<9Oc;SeN3pz89=)w3MzAx{+eDA&deq)_uom2S~ z&!q z5`+2jipnakM!K)dk$N?`QlQ?V4bg3liAzq+v=){uZlRjcFfGSPmHK4=D9fq|eI(B} zbhkKXS(wM~2i z&)GfBevvwuwZ=Ql9A|HHx&`W4AC;EQ@pbKv7O|ZQewI=HWo2`GeUI4Xadxa zK)@mtT7)A41{kp&CZxfNJmh0H_Mi^+Xh0)ca0pHuK^wg2#~^$d!Z=RiG|oW6WlZ8a zVs79jrZI!NxQC~BiC0*_dwjqWmhlxo@Kc%&s|Zq!CjDhJBkXO+n#b@6oiQ#s#gbc4 zEEUDpN~_vZf0E*iVlgU`*BcTHI~j%sEXszXQqv3^4OHDIVP+O*pc|>uQ zswX8Z+$C3oR2xbou9PcdH36e6B{EeC@O%TzF!!k>SWH)-yixG_C7>>(4PsudT;vCLn0#|Sq*Dx84 mTbROamFq0#@DPvi7*8;dH~54l=|ZYudMsj`o!(^pruz+k57L+b delta 841 zcmaKqUr19?9LLYsf8C2$z0*1GX1cq^Q0LO-zfDA)xyt#6qLi$poZST%-KLvbX|_T` zqI|kk_U9!cqCXFjW|USB5ky1}xdOq3&+&iL|=sXRs1n4X=OrlefP{Q(lrZXy! zB_8G+Tp7zp+0K4Bd;Gl>`{F*Ns{V<1IeoD^~FX zzm$79zO-#>kbiSD*u{)YHM|^st|3pfl_)Ew0;SjPQc`lgv2>Ou5zjZ81apzu!7zMM zTrisQ%gW6hpG^6)T3K1enfX*on$b#kEywXGG>e2<-$2zg3O%82Zl)?xe+Bz*hzXk7 zmr+_uGycQ#C0Qn)D9fK9lwdk?C_@WnxDhVOuL)jk!B%X?4oYwrx-^1*^r0UElw%l2 zFot88z;R6DG|o_xGnC{kC3zWFa2+>r6SoB1#yl4A5Rb5kB|OJ#yu$~4Q7)95=Ozu) K>|DCImiHUo2E~~G diff --git a/R/ArrowRead.R b/R/ArrowRead.R index 416d6a84..20bbdb6c 100644 --- a/R/ArrowRead.R +++ b/R/ArrowRead.R @@ -912,6 +912,16 @@ getMatrixFromArrow <- function( stop("Means Variances and Ns lengths not identical") } + #Check if samples have NAs due to N = 1 sample or some other weird thing. + #Set it to min non NA variance + dfVars <- lapply(seq_len(nrow(dfVars)), function(x){ + vx <- dfVars[x, ] + if(any(is.na(vx))){ + vx[is.na(vx)] <- min(vx[!is.na(vx)]) + } + vx + }) %>% Reduce("rbind", .) + combinedMeans <- rowSums(t(t(dfMeans) * ns)) / sum(ns) summedVars <- rowSums(t(t(dfVars) * (ns - 1)) + t(t(dfMeans^2) * ns)) combinedVars <- (summedVars - sum(ns)*combinedMeans^2)/(sum(ns)-1) @@ -935,8 +945,6 @@ getMatrixFromArrow <- function( length(.availableCells(ArrowFiles[y], useMatrix)) }) %>% unlist - - #Compute RowVars summaryDF <- .safelapply(seq_along(featureDF), function(x){ From 11a8c80790def918ec083c2bee0c42c8a1ae9fdc Mon Sep 17 00:00:00 2001 From: jgranja24 Date: Sun, 21 Feb 2021 20:19:55 -0800 Subject: [PATCH 35/35] add checks for genes symbol to be not a list --- .DS_Store | Bin 14340 -> 14340 bytes R/MatrixGeneScores.R | 8 ++++++++ R/ProjectMethods.R | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/.DS_Store b/.DS_Store index 5b6078f82a53238d9d36fbf975e4f1e495ed36f5..2b21082f6917b33f76b7b6087a8e67597128a1da 100644 GIT binary patch delta 854 zcma))T}TvB7>3VlWoPiDv;MB*__M8Uxe2Sb87A1~ifLL_u4Eaqt24o%?%M8Znb8&s zMdj5{Rzy)z6c$OE(GPSHfk|}JMikXW1YIih1JO-qc8$F3Tnv2gJKs0oJntFl8|j;H zn)G~&TkkeCTH3U(fWJjMq>2#6le1(?k=@~}tae9JL{lnDXPJ7$Y>w>F6xAQr_GxNR zFeMBN9>1?wji!pG6mzyDwe@#u`}?)lClylK zZs_iy%AZPXjBS;~JRxHZ9~ENCni9r5-I`w!Lqa4jm6kE7wa3?~_K1o=V{fgiVA8Gu zH5k$Yez9>u+)%}&wyr>LFW)(2LJ60RzmZ&04Hai-hwRL_o>5TM<)m0i32%#jGl#^Q0M7$(OhR7&6N5;t%nI;d&GxCx|$$RpJ z%#nHWjeIA+kboqtKr&KbMmBOFqZs8_3nyG?z&32h4(vobyy!$16!ap5ehlCMj^YGP z;uKEfj18A?1y^wmw{Zt|F@dL;!3)eHiZ}R#ub9UV{M7HI)i0Mf*EeioO@Bj{7Ki*U z*uV1#?B01TT*|JiWMFSU&8fB7AW;{?KR@iOa zOW=;t#T;^(z+)4a#7f!8Dk#rKTo!jLS(U&e6qm-`YUZLmC^0cMsK(8hNQ@gLEF!K? zW@P;*?pgAheCDWsgCLP(PUDCz9IpeF*vRp^QHwe>bHFX|pcNe)vX5i#=8*je;2;Ju zgu^(3;|r)qaTa4ZUx*91i0in4o4AE>Oko-i@d%Ic1kdpbZ}9;i^)W~OTT7I^lG8w zJcH7xja%bcs^qrt2ed`;ht#@&qP1zNVpgP7$wTQr!>{g9#jTiava%&sAJqC)?x%~5 z*XA)+->!8jJh(Kfa6OY6I{d9_2Um(L)cjYxfk};hYEMuLbaCI3Sys-ZrUQY_PPHo( zv?5Q~#!~tto6}`H#11u-HXA!sDT=DljLOqo|87eOa}Y{WNERs}m871ukpLMW=gAP6 zAX8+Tyd-bQXY!TIk$Liy{3d@uV1W&GIFJY#Zlogvg(yWC%CQZ*(SSxYp&6|>2n~nP zju85B0w-|_=Wqd+a2Yyo;x2}95Aq1cF@cAe#B;pH8_eJ%K4BJf_<>(o(8m&LW98cI zJA5qXpP1x?_i>BiI1-cGnYsBzC7ZVBRi0h?f}QF&JXzsnm*kYwWe?>qD5p_FvTQlW zh={|Ka<;sVQXUf(fhHFe%8V~FqcEhmn8|zvR|H2xmXLDb;ci#{B~03tYpvx4eH!So8Q;u?l<3%7Ac(7li3QH+^%r!bAjc!H;RhF5rp PFPPP@7s%t0#DTQG0cg30 diff --git a/R/MatrixGeneScores.R b/R/MatrixGeneScores.R index 1325d4ce..ef34822d 100644 --- a/R/MatrixGeneScores.R +++ b/R/MatrixGeneScores.R @@ -100,6 +100,10 @@ addGeneScoreMatrix <- function( stop("Error Input Arrow Files do not all exist!") } + if(inherits(mcols(genes)$symbol, "list") | inherits(mcols(genes)$symbol, "SimpleList")){ + stop("Found a list in genes symbol! This is an incorrect format. Please correct your genes!") + } + .startLogging(logFile = logFile) .logThis(mget(names(formals()),sys.frame(sys.nframe())), "addGeneScoreMatrix Input-Parameters", logFile = logFile) @@ -191,6 +195,10 @@ addGeneScoreMatrix <- function( .validInput(input = force, name = "force", valid = c("boolean")) .validInput(input = tmpFile, name = "tmpFile", valid = c("character", "null")) + if(inherits(mcols(genes)$symbol, "list") | inherits(mcols(genes)$symbol, "SimpleList")){ + stop("Found a list in genes symbol! This is an incorrect format. Please correct your genes!") + } + ArrowFile <- ArrowFiles[i] sampleName <- .sampleName(ArrowFile) diff --git a/R/ProjectMethods.R b/R/ProjectMethods.R index ef0f8204..1cb18b7d 100644 --- a/R/ProjectMethods.R +++ b/R/ProjectMethods.R @@ -603,6 +603,10 @@ getGenes <- function(ArchRProj = NULL, symbols = NULL){ genes <- genes[which(tolower(genes$symbol) %in% tolower(symbols))] } + if(inherits(mcols(genes)$symbol, "list") | inherits(mcols(genes)$symbol, "SimpleList")){ + stop("Found a list in genes symbol! This is an incorrect format. Please correct your genes!") + } + genes }