From f6c157c3b750213a72013b655435d2935cc71d18 Mon Sep 17 00:00:00 2001 From: Vulliard Loan Date: Tue, 29 Nov 2022 15:52:15 +0000 Subject: [PATCH 1/5] Updates for tests to pass on codespaces --- .gitignore | 1 + src/rmpv.jl | 8 ++++---- test/runtests.jl | 15 +++++++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 6844d5d..d9e4a31 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /Manifest.toml /dev/ docs/build/ +.julia \ No newline at end of file diff --git a/src/rmpv.jl b/src/rmpv.jl index 90b4a59..96169c2 100644 --- a/src/rmpv.jl +++ b/src/rmpv.jl @@ -113,7 +113,7 @@ function distance_robust_mahalanobis_median(data, indpert, indref; r_seed = true R""" if (!require("robustbase")) install.packages("robustbase", - repos = "https://cloud.r-project.org") + repos = "http://cloud.r-project.org") library(robustbase) if (r_seed){set.seed(777)} @@ -161,7 +161,7 @@ function shuffled_distance_robust_mahalanobis_median(data, indpert, indref; nb_r R""" if (!require("robustbase")) install.packages("robustbase", - repos = "https://cloud.r-project.org") + repos = "http://cloud.r-project.org") library(robustbase) if (r_seed){set.seed(3895)} @@ -202,7 +202,7 @@ function distance_robust_hellinger(data, indpert, indref; r_seed = true) R""" if (!require("robustbase")) install.packages("robustbase", - repos = "https://cloud.r-project.org") + repos = "http://cloud.r-project.org") library(robustbase) if (r_seed){set.seed(777)} @@ -261,7 +261,7 @@ function shuffled_distance_robust_hellinger(data, indpert, indref; nb_rep = 250, R""" if (!require("robustbase")) install.packages("robustbase", - repos = "https://cloud.r-project.org") + repos = "http://cloud.r-project.org") library(robustbase) if (r_seed){set.seed(777)} diff --git a/test/runtests.jl b/test/runtests.jl index 7b229b1..484f4d4 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -605,7 +605,7 @@ end # Robustbase must be installed R""" if (!require("robustbase")) install.packages("robustbase", - repos = "https://cloud.r-project.org") + repos = "http://cloud.r-project.org") library(robustbase) """ d = rand(100,5) @@ -764,16 +764,23 @@ end end @testset "parallel_rmpv" begin + """ + Warning: this is resource intensive! + Running it on the default 2- or 4-core machines in Github + codespaces lead to an error (a KILL signal is sent). + This should work well with 8-core machines. + You might want to skip it in your routine checks. + It is best including it in the actual checks in CI anyway. + """ d = DataFrame(rand(100,5)) d.Condition = sample('A':'D', 100); e = Experiment(d) - addprocs(4) + addprocs(4, exeflags="--project=$(Base.active_project())") pool = CachingPool(workers()) @everywhere using BioProfiling - slt = NameSelector(x -> x != "Condition") select_features!(e, slt) f = Filter('C', :Condition) @@ -785,4 +792,4 @@ end # 4 conditions, 3 columns @test size(rmpv) == (4,3) -end +end \ No newline at end of file From a39a02fdbab4bf9135232287c99e980801ea63dd Mon Sep 17 00:00:00 2001 From: Vulliard Loan Date: Tue, 29 Nov 2022 16:24:35 +0000 Subject: [PATCH 2/5] Update documentation --- CONTRIBUTING.md | 3 ++- README.md | 12 ++++++------ docs/src/codespaces.md | 28 ++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 docs/src/codespaces.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6781b1f..de01726 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,7 +32,8 @@ All tests should pass for the supported versions of Julia and the package's depe ## Development environment -BioProfiling.jl is intended to be compatible with a large set of environments as detailed in [Project.toml](Project.toml). If you need to setup a development environment, an easy solution is to start from the [latest Docker image designed to run the example notebooks](https://hub.docker.com/r/koalive/bioprofilingnotebooks), which comes with all dependencies installed. To avoid inteferences between the pre-installed version of BioProfiling.jl and your local version of the source code, you can remove the version installed in the container with the following lines: +BioProfiling.jl is intended to be compatible with a large set of environments as detailed in [Project.toml](Project.toml). If you need to setup a development environment, an easy solution is to **edit and run code directly in your browser thanks to GitHub codespaces**. Some instructions are available in [our documentation](https://menchelab.github.io/BioProfiling.jl/dev/). +Another option is to start from the [latest **Docker image** designed to run the example notebooks](https://hub.docker.com/r/koalive/bioprofilingnotebooks), which comes with all dependencies installed. To avoid inteferences between the pre-installed version of BioProfiling.jl and your local version of the source code, you can remove the version installed in the container with the following lines: ```julia import Pkg diff --git a/README.md b/README.md index 7a32bd9..467632f 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ using BioProfiling * Have a look at the [documentation](https://menchelab.github.io/BioProfiling.jl/dev/) * Run our [example analysis notebooks](https://github.com/menchelab/BioProfilingNotebooks) * Check out the [JuliaCon 2021 poster](https://drive.google.com/file/d/1sjRONQ8dRJDGAiR-wBhC_rEBKiMIs5Rh/preview) presenting BioProfiling.jl -* Read our [preprint on BioRxiv](https://www.biorxiv.org/content/10.1101/2021.06.18.448961v1) +* Read our [article published in Bioinformatics](https://doi.org/10.1093/bioinformatics/btab853) ## Contribute @@ -67,10 +67,10 @@ We welcome all sorts of contributions to this project! See our [contribution gui This package was created by [Loan Vulliard](http://vulliard.loan) @ [Menche lab](https://menchelab.com/). BioProfiling.jl relies on several amazing open-source Julia packages, listed in the requirement file (see [*Project.toml*](Project.toml)). -If you use this tool in your research work, please cite the [preprint](https://www.biorxiv.org/content/10.1101/2021.06.18.448961v1) in which we detail how this tool is implemented and can be used: +If you use this tool in your research work, please cite [the article](https://doi.org/10.1093/bioinformatics/btab853) in which we detail how this tool is implemented and can be used: - BioProfiling.jl: Profiling biological perturbations with high-content imaging in single cells and heterogeneous populations - Loan Vulliard, Joel Hancock, Anton Kamnev, Christopher W. Fell, Joana Ferreira da Silva, Joanna Loizou, Vanja Nagy, Loïc Dupré, Jörg Menche - bioRxiv 2021.06.18.448961; doi: https://doi.org/10.1101/2021.06.18.448961 + BioProfiling.jl: profiling biological perturbations with high-content imaging in single cells and heterogeneous populations + Loan Vulliard, Joel Hancock, Anton Kamnev, Christopher W Fell, Joana Ferreira da Silva, Joanna I Loizou, Vanja Nagy, Loïc Dupré, Jörg Menche + Bioinformatics 2022; 38: 1692–9. DOI: https://doi.org/10.1093/bioinformatics/btab853 -We also thank the reviewers of this manuscript whose suggestions contributed to improve the [example analyses](https://github.com/menchelab/BioProfilingNotebooks), their biological interpretation as well as the package in itself. \ No newline at end of file +We also thank the reviewers whose suggestions contributed to improve the [example analyses](https://github.com/menchelab/BioProfilingNotebooks), their biological interpretation as well as the package in itself. \ No newline at end of file diff --git a/docs/src/codespaces.md b/docs/src/codespaces.md new file mode 100644 index 0000000..ff50354 --- /dev/null +++ b/docs/src/codespaces.md @@ -0,0 +1,28 @@ +# BioProfiling.jl examples + +This section aim to describe how to develop and test the BioProfiling.jl package using a virtual machine hosted by GitHub and VS directly in your browser thanks to GitHub codespaces. +Please note that no paid account is typically needed, although you might have limited access to codespaces depending on which type of GitHub account you have (see [Pricing information](https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces)). + +## Starting a codespace and setting up the environment + +Go to the [repository](https://github.com/menchelab/BioProfiling.jl), on the branch you would like to edit. Click on "Code <>" > "Codespaces" > "+". This will open VS, where you can edit the files, run code, and contribute to the repository using all usual GitHub features. +First, you will need to start a Docker container to be able to run Julia code. In the terminal, run `docker run -it -v `pwd`:/home/jovyan jupyter/datascience-notebook:latest julia`. The environment should include both R and Julia, although you might want to use [another image](https://hub.docker.com/r/jupyter/datascience-notebook/tags) if you want a version in particular. + +## Setting up Julia for package development + +The terminal should display a Julia session. Now, set up the package as follows: +```julia +import Pkg +Pkg.activate(".") # Set up requirements for environment +Pkg.status() # This should display the dependencies of the package + +Pkg.instantiate() # Actually prepare all packages +# You can now modify what you and test your new features! + +# In the end, do not forget to test your code to make sure you did not break anything +Pkg.test() +``` + +## Opening a pull request + +Once you are satisfied with your changes and made sure that are not breaking existing features, go to the "Source Control" tab to commit your changes. Typically you will want to create a pull request with your code. Please follow the [contribution guidelines](https://github.com/menchelab/BioProfiling.jl/blob/master/CONTRIBUTING.md) and [code of conduct](https://github.com/menchelab/BioProfiling.jl/blob/master/CODE_OF_CONDUCT.md). Thanks for taking the time to contribute to BioProfiling.jl! \ No newline at end of file From 8eb946eaffc57f446acb0f4c99dafbe496cbfef1 Mon Sep 17 00:00:00 2001 From: Vulliard Loan Date: Wed, 30 Nov 2022 13:02:39 +0000 Subject: [PATCH 3/5] Add tests for loading TIF images --- test/example16b.tiff | Bin 0 -> 18704 bytes test/example32b.tiff | Bin 0 -> 37136 bytes test/example32b_bw.tiff | Bin 0 -> 12544 bytes test/example8b.tiff | Bin 0 -> 9488 bytes test/runtests.jl | 32 ++++++++++++++++++++++++++++++-- 5 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 test/example16b.tiff create mode 100644 test/example32b.tiff create mode 100644 test/example32b_bw.tiff create mode 100644 test/example8b.tiff diff --git a/test/example16b.tiff b/test/example16b.tiff new file mode 100644 index 0000000000000000000000000000000000000000..d0449b862d8a44d83c440534f155f1be629ad2be GIT binary patch literal 18704 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 literal 0 HcmV?d00001 diff --git a/test/example8b.tiff b/test/example8b.tiff new file mode 100644 index 0000000000000000000000000000000000000000..b45a83a99e53a2ec44cae06bfd859d17010f277b GIT binary patch literal 9488 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 GkpBfTP>4tX literal 0 HcmV?d00001 diff --git a/test/runtests.jl b/test/runtests.jl index 484f4d4..55ac9aa 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -8,6 +8,8 @@ using Random using RCall using Distributed using ParallelDataTransfer +using Images + @testset "freqtable" begin d = DataFrame(Any[0.05131 0.32830 "Exp1"; 0.83296 0.97647 "Exp1"; 0.66463 0.66939 "Exp2"; @@ -278,12 +280,38 @@ end @test diagnostic_images(e1, cf1, :Experiment, rgx = [r".*" => s"example.png"], saveimages = false) # Additional checks that could be performed: # Centers of diagnostic_path - # getColorImage [internal] - # colimgifrgb [internal] # rgb parameters of diagnostic_images # output of diagnostic_images end +@testset "tiff" begin + # Test TIF images at 8, 16 or 32 bits, RGB or single channel + i8 = load("example8b.tiff") + i16 = load("example16b.tiff") + i32 = load("example32b.tiff") + pathbw = "example32b_bw.tiff" + i32bw = load(pathbw) + + # Images are not empty + @test all([sum(channelview(x)) > 0 for x in [i8, i16, i32, i32bw] ]) + # Black-and-white image should correspond to the second channel of i32 + @test channelview(i32bw) == channelview(i32)[2,:,:] + + i32_fakergb = BioProfiling.getColorImage(pathbw, pathbw, pathbw) + @test channelview(i32_fakergb)[1,:,:] == channelview(i32_fakergb)[2,:,:] == channelview(i32_fakergb)[3,:,:] + # All pixel intensities should be normalized by the same amount + ratio_intensity = float(channelview(i32_fakergb)[3,6,6]) ./ channelview(i32bw)[6,6] + @test all([isapprox(channelview(i32bw)[x,y] * ratio_intensity, + channelview(i32_fakergb)[3,x,y], + atol = 2/(2^32)) + for x in 1:32 for y in 1:96]) + + @test_throws ArgumentError BioProfiling.colimgifrgb("not_a_path", nothing) + # Should load images as in getColorImage and support regex for RGB images + @test BioProfiling.colimgifrgb(pathbw, nothing) == i32bw + @test BioProfiling.colimgifrgb(pathbw, ["", "", ""]) == i32_fakergb +end + @testset "interpret" begin # Define example dataset d = DataFrame([[0,2,4,6,8,21],[0,1,2,3,4,0],[0,3,6,9,12,3],'A':'F']) From a866b592919df5e1ed898d80d7f2a5c6b54e4d9e Mon Sep 17 00:00:00 2001 From: Vulliard Loan Date: Wed, 30 Nov 2022 13:38:17 +0000 Subject: [PATCH 4/5] Prepare for v1.1.1 --- CHANGELOG.md | 9 +++++++++ Project.toml | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f0e3bc..016928a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## v1.1.1 - 2022-11-30 +### Changed +- Change R repository for increased compatibility +- Update links in documentation + +### Added +- Documentation on codespaces +- Tests for TIF-related methods + ## v1.1.0 - 2021-09-23 ### Added - Option to remove R seed from distance computation diff --git a/Project.toml b/Project.toml index c3187b9..8c49404 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "BioProfiling" uuid = "cef322dc-4d82-11ea-04a7-113231db804d" authors = ["Loan Vulliard "] -version = "1.1.0" +version = "1.1.1" [deps] DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" From 9863852c661fff4bbfccb4e87c8bfe36353ccb50 Mon Sep 17 00:00:00 2001 From: Vulliard Loan Date: Wed, 30 Nov 2022 13:54:31 +0000 Subject: [PATCH 5/5] Update R config in CI --- .github/workflows/CI.yml | 2 +- .github/workflows/NightlyCI.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8a125a6..2b92c8d 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -28,7 +28,7 @@ jobs: steps: - uses: actions/checkout@v2 - uses: actions/checkout@v2 - - uses: r-lib/actions/setup-r@v1 + - uses: r-lib/actions/setup-r@v2 - run: echo "LD_LIBRARY_PATH=$(R RHOME)/lib" >> $GITHUB_ENV - run: sudo R -e "install.packages('robustbase', repos='http://cran.rstudio.com/')" - uses: julia-actions/setup-julia@latest diff --git a/.github/workflows/NightlyCI.yml b/.github/workflows/NightlyCI.yml index 9648131..d7decd9 100644 --- a/.github/workflows/NightlyCI.yml +++ b/.github/workflows/NightlyCI.yml @@ -27,7 +27,7 @@ jobs: steps: - uses: actions/checkout@v2 - uses: actions/checkout@v2 - - uses: r-lib/actions/setup-r@v1 + - uses: r-lib/actions/setup-r@v2 - run: echo "LD_LIBRARY_PATH=$(R RHOME)/lib" >> $GITHUB_ENV - run: sudo R -e "install.packages('robustbase', repos='http://cran.rstudio.com/')" - uses: julia-actions/setup-julia@latest