Mercurial > repos > mkhan1980 > ctcf_analysis
diff check.pl @ 0:ebad609b8a6d draft
Uploaded
author | mkhan1980 |
---|---|
date | Mon, 04 Mar 2013 06:36:06 -0500 |
parents | |
children | 1c09a4a56459 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/check.pl Mon Mar 04 06:36:06 2013 -0500 @@ -0,0 +1,274 @@ + #!/usr/bin/perl -w +use strict; + +# Define variables +my @temp=(); +my $result1; +my $result2; +my $result3; +my $result4; +my $result5; +my $result6; +my $resultfinal; +my $count; +my $coun; +my $cou; +my @digit=(); +my $digit; +my $marks; +my $log; +my $coll; +my @scorearray=(); +my $scorearray; +my $percent; +my $kount; +my @result=(); +my $result; +my %final=(); +my $final; +my @c=(); +my @matrix1; +my @matrix2; +my $matrix1; +my $matrix2; +$coll=0; +my $count2; +my $var; +my $entry1; +my $entry2; +my $reventry1; +my $reventry2; +my $revvar; +my @revmatrix1; +my $revkount; +my $revcoun; +my $revcount2; +my @revtemp; +my $revcoll; +my @revdigit; +my $revdigit; +my $revmarks; +my $revresult1; +my $revresult2; +my $revresult3; +my $revresult4; +my $revresult5; +my $revresult6; +my $revresultfinal; +my @revscorearray; +my $revscorearray; + + + +#define variables from configuration file +open (IN, "<$ARGV[0]"); +open (IN2, "<$ARGV[1]"); +open (OUT, ">$ARGV[2]"); + +#assign arrays to variables from configuration file +my @array5=<IN>; + +my @coordinates=<IN2>; + + +#split the chromosome number and starting position from coordinates file into 2 separate strings + +foreach my $coordinates(@coordinates) { + +chomp($coordinates); + +my @coordinates2=split(/\s+/, $coordinates); + +my $coordinates2; + +$entry1=$coordinates2[0]; +$entry2=$coordinates2[1]; + +} + + +print OUT "CTCF Site", "\t", "Chromosome no.", "\t", "Start", "\t", "End", "\t", "Score", "\t", "Strand", "\n"; + +chomp (@array5); + +my $digits=join("", @array5); + +my @yeslap = $digits =~ /(?=(\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w))/g; + + + $var = "@yeslap\n"; + + +@matrix1=qw/87.25 291.25 76.25 459.25 167.25 145.25 414.25 187.25 281.25 49.25 449.25 134.25 56.25 800.25 21.25 36.25 8.25 903.25 0.25 2.25 744.25 13.25 65.25 91.25 40.25 528.25 334.25 11.25 107.25 433.25 48.25 324.25 851.25 11.25 32.25 18.25 5.25 0.25 903.25 3.25 333.25 3.25 566.25 9.25 54.25 12.25 504.25 341.25 12.25 0.25 890.25 8.25 56.25 8.25 775.25 71.25 104.25 733.25 5.25 67.25 372.25 13.25 507.25 17.25 82.25 482.25 307.25 37.25 117.25 322.25 73.25 396.25 402.25 181.25 266.25 59.25/; + + $kount=0; + $coun=0; + +# Define the pattern for CTCF. Because of pseudocount, a wildcard is allowed at +#each position. + my $pattern = "[ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC][ATGC]"; + +# Compare the pattern with the 19 bp nucleotide segments. + + while($var =~ m/$pattern/gi) + { + $coun++; + $count2++; + my $endpos = pos $var; + +# Get the starting and ending positions of the matched pattern. + + my $startpos=($endpos+1)-19; + my $lastpos=$endpos; + + + my $consensus = substr($var, ($startpos-1), 19); + + push(@temp, $consensus, $startpos, $lastpos); + + $coll=0; + $kount++; + + +# Split the matched pattern into 19 single bases. + + @digit = split(//, $consensus); + + +# For each base, if the base is A, calculate the weight score of A according to +#its frequency in the CTCF Position Frequency Matrix. + foreach $digit (@digit) + { + + + if($digit =~ m/A/) + { + + + my $ref = \@matrix1; + $marks = @{$ref}[$coll]; + + + $result1 = sqrt(914); + + $result2 = $result1*0.3; + + $result3 = $result2+$marks; + $result4 = sqrt(914); + $result5 = $result4+914; + $result6 = 0.3; + +$resultfinal = log($result3/$result5/$result6)/log(2); + + + + + +push(@scorearray, $resultfinal); + + + + } + +if($digit =~ m/C/) + +{ + + my $ref = \@matrix1; + + $marks = @{$ref}[$coll + 1]; + + $result1 = sqrt(914); + $result2 = $result1*0.2; + $result3 = $result2+$marks; + $result4 = sqrt(914); + $result5 = $result4+914; + $result6 = 0.2; + +$resultfinal = log($result3/$result5/$result6)/log(2); + +push(@scorearray, $resultfinal); + + +} + + +if($digit =~ m/G/) + +{ + + my $ref = \@matrix1; + + $marks = @{$ref}[$coll+2]; + + $result1 = sqrt(914); + $result2 = $result1*0.2; + $result3 = $result2+$marks; + $result4 = sqrt(914); + $result5 = $result4+914; + $result6 = 0.2; + +$resultfinal = log($result3/$result5/$result6)/log(2); + + +push(@scorearray, $resultfinal); + +} + +if($digit =~ m/T/) + +{ + + my $ref = \@matrix1; + + $marks = @{$ref}[$coll+3]; + + $result1 = sqrt(914); + $result2 = $result1*0.3; + $result3 = $result2+$marks; + $result4 = sqrt(914); + $result5 = $result4+914; + $result6 = 0.3; + +$resultfinal = log($result3/$result5/$result6)/log(2); + + +push(@scorearray, $resultfinal); + +} + + $coll=$coll + 4; + + } + + @digit=(); +my $tem=0; + + +foreach $scorearray(@scorearray) +{ + + $tem = $tem + $scorearray; + + +} + +@scorearray = (); + + +my $fpercent = $tem; + + +if ($fpercent >= 18) { + + print OUT $consensus, "\t", $entry1, "\t", $count2 + $entry2, "\t", $count2 + $entry2 + 18, "\t", "$fpercent", "\t", "+", "\n"; + + +} + + } + + +close ( OUT ); +close ( IN ); +close ( IN2 );