open DATAFILE, 'TF_prep.txt';
$i = 1;
while (<DATAFILE>) 
{
	chomp;
	@x = split '	',$_;
	for ($j=1;$j<=$#x+1;$j++) 
		{
			$datafile[$i][$j]=$x[$j-1]
		}; 
	$i += 1;
};
close DATAFILE;
$nr = $i-1;
$nc = $#x+1;
print "File 1, rows:",$nr,", col:",$nc,"\n";
open TFILE, 'mouse_tf.txt';
$i = 1;
while (<TFILE>) 
{
	chomp;
	@x = split '	',$_;
	for ($j=1;$j<=$#x+1;$j++) 
		{
			$tfile[$i][$j]=$x[$j-1]
		}; 
	$i += 1;
};
close TFILE;
$tr = $i-1;
$tc = $#x+1;
print "File 2, rows:",$tr,", col:",$tc,"\n";

$nr_tf = 0;
for ($i=1;$i<=$nr;$i++)
{
	$found = 0;
	$j = 1;
	while ($found == 0 && $j <= $tr)
	{
		if ($datafile[$i][3] eq $tfile[$j][1])
		{
			$datafile[$i][$nc+1] = "TRUE";
			$found = 1;
		};
		$j += 1;	
	};
	if ($found == 1)
	{
		$tfound = 0;
		$k = 1;
		while ($tfound == 0 && $k <= $nr_tf)
		{
			if ($datafile[$i][3] eq $detfile[$k][1])
			{
				if ($datafile[$i][1] eq "A")
				{
					$detfile[$k][2] += 1;
					$sumfile[$k][1][$detfile[$k][2]][1] = $datafile[$i][2];
					$sumfile[$k][1][$detfile[$k][2]][2] = $datafile[$i][4];
					$sumfile[$k][1][$detfile[$k][2]][3] = $datafile[$i][8];
				}
				elsif ($datafile[$i][1] eq "B")
				{
					$detfile[$k][3] += 1;
					$sumfile[$k][2][$detfile[$k][3]][1] = $datafile[$i][2];
					$sumfile[$k][2][$detfile[$k][3]][2] = $datafile[$i][4];
					$sumfile[$k][2][$detfile[$k][3]][3] = $datafile[$i][8];
				}
				elsif ($datafile[$i][1] eq "C")
				{
					$detfile[$k][4] += 1;
					$sumfile[$k][3][$detfile[$k][4]][1] = $datafile[$i][2];
					$sumfile[$k][3][$detfile[$k][4]][2] = $datafile[$i][4];
					$sumfile[$k][3][$detfile[$k][4]][3] = $datafile[$i][8];
				};
				#fill in rest of info
				$tfound = 1;	
			};
			$k+=1;
		}
		if ($tfound == 0)
		{
			$nr_tf += 1;
			$detfile[$nr_tf][1] = $datafile[$i][3];
			$detfile[$nr_tf][2] = 0; $detfile[$nr_tf][3] = 0; $detfile[$nr_tf][4] = 0;
				if ($datafile[$i][1] eq "A")
				{
					$detfile[$nr_tf][2] += 1;
					$sumfile[$k][1][$detfile[$nr_tf][2]][1] = $datafile[$i][2];
					$sumfile[$k][1][$detfile[$nr_tf][2]][2] = $datafile[$i][4];
					$sumfile[$k][1][$detfile[$nr_tf][2]][3] = $datafile[$i][8];
				}
				elsif ($datafile[$i][1] eq "B")
				{
					$detfile[$nr_tf][3] += 1;
					$sumfile[$k][2][$detfile[$nr_tf][3]][1] = $datafile[$i][2];
					$sumfile[$k][2][$detfile[$nr_tf][3]][2] = $datafile[$i][4];
					$sumfile[$k][2][$detfile[$nr_tf][3]][3] = $datafile[$i][8];
				}
				elsif ($datafile[$i][1] eq "C")
				{
					$detfile[$nr_tf][4] += 1;
					$sumfile[$k][3][$detfile[$nr_tf][4]][1] = $datafile[$i][2];
					$sumfile[$k][3][$detfile[$nr_tf][4]][2] = $datafile[$i][4];
					$sumfile[$k][3][$detfile[$nr_tf][4]][3] = $datafile[$i][8];
				};
			# fill in rest of info
		};
	}
	elsif ($found == 0)
	{
		    $datafile[$i][$nc+1] = "FALSE";
	};
	if ($datafile[$i][2] eq "NE"){$datafile[$i][$nc+2] = "#01";}
	elsif ($datafile[$i][2] eq "RPE"){$datafile[$i][$nc+2] = "#02";}
	elsif ($datafile[$i][2] eq "ERPC"){$datafile[$i][$nc+2] = "#03";}
	elsif ($datafile[$i][2] eq "LRPC"){$datafile[$i][$nc+2] = "#04";}
	elsif ($datafile[$i][2] eq "NRPC"){$datafile[$i][$nc+2] = "#05";}
	elsif ($datafile[$i][2] eq "RGC"){$datafile[$i][$nc+2] = "#06";}
	elsif ($datafile[$i][2] eq "HC"){$datafile[$i][$nc+2] = "#07";}
	elsif ($datafile[$i][2] eq "AC"){$datafile[$i][$nc+2] = "#08";}
	elsif ($datafile[$i][2] eq "PRP"){$datafile[$i][$nc+2] = "#09";}
	elsif ($datafile[$i][2] eq "C"){$datafile[$i][$nc+2] = "#10";}
	elsif ($datafile[$i][2] eq "R"){$datafile[$i][$nc+2] = "#11";}
	elsif ($datafile[$i][2] eq "BC"){$datafile[$i][$nc+2] = "#12";}
	elsif ($datafile[$i][2] eq "MC"){$datafile[$i][$nc+2] = "#13";}
	else {$datafile[$i][$nc+2] = "-14";};
	#print "-",$datafile[$i][2],";",$dafafile[$i][$nc+2];
};

print "Nr of regulated TF = ",$nr_tf,"\n";
for ($i=1;$i<=$nr_tf;$i++)
{
	print $detfile[$i][1],"-",$detfile[$i][2],"-",$detfile[$i][3],"-",$detfile[$i][4],"\n";
	for ($j=1;$j<=$detfile[$i][2];$j++)
	{
		print "A ",$j," ",$sumfile[$i][1][$j][1]," ",$sumfile[$i][1][$j][2]," ",$sumfile[$i][1][$j][3],"\n";	
	};
	for ($j=1;$j<=$detfile[$i][3];$j++)
	{
		print "B ",$j," ",$sumfile[$i][2][$j][1]," ",$sumfile[$i][2][$j][2]," ",$sumfile[$i][2][$j][3],"\n";	
	};
	for ($j=1;$j<=$detfile[$i][4];$j++)
	{
		print "C ",$j," ",$sumfile[$i][3][$j][1]," ",$sumfile[$i][3][$j][2]," ",$sumfile[$i][3][$j][3],"\n";	
	};
};
print "\n";

$rank = 0;

for ($i=1;$i<=$nr_tf;$i++)
{
	$detfile[$i][5] = 0;
};
# NE
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "NE")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "NE"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# RPE
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "RPE")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "RPE"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# ERPC
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "ERPC")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "ERPC"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# LRPC
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "LRPC")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "LRPC"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# NRPC
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "NRPC")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "NRPC"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# RGC
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "RGC")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "RGC"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# HC
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "HC")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "HC"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# AC
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "AC")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "AC"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# PRP
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "PRP")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "PRP"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# C
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "C")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "C"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# R
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "R")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "R"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# BC
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "BC")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "BC"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# MC
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0 && $detfile[$i][2] == 1 && $sumfile[$i][1][1][1] eq "MC")
	{
		$rank += 1;
		$detfile[$i][5] = $rank;
	}
	elsif ($detfile[$i][5] == 0 && $detfile[$i][2] > 1)
	{
		$ne_found = 0;
		for ($j=1;$j<=$detfile[$i][2];$j++)
		{
			if ($sumfile[$i][1][$j][1] eq "MC"){$ne_found = 1;$ne_nr = $j;};
		};
		if ($ne_found == 1)
		{
			$max = 1;
			for ($j=1;$j<=$detfile[$i][2];$j++)
			{
				if ($sumfile[$i][1][$ne_nr][2] < $sumfile[$i][1][$j][2]){$max = 0;};	
			};
			if ($max == 1)
			{
				$rank += 1;
				$detfile[$i][5] = $rank;	
			};
		};
	};
};
# LEFTOVERS
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][5] == 0)
	{
		$rank+=1;
		$detfile[$i][5] = $rank;
	};
};


for ($i=1;$i<=$nr_tf;$i++)
{
	print $detfile[$i][1],"-",$detfile[$i][2],"-",$detfile[$i][3],"-",$detfile[$i][4],"-",$detfile[$i][5],"\n"; 
};

for ($i=1;$i<=$nr;$i++)
{
	for ($j=1;$j<=$nr_tf;$j++)
	{
		if ($datafile[$i][3] eq $detfile[$j][1]){$datafile[$i][$nc+3] = $detfile[$j][5]};	
	};
};
open RESULTS, ">For_TF_tile_2.txt";
print RESULTS "Exp	Cell	Gene	LFC	P1	P2	PV	PVA	TF1	TF2	CT	Order	color\n";
for ($i = 1; $i <= $nr; $i++)
{
    if ($datafile[$i][10] eq "TRUE")
	{
		print RESULTS $datafile[$i][1];
		#print $datafile[$i][1];
		for ($j = 2; $j <= $nc+3; $j++)
		{
		    print RESULTS "	",$datafile[$i][$j];
			#print "	",$datafile[$i][$j];
		};
		if ($datafile[$i][1] eq "A"){print RESULTS "	#74bbfb\n";}
		elsif ($datafile[$i][1] eq "B"){print RESULTS "	#81EE53\n";}
		elsif ($datafile[$i][1] eq "C"){print RESULTS "	#ff55a3\n";};
		
		#print  "\n";
	};
};
print RESULTS "B	RPE	X	1	1	1	1	1	TRUE	TRUE	#02	0	#FFFFFF\n";
print RESULTS "B	HC	X	1	1	1	1	1	TRUE	TRUE	#07	0	#FFFFFF\n";
print RESULTS "C	HC	X	1	1	1	1	1	TRUE	TRUE	#07	0	#FFFFFF\n";
$abc=0;$ab_=0;$a_c=0;$_bc=0;$a__=0;$_b_=0;$__c=0;
for ($i=1;$i<=$nr_tf;$i++)
{
	if ($detfile[$i][2] > 0 && $detfile[$i][3] > 0 && $detfile[$i][4] > 0){$detfile[$i][6] = "#000000";$abc+=1;}
	elsif ($detfile[$i][2] > 0 && $detfile[$i][3] > 0 && $detfile[$i][4] == 0){$detfile[$i][6] = "#bdbdbd";$ab_+=1;}
	elsif ($detfile[$i][2] > 0 && $detfile[$i][3] == 0 && $detfile[$i][4] > 0){$detfile[$i][6] = "#bdbdbd";$a_c+=1;}
	elsif ($detfile[$i][2] == 0 && $detfile[$i][3] > 0 && $detfile[$i][4] > 0){$detfile[$i][6] = "red";$_bc+=1;}
	elsif ($detfile[$i][2] > 0 && $detfile[$i][3] == 0 && $detfile[$i][4] == 0){$detfile[$i][6] = "#FFFFFF";$a__+=1;}
	elsif ($detfile[$i][2] == 0 && $detfile[$i][3] > 0 && $detfile[$i][4] == 0){$detfile[$i][6] = "#FFFFFF";$_b_+=1;}
	elsif ($detfile[$i][2] == 0 && $detfile[$i][3] == 0 && $detfile[$i][4] > 0){$detfile[$i][6] = "#FFFFFF";$__c+=1;};
	print RESULTS "D	X	",$detfile[$i][1],"	1	1	1	1	1	TRUE	TRUE	#01	",$detfile[$i][5],"	",$detfile[$i][6],"\n";		
};
close RESULTS;
print "ABC:",$abc," AB_:",$ab_," A_C:",$a_c," _BC:",$_bc," A__:",$a__," _B_:",$_b_," __C:",$__c,"\n"


