Changeset 8739
- Timestamp:
- Sep 5, 2006, 3:47:38 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/PS-IPP-Config/lib/PS/IPP/Metadata/Stats.pm (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/PS-IPP-Config/lib/PS/IPP/Metadata/Stats.pm
r8698 r8739 1 1 # Copyright (c) 2006 Paul Price, Joshua Hoblitt 2 2 # 3 # $Id: Stats.pm,v 1. 5 2006-08-30 02:19:16jhoblitt Exp $3 # $Id: Stats.pm,v 1.6 2006-09-06 01:47:38 jhoblitt Exp $ 4 4 5 5 package PS::IPP::Metadata::Stats; … … 21 21 22 22 sub new { 23 my $class = shift; # Class name24 my $constants = shift; # Array of values that should be constant through the FPA25 my $variables = shift; # Array of values that may be variable through the FPA23 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 26 26 27 27 my $self = { bg_mean => undef, # Mean of the mean backgrounds 28 bg_stdev => undef, # Standard deviation of the mean backgrounds29 bg_mean_stdev => undef, # Mean of the standard deviation of the backgrounds30 constants => $constants, # Array of values that should be constant through the FPA31 variables => $variables, # Array of values that may be variable through the FPA32 bg_data => [], # Array of background values33 bg_stdev_data => [],# Array of background standard deviations34 data => {}# The data35 };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 }; 36 36 37 37 # Populate object 38 38 foreach my $constant (@$constants) { 39 $self->{data}->{$constant} = { type => 'constant', # Type of value (constant/variable)40 value => undef # The actual variable41 };39 $self->{data}->{$constant} = { type => 'constant', # Type of value (constant/variable) 40 value => undef # The actual variable 41 }; 42 42 } 43 43 foreach my $variable (@$variables) { 44 $self->{data}->{$variable} = { type => 'variable', # Type of value (constant/variable)45 data => [], # Array of data values46 mean => undef, # Mean of data values47 stdev => undef # Standard deviation of data values48 };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 }; 49 49 } 50 50 … … 56 56 # Given a parsed metadata from ppStats, assemble summary statistics 57 57 sub parse { 58 my $self = shift; # Where we'll put the information59 my $md = shift; # Parsed metadata, from PS::IPP::Metadata::Config58 my $self = shift; # Where we'll put the information 59 my $md = shift; # Parsed metadata, from PS::IPP::Metadata::Config 60 60 61 61 # Descend the FPA hierarchy 62 62 foreach my $fpaItem (@$md) { 63 if ($fpaItem->{class} eq "metadata") {64 my $chipName = $fpaItem->{name}; # Name of chip65 my $chipData = $fpaItem->{value}; # Chip-level data66 foreach my $chipItem (@$chipData) {67 if ($chipItem->{class} eq "metadata") {68 my $cellName = $chipItem->{name}; # Name of cell69 my $cellData = $chipItem->{value}; # Cell-level data70 my $bgName; # Name of the value we measured71 my $bgStdevName; # Name of the stdev we measured72 foreach my $cellItem (@$cellData) {73 if ($cellItem->{name} =~ /^(SAMPLE|ROBUST|FITTED|CLIPPED)_/) {74 # It's a statistic of some sort75 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 } 103 103 } 104 104 105 105 # Check that we found everything for the constants 106 my $constants = $self->constants(); # Array of constants106 my $constants = $self->constants(); # Array of constants 107 107 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 } 113 113 } 114 114 115 115 # Get mean, stdev for the variables 116 my $variables = $self->variables(); # Array of variables116 my $variables = $self->variables(); # Array of variables 117 117 if (defined $variables) { 118 foreach my $variable (@$variables) {119 my $info = $self->{data}->{$variable}; # The information about this particular variable120 my $array = $info->{data}; # The array of values collected121 if (scalar @$array == 0) {122 carp "Unable to find any values for ", $variable, "\n";123 next;124 }125 126 # Get statistics on the value127 my $stats = Statistics::Descriptive::Sparse->new(); # Statistics calculator128 $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 } 132 132 } 133 133 134 134 # Get mean, stdev, mean stdev for the background 135 135 if (scalar @{$self->{bg_data}} > 0) { 136 my $meanStats = Statistics::Descriptive::Sparse->new(); # Statistics for mean137 $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()); 140 140 } else { 141 $self->bg_mean(undef);142 $self->bg_stdev(undef);141 $self->bg_mean(undef); 142 $self->bg_stdev(undef); 143 143 } 144 144 if (scalar @{$self->{bg_stdev_data}} > 0) { 145 my $stdevStats = Statistics::Descriptive::Sparse->new(); # Statistics for standard deviation146 $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()); 148 148 } else { 149 $self->bg_mean_stdev(undef);149 $self->bg_mean_stdev(undef); 150 150 } 151 151 … … 157 157 sub _check_values { 158 158 my $self = shift; 159 my $mdItem = shift; # Metadata item to check160 161 my $name = $mdItem->{name}; # Name of the item159 my $mdItem = shift; # Metadata item to check 160 161 my $name = $mdItem->{name}; # Name of the item 162 162 my $value = $mdItem->{value}; # Value of the item 163 163 164 my $data = $self->{data}; # The data164 my $data = $self->{data}; # The data 165 165 return if not defined $data->{$name}; # Not interested 166 166 my $type = $data->{$name}->{type}; # Type of the item: constant or variable 167 167 168 168 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; 176 176 } 177 177 178 178 if ($type eq 'variable') { 179 my $array = $data->{$name}->{data}; # Array containing all the values180 push @$array, $value;181 return;179 my $array = $data->{$name}->{data}; # Array containing all the values 180 push @$array, $value; 181 return; 182 182 } 183 183 … … 189 189 sub data { 190 190 my $self = shift; 191 my $name = shift; # Name of data to return191 my $name = shift; # Name of data to return 192 192 193 193 return $self->{data} if (not defined $name);
Note:
See TracChangeset
for help on using the changeset viewer.
