#!/usr/bin/perl -w
# Read output of PlCountRatings.txt and sum data for each drug March 20, 2013
# perl PlSumDrugsCol.txt Sum24.txt > SumDrugsCol22.txt

use strict;
srand(time|$$);

sub ReadFile
{
    my ($FileName) = @_;
    unless(open(MYFILE, $FileName))
    {
        print "Cannot open file $FileName\n";
        exit;
    }
    my @Data = <MYFILE>;
    close MYFILE;
    return @Data;
}

my $FileName = $ARGV[0];
my @DataI = ReadFile($FileName);

my @DataO;
my $LineCum = "";
foreach my $Line (@DataI)
{
    if ($Line =~ /\S/)
    {
        $LineCum = $LineCum . $Line;
    }
    else
    {
        push(@DataO, $LineCum);
        $LineCum = "";
    }
}

until ($DataO[0] =~ /\S/)
{
    shift @DataO;
}

my $Finish = 0;
my $First = 1;
my $VisualP = 0;
my $VisualA = 0;
my $EgoP = 0;
my $EgoA = 0;
my $RealityP = 0;
my $RealityA = 0;
my $OrP = 0;
my $OrA = 0;
my @Records = ();
my $Effect;
my $ThisP;
my $ThisA;
my $Drug;
my $PropV; # proportion visual
my $PropE; # proportion ego-loss
my $PropR; # proportion loss of contact with reality
my $PropM; # maximum of PropV, PropE, and PropR
my $PropO; # proportion that is visual or ego-loss or loss of contact with reality

printf STDOUT "Drug\t";
printf STDOUT "Visual\t";
printf STDOUT "Ego\t";
printf STDOUT "Reality\t";
printf STDOUT "VER\t";
printf STDOUT "Max\n";

foreach my $Line (@DataO)
{
    if ($Line =~ /^Drug:/)
    {
        if ($Finish)
        {
            $PropV = $VisualP/($VisualP + $VisualA);
            $PropE = $EgoP/($EgoP + $EgoA);
            $PropR = $RealityP/($RealityP + $RealityA);
            $PropO = $OrP/($OrP + $OrA);
            $PropM = $PropV;
            if ($PropE > $PropM)
            {
                $PropM = $PropE;
            }
            if ($PropR > $PropM)
            {
                $PropM = $PropR;
            }
            printf STDOUT "%.4f\t", $VisualP/($VisualP + $VisualA);
            printf STDOUT "%.4f\t", $EgoP/($EgoP + $EgoA);
            printf STDOUT "%.4f\t", $RealityP/($RealityP + $RealityA);
            printf STDOUT "%.4f\t", $OrP/($OrP + $OrA);
            printf STDOUT "%.4f\n", $PropM;
            $VisualP = $VisualA = $EgoP = $EgoA = $RealityP = $RealityA = $OrP = $OrA = 0;
        }
        $Line =~ /^Drug: (.*)$/;
        $Drug = $1;
        print "$Drug\t";
        $Finish = 1;
    }
    else
    {
        @Records = split (/\n/, $Line);
        foreach my $Record (@Records)
        {
            if ($Record =~ /^(V|E|R|O): \d/)
            {
                $Effect = $1;
                $Record =~ /^.*=(\d+)\/(\d+)/;
                $ThisP = $1; $ThisA = $2;
#               print "$Record\n";
#               print "    ThisP=$ThisP, ThisA=$ThisA\n";
                if ($Effect eq 'V')
                {
                    $VisualP += $ThisP; $VisualA += $ThisA;
                }
                if ($Effect eq 'E')
                {
                    $EgoP += $ThisP; $EgoA += $ThisA;
                }
                if ($Effect eq 'R')
                {
                    $RealityP += $ThisP; $RealityA += $ThisA;
                }
                if ($Effect eq 'O')
                {
                    $OrP += $ThisP; $OrA += $ThisA;
                }
            }
        }
    }
}
$PropV = $VisualP/($VisualP + $VisualA);
$PropE = $EgoP/($EgoP + $EgoA);
$PropR = $RealityP/($RealityP + $RealityA);
$PropO = $OrP/($OrP + $OrA);
$PropM = $PropV;
if ($PropE > $PropM)
{
    $PropM = $PropE;
}
if ($PropR > $PropM)
{
    $PropM = $PropR;
}
printf STDOUT "%.4f\t", $VisualP/($VisualP + $VisualA);
printf STDOUT "%.4f\t", $EgoP/($EgoP + $EgoA);
printf STDOUT "%.4f\t", $RealityP/($RealityP + $RealityA);
printf STDOUT "%.4f\t", $OrP/($OrP + $OrA);
printf STDOUT "%.4f\n", $PropM;

exit;