#!/usr/bin/perl

# Split fragment & 9merFootprint as separate views.
# Also add peak tracks.

$stroot = "ATAC1";
$shortLab = "ATAC-Dec2024";
$longLab = "ATAC Normalized Depth Tracks (Dec2024 datasets)";

$prio = 120;

##############################################################

$datadir = "data/ATAC_NOV0684_NOV0687";
$trackname = "trackDb.$stroot.txt";

@cLines = ("MDA_MB_231","T47D");
@conditions = ("shGATA3","shPARP1","shPARP1_shGATA3","shScrambled");
%condFixName = ("shGATA3" => "GATA3", "shPARP1" => "shPARP1", "shPARP1_shGATA3" => "shPARP1_GATA3", "shScrambled" => "shScrambled");
@reps = (1,2,3);

##############################################################

open(OUT, ">$trackname");

##### normalized depth #####
# write header supertrack header
print OUT "track\tdata$stroot\n";
print OUT "compositeTrack\ton\n";
print OUT "shortLabel\t$shortLab\n";
print OUT "longLabel\t$longLab\n";
print OUT "priority\t$prio\n";
print OUT "subGroup1\tview View ATACfrag=ATACfrag ATAC9mer=ATAC9mer Peaks=Peaks\n";
print OUT "subGroup2\tcline CellLine"; foreach $CL (@cLines) { print OUT " $CL=$CL"; } print OUT "\n";
print OUT "subGroup3\tcondition Condition"; foreach $cond (@conditions) { print OUT " $condFixName{$cond}=$condFixName{$cond}"; } print OUT " all=all\n";  # 'all' is for unified peaks
print OUT "subGroup4\trep Replicate"; foreach $R (@reps) { print OUT " $R=$R"; } print OUT " unified=unified\n";
print OUT "subGroup5\tpktype PeakType frag=frag 9mer=9mer NA=NA\n";
print OUT "dimensions\tdimX=cline dimY=condition dimA=view dimB=pktype\n";
print OUT "sortOrder\tview=+ cline=+ condition=+ pktype=+\n";
print OUT "configurable\ton\n";
print OUT "type\tbigWig\n\n";

# write header for ATAC tracks -- fragment
print OUT "   track\tdata$stroot\_ViewDepthFrag\n";
print OUT "   parent\tdata$stroot\n";
print OUT "   shortLabel\t$shortLab (fragments)\n";
print OUT "   longLabel\t$longLab (fragments)\n";
print OUT "   view\tATACfrag\n";
print OUT "   visibility\tfull\n";
print OUT "   type\tbigWig\n";
print OUT "   allButtonPair\ton\n";
print OUT "   centerLabelsDense\ton\n";
print OUT "   dragAndDrop\ton\n";
print OUT "   alwaysZero\ton\n";
print OUT "   graphTypeDefault\tbar\n";
print OUT "   maxHeightPixels\t150:40:11\n";
print OUT "   autoScale\tgroup\n";
#print OUT "   viewLimits\t0:100\n";
print OUT "   showSubtrackColorOnUi\ton\n";
print OUT "   viewUi\ton\n\n";

# write ATAC depth tracks -- fragment
foreach $CL (@cLines) { foreach $cond (@conditions) { foreach $R (@reps) {
  $id = "$CL\-$cond\-rep$R";
  $idUse = "$CL\-$condFixName{$cond}\-rep$R";
  $bwfile = "$datadir/$id.hg38.bwt2.MAPQ5-PP.rmChrM.rmdup.fragment.norm10M.bigWig";
  unless (-e $bwfile) { print "WARNING1: Did not find \'$bwfile\'.\n"; next; }
  $prio++;
  print OUT "      track\t$id.F\n";
  print OUT "      parent\tdata$stroot\_ViewDepthFrag\n";
  print OUT "      bigDataUrl\t$bwfile\n";
  print OUT "      shortLabel\t$idUse (frag)\n";
  print OUT "      longLabel\t$idUse normalized depth (ATAC fragments)\n";
  print OUT "      type\tbigWig\n";
  print OUT "      color\t0,0,0\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\thide\n";
  print OUT "      subGroups\tview=ATACfrag cline=$CL condition=$condFixName{$cond} rep=$R pktype=NA\n\n";
} } }
print OUT "\n\n";

# write header for ATAC tracks -- 9mer footprint
print OUT "   track\tdata$stroot\_ViewDepth9mer\n";
print OUT "   parent\tdata$stroot\n";
print OUT "   shortLabel\t$shortLab (9mers)\n";
print OUT "   longLabel\t$longLab (9mers)\n";
print OUT "   view\tATAC9mer\n";
print OUT "   visibility\tfull\n";
print OUT "   type\tbigWig\n";
print OUT "   allButtonPair\ton\n";
print OUT "   centerLabelsDense\ton\n";
print OUT "   dragAndDrop\ton\n";
print OUT "   alwaysZero\ton\n";
print OUT "   graphTypeDefault\tbar\n";
print OUT "   maxHeightPixels\t150:40:11\n";
print OUT "   autoScale\tgroup\n";
#print OUT "   viewLimits\t0:100\n";
print OUT "   showSubtrackColorOnUi\ton\n";
print OUT "   viewUi\ton\n\n";

# write ATAC depth tracks -- 9mer footprint
foreach $CL (@cLines) { foreach $cond (@conditions) { foreach $R (@reps) {
  $id = "$CL\-$cond\-rep$R";
  $idUse = "$CL\-$condFixName{$cond}\-rep$R";
  $bwfile = "$datadir/$id.hg38.bwt2.MAPQ5-PP.rmChrM.rmdup.9merFootprint.norm10M.bigWig";
  unless (-e $bwfile) { print "WARNING2: Did not find \'$bwfile\'.\n"; next; }
  $prio++;
  print OUT "      track\t$id.9\n";
  print OUT "      parent\tdata$stroot\_ViewDepth9mer\n";
  print OUT "      bigDataUrl\t$bwfile\n";
  print OUT "      shortLabel\t$idUse (9mer)\n";
  print OUT "      longLabel\t$idUse normalized depth (ATAC 9mers)\n";
  print OUT "      type\tbigWig\n";
  print OUT "      color\t0,0,0\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\thide\n";
  print OUT "      subGroups\tview=ATAC9mer cline=$CL condition=$condFixName{$cond} rep=$R pktype=NA\n\n";
} } }
print OUT "\n\n";

# write header for peak tracks
print OUT "   track\tdata$stroot\_ViewPeaks\n";
print OUT "   parent\tdata$stroot\n";
print OUT "   shortLabel\t$shortLab (peaks)\n";
print OUT "   longLabel\t$longLab (peaks)\n";
print OUT "   view\tPeaks\n";
print OUT "   visibility\tdense\n";
print OUT "   type\tbigBed 3\n";
print OUT "   allButtonPair\ton\n";
print OUT "   centerLabelsDense\ton\n";
print OUT "   dragAndDrop\ton\n";
print OUT "   showSubtrackColorOnUi\ton\n";
print OUT "   viewUi\ton\n\n";

# write individual peak tracks (fragment)
foreach $CL (@cLines) { foreach $cond (@conditions) { foreach $R (@reps) {
  $id = "$CL\-$cond\-rep$R";
  $idUse = "$CL\-$condFixName{$cond}\-rep$R";
  $bbfile = "$datadir/peaks/$id.MACS2-peakcalls.ExclBlklist.fragment.bigBed";
  unless (-e $bbfile) { print "WARNING3: Did not find \'$bbfile\'.\n"; next; }
  $prio++;
  print OUT "      track\t$id.$stroot.PkFrag\n";
  print OUT "      parent\tdata$stroot\_ViewPeaks\n";
  print OUT "      bigDataUrl\t$bbfile\n";
  print OUT "      shortLabel\t$idUse peaks (ATAC frag)\n";
  print OUT "      longLabel\t$idUse peaks (ATAC frag)\n";
  print OUT "      type\tbigBed 3\n";
  print OUT "      color\t0,0,0\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\tdense\n";
  print OUT "      subGroups\tview=Peaks cline=$CL condition=$condFixName{$cond} rep=$R pktype=frag\n\n";
} } }
# write unified peak tracks (fragment)
$bbfile = "$datadir/peaks/ATAC_unifiedMDA231_4of12.fragment.bigBed";
unless (-e $bbfile) { print "ERROR: Did not find $bbfile.\n"; exit; }
$prio++;
print OUT "      track\tuniMDA231.$stroot.PkFrag\n";
print OUT "      parent\tdata$stroot\_ViewPeaks\n";
print OUT "      bigDataUrl\t$bbfile\n";
print OUT "      shortLabel\tMDA_MB_231 unified peaks (ATAC frag)\n";
print OUT "      longLabel\tMDA_MB_231 unified peaks (4 of 16 overlap; ATAC frag)\n";
print OUT "      type\tbigBed 3\n";
print OUT "      color\t0,0,0\n";
print OUT "      priority\t$prio\n";
print OUT "      visibility\tdense\n";
print OUT "      subGroups\tview=Peaks cline=MDA_MB_231 condition=all rep=unified pktype=frag\n\n";
$bbfile = "$datadir/peaks/ATAC_unifiedT47D_2of4.fragment.bigBed";
unless (-e $bbfile) { print "ERROR: Did not find $bbfile.\n"; exit; }
$prio++;
print OUT "      track\tuniT47D.$stroot.PkFrag\n";
print OUT "      parent\tdata$stroot\_ViewPeaks\n";
print OUT "      bigDataUrl\t$bbfile\n";
print OUT "      shortLabel\tT47D unified peaks (ATAC frag)\n";
print OUT "      longLabel\tT47D unified peaks (2 of 4 overlap; ATAC frag)\n";
print OUT "      type\tbigBed 3\n";
print OUT "      color\t0,0,0\n";
print OUT "      priority\t$prio\n";
print OUT "      visibility\tdense\n";
print OUT "      subGroups\tview=Peaks cline=T47D condition=all rep=unified pktype=frag\n\n";

# write individual peak tracks (9mer)         
foreach $CL (@cLines) { foreach $cond (@conditions) { foreach $R (@reps) {
  $id = "$CL\-$cond\-rep$R";
  $idUse = "$CL\-$condFixName{$cond}\-rep$R";
  $bbfile = "$datadir/peaks/$id.MACS2-peakcalls.ExclBlklist.9merFootprint.bigBed";
  unless (-e $bbfile) { print "WARNING4: Did not find \'$bbfile\'.\n"; next; }
  $prio++;
  print OUT "      track\t$id.$stroot.Pk9mer\n";
  print OUT "      parent\tdata$stroot\_ViewPeaks\n";
  print OUT "      bigDataUrl\t$bbfile\n";
  print OUT "      shortLabel\t$idUse peaks (ATAC 9mer)\n";
  print OUT "      longLabel\t$idUse peaks (ATAC 9mer)\n";
  print OUT "      type\tbigBed 3\n";
  print OUT "      color\t0,0,0\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\tdense\n";
  print OUT "      subGroups\tview=Peaks cline=$CL condition=$condFixName{$cond} rep=$R pktype=9mer\n\n";
} } }
# write unified peak tracks (9mer)
$bbfile = "$datadir/peaks/ATAC_unifiedMDA231_4of12.9merFootprint.bigBed";
unless (-e $bbfile) { print "ERROR: Did not find $bbfile.\n"; exit; }
$prio++;
print OUT "      track\tuniMDA231.$stroot.Pk9mer\n";
print OUT "      parent\tdata$stroot\_ViewPeaks\n";
print OUT "      bigDataUrl\t$bbfile\n";
print OUT "      shortLabel\tMDA_MB_231 unified peaks (ATAC 9mer)\n";
print OUT "      longLabel\tMDA_MB_231 unified peaks (4 of 16 overlap; ATAC 9mer)\n";
print OUT "      type\tbigBed 3\n";
print OUT "      color\t0,0,0\n";
print OUT "      priority\t$prio\n";
print OUT "      visibility\tdense\n";
print OUT "      subGroups\tview=Peaks cline=MDA_MB_231 condition=all rep=unified pktype=9mer\n\n";
$bbfile = "$datadir/peaks/ATAC_unifiedT47D_2of4.9merFootprint.bigBed";
unless (-e $bbfile) { print "ERROR: Did not find $bbfile.\n"; exit; }
$prio++;
print OUT "      track\tuniT47D.$stroot.Pk9mer\n";
print OUT "      parent\tdata$stroot\_ViewPeaks\n";
print OUT "      bigDataUrl\t$bbfile\n";
print OUT "      shortLabel\tT47D unified peaks (ATAC 9mer)\n";
print OUT "      longLabel\tT47D unified peaks (2 of 4 overlap; ATAC 9mer)\n";
print OUT "      type\tbigBed 3\n";
print OUT "      color\t0,0,0\n";
print OUT "      priority\t$prio\n";
print OUT "      visibility\tdense\n";
print OUT "      subGroups\tview=Peaks cline=T47D condition=all rep=unified pktype=9mer\n\n";

close(OUT);

