Index: /trunk/PS-IPP-Config/lib/PS/IPP/Metadata/Stats.pm
===================================================================
--- /trunk/PS-IPP-Config/lib/PS/IPP/Metadata/Stats.pm	(revision 13924)
+++ /trunk/PS-IPP-Config/lib/PS/IPP/Metadata/Stats.pm	(revision 13925)
@@ -1,5 +1,5 @@
 # Copyright (c) 2006  Paul Price, Joshua Hoblitt
 #
-# $Id: Stats.pm,v 1.13 2007-02-09 03:55:22 price Exp $
+# $Id: Stats.pm,v 1.14 2007-06-20 22:43:07 price Exp $
 
 package PS::IPP::Metadata::Stats;
@@ -24,5 +24,6 @@
 
 use base qw( Class::Accessor::Fast );
-__PACKAGE__->mk_accessors( qw( bg_mean bg_stdev bg_mean_stdev constants variables bg_data bg_stdev_data ) );
+__PACKAGE__->mk_accessors( qw( bg_mean bg_stdev bg_mean_stdev fringe fringe_err
+			       constants variables bg_data bg_stdev_data ) );
 
 #$::RD_TRACE = 1;
@@ -38,8 +39,12 @@
                  bg_stdev => undef, # Standard deviation of the mean backgrounds
                  bg_mean_stdev => undef, # Mean of the standard deviation of the backgrounds
+		 fringe => [],	# Fringe amplitudes
+		 fringe_err => [], # Fringe amplitude errors
                  constants => $constants, # Array of values that should be constant through the FPA
                  variables => $variables, # Array of values that may be variable through the FPA
                  bg_data => [], # Array of background values
-                 bg_stdev_data => [],# Array of background standard deviations
+                 bg_stdev_data => [], # Array of background standard deviations
+		 fringe_data => [], # Fringe amplitudes each component
+		 fringe_err_data => [],	# Fringe errors for each component
                  data => {}        # The data
                  };
@@ -128,4 +133,24 @@
     } else {
         $self->bg_stdev(undef);
+    }
+
+    # Get fringe measurements
+    if (scalar @{$self->{fringe_data}} > 0) {
+	foreach my $array (@{$self->{fringe_data}}) {
+	    my $stats = Statistics::Descriptive::Sparse->new(); # Statistics calculator
+	    $stats->add_data(@$array);
+	    push @{$self->{fringe}}, $stats->mean();
+	}
+    }
+    if (scalar @{$self->{fringe_err_data}} > 0) {
+	foreach my $array (@{$self->{fringe_err_data}}) {
+	    my @variances;
+	    foreach my $value (@$array) {
+		push @variances, $value**2;
+	    }
+	    my $stats = Statistics::Descriptive::Sparse->new(); # Statistics calculator
+	    $stats->add_data(@variances);
+	    push @{$self->{fringe_err}}, sqrt($stats->mean());
+	}
     }
 
@@ -207,4 +232,23 @@
                 push @{$self->{bg_data}}, $entry->{value};
             }
+	} elsif ($entry->{name} =~ /^FRINGE/) {
+	    my ($num) = $entry->{name} =~ /_(\d+)$/; # Component number
+	    if ($entry->{name} =~ /_ERR_/) {
+		my $arrayRef = ${$self->{fringe_err_data}}[$num];
+		unless (defined $arrayRef) {
+		    my @array;
+		    $arrayRef = \@array;
+		    ${$self->{fringe_err_data}}[$num] = $arrayRef;
+		}
+		push @$arrayRef, $entry->{value};
+	    } else {
+		my $arrayRef = ${$self->{fringe_data}}[$num];
+		unless (defined $arrayRef) {
+		    my @array;
+		    $arrayRef = \@array;
+		    ${$self->{fringe_data}}[$num] = $arrayRef;
+		}
+		push @$arrayRef, $entry->{value};
+	    }
         } else {
             $self->_check_values($entry);
