From 02af24e08af15357417c7650f4ddd7005a287f64 Mon Sep 17 00:00:00 2001 From: Saim Momin Date: Thu, 23 Jan 2025 11:37:33 +0100 Subject: [PATCH 1/4] Added pytest for plotcorrelation --- .../test_data/plotCorrelation_result1.png | Bin 0 -> 27347 bytes .../test_data/plotCorrelation_result2.png | Bin 0 -> 11943 bytes .../deeptools/test/test_plotcorrelation.py | 49 ++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 pydeeptools/deeptools/test/test_data/plotCorrelation_result1.png create mode 100644 pydeeptools/deeptools/test/test_data/plotCorrelation_result2.png create mode 100644 pydeeptools/deeptools/test/test_plotcorrelation.py diff --git a/pydeeptools/deeptools/test/test_data/plotCorrelation_result1.png b/pydeeptools/deeptools/test/test_data/plotCorrelation_result1.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f7558e93ea02a468b50be4140bbcf91947d86d GIT binary patch literal 27347 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 W>pfV}+_wt_KbSMdIwhz7xcP4vP_20Y literal 0 HcmV?d00001 diff --git a/pydeeptools/deeptools/test/test_plotcorrelation.py b/pydeeptools/deeptools/test/test_plotcorrelation.py new file mode 100644 index 0000000000..0756a34b6f --- /dev/null +++ b/pydeeptools/deeptools/test/test_plotcorrelation.py @@ -0,0 +1,49 @@ +import deeptools.plotCorrelation as pc + +import os.path +from os import unlink + + +ROOT = os.path.dirname(os.path.abspath(__file__)) + "/test_data/" +COR_DATA_IN1 = ROOT + "multiBamSummary_result1.npz" +COR_PLOT_1 = ROOT + "plotCorrelation_result1.png" +COR_PLOT_2 = ROOT + "plotCorrelation_result2.png" + + +def test_correlation_plot_with_minimal_options(): + """ + Test minimal command line args for correlation plot + with output as correlation matrix along with matrix + """ + out_matrix = '/tmp/correlation_matrix.tsv' + out_png = '/tmp/correlation_plot1.png' + args = "--corData {} -p heatmap -c pearson -o {} --outFileCorMatrix {}".format(COR_DATA_IN1, out_png, out_matrix).split() + pc.main(args) + + _foo = open(out_matrix, "r") + resp = _foo.readlines()[2] + _foo.close() + expected = "'bowtie2 test1.bam'\t1.0000\t1.0000\n" + assert expected in resp, f"'{expected}' not found in '{resp}'" + + png_file_size = os.path.getsize(COR_PLOT_1) + expected_file_size = os.path.getsize(out_png) + size_tolerance = 1000 + size_difference = abs(png_file_size - expected_file_size) + assert size_difference <= size_tolerance, "File size do not match" + unlink(out_png) + + +def test_correlation_plot_scatter(): + """ + Test command line args for correlation plot with output as scatter plot + """ + out_png2 = '/tmp/correlation_plot2.png' + args = "--corData {} -p scatterplot -c pearson -o {}".format(COR_DATA_IN1, out_png2).split() + pc.main(args) + png_file_size = os.path.getsize(COR_PLOT_2) + expected_file_size = os.path.getsize(out_png2) + size_tolerance = 1000 + size_difference = abs(png_file_size - expected_file_size) + assert size_difference <= size_tolerance, "File size do not match" + unlink(out_png2) From c77bde7851ecc46050dd139980ff41865ba28103 Mon Sep 17 00:00:00 2001 From: Saim Momin Date: Thu, 23 Jan 2025 11:48:13 +0100 Subject: [PATCH 2/4] Add missing file --- .../test/test_data/multiBamSummary_result1.npz | Bin 0 -> 525 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 pydeeptools/deeptools/test/test_data/multiBamSummary_result1.npz diff --git a/pydeeptools/deeptools/test/test_data/multiBamSummary_result1.npz b/pydeeptools/deeptools/test/test_data/multiBamSummary_result1.npz new file mode 100644 index 0000000000000000000000000000000000000000..179429624361692cf56ec4ba93aec14ef671aeeb GIT binary patch literal 525 zcmWIWW@gc4U|`??Vnqfsw=K*6Ljf0q2t#gSNl|8nUS2^ZBZB~gKn73|5G;gH3~z7S zW-$dausql*?Ei7s@(rzQe~v2Mh|tuWq!cO;yD_NJOshAkM`|fURyZ3eD%$3JFZr(zWnal z!=)43gMTcIDl3=UZ|9O`UmNnRZsu8|)u~KSSAeJk_Fu05m$8>a5@MKlM>GJ%bAenb zQ;|KFlbDp6Qw;MQ2O~st9@LE4Z^U0o3!FR=a4cZ$yh%}WVwU7BU63c7m9cK!;sx`j z#fJnmpV0!0x%4)A7W0~yN%gatsl9c(TDd={d* literal 0 HcmV?d00001 From 160563e0524ccb2d2f848b89afdab4ca22e4f171 Mon Sep 17 00:00:00 2001 From: Saim Momin Date: Thu, 23 Jan 2025 11:55:38 +0100 Subject: [PATCH 3/4] relaxed size tolerance --- pydeeptools/deeptools/test/test_plotcorrelation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pydeeptools/deeptools/test/test_plotcorrelation.py b/pydeeptools/deeptools/test/test_plotcorrelation.py index 0756a34b6f..71bda09408 100644 --- a/pydeeptools/deeptools/test/test_plotcorrelation.py +++ b/pydeeptools/deeptools/test/test_plotcorrelation.py @@ -28,7 +28,7 @@ def test_correlation_plot_with_minimal_options(): png_file_size = os.path.getsize(COR_PLOT_1) expected_file_size = os.path.getsize(out_png) - size_tolerance = 1000 + size_tolerance = 5000 size_difference = abs(png_file_size - expected_file_size) assert size_difference <= size_tolerance, "File size do not match" unlink(out_png) @@ -43,7 +43,7 @@ def test_correlation_plot_scatter(): pc.main(args) png_file_size = os.path.getsize(COR_PLOT_2) expected_file_size = os.path.getsize(out_png2) - size_tolerance = 1000 + size_tolerance = 5000 size_difference = abs(png_file_size - expected_file_size) assert size_difference <= size_tolerance, "File size do not match" unlink(out_png2) From e5e396372a7b39f4f94d2586de74127d4f14a75d Mon Sep 17 00:00:00 2001 From: Saim Momin Date: Fri, 24 Jan 2025 11:08:57 +0100 Subject: [PATCH 4/4] Replace file size test with compare image --- .../test_data/plotCorrelation_result1.png | Bin 27347 -> 27360 bytes .../deeptools/test/test_plotcorrelation.py | 16 ++++++---------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/pydeeptools/deeptools/test/test_data/plotCorrelation_result1.png b/pydeeptools/deeptools/test/test_data/plotCorrelation_result1.png index a0f7558e93ea02a468b50be4140bbcf91947d86d..a212f44e5b5afd3dca4472f1d88cd8a7e4a40f74 100644 GIT binary patch literal 27360 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 literal 27347 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