# GMCH.... my @funcs_gmch = ( undef, # first_timestamp \&avg_gmch, \&max_gmch, \&min_gmch, \&first_gmch, \&last_gmch, ) ; sub downsample_gmch { my( $resolution, $data ) = @_; my $first_timestamp = first_timestamp_for_resolution( $resolution, $data->[0][0] ); my @output; push( @output, $first_timestamp ); push( @output, $funcs_gmch[$_]->( $data, $_ ) ) for ( 1..$#funcs_gmch); return( @output ); } sub avg_gmch { my ($rd, $i) = @_ ; my $s = 0 ; $s += $_->[$i] foreach (@$rd) ; return $s / scalar(@$rd) ; } ; sub max_gmch { my ($rd, $i) = @_ ; my $m = $rd->[0]->[$i] ; $m < $_->[$i] and $m = $_->[$i] foreach (@$rd) ; return $m ; } ; sub min_gmch { my ($rd, $i) = @_ ; my $m = $rd->[0]->[$i] ; $m > $_->[$i] and $m = $_->[$i] foreach (@$rd) ; return $m ; } ; sub first_gmch { my ($rd, $i) = @_ ; return $rd->[0]->[$i] ; } ; sub last_gmch { my ($rd, $i) = @_ ; return $rd->[-1]->[$i] ; } ;