Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F92998725
bayesResults.pl
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Nov 25, 11:51
Size
3 KB
Mime Type
text/x-perl
Expires
Wed, Nov 27, 11:51 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
22552294
Attached To
R1448 Lenstool-HPC
bayesResults.pl
View Options
#! /usr/bin/perl
# Read the bayes.dat file and print on STDOUT the parameter mean values and
# standard deviation.
#
# Syntax : bayesResults.pl [bayes.dat] [scale=<arcsec_to_kpc>]
#
use Term::ANSIColor;
use IO::Handle;
# The 3 sigma errors corresponds to 3 times the std deviation.
$PI = 3.1415927;
do "$ENV{'LENSTOOL_DIR'}/perl/median.pl";
do "$ENV{'LENSTOOL_DIR'}/perl/histogram.pl";
do "$ENV{'LENSTOOL_DIR'}/perl/rescaleBayes.pl";
$file = "bayes.dat";
$scale = 1;
while( @ARGV > 0 )
{
if( $ARGV[0] =~ /scale=/ )
{
@fld = split /=/,$ARGV[0];
$scale = $fld[1];
}
else
{
$file = $ARGV[0];
}
shift @ARGV;
}
if( $scale != 1. )
{
rescaleBayes($file, $scale);
$file = "bayes_rescaled.dat";
}
open(bayes, $file) || die "ERROR : $file not found.\n";
$nVal=0;
$bestline=0;
$bestchi2=1e100;
$lhood=0; # chi2 mode by default
while($line = <bayes>)
{
$line =~ s/\r$//; # change DOS to UNIX fileformat
chop($line);
if( $line =~ /#/ )
{
push @param, $line;
$lhood=1 if( $line =~ /Lhood/ );
} else
{
@fld = split / /, $line;
# Find the best chi2
$tmp = (($lhood==1)?-1:1)*$fld[1];
if( $bestchi2 > $tmp )
{
$bestchi2 = $tmp;
$bestline = $nVal;
}
for( $i = 0; $i <= $#fld ; $i++ )
{
$$values[$i][$nVal] = $fld[$i];
}
$nVal++;
}
}
close(bayes);
$nParam = $#param + 1;
printf "Read $nParam columns and $nVal lines\n";
printf "Param (nbin): <median> <best> <mode> <gausserr> <asymerr> (68%)\n";
for( $i = 1; $i < $nParam; $i++ )
{
# Set the best value
$best = $$values[$i][$bestline];
# Compute the mean value
$mean = 0;
for( $j = 0 ; $j < $nVal ; $j++ )
{
$mean += $$values[$i][$j];
}
$mean /= $nVal;
# Compute the median value
for( $j = 0 ; $j < $nVal ; $j++ )
{
$list[$j] = $$values[$i][$j];
}
#$median = median($nVal, \@list );
@slist = sort{ $a <=> $b } @list;
$median = $slist[$nVal/2];
# Compute asymmetric error bars
# Compute the Freedman-Diaconis bin size
$binsize = $slist[$nVal*0.75] - $slist[$nVal*0.25];
$binsize *= 2.*$nVal**-0.3333;
$binsize = 1 if( $binsize == 0);
$nbin = ($slist[$#slist]-$slist[0])/$binsize;
$nbin = 1 if( $nbin == 0);
($x, $histo) = histo($nVal, $nbin, \@list);
@shisto = sort{ $a <=> $b } @{$histo}; $hmax = $shisto[$#shisto];
# find the index of the largest bin
$hmaxid = 0;
$hmaxid++ while( $hmax != $histo->[$hmaxid] );
$mode = $x->[$hmaxid];
# find the mode index in <@list>
@slist = sort{ $a <=> $b } @list;
$modeid = 0;
$modeid++ while( $slist[$modeid] < $mode && $modeid < $nVal );
$modeid--;
# find 68% to the left of <modeid>
$eminid = $modeid - $modeid*0.68;
#$eminid-- while( $modeid - $eminid < $nVal*0.68 && $eminid > 0 );
$emin = $mode - $slist[$eminid+1];
# find 68% to the right of <modeid>
$emaxid = $modeid + ($nVal - $modeid)*0.68;
#$emaxid++ while( $emaxid - $modeid < $nVal*0.68 && $emaxid < $nVal );
$emax = $slist[$emaxid-1] - $mode;
# Compute the stddev value (bias corrected variance)
$stddev = 0;
for( $j = 0 ; $j < $nVal; $j++ )
{
$stddev += ($$values[$i][$j] - $mean)*($$values[$i][$j] - $mean);
}
$stddev /= $nVal - 1;
$stddev = sqrt( $stddev );
# Do not print Evidence line
#next if( $param[$i] =~ "Evidence" );
print color 'red' if( $hmaxid==0 || $hmaxid==int($nbin-1) );
if( $median < 1e4 )
{
$line = "%s (%.0f): %.4f %.4f %.4f +-%.4f +%.4f -%.4f (68\%)";
}
else
{
$line = "%s (%.0f): %.4e %.4e %.4e +-%.4e +%.4e -%.4e (68\%)";
}
printf $line, $param[$i], $nbin, $median, $best, $mode, $stddev, $emax, $emin;
print color 'reset';
print "\n";
}
Event Timeline
Log In to Comment