#For use as a test class only
class CurrentVector
  
  def doit
    lines = Array.new
    
    File.open("Acm20070102.log").each{ |line|
      vals = line.split(",")
      lines.push(vals[6] + "," + vals[7])
    } 
    
    @current_array_length = 60
    
    @eastings = Array.new
    @eastings_sum = 0
    @northings = Array.new
    @northings_sum = 0
    
    counter = 0
    lines.each{ |line|
      self.newVal(line)
      counter += 1
      #if(counter % 10 == 0)
        puts "average heading = " + self.getAverageHead().to_s
        puts "average magnitude = " + self.getAverageMag().to_s
      #end
    }
  end
  
  def newVal(val)
    vals = val.split(",")
    puts "heading = " + getHeading(vals[1].to_f, vals[0].to_f).to_s
    puts "magnitude = " + magnitude_of_current(vals[1].to_f, vals[0].to_f).to_s

    if(@northings.length > @current_array_length)
      @northings_sum -= @northings.pop
      @eastings_sum -= @eastings.pop
    end
    @northings.unshift vals[0].to_f
    @eastings.unshift vals[1].to_f
    @northings_sum += vals[0].to_f
    @eastings_sum += vals[1].to_f
  end
  
  def getAverageMag
    avg_northing = @northings_sum / @northings.length
    avg_easting = @eastings_sum / @eastings.length
    return magnitude_of_current(avg_easting, avg_northing)
  end
  
  def getAverageHead
    avg_northing = @northings_sum / @northings.length
    avg_easting = @eastings_sum / @eastings.length
    return getHeading(avg_easting, avg_northing)
  end

  def magnitude_of_current(easting, northing)
    return  Math.sqrt((northing * northing) + (easting * easting))
  end

  def getHeading(easting, northing)
    val = Math.atan2(easting, northing) * 180.0 / Math::PI
    val+= 360 if val < 0
    return val  
  end
  
end

CurrentVector.new().doit()
