# gnu parallel for macs peak calling

These are the list of files

Control_Input_sorted.bam_rem.bam
Control_H2BUb_sorted.bam_rem.bam
Control_IgG_sorted.bam_rem.bam
PTPN6_g2_6_H2Bub_sorted.bam_rem.bam
PTPN6_g2_6_Input_sorted.bam_rem.bam


So to get unique files i do this

 ls -1 *bam | sort | sed -r 's/_sorted.bam_rem.bam//g' | sort | uniq
Control_Input
Control_H2BUb
Control_IgG
PTPN6_g2_6_H2Bub
PTPN6_g2_6_Input


Now i have to run each sample against input and IgG for peak-calling. Like Control_H2BUb_sorted.bam_rem.bam against

Contol_Input_sorted.bam_rem.bam & Control_IgG_sorted.bam_rem.bam and

PTPN6_g2_6_H2Bub_sorted.bam_rem.bam against PTPN6_g2_6_Input_sorted.bam_rem.bam


So how do I parse and execute using gnu parallel.

I came across this tutorial where it does something like this

cat sample_names.txt | parallel --max-procs=12 'macs2 callpeak -t {}-A-NC.sorted.bam \
-c {}-G-NC.sorted.bam -g hs -n {}-A-NC-sharp-model -q 0.01 --outdir {}-A-NC-sharp-model-peaks 2> {}-A-NC-sharp-model.stderr'


Now im not sure how to pass the file names as argument for IP and Input or IgG.

If i use logic a little bit i have to fix Control and PTPN6_g2_6 as constant naming!.

Any suggestion or help would be really appreciated.

not gnuparallel but nextflow. I don't know macs and what is 'first.bam' and 'second.bam' is not clear not me but I hope you'll get the idea.

The nextflow:

Channel.fromPath(params.bams).splitCsv(header: false,sep:'\t',strip:true).map{T->file(T[0])}.into{bams1;bams2}

boolean isControl(file) {
return file.name.endsWith("_Input_sorted.bam_rem.bam") || file.name.endsWith("_IgG_sorted.bam_rem.bam ");
}

bams1.filter{T->isControl(T)}.set{controls}
bams2.filter{T->!isControl(T)}.set{experiment}

process mac {
maxForks 14
tag "$${bam1} vs$${bam2}"
input:
set bam1 , bam2  from experiment.combine(controls)
output:
file("output.peaks") into mac_peak
script:
"""
macs2 callpeak -t {bam1.toRealPath()}  -c \${bam2.toRealPath()} -g hs -n out-model -q 0.01 --outdir output.peaks
"""
}


invoke:

find /dir1/dir2 -type f -name "*.bam" > input.list

nextflow run --bams input.list workflow.nf

• okay let me give it a try first and update you.
– kcm
Mar 2 '20 at 17:23
• my first try ended up like this "Not a valid project name: workflow.nf" I need to read the basics of nextflow
– kcm
Mar 2 '20 at 17:48
• first bam is my Control_H2BUb and PTPN6_g2_6_H2Bub , and it should be compared with samples labelled Control_Input,Control_IgG and PTPN6_g2_6_Input which are second bam. But the catch is the Control lablled samples should always be compared with the control labelled and same goes with PTPN6 labelled
– kcm
Mar 3 '20 at 6:21