#!/usr/bin/perl

@cells = ("AM", "LEC");
@trts = ("PBS", "HDM", "HDE");
@ages = ("6wk", "3wk");
@reps = ("1", "2", "3");
@repsM = ("1", "2", "3", "M");
@sets = ("set1", "set2");

$myColor = "0,0,204";  # consider color-coding by cell type, treatment, or age if requested by priya/seddon

open(OUT, ">trackDb.txt");
$prio = 100;

##### supertrack1: raw depth #####
# write header supertrack header
print OUT "track\tdataRaw\n";
print OUT "compositeTrack\ton\n";
print OUT "shortLabel\tATACseqRaw\n";
print OUT "longLabel\tATAC-seq data (raw depth)\n";
print OUT "priority\t$prio\n";
print OUT "subGroup1\tView View RAW=rawDepth\n";
print OUT "subGroup2\tDataset Dataset"; foreach $set (@sets) { print OUT " $set=$set"; } print OUT "\n";
print OUT "subGroup3\tCellType CellType"; foreach $c (@cells) { print OUT " $c=$c"; } print OUT "\n";
print OUT "subGroup4\tTreatment Treatment"; foreach $t (@trts) { print OUT " $t=$t"; } print OUT "\n";
print OUT "subGroup5\tAge Age"; foreach $a (@ages) { print OUT " $a=$a"; } print OUT "\n";
print OUT "subGroup6\tRep Rep"; foreach $r (@reps) { print OUT " $r=$r"; } print OUT "\n";
print OUT "dimensions\tdimX=Treatment dimY=Age dimA=Dataset dimB=CellType\n";
print OUT "sortOrder\tDataset=+ CellType=+ Treatment=+ Age=+ Rep=+\n";
print OUT "type\tbigWig\n\n";

# write header for raw depth tracks (by sample only)
print OUT "   track\tdataRaw_ViewDepth\n";
print OUT "   parent\tdataRaw\n";
print OUT "   shortLabel\tFootprintsRaw\n";
print OUT "   longLabel\tATAC-seq footprints (raw)\n";
print OUT "   view\tRAW\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:30:11\n";
print OUT "   viewLimits\t0:100\n";
print OUT "   showSubtrackColorOnUi\ton\n";
print OUT "   viewUi\ton\n\n";

# write raw depth tracks (by sample only)
foreach $set (@sets) { foreach $ct (@cells) { foreach $trt (@trts) { foreach $age (@ages) { foreach $r (@reps) {
  $id = "$set.$ct"."_$trt"."_$age"."-$r";
  $bwfile = "data/$id.mm9.footprint.raw.bigWig";
  next if ($set	eq "set1" && $trt eq "HDM");
  next if ($set	eq "set2" && $trt eq "HDE");
  unless (-e $bwfile) { print "WARNING: Did not find $bwfile.\n"; exit; }
  $prio++;
  print OUT "      track\t$id.DR\n";
  print OUT "      parent\tdataRaw_ViewDepth\n";
  print OUT "      bigDataUrl\t$bwfile\n";
  print OUT "      shortLabel\t$id raw\n";
  print OUT "      longLabel\traw footprints depth: $id\n";
  print OUT "      type\tbigWig\n";
  print OUT "      color\t$myColor\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\thide\n";
  print OUT "      subGroups\tDataset=$set CellType=$ct Treatment=$trt Age=$age Rep=$r View=RAW\n\n";
} } } } }
print OUT "\n\n";


##### supertrack2: normalized depth  #####
# write header supertrack header
$prio = 200;
print OUT "track\tdataNorm\n";
print OUT "compositeTrack\ton\n";
print OUT "shortLabel\tATACseqNorm\n";
print OUT "longLabel\tATAC-seq data (normalized depth)\n";
print OUT "priority\t$prio\n";
print OUT "subGroup1\tView View NRM=normDepth\n";
print OUT "subGroup2\tDataset Dataset"; foreach $set (@sets) { print OUT " $set=$set"; } print OUT "\n";
print OUT "subGroup3\tCellType CellType"; foreach $c (@cells) { print OUT " $c=$c"; } print OUT "\n";
print OUT "subGroup4\tTreatment Treatment"; foreach $t (@trts) { print OUT " $t=$t"; } print OUT "\n";
print OUT "subGroup5\tAge Age"; foreach $a (@ages) { print OUT " $a=$a"; } print OUT "\n";
print OUT "subGroup6\tRep Rep"; foreach $r (@repsM) { print OUT " $r=$r"; } print OUT "\n";
print OUT "dimensions\tdimX=Treatment dimY=Age dimA=Dataset dimB=CellType dimC=Rep\n";
print OUT "sortOrder\tDataset=+ CellType=+ Treatment=+ Age=+ Rep=+\n";
print OUT "type\tbigWig\n\n";

# write header for normalized depth tracks
print OUT "   track\tdataNorm_ViewDepth\n";
print OUT "   parent\tdataNorm\n";
print OUT "   shortLabel\tFootprints\n";
print OUT "   longLabel\tATAC-seq footprints (normalized)\n";
print OUT "   view\tNRM\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:30:11\n";
print OUT "   viewLimits\t0:100\n";
print OUT "   showSubtrackColorOnUi\ton\n";
print OUT "   viewUi\ton\n\n";

# write normalized depth tracks
foreach $set (@sets) { foreach $ct (@cells) { foreach $trt (@trts) { foreach $age (@ages) { foreach $r (@reps) {
  $id = "$set.$ct"."_$trt"."_$age"."-$r";
  $bwfile = "data/$id.mm9.footprint.norm50M.bigWig";
  next if ($set	eq "set1" && $trt eq "HDM");
  next if ($set	eq "set2" && $trt eq "HDE");
  unless (-e $bwfile) { print "WARNING: Did not find $bwfile.\n"; exit; }
  $prio++;
  print OUT "      track\t$id.DN\n";
  print OUT "      parent\tdataNorm_ViewDepth\n";
  print OUT "      bigDataUrl\t$bwfile\n";
  print OUT "      shortLabel\t$id\n";
  print OUT "      longLabel\tfootprints depth: $id\n";
  print OUT "      type\tbigWig\n";
  print OUT "      color\t$myColor\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\thide\n";
  print OUT "      subGroups\tDataset=$set CellType=$ct Treatment=$trt Age=$age Rep=$r View=NRM\n\n";
} } } } }
foreach $set (@sets) { foreach $ct (@cells) { foreach $trt (@trts) { foreach $age (@ages) {
  $id = "$set.$ct"."_$trt"."_$age";
  $bwfile = "data/$id.mm9.footprint.norm150M.bigWig";
  next if ($set eq "set1" && $trt eq "HDM");
  next if ($set eq "set2" && $trt eq "HDE");
  unless (-e $bwfile) { print "WARNING: Did not find $bwfile.\n"; exit; }
  $prio++;
  print OUT "      track\t$id.DN\n";
  print OUT "      parent\tdataNorm_ViewDepth\n";
  print OUT "      bigDataUrl\t$bwfile\n";
  print OUT "      shortLabel\t$id\n";
  print OUT "      longLabel\tfootprints depth: $id\n";
  print OUT "      type\tbigWig\n";
  print OUT "      color\t$myColor\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\thide\n";
  print OUT "      subGroups\tDataset=$set CellType=$ct Treatment=$trt Age=$age Rep=M View=NRM\n\n";
} } } }
print OUT "\n\n";


##### supertrack3: peaks per sample #####
# write header supertrack header
$prio = 300;
print OUT "track\tdataPeaks\n";
print OUT "compositeTrack\ton\n";
print OUT "shortLabel\tATACseqPeaks\n";
print OUT "longLabel\tATAC-seq peaks\n";
print OUT "priority\t$prio\n";
print OUT "subGroup1\tType Type Sample=Sample\n";
print OUT "subGroup2\tDataset Dataset"; foreach $set (@sets) { print OUT " $set=$set"; } print OUT "\n";
print OUT "subGroup3\tCellType CellType"; foreach $c (@cells) { print OUT " $c=$c"; } print OUT "\n";
print OUT "dimensions\tdimX=Dataset dimY=CellType dimA=Type\n";
print OUT "sortOrder\tDataset=+ CellType=$ct Type=+\n";
print OUT "type\tbed 3\n\n";
foreach $set (@sets) { foreach $ct (@cells) { foreach $trt (@trts) { foreach $age (@ages) { foreach $r (@reps) {
  $id = "$set.$ct"."_$trt"."_$age"."-$r";
  next if ($set eq "set1" && $trt eq "HDM");
  next if ($set eq "set2" && $trt eq "HDE");
  $bbfile = "data/$id.MACS2.bigBed";
  unless (-e $bbfile) { print "WARNING: Did not find $bbfile.\n"; next; }
  $prio++;
  print OUT "    track\t$id.P\n";
  print OUT "    parent\tdataPeaks\n";
  print OUT "    bigDataUrl\t$bbfile\n";
  print OUT "    shortLabel\t$id peaks\n";
  print OUT "    longLabel\tMACS2 peaks: $id\n";
  print OUT "    type\tbigBed\n";
  print OUT "    color\t$myColor\n";
  print OUT "    priority\t$prio\n";
  print OUT "    visibility\thide\n";
  print OUT "    subGroups\tType=Sample Dataset=$set CellType=$ct\n\n";
} } } } }


##### supertrack4: unified #####
# write header supertrack header
$prio = 400;
print OUT "track\tdataPeaksU\n";
print OUT "compositeTrack\ton\n";
print OUT "shortLabel\tATACseqPeaksU\n";
print OUT "longLabel\tunified peaks\n";
print OUT "priority\t$prio\n";
print OUT "subGroup1\tDataset Dataset"; foreach $set (@sets) { print OUT " $set=$set"; } print OUT "\n";
print OUT "subGroup2\tType Type ByCT=ByCT ByGrp=ByGrp All=All\n";
print OUT "dimensions\tdimX=Dataset dimY=Type\n";
print OUT "sortOrder\tDataset=+ Type=+\n";
print OUT "type\tbed 3\n\n";

# write peak tracks
foreach $set (@sets) {
  print OUT "    track\tuni$set\All.P\n";
  print OUT "    parent\tdataPeaksU\n";
  print OUT "    bigDataUrl\tdata/$set.MACS2_unified24.bigBed\n";
  print OUT "    shortLabel\tunified24 peaks ($set)\n";
  print OUT "    longLabel\tMACS2 peaks: unified24 ($set)\n";
  print OUT "    type\tbigBed\n";
  print OUT "    color\t$myColor\n";
  print OUT "    priority\t$prio\n";
  print OUT "    visibility\thide\n";
  print OUT "    subGroups\tDataset=$set Type=All\n\n";
}
foreach $set (@sets) { foreach $ct (@cells) {
  $bbfile = "data/$set.MACS2_unified$ct.bigBed";
  unless (-e $bbfile) { print "WARNING: Did not find $bbfile.\n"; next; }
  print OUT "    track\tuni$set$ct.P\n";
  print OUT "    parent\tdataPeaksU\n";
  print OUT "    bigDataUrl\t$bbfile\n";
  print OUT "    shortLabel\tunified$ct peaks ($set)\n";
  print OUT "    longLabel\tMACS2 peaks: unified$ct ($set)\n";
  print OUT "    type\tbigBed\n";
  print OUT "    color\t$myColor\n";
  print OUT "    priority\t$prio\n";
  print OUT "    visibility\thide\n";
  print OUT "    subGroups\tDataset=$set Type=ByCT\n\n";
} }
foreach $set (@sets) { foreach $ct (@cells) { foreach $trt (@trts) { foreach $age (@ages) {
  $grp = "$ct"."_$trt"."_$age";
  $bbfile = "data/$set.MACS2_unified\-$grp.bigBed";
  next if ($set eq "set1" && $trt eq "HDM");
  next if ($set eq "set2" && $trt eq "HDE");
  unless (-e $bbfile) { print "WARNING: Did not find $bbfile.\n"; next; }
  $prio++;
  print OUT "    track\tuni$set$grp.P\n";
  print OUT "    parent\tdataPeaksU\n";
  print OUT "    bigDataUrl\t$bbfile\n";
  print OUT "    shortLabel\tunified-$grp peaks ($set)\n";
  print OUT "    longLabel\tMACS2 peaks: unified-$grp ($set)\n";
  print OUT "    type\tbigBed\n";
  print OUT "    color\t$myColor\n";
  print OUT "    priority\t$prio\n";
  print OUT "    visibility\thide\n";
  print OUT "    subGroups\tDataset=$set Type=ByGrp\n\n";
} } } }



close(OUT);
