IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 13972


Ignore:
Timestamp:
Jun 25, 2007, 2:28:28 PM (19 years ago)
Author:
eugene
Message:

adding fringe residual (in addition to fringe amplitude); correctly calculate fringe mean stdev

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/PS-IPP-Config/lib/PS/IPP/Metadata/Stats.pm

    r13965 r13972  
    11# Copyright (c) 2006  Paul Price, Joshua Hoblitt
    22#
    3 # $Id: Stats.pm,v 1.15 2007-06-25 01:24:20 eugene Exp $
     3# $Id: Stats.pm,v 1.16 2007-06-26 00:28:28 eugene Exp $
    44
    55package PS::IPP::Metadata::Stats;
     
    2424
    2525use base qw( Class::Accessor::Fast );
    26 __PACKAGE__->mk_accessors( qw( bg_mean bg_stdev bg_mean_stdev fringe_mean fringe_mean_stdev fringe_err
     26__PACKAGE__->mk_accessors( qw( bg_mean bg_stdev bg_mean_stdev
     27                               fringe_mean fringe_mean_stdev fringe_err
     28                               dfringe_mean dfringe_mean_stdev dfringe_err
    2729                               constants variables bg_data bg_stdev_data ) );
    2830
     
    4143                 fringe_mean => [],       # Fringe amplitudes
    4244                 fringe_err => [],        # Fringe amplitude errors
    43                  fringe_mean_stdev => [], # Fringe amplitude errors
     45                 fringe_mean_stdev => [], # Fringe amplitude stdev
     46                 dfringe_mean => [],      # Fringe residual amplitudes
     47                 dfringe_err => [],       # Fringe residual amplitude errors
     48                 dfringe_mean_stdev => [], # Fringe residual amplitude stdev
    4449                 constants => $constants, # Array of values that should be constant through the FPA
    4550                 variables => $variables, # Array of values that may be variable through the FPA
     
    4853                 fringe_data => [],       # Fringe amplitudes each component
    4954                 fringe_err_data => [],   # Fringe errors for each component
     55                 dfringe_data => [],      # Fringe residual amplitudes each component
     56                 dfringe_err_data => [],  # Fringe residual errors for each component
    5057                 data => {}               # The data
    5158             };
     
    118125        $self->bg_mean($stats->mean());
    119126        $self->bg_mean_stdev($stats->standard_deviation() || 0);
    120         # the stdev of a set of 1 is the undefined however that
    121         # doesn't do us much good so I'm changing undef to 0
    122     } else {
    123         $self->bg_mean(undef);
    124         $self->bg_mean_stdev(undef);
     127        print STDERR "mean_stdev: " . $self->bg_mean_stdev() . "\n";
     128        # the stdev of a set of 1 is undefined.  that doesn't do
     129        # us much good so I'm changing undef to 0
     130    } else {
     131        # if we have no data to measure the value, return NAN
     132        $self->bg_mean('NAN');
     133        $self->bg_mean_stdev('NAN');
    125134    }
    126135    if (scalar @{$self->{bg_stdev_data}} > 0) {
     
    133142        $self->bg_stdev( sqrt( $stats->mean() ) );
    134143    } else {
    135         $self->bg_stdev(undef);
     144        $self->bg_stdev('NAN');
    136145    }
    137146
     
    143152            push @{$self->{fringe_mean}}, $stats->mean();
    144153            push @{$self->{fringe_mean_stdev}}, ($stats->standard_deviation() || 0);
    145             # the stdev of a set of 1 is the undefined however that
    146             # doesn't do us much good so I'm changing undef to 0
    147         }
     154            # the stdev of a set of 1 is undefined.  that doesn't do
     155            # us much good so I'm changing undef to 0
     156        }
     157    } else {
     158        # create a single NAN entry
     159        push @{$self->{fringe_mean}}, 'NAN';
     160        push @{$self->{fringe_mean_stdev}}, 'NAN';
    148161    }
    149162    if (scalar @{$self->{fringe_err_data}} > 0) {
     
    157170            push @{$self->{fringe_err}}, sqrt($stats->mean());
    158171        }
     172    } else {
     173        push @{$self->{fringe_err}}, 'NAN';
     174    }
     175
     176    # Get fringe residual measurements
     177    if (scalar @{$self->{dfringe_data}} > 0) {
     178        foreach my $array (@{$self->{dfringe_data}}) {
     179            my $stats = Statistics::Descriptive::Sparse->new(); # Statistics calculator
     180            $stats->add_data(@$array);
     181            push @{$self->{dfringe_mean}}, $stats->mean();
     182            push @{$self->{dfringe_mean_stdev}}, ($stats->standard_deviation() || 0);
     183            # the stdev of a set of 1 is undefined.  that doesn't do
     184            # us much good so I'm changing undef to 0
     185        }
     186    } else {
     187        # create a single NAN entry
     188        push @{$self->{dfringe_mean}}, 'NAN';
     189        push @{$self->{dfringe_mean_stdev}}, 'NAN';
     190    }
     191    if (scalar @{$self->{dfringe_err_data}} > 0) {
     192        foreach my $array (@{$self->{dfringe_err_data}}) {
     193            my @variances;
     194            foreach my $value (@$array) {
     195                push @variances, $value**2;
     196            }
     197            my $stats = Statistics::Descriptive::Sparse->new(); # Statistics calculator
     198            $stats->add_data(@variances);
     199            push @{$self->{dfringe_err}}, sqrt($stats->mean());
     200        }
     201    } else {
     202        push @{$self->{dfringe_err}}, 'NAN';
    159203    }
    160204
     
    236280                push @{$self->{bg_data}}, $entry->{value};
    237281            }
    238         } elsif ($entry->{name} =~ /^FRINGE/) {
     282            next;
     283        }
     284        if ($entry->{name} =~ /^FRINGE_RESID/) {
     285            my ($num) = $entry->{name} =~ /_(\d+)$/; # Component number
     286            if ($entry->{name} =~ /_ERR_/) {
     287                my $arrayRef = ${$self->{dfringe_err_data}}[$num];
     288                unless (defined $arrayRef) {
     289                    my @array;
     290                    $arrayRef = \@array;
     291                    ${$self->{dfringe_err_data}}[$num] = $arrayRef;
     292                }
     293                push @$arrayRef, $entry->{value};
     294            } else {
     295                my $arrayRef = ${$self->{dfringe_data}}[$num];
     296                unless (defined $arrayRef) {
     297                    my @array;
     298                    $arrayRef = \@array;
     299                    ${$self->{dfringe_data}}[$num] = $arrayRef;
     300                }
     301                push @$arrayRef, $entry->{value};
     302            }
     303            next;
     304        }
     305        if ($entry->{name} =~ /^FRINGE/) {
    239306            my ($num) = $entry->{name} =~ /_(\d+)$/; # Component number
    240307            if ($entry->{name} =~ /_ERR_/) {
     
    255322                push @$arrayRef, $entry->{value};
    256323            }
    257         } else {
    258             $self->_check_values($entry);
    259         }
     324            next;
     325        }
     326        $self->_check_values($entry);
    260327    }
    261328
Note: See TracChangeset for help on using the changeset viewer.