Skip to content

Commit 972c280

Browse files
authored
Merge pull request #25 from IARCbioinfo/dev
deployment added and bugs fixed
2 parents 05bb59c + db4903f commit 972c280

File tree

7 files changed

+249
-3
lines changed

7 files changed

+249
-3
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,5 @@ profiles {
5050
}
5151
}
5252
```
53-
#### pipeline DAG
54-
<img align="center" src="https://cloud.githubusercontent.com/assets/13535602/22242881/5acb8852-e225-11e6-8954-dc0443729ccc.png" width="600">
53+
## Directed Acyclic Graph
54+
[![DAG](dag.png)](http://htmlpreview.github.io/?https://github.com/IARCbioinfo/mutect-nf/blob/dev/dag.html)

bin/cut_into_small_beds.r

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ options("scipen"=100)
2020

2121
nb_pieces=as.numeric(commandArgs(TRUE)[1])
2222
bed=read.table(pipe('cat /dev/stdin'),stringsAsFactors = F)
23+
bed[,3]=bed[,3]-1 #do not consider end positions to count number of total bases
2324
bed_cum_size=cumsum(bed[,3]-bed[,2]+1)
2425
if(nb_pieces>bed_cum_size[length(bed_cum_size)]) nb_pieces=bed_cum_size[length(bed_cum_size)]
2526
if(nb_pieces==1) { cat(paste(bed[,1],"\t",bed[,2],"\t",bed[,3], sep=""), sep="\n", file=paste(bed[1,1],"_",bed[1,2],"-",bed[dim(bed)[1],1],"_",bed[dim(bed)[1],3],"_regions.bed",sep="")) } else {
@@ -37,12 +38,14 @@ if(nb_pieces==1) { cat(paste(bed[,1],"\t",bed[,2],"\t",bed[,3], sep=""), sep="\n
3738
ends=bed[1:cut_data[1,i],3]
3839
ends[length(ends)]=cut_data[2,i]-1
3940
if(cut_data[2,i]-1<starts[length(starts)]) { chrs=chrs[1:(length(chrs)-1)];starts=starts[1:(length(starts)-1)];ends=ends[1:(length(ends)-1)] }
41+
ends=ends+1 #see bed specification
4042
cat(paste(chrs,"\t",starts,"\t",ends, sep=""), sep="\n", file=paste(chrs[1],"_",starts[1],"-",chrs[length(chrs)],"_",ends[length(ends)],"_regions.bed",sep=""))
4143
} else if (i==nb_pieces) {
4244
chrs=bed[cut_data[1,i-1]:dim(bed)[1],1]
4345
starts=bed[cut_data[1,i-1]:dim(bed)[1],2]
4446
starts[1]=cut_data[2,i-1]
4547
ends=bed[cut_data[1,i-1]:dim(bed)[1],3]
48+
ends=ends+1 #see bed specification
4649
cat(paste(chrs,"\t",starts,"\t",ends, sep=""), sep="\n", file=paste(chrs[1],"_",starts[1],"-",chrs[length(chrs)],"_",ends[length(ends)],"_regions.bed",sep=""))
4750
} else {
4851
chrs=bed[cut_data[1,i-1]:cut_data[1,i],1]
@@ -51,6 +54,7 @@ if(nb_pieces==1) { cat(paste(bed[,1],"\t",bed[,2],"\t",bed[,3], sep=""), sep="\n
5154
starts[1]=cut_data[2,i-1]
5255
ends[length(ends)]=cut_data[2,i]-1
5356
if(cut_data[2,i]-1<starts[length(starts)]){ chrs=chrs[1:(length(chrs)-1)];starts=starts[1:(length(starts)-1)];ends=ends[1:(length(ends)-1)] }
57+
ends=ends+1 #see bed specification
5458
cat(paste(chrs,"\t",starts,"\t",ends, sep=""), sep="\n", file=paste(chrs[1],"_",starts[1],"-",chrs[length(chrs)],"_",ends[length(ends)],"_regions.bed",sep=""))
5559
}
5660
}

circle.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
machine:
2+
services:
3+
- docker
4+
post:
5+
- wget -qO- get.nextflow.io | bash ; chmod 755 nextflow ; sudo ln -s ~/nextflow /usr/local/bin/; sudo apt-get install graphviz
6+
- wget https://github.com/MaxUlysse/CAW-containers/blob/master/containers/gatk/GenomeAnalysisTK-3.7.tar.bz2?raw=true
7+
- git clone https://github.com/IARCbioinfo/data_test.git
8+
- wget https://github.com/broadinstitute/mutect/releases/download/1.1.5/muTect-1.1.5-bin.zip
9+
- sudo apt-get install bedtools
10+
- sudo add-apt-repository "deb http://cran.rstudio.com//bin/linux/debian jessie-cran3/"; sudo apt-get install --no-install-recommends -y r-base
11+
test:
12+
override:
13+
- | #Unzip muTect-1 and test it with good java version (1.7)
14+
cd ~ && unzip muTect-1.1.5-bin.zip && /usr/lib/jvm/jdk1.7.0/bin/java -jar muTect-1.1.5.jar --help
15+
- | #Rename and untar GATK3.7
16+
cd ~ && mv GenomeAnalysisTK-3.7.tar.bz2?raw=true GenomeAnalysisTK.jar.tar.bz2 && tar -jxf GenomeAnalysisTK.jar.tar.bz2
17+
- | #Test GATK3.7
18+
cd ~ && chmod +x GenomeAnalysisTK.jar && java -jar GenomeAnalysisTK.jar --help
19+
- | #Launch muTect-1
20+
nextflow run ~/mutect-nf/mutect.nf --tumor_bam_folder ~/data_test/BAM/test/ --normal_bam_folder ~/data_test/BAM/test/ --bed ~/data_test/BED/TP53_exon2_11.bed --ref ~/data_test/REF/17.fasta --mutect_jar ~/muTect-1.1.5.jar --nsplit 2 --java /usr/lib/jvm/jdk1.7.0/bin/java -with-dag dag.png
21+
- | #Launch muTect-1(v2)
22+
nextflow run ~/mutect-nf/mutect.nf --tumor_bam_folder ~/data_test/BAM/test/ --normal_bam_folder ~/data_test/BAM/test/ --bed ~/data_test/BED/TP53_exon2_11.bed --ref ~/data_test/REF/17.fasta --mutect_jar ~/muTect-1.1.5.jar --nsplit 2 --java /usr/lib/jvm/jdk1.7.0/bin/java -with-dag dag.html
23+
- | #Launch muTect-2
24+
nextflow run ~/mutect-nf/mutect.nf --tumor_bam_folder ~/data_test/BAM/test/ --normal_bam_folder ~/data_test/BAM/test/ --bed ~/data_test/BED/TP53_exon2_11.bed --ref ~/data_test/REF/17.fasta --mutect2_jar ~/GenomeAnalysisTK.jar --nsplit 2 --out_folder mutect2_results
25+
- | #Check for results muTect-1
26+
ls ~/mutect-nf/mutect_results
27+
- | #Check for results muTect-2
28+
ls ~/mutect-nf/mutect2_results
29+
deployment:
30+
git:
31+
branch: [master, dev]
32+
commands:
33+
- chmod +x deploy.sh && ./deploy.sh

dag.html

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
<!--
2+
~ Copyright (c) 2013-2017, Centre for Genomic Regulation (CRG).
3+
~ Copyright (c) 2013-2017, Paolo Di Tommaso and the respective authors.
4+
~
5+
~ This file is part of 'Nextflow'.
6+
~
7+
~ Nextflow is free software: you can redistribute it and/or modify
8+
~ it under the terms of the GNU General Public License as published by
9+
~ the Free Software Foundation, either version 3 of the License, or
10+
~ (at your option) any later version.
11+
~
12+
~ Nextflow is distributed in the hope that it will be useful,
13+
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
~ GNU General Public License for more details.
16+
~
17+
~ You should have received a copy of the GNU General Public License
18+
~ along with Nextflow. If not, see <http://www.gnu.org/licenses/>.
19+
-->
20+
21+
<html>
22+
23+
<head>
24+
<title>Nextflow Cytoscape.js with Dagre</title>
25+
26+
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
27+
28+
<script type="text/javascript">
29+
var prot = (("https:" == document.location.protocol) ? "https://" : "http://");
30+
document.write(unescape("%3Cscript src='" + prot + "code.jquery.com/jquery-2.0.3.min.js' type='text/javascript' %3E%3C/script%3E"));
31+
document.write(unescape("%3Cscript src='" + prot + "cdnjs.cloudflare.com/ajax/libs/cytoscape/2.6.12/cytoscape.min.js' type='text/javascript' %3E%3C/script%3E"));
32+
document.write(unescape("%3Cscript src='" + prot + "cdn.rawgit.com/cpettitt/dagre/v0.7.4/dist/dagre.min.js' type='text/javascript' %3E%3C/script%3E"));
33+
document.write(unescape("%3Cscript src='" + prot + "cdn.rawgit.com/cytoscape/cytoscape.js-dagre/1.1.2/cytoscape-dagre.js' type='text/javascript' %3E%3C/script%3E"));
34+
</script>
35+
36+
<style>
37+
body {
38+
font-family: helvetica;
39+
font-size: 14px;
40+
}
41+
42+
#cy {
43+
width: 100%;
44+
height: 100%;
45+
position: absolute;
46+
left: 0;
47+
top: 0;
48+
z-index: 999;
49+
}
50+
51+
h1 {
52+
opacity: 0.5;
53+
font-size: 1em;
54+
}
55+
</style>
56+
57+
<script>
58+
$(function(){
59+
var cy = window.cy = cytoscape({
60+
container: document.getElementById('cy'),
61+
boxSelectionEnabled: false,
62+
autounselectify: true,
63+
64+
layout: {
65+
name: 'dagre'
66+
},
67+
68+
style: cytoscape.stylesheet()
69+
.selector( 'node')
70+
.css({
71+
'width': 10,
72+
'height': 10,
73+
'content': 'data(label)',
74+
'text-valign': 'center',
75+
'text-halign': 'center',
76+
'text-opacity': 0.5,
77+
})
78+
.selector('node.PROCESS')
79+
.css({
80+
'width': 100,
81+
'height': 50,
82+
'text-opacity': 0.9,
83+
'background-color': '#009911'
84+
})
85+
.selector('node.OPERATOR')
86+
.css({
87+
'background-color': '#11479e',
88+
'text-halign': 'right',
89+
})
90+
.selector('node.ORIGIN')
91+
.css({
92+
'background-color': '#999999',
93+
'text-halign': 'right',
94+
})
95+
.selector('node.TERMINATION')
96+
.css({
97+
'background-color': '#999999',
98+
'text-halign': 'right',
99+
})
100+
.selector('edge')
101+
.css({
102+
'content': 'data(label)',
103+
'text-opacity': 0.5,
104+
'width': 4,
105+
'target-arrow-shape': 'triangle',
106+
'line-color': '#9dbaea',
107+
'target-arrow-color': '#9dbaea'
108+
}),
109+
110+
elements: {
111+
nodes: [
112+
{ data: { id: 'p0', label: 'Channel.fromPath'}, classes: 'ORIGIN' },
113+
{ data: { id: 'p1', label: 'ifEmpty'}, classes: 'OPERATOR' },
114+
{ data: { id: 'p2', label: 'map'}, classes: 'OPERATOR' },
115+
{ data: { id: 'p3', label: 'Channel.fromPath'}, classes: 'ORIGIN' },
116+
{ data: { id: 'p4', label: 'ifEmpty'}, classes: 'OPERATOR' },
117+
{ data: { id: 'p5', label: 'map'}, classes: 'OPERATOR' },
118+
{ data: { id: 'p6', label: 'phase'}, classes: 'OPERATOR' },
119+
{ data: { id: 'p7', label: 'map'}, classes: 'OPERATOR' },
120+
{ data: { id: 'p8', label: 'Channel.fromPath'}, classes: 'ORIGIN' },
121+
{ data: { id: 'p9', label: 'ifEmpty'}, classes: 'OPERATOR' },
122+
{ data: { id: 'p10', label: 'map'}, classes: 'OPERATOR' },
123+
{ data: { id: 'p11', label: 'Channel.fromPath'}, classes: 'ORIGIN' },
124+
{ data: { id: 'p12', label: 'ifEmpty'}, classes: 'OPERATOR' },
125+
{ data: { id: 'p13', label: 'map'}, classes: 'OPERATOR' },
126+
{ data: { id: 'p14', label: 'phase'}, classes: 'OPERATOR' },
127+
{ data: { id: 'p15', label: 'map'}, classes: 'OPERATOR' },
128+
{ data: { id: 'p16', label: 'phase'}, classes: 'OPERATOR' },
129+
{ data: { id: 'p17', label: 'map'}, classes: 'OPERATOR' },
130+
{ data: { id: 'p18', label: 'bed'}, classes: 'PROCESS' },
131+
{ data: { id: 'p19', label: 'split_bed'}, classes: 'PROCESS' },
132+
{ data: { id: 'p20', label: 'spread'}, classes: 'OPERATOR' },
133+
{ data: { id: 'p21'}, classes: 'ORIGIN' },
134+
{ data: { id: 'p22'}, classes: 'ORIGIN' },
135+
{ data: { id: 'p23'}, classes: 'ORIGIN' },
136+
{ data: { id: 'p24'}, classes: 'ORIGIN' },
137+
{ data: { id: 'p25'}, classes: 'ORIGIN' },
138+
{ data: { id: 'p26'}, classes: 'ORIGIN' },
139+
{ data: { id: 'p27'}, classes: 'ORIGIN' },
140+
{ data: { id: 'p28', label: 'mutect'}, classes: 'PROCESS' },
141+
{ data: { id: 'p29', label: 'count'}, classes: 'OPERATOR' },
142+
{ data: { id: 'p30'}, classes: 'NODE' },
143+
{ data: { id: 'p31', label: 'groupTuple'}, classes: 'OPERATOR' },
144+
{ data: { id: 'p32', label: 'groupTuple'}, classes: 'OPERATOR' },
145+
{ data: { id: 'p33', label: 'mergeMuTectOutputs'}, classes: 'PROCESS' },
146+
{ data: { id: 'p34'}, classes: 'NODE' },
147+
{ data: { id: 'p35'}, classes: 'NODE' },
148+
],
149+
edges: [
150+
{ data: { source: 'p0', target: 'p1'} },
151+
{ data: { source: 'p1', target: 'p2'} },
152+
{ data: { source: 'p2', target: 'p6', label: 'tumor_bams' } },
153+
{ data: { source: 'p3', target: 'p4'} },
154+
{ data: { source: 'p4', target: 'p5'} },
155+
{ data: { source: 'p5', target: 'p6', label: 'tumor_bais' } },
156+
{ data: { source: 'p6', target: 'p7'} },
157+
{ data: { source: 'p7', target: 'p16', label: 'tumor_bam_bai' } },
158+
{ data: { source: 'p8', target: 'p9'} },
159+
{ data: { source: 'p9', target: 'p10'} },
160+
{ data: { source: 'p10', target: 'p14', label: 'normal_bams' } },
161+
{ data: { source: 'p11', target: 'p12'} },
162+
{ data: { source: 'p12', target: 'p13'} },
163+
{ data: { source: 'p13', target: 'p14', label: 'normal_bais' } },
164+
{ data: { source: 'p14', target: 'p15'} },
165+
{ data: { source: 'p15', target: 'p16', label: 'normal_bam_bai' } },
166+
{ data: { source: 'p16', target: 'p17'} },
167+
{ data: { source: 'p17', target: 'p20', label: 'tn_bambai' } },
168+
{ data: { source: 'p18', target: 'p19', label: 'outbed' } },
169+
{ data: { source: 'p19', target: 'p20', label: 'split_bed' } },
170+
{ data: { source: 'p19', target: 'p29', label: 'count_split_bed' } },
171+
{ data: { source: 'p20', target: 'p28'} },
172+
{ data: { source: 'p21', target: 'p28', label: 'mutect_version' } },
173+
{ data: { source: 'p22', target: 'p28', label: 'dbsnp_option' } },
174+
{ data: { source: 'p23', target: 'p28', label: 'cosmic_option' } },
175+
{ data: { source: 'p24', target: 'p28', label: 'fasta_ref' } },
176+
{ data: { source: 'p25', target: 'p28', label: 'fasta_ref_fai' } },
177+
{ data: { source: 'p26', target: 'p28', label: 'fasta_ref_gzi' } },
178+
{ data: { source: 'p27', target: 'p28', label: 'fasta_ref_dict' } },
179+
{ data: { source: 'p28', target: 'p31', label: 'mutect_output1' } },
180+
{ data: { source: 'p28', target: 'p32', label: 'mutect_output2' } },
181+
{ data: { source: 'p29', target: 'p30'} },
182+
{ data: { source: 'p31', target: 'p33'} },
183+
{ data: { source: 'p32', target: 'p33'} },
184+
{ data: { source: 'p33', target: 'p35', label: 'res1' } },
185+
{ data: { source: 'p33', target: 'p34', label: 'res2' } },
186+
],
187+
},
188+
189+
});
190+
191+
});
192+
</script>
193+
</head>
194+
195+
<body>
196+
<h1>Nextflow Cytoscape.js with Dagre</h1>
197+
<div id="cy"></div>
198+
</body>
199+
200+
</html>

dag.png

87.2 KB
Loading

deploy.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/bin/bash
2+
cd ~/mutect-nf/
3+
git config --global user.email "robitaillea@students.iarc.fr"
4+
git add dag.png
5+
git add dag.html
6+
git commit -m "Generated DAG [skip ci]"
7+
git push origin $CIRCLE_BRANCH
8+
9+
curl -H "Content-Type: application/json" --data "{\"source_type\": \"Branch\", \"source_name\": \"$CIRCLE_BRANCH\"}" -X POST https://registry.hub.docker.com/u/iarcbioinfo/mutect-nf/trigger/848d00e1-4e32-498a-aaaa-4e17029cdf3c/

mutect.nf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ if (params.help) {
3838
log.info ' --java PATH Name of the JAVA command (default: java).'
3939
log.info ''
4040
log.info ''
41-
exit 1
41+
exit 0
4242
}
4343

4444
fasta_ref = file(params.ref)

0 commit comments

Comments
 (0)