#!/usr/bin/perl

@marks = ("ERa", "H3K27Ac", "H3K4me1", "H3K4me3", "Pol2", "input");
@conditions = ("21d_Veh", "21d_E2", "adult_Veh", "adult_E2");
@inputs = ("21d_input", "adult_input", "orig_input");

%conditionKey = ("21d_Veh" => "JV", "21d_E2" => "JE", "adult_Veh" => "AV", "adult_E2" => "AE");
%markColor = ("ERa" => "204,0,0",        #red
              "H3K27Ac" => "0,153,0",    #green
              "H3K4me1" => "0,0,255",    #blue
              "H3K4me3" => "127,0,255",  #purple
              "Pol2" => "255,128,0",     #orange
              "input" => "204,204,204"); #grey


# Step 1)  Write track view header.
$prio = 100;
open(OUT, ">trackDb.txt");
print OUT "track\tSH_hmod_tracks\n";
print OUT "compositeTrack\ton\n";
print OUT "shortLabel\tSH Tracks\n";
print OUT "longLabel\tSylvia's Depth & Peaks\n";
print OUT "priority\t$prio\n";
print OUT "visibility\tfull\n";
print OUT "subGroup1\tview Views COV=depth PK=peaks SE=superenhancers\n";
print OUT "subGroup2\tchiptype ChIP";
foreach $mark (@marks) { print OUT " $mark=$mark"; } print OUT "\n";
print OUT "subGroup3\tcondition Condition";
foreach $cnd (@conditions) { print OUT " $conditionKey{$cnd}=$cnd"; } print OUT " other=other\n";
print OUT "dimensions\tdimX=chiptype dimY=condition\n";
print OUT "sortOrder\tchiptype=+ condition=+ view=-\n";
print OUT "configurable\ton\n";
print OUT "type\tbed 3\n\n";


# Step 2a)  Write header for depth track grouping.
print OUT "   track\tSH_hmod_tracksViewDepth\n";
print OUT "   parent\tSH_hmod_tracks\n";
print OUT "   shortLabel\tDepth\n";
print OUT "   longLabel\tNormalized ChIP-seq Depth\n";
print OUT "   view\tCOV\n";
print OUT "   visibility\thide\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 "   viewLimits\t0:50\n";
print OUT "   showSubtrackColorOnUi\ton\n";
print OUT "   viewUi\ton\n\n";

# Step 2b)  Write depth tracks.
foreach $mark (@marks) { foreach $cnd (@conditions) {
  next if ($mark eq "input");
  $id = "$cnd\_$mark";
  if ($mark eq "Pol2") { $bwfile = "DATA/$id.bwt.rmdup.ext150.norm15M.bigWig"; }
  else { $bwfile = "DATA/$id.bwt.rmdup.ext200.norm20M.bigWig"; }
  unless (-e $bwfile) { print "WARNING: Did not find $bwfile.\n"; next; }
  $prio++;
  print OUT "      track\t$id.D\n";
  print OUT "      parent\tSH_hmod_tracksViewDepth on\n";
  print OUT "      bigDataUrl\t$bwfile\n";
  print OUT "      shortLabel\t$id depth\n";
  print OUT "      longLabel\tnormalized read depth: $id\n";
  print OUT "      type\tbigWig\n";
  print OUT "      color\t$markColor{$mark}\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\thide\n";
  print OUT "      subGroups\tchiptype=$mark condition=$conditionKey{$cnd} view=COV\n\n";
} }
foreach $input (@inputs) {
  $id = $input;
  $bwfile = "DATA/$id.bwt.rmdup.ext200.norm20M.bigWig";
  unless (-e $bwfile) { print "WARNING: Did not find $bwfile.\n"; }
  $prio++;
  print OUT "      track\t$id.D\n";
  print OUT "      parent\tSH_hmod_tracksViewDepth on\n";
  print OUT "      bigDataUrl\t$bwfile\n";
  print OUT "      shortLabel\t$id depth\n";
  print OUT "      longLabel\tnormalized read depth: $id\n";
  print OUT "      type\tbigWig\n";
  print OUT "      color\t$markColor{'input'}\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\thide\n";
  print OUT "      subGroups\tchiptype=input condition=other view=COV\n\n";
}


# Step 3a)  Write header for peaks track grouping.
print OUT "   track\tSH_hmod_tracksViewPeaks\n";
print OUT "   parent\tSH_hmod_tracks\n";
print OUT "   shortLabel\tPeaks\n";
print OUT "   longLabel\tPeaks, ChIP-seq\n";
print OUT "   view\tPK\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";

# Step 3b-i)  Write peaks tracks for ERa.
$mark = "ERa";
foreach $cnd (@conditions) {
  $id = "$cnd\_$mark";
  $bbfile = "$id.homer-peakcalls.factor_F12_e-5.200nt.bigBed";
  if (-e "DATA/$bbfile") {
    $prio++;
    print OUT "      track\t$id.P\n";
    print OUT "      parent\tSH_hmod_tracksViewPeaks on\n";
    print OUT "      bigDataUrl\tDATA/$bbfile\n";
    print OUT "      shortLabel\t$id peaks\n";
    print OUT "      longLabel\t$id peaks\n";
    print OUT "      type\tbigBed 3\n";
    print OUT "      color\t$markColor{$mark}\n";
    print OUT "      priority\t$prio\n";
    print OUT "      visibility\tdense\n";
    print OUT "      subGroups\tchiptype=$mark condition=$conditionKey{$cnd} view=PK\n\n";
  }
  else { print "WARNING: Did not find DATA/$bbfile\n"; }
}

# Step 3b-ii)  Write peak tracks for histone mod marks.
foreach $mark (@marks) { foreach $cnd (@conditions) {
  next if ($mark eq "input" || $mark eq "ERa" || $mark eq "Pol2");
  $id = "$cnd\_$mark";
  $pkfile = "DATA/$id.ActiveMotif_peaks.bigBed";
  unless (-e $pkfile) { print "WARNING: Did not find $pkfile.\n"; next; }
  $prio++;
  print OUT "      track\t$id.P\n";
  print OUT "      parent\tSH_hmod_tracksViewPeaks on\n";
  print OUT "      bigDataUrl\t$pkfile\n";
  print OUT "      shortLabel\t$id peaks\n";
  print OUT "      longLabel\t$id peaks\n";
  print OUT "      type\tbigBed 3\n";
  print OUT "      color\t$markColor{$mark}\n";
  print OUT "      priority\t$prio\n";
  print OUT "      visibility\tdense\n";
  print OUT "      subGroups\tchiptype=$mark condition=$conditionKey{$cnd} view=PK\n\n";
} }

# Step 3b-iii)  Write peak tracks for Pol2.  (punctate only)
$mark = "Pol2";
foreach $cnd (@conditions) {
  $id = "$cnd\_$mark";
  if ($cnd eq "adult_Veh") { $bbfile = "WT_Veh_Pol2.homer-peakcalls.500nt.filtered20.bigBed"; }
  elsif ($cnd eq "adult_E2") { $bbfile = "WT_E2_Pol2.homer-peakcalls.500nt.filtered20.bigBed"; }
  else { next; }
  if (-e "DATA/$bbfile") {
    $prio++;
    print OUT "      track\t$id.P\n";
    print OUT "      parent\tSH_hmod_tracksViewPeaks on\n";
    print OUT "      bigDataUrl\tDATA/$bbfile\n";
    print OUT "      shortLabel\t$id peaks\n";
    print OUT "      longLabel\t$id punctate peaks\n";
    print OUT "      type\tbigBed 3\n";
    print OUT "      color\t$markColor{$mark}\n";
    print OUT "      priority\t$prio\n";
    print OUT "      visibility\tdense\n";
    print OUT "      subGroups\tchiptype=$mark condition=$conditionKey{$cnd} view=PK\n\n";
  }
  else { print "WARNING: Did not find DATA/$bbfile\n"; }
}
print OUT "\n\n";


# Step 4a)  Write header for superenhancer track grouping.
print OUT "   track\tSH_hmod_tracksViewSE\n";
print OUT "   parent\tSH_hmod_tracks\n";
print OUT "   shortLabel\tSuperenhancers\n";
print OUT "   longLabel\tSuperenhancers, ChIP-seq\n";
print OUT "   view\tSE\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";

# Step 4b)  Write superenhancer tracks.
@marks_SE = ("H3K27Ac", "H3K4me1");
foreach $mark (@marks_SE) {
  foreach $cnd (@conditions) {
    $id = "$cnd\_$mark";
    $sefile = "DATA/$id.ActiveMotif_SE.bigBed";
    unless (-e $sefile) { print "WARNING: Did not find $sefile.\n"; next; }
    $prio++;
    print OUT "     track\t$id.SE\n";
    print OUT "	    parent\tSH_hmod_tracksViewSE on\n";
    print OUT "     bigDataUrl\t$sefile\n";
    print OUT "     shortLabel\t$id SE\n";
    print OUT "     longLabel\t$id SE\n";
    print OUT "     type\tbigBed 3\n";
    print OUT "     color\t$markColor{$mark}\n";
    print OUT "     priority\t$prio\n";
    print OUT "     visibility\tdense\n";
    print OUT "     subGroups\tchiptype=$mark condition=$conditionKey{$cnd} view=SE\n\n";
  }
  $sefile = "DATA/$mark.ActiveMotif_SE.bigBed";
  unless (-e $sefile) { print "WARNING: Did not find $sefile.\n"; next; }
  $prio++;
  print OUT "     track\t$mark.SE\n";
  print OUT "     parent\tSH_hmod_tracksViewSE on\n";
  print OUT "     bigDataUrl\t$sefile\n";
  print OUT "     shortLabel\t$mark merged SE\n";
  print OUT "     longLabel\t$mark merged SE\n";
  print OUT "     type\tbigBed 3\n";
  print OUT "     color\t$markColor{$mark}\n";
  print OUT "     priority\t$prio\n";
  print OUT "     visibility\tdense\n";
  print OUT "     subGroups\tchiptype=$mark condition=other view=SE\n\n";
}
print OUT "\n\n";

close(OUT);
