IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 5, 2006, 3:47:38 PM (20 years ago)
Author:
jhoblitt
Message:

expand tabs

File:
1 edited

Legend:

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

    r8698 r8739  
    11# Copyright (c) 2006  Paul Price, Joshua Hoblitt
    22#
    3 # $Id: Stats.pm,v 1.5 2006-08-30 02:19:16 jhoblitt Exp $
     3# $Id: Stats.pm,v 1.6 2006-09-06 01:47:38 jhoblitt Exp $
    44
    55package PS::IPP::Metadata::Stats;
     
    2121
    2222sub new {
    23     my $class = shift;          # Class name
    24     my $constants = shift;      # Array of values that should be constant through the FPA
    25     my $variables = shift;      # Array of values that may be variable through the FPA
     23    my $class = shift;                # Class name
     24    my $constants = shift;        # Array of values that should be constant through the FPA
     25    my $variables = shift;        # Array of values that may be variable through the FPA
    2626
    2727    my $self = { bg_mean => undef, # Mean of the mean backgrounds
    28                 bg_stdev => undef, # Standard deviation of the mean backgrounds
    29                 bg_mean_stdev => undef, # Mean of the standard deviation of the backgrounds
    30                 constants => $constants, # Array of values that should be constant through the FPA
    31                 variables => $variables, # Array of values that may be variable through the FPA
    32                 bg_data => [], # Array of background values
    33                 bg_stdev_data => [],# Array of background standard deviations
    34                  data => {}     # The data
    35                 };
     28                bg_stdev => undef, # Standard deviation of the mean backgrounds
     29                bg_mean_stdev => undef, # Mean of the standard deviation of the backgrounds
     30                constants => $constants, # Array of values that should be constant through the FPA
     31                variables => $variables, # Array of values that may be variable through the FPA
     32                bg_data => [], # Array of background values
     33                bg_stdev_data => [],# Array of background standard deviations
     34                 data => {}        # The data
     35                };
    3636   
    3737    # Populate object
    3838    foreach my $constant (@$constants) {
    39         $self->{data}->{$constant} = { type => 'constant', # Type of value (constant/variable)
    40                                        value => undef # The actual variable
    41                                        };
     39        $self->{data}->{$constant} = { type => 'constant', # Type of value (constant/variable)
     40                                       value => undef # The actual variable
     41                                       };
    4242    }
    4343    foreach my $variable (@$variables) {
    44         $self->{data}->{$variable} = { type => 'variable', # Type of value (constant/variable)
    45                                        data => [], # Array of data values
    46                                        mean => undef, # Mean of data values
    47                                        stdev => undef # Standard deviation of data values
    48                                        };
     44        $self->{data}->{$variable} = { type => 'variable', # Type of value (constant/variable)
     45                                       data => [], # Array of data values
     46                                       mean => undef, # Mean of data values
     47                                       stdev => undef # Standard deviation of data values
     48                                       };
    4949    }
    5050
     
    5656# Given a parsed metadata from ppStats, assemble summary statistics
    5757sub parse {
    58     my $self = shift;           # Where we'll put the information
    59     my $md = shift;             # Parsed metadata, from PS::IPP::Metadata::Config
     58    my $self = shift;                # Where we'll put the information
     59    my $md = shift;                # Parsed metadata, from PS::IPP::Metadata::Config
    6060
    6161    # Descend the FPA hierarchy
    6262    foreach my $fpaItem (@$md) {
    63         if ($fpaItem->{class} eq "metadata") {
    64             my $chipName = $fpaItem->{name}; # Name of chip
    65             my $chipData = $fpaItem->{value}; # Chip-level data
    66             foreach my $chipItem (@$chipData) {
    67                 if ($chipItem->{class} eq "metadata") {
    68                     my $cellName = $chipItem->{name}; # Name of cell
    69                     my $cellData = $chipItem->{value}; # Cell-level data
    70                     my $bgName; # Name of the value we measured
    71                     my $bgStdevName; # Name of the stdev we measured
    72                     foreach my $cellItem (@$cellData) {
    73                         if ($cellItem->{name} =~ /^(SAMPLE|ROBUST|FITTED|CLIPPED)_/) {
    74                             # It's a statistic of some sort
    75                             if ($cellItem->{name} =~ /_STDEV$/) {
    76                                 if (defined $bgStdevName) {
    77                                     carp "Ignoring duplicate background stdev (", $cellItem->{name}, "). ",
    78                                     "Original is ", $bgStdevName, "\n";
    79                                     next;
    80                                 }
    81                                 $bgStdevName = $cellItem->{name};
    82                                 push @{$self->{bg_stdev_data}}, $cellItem->{value};
    83                             } else {
    84                                 if (defined $bgName) {
    85                                     carp "Ignoring duplicate background value (", $cellItem->{name}, "). ",
    86                                     "Original is ", $bgName, "\n";
    87                                     next;
    88                                 }
    89                                 $bgName = $cellItem->{name};
    90                                 push @{$self->{bg_data}}, $cellItem->{value};
    91                             }
    92                         } else {
    93                             $self->_check_values($cellItem);
    94                         }
    95                     }
    96                 } else {
    97                     $self->_check_values($chipItem);
    98                 }
    99             }
    100         } else {
    101             $self->_check_values($fpaItem);
    102         }
     63        if ($fpaItem->{class} eq "metadata") {
     64            my $chipName = $fpaItem->{name}; # Name of chip
     65            my $chipData = $fpaItem->{value}; # Chip-level data
     66            foreach my $chipItem (@$chipData) {
     67                if ($chipItem->{class} eq "metadata") {
     68                    my $cellName = $chipItem->{name}; # Name of cell
     69                    my $cellData = $chipItem->{value}; # Cell-level data
     70                    my $bgName; # Name of the value we measured
     71                    my $bgStdevName; # Name of the stdev we measured
     72                    foreach my $cellItem (@$cellData) {
     73                        if ($cellItem->{name} =~ /^(SAMPLE|ROBUST|FITTED|CLIPPED)_/) {
     74                            # It's a statistic of some sort
     75                            if ($cellItem->{name} =~ /_STDEV$/) {
     76                                if (defined $bgStdevName) {
     77                                    carp "Ignoring duplicate background stdev (", $cellItem->{name}, "). ",
     78                                    "Original is ", $bgStdevName, "\n";
     79                                    next;
     80                                }
     81                                $bgStdevName = $cellItem->{name};
     82                                push @{$self->{bg_stdev_data}}, $cellItem->{value};
     83                            } else {
     84                                if (defined $bgName) {
     85                                    carp "Ignoring duplicate background value (", $cellItem->{name}, "). ",
     86                                    "Original is ", $bgName, "\n";
     87                                    next;
     88                                }
     89                                $bgName = $cellItem->{name};
     90                                push @{$self->{bg_data}}, $cellItem->{value};
     91                            }
     92                        } else {
     93                            $self->_check_values($cellItem);
     94                        }
     95                    }
     96                } else {
     97                    $self->_check_values($chipItem);
     98                }
     99            }
     100        } else {
     101            $self->_check_values($fpaItem);
     102        }
    103103    }
    104104
    105105    # Check that we found everything for the constants
    106     my $constants = $self->constants(); # Array of constants
     106    my $constants = $self->constants();        # Array of constants
    107107    if (defined $constants) {
    108         foreach my $constant (@$constants) {
    109             if (not defined $self->{data}->{$constant}->{value}) {
    110                 carp "Unable to find value for ", $constant, "\n";
    111             }
    112         }
     108        foreach my $constant (@$constants) {
     109            if (not defined $self->{data}->{$constant}->{value}) {
     110                carp "Unable to find value for ", $constant, "\n";
     111            }
     112        }
    113113    }
    114114
    115115    # Get mean, stdev for the variables
    116     my $variables = $self->variables(); # Array of variables
     116    my $variables = $self->variables();        # Array of variables
    117117    if (defined $variables) {
    118         foreach my $variable (@$variables) {
    119             my $info = $self->{data}->{$variable}; # The information about this particular variable
    120             my $array = $info->{data}; # The array of values collected
    121             if (scalar @$array == 0) {
    122                 carp "Unable to find any values for ", $variable, "\n";
    123                 next;
    124             }
    125 
    126             # Get statistics on the value
    127             my $stats = Statistics::Descriptive::Sparse->new(); # Statistics calculator
    128             $stats->add_data(@$array);
    129             $info->{mean} = $stats->mean();
    130             $info->{stdev} = $stats->standard_deviation();
    131         }
     118        foreach my $variable (@$variables) {
     119            my $info = $self->{data}->{$variable}; # The information about this particular variable
     120            my $array = $info->{data}; # The array of values collected
     121            if (scalar @$array == 0) {
     122                carp "Unable to find any values for ", $variable, "\n";
     123                next;
     124            }
     125
     126            # Get statistics on the value
     127            my $stats = Statistics::Descriptive::Sparse->new(); # Statistics calculator
     128            $stats->add_data(@$array);
     129            $info->{mean} = $stats->mean();
     130            $info->{stdev} = $stats->standard_deviation();
     131        }
    132132    }
    133133   
    134134    # Get mean, stdev, mean stdev for the background
    135135    if (scalar @{$self->{bg_data}} > 0) {
    136         my $meanStats = Statistics::Descriptive::Sparse->new(); # Statistics for mean
    137         $meanStats->add_data(@{$self->{bg_data}});
    138         $self->bg_mean($meanStats->mean());
    139         $self->bg_stdev($meanStats->standard_deviation());
     136        my $meanStats = Statistics::Descriptive::Sparse->new(); # Statistics for mean
     137        $meanStats->add_data(@{$self->{bg_data}});
     138        $self->bg_mean($meanStats->mean());
     139        $self->bg_stdev($meanStats->standard_deviation());
    140140    } else {
    141         $self->bg_mean(undef);
    142         $self->bg_stdev(undef);
     141        $self->bg_mean(undef);
     142        $self->bg_stdev(undef);
    143143    }
    144144    if (scalar @{$self->{bg_stdev_data}} > 0) {
    145         my $stdevStats = Statistics::Descriptive::Sparse->new(); # Statistics for standard deviation
    146         $stdevStats->add_data(@{$self->{bg_stdev_data}});
    147         $self->bg_mean_stdev($stdevStats->mean());
     145        my $stdevStats = Statistics::Descriptive::Sparse->new(); # Statistics for standard deviation
     146        $stdevStats->add_data(@{$self->{bg_stdev_data}});
     147        $self->bg_mean_stdev($stdevStats->mean());
    148148    } else {
    149         $self->bg_mean_stdev(undef);
     149        $self->bg_mean_stdev(undef);
    150150    }
    151151
     
    157157sub _check_values {
    158158    my $self = shift;
    159     my $mdItem = shift;         # Metadata item to check
    160 
    161     my $name = $mdItem->{name}; # Name of the item
     159    my $mdItem = shift;                # Metadata item to check
     160
     161    my $name = $mdItem->{name};        # Name of the item
    162162    my $value = $mdItem->{value}; # Value of the item
    163163
    164     my $data = $self->{data};   # The data
     164    my $data = $self->{data};        # The data
    165165    return if not defined $data->{$name}; # Not interested
    166166    my $type = $data->{$name}->{type}; # Type of the item: constant or variable
    167167
    168168    if ($type eq 'constant') {
    169         if (defined $data->{$name}->{value} && ($data->{$name}->{value} ne $value)) {
    170             carp "Warning: different value for ", $name, " found: ", $data->{$name}->{value}, " (old) vs ",
    171             $value, " (new).  Ignoring new value.\n";
    172             return;
    173         }
    174         $data->{$name}->{value} = $value;
    175         return;
     169        if (defined $data->{$name}->{value} && ($data->{$name}->{value} ne $value)) {
     170            carp "Warning: different value for ", $name, " found: ", $data->{$name}->{value}, " (old) vs ",
     171            $value, " (new).  Ignoring new value.\n";
     172            return;
     173        }
     174        $data->{$name}->{value} = $value;
     175        return;
    176176    }
    177177
    178178    if ($type eq 'variable') {
    179         my $array = $data->{$name}->{data}; # Array containing all the values
    180         push @$array, $value;
    181         return;
     179        my $array = $data->{$name}->{data}; # Array containing all the values
     180        push @$array, $value;
     181        return;
    182182    }
    183183
     
    189189sub data {
    190190    my $self = shift;
    191     my $name = shift;           # Name of data to return
     191    my $name = shift;                # Name of data to return
    192192
    193193    return $self->{data} if (not defined $name);
Note: See TracChangeset for help on using the changeset viewer.