rosalind-solutions/perl/IPRB.pl

38 lines
1.0 KiB
Perl
Raw Normal View History

2018-11-03 14:22:22 +00:00
=pod
Solution to IPRB Rosalind problem
Author: Peter Vlasveld
=cut
#!/usr/bin/perl
use strict;
use warnings;
#take in data from file
open(IN, "rosalind_iprb.txt") or die "Couldn't open input file";
my $data = <IN>;
close IN;
#split dataset into array
my @dataset = split / /, $data;
#calculate total probability ratios
my $total = $dataset[0] + $dataset[1] + $dataset[2];
my $initmRatio = $dataset[1]/$total;
my $initnRatio = $dataset[2]/$total;
#calculate values of progeny from probability ratios and population data
my $sameHeteroDom = ($initmRatio * (($dataset[1]-1)/($total-1)))*0.25;
#print $sameHeteroDom, "\n";
my $oneAndOne1 = ($initmRatio * ($dataset[2]/($total-1)))*0.5;
#print $oneAndOne1, "\n";
my $oneAndOne2 = ($initnRatio * ($dataset[1]/($total-1)))*0.5;
#print $oneAndOne2, "\n";
my $sameHeteroRec = $initnRatio * (($dataset[2]-1)/($total-1));
#print $sameHeteroRec, "\n";
#calculate resulting progeny
my $result = 1-($sameHeteroDom + $oneAndOne1 + $oneAndOne2 + $sameHeteroRec);
#output result to console
printf("%.5f\n", $result);