#!/usr/bin/perl
#
# Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
# Creation Date: Thu Dec 14 01:36:38 PST 2006
# Last Modified: Thu Dec 14 01:36:38 PST 2006
# Filename:      /project/mazurka/website/info/revcond/pid9058b-19/test/aligntoscore
# Syntax:        perl 5
#
# Description:
#

use strict;


my $absbeatfile = $ARGV[0];
my $linkfile    = $ARGV[1];


my @absbeats = readAbsBeats($absbeatfile);
my @filedata;
my @referencedata;
my $line;
my $i;


open (LFILE, "$linkfile") or die "Cannot open $linkfile for reading";

while ($line = <LFILE>) {
   chomp $line;
   if ($line =~ /([\+\-\d\.]+)\s+([\+\-\d\.]+)\s+([\+\-\d\.]+)\s+([\+\-\d\.]+)/) {
      $filedata[@filedata] = $3;
      $referencedata[@referencedata] = $4;
   }

}



my $lasti = -1;
my $match;
for ($i=0; $i<@absbeats; $i++) {
   next if $absbeats[$i] =~ /\./;   # only search for beats not offbeats
   $match = findmatch($absbeats[$i], $lasti);
   $lasti = $match;
   print "$filedata[$match]\t$absbeats[$i] ($referencedata[$match])\n";
}


#######################################################################



##############################
##
## findmatch --
##

sub findmatch {
   my ($absbeat, my $start) = @_;

   $start = $start + 1;
   my $i;
   my $minindex = $start;
   my $minval   = abs($absbeat - $referencedata[$start]);
   my $val;

   for ($i=$start; $i<@referencedata; $i++) {
      $val = abs($absbeat - $referencedata[$i]);
      # print "\t$val = $absbeat - $referencedata[$i]\n";
      if ($val <= $minval) {
         $minval = $val;
         $minindex = $i;
      } else {
         # print "\tVALUE: $val \tMINVALUE: $minval \n";
         last;
      }
   }

   return $minindex;
}



##############################
##
## readAbsBeats --
##

sub readAbsBeats {
   my ($file) = @_;

   my @output;

   open (AFILE, $file) or die "Cannot open $file for reading";

   my $line;
   while ($line = <AFILE>) {
      chop $line;
      $output[@output] = $line;
   }

   close AFILE;
   return @output;
}








