#!/usr/bin/perl -w
# Calculate frequency distribution of # ratings for each report May 17, 2013
# perl PlRatingFreqDist.txt FileList24.txt PreparedGradient.txt > ReportFreqDist.txt

use strict;
srand(time|$$);

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

my $FileList = $ARGV[0];
my @DataL = ReadFile($FileList);

my $FilePrepared = $ARGV[1];
my @DataP = ReadFile($FilePrepared);

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

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

my $RecNum = 0;
my %VisualA;
my %VisualP;
my %VisualC;
my %EgoA;
my %EgoP;
my %EgoC;
my %RealityA;
my %RealityP;
my %RealityC;
my %OrA;
my %OrP;
my %OrC;

foreach my $Line (@DataO)
{
    unless ($Line =~ /^Drug:/)
    {
         $Line =~ /^Report: (\d+)/;
         $RecNum = $1;
          $VisualA{$RecNum} =  $VisualP{$RecNum} =  $VisualC{$RecNum} = 0;
             $EgoA{$RecNum} =     $EgoP{$RecNum} =     $EgoC{$RecNum} = 0;
         $RealityA{$RecNum} = $RealityP{$RecNum} = $RealityC{$RecNum} = 0;
              $OrA{$RecNum} =      $OrP{$RecNum} =      $OrC{$RecNum} = 0;
    }
}

# Report: 26175
# Discovered repressing masculine side to attract boys. Greater commitment in relationship, clarity on what needs doing. Daughter observed that I looked and felt better.
# A - Creative visuals
# PA - Ego-loss
# P - Loss of contact with reality

my @Records = ();

foreach my $FileName (@DataL)
{
    chomp $FileName;

# print "Filename: $FileName\n";
    
    my @DataI = ReadFile($FileName);
    my @DataO;
    my $LineCum = "";
    my $Report = 0;
    my $Rating;
    my $PresentO = 0;
    my $AbsentO = 0;
    foreach my $Line (@DataI)
    {
        if ($Line =~ /\S/)
        {
            $LineCum = $LineCum . $Line;
        }
        else # here we parse the data
        {
            $PresentO = $AbsentO = 0;
            @Records = split (/\n/, $LineCum);
            foreach my $Record (@Records)
            {
                if ($Record =~ /^Report:/)
                {
                    $Record =~ /^Report: (\d+)/;
                    $RecNum = $1;
#                   print "Record: $RecNum\n";
                }
                if ($Record =~ /^(A|P|PA) - /)
                {
                    $Rating = $1;
#                   print "Rating: $Rating\n";
                    if ($Record =~ /Creative visuals$/)
                    {
                        if ($Rating eq 'A')
                        {
                            $VisualA{$RecNum}++; $VisualC{$RecNum}++;
                            $AbsentO = 1;
                        }
                        if ($Rating eq 'P')
                        {
                            $VisualP{$RecNum}++; $VisualC{$RecNum}++;
                            $PresentO = 1;
                        }    
#                       print "Creative visuals: $Record\n";
                    }
                    if ($Record =~ /Ego-loss$/)
                    {
                        if ($Rating eq 'A')
                        {
                            $EgoA{$RecNum}++; $EgoC{$RecNum}++;
                            $AbsentO = 1;
                        }
                        if ($Rating eq 'P')
                        {
                            $EgoP{$RecNum}++; $EgoC{$RecNum}++;
                            $PresentO = 1;
                        }    
#                       print "Ego-loss: $Record\n";
                    }
                    if ($Record =~ /Loss of contact with reality$/)
                    {
                        if ($Rating eq 'A')
                        {
                            $RealityA{$RecNum}++; $RealityC{$RecNum}++;
                            $AbsentO = 1;
                        }
                        if ($Rating eq 'P')
                        {
                            $RealityP{$RecNum}++; $RealityC{$RecNum}++;
                            $PresentO = 1;
                        }    
#                       print "Loss of contact with reality: $Record\n";
                    }
                }
            }
            if ($PresentO || $AbsentO)
            {
                if ($PresentO)
                {
                    $OrP{$RecNum}++;
                }
                else
                {
                    $OrA{$RecNum}++;
                }
                $OrC{$RecNum}++;
            }
            $PresentO = $AbsentO = 0;
            $LineCum = "";
        }
    }
}

my @Dist;
my $i;
for ($i = 251; $i; $i--)
{
    push (@Dist, 0);
}

foreach my $Line (@DataO)
{
    if ($Line =~ /^Drug:/)
    {
#       print "$Line\n";
    }
    else
    {
        $Line =~ /^Report: (\d+)/;
        $RecNum = $1;
        @Records = split (/\n/, $Line);
        foreach my $Record (@Records)
        {
            unless ($Record =~ /^(A|P|PA) - /)
            {
#               print "$Record\n";
            }
        }
#       printf STDOUT "V: %.4f=%d/%d - Creative visuals\n", $VisualP{$RecNum}/$VisualC{$RecNum}, $VisualP{$RecNum}, $VisualA{$RecNum};
#       printf STDOUT "E: %.4f=%d/%d - Ego-loss\n", $EgoP{$RecNum}/$EgoC{$RecNum}, $EgoP{$RecNum}, $EgoA{$RecNum};
#       printf STDOUT "R: %.4f=%d/%d - Loss of contact with reality\n", $RealityP{$RecNum}/$RealityC{$RecNum}, $RealityP{$RecNum}, $RealityA{$RecNum};
#       printf STDOUT "O: %.4f=%d/%d - Visual, Ego, or Reality\n\n", $OrP{$RecNum}/$OrC{$RecNum}, $OrP{$RecNum}, $OrA{$RecNum};
        $Dist[$OrC{$RecNum}]++;
    }
}
# perl PlCountRatings.txt FileList22.txt PreparedGradient.txt > Sum.txt

    my $Total = 0;
    for ($i = 1; $i < 251; $i++)
    {
        if ($Dist[$i])
        {
            print "$i: $Dist[$i]\n";
            $Total += $Dist[$i];
        }
    }
    print "Total = $Total\n";

exit;
