Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F93005037
computeRMS.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, 12:54
Size
2 KB
Mime Type
text/x-perl
Expires
Wed, Nov 27, 12:54 (2 d)
Engine
blob
Format
Raw Data
Handle
22549229
Attached To
R1448 Lenstool-HPC
computeRMS.pl
View Options
#!/usr/bin/perl
# Compute the RMS between 2 sets of multiple images
# from 2 files whose names are given in arguments
#
# file1 : list of predicted images with position relative in arcsec
# file2 : observed image with position relative in arcsec
#
# subroutine that converts an X and Y value read from DS9 according to
# a reference declaration
# Input @xc and @yc arrays are modified
sub convertXY
{
my $iref, $ra, $dec, $pixel, $pixelx, $pxc, $pyc;
($pxc, $pyc, $iref, $ra, $dec, $pixel, $pixelx) = @_;
# Convert the coordinates to relative coordinates
# if $iref == 0, nothing has to be done as it stays in WCS
if( $iref == 1 or $iref == 3 )
{
for( $i=0; $i<= $#$pxc; $i++)
{
@$pxc[$i] -= $ra + 360 if( abs(@$pxc[$i] - $ra) > 1 ); #correction if ra=0
@$pxc[$i] = (@$pxc[$i] - $ra)*$pixelx;
@$pyc[$i] = (@$pyc[$i] - $dec)*$pixel;
}
}
elsif( $iref == 2 )
{
for( $i=0; $i<= $#$pxc; $i++)
{
@$pxc[$i] -= $ra;
@$pyc[$i] -= $dec;
}
}
} # end of convertXY subroutine
# Read a list of images from DS9, save them in a file
# and modify the two pointers to the ra dec in relative arcsec arrays
# Return the name of the last image
sub readDS9
{
my $file;
( $file, $pra, $pdec ) = @_;
@ds9=`xpaget ds9 regions selected`;
open( OUT, ">$file");
foreach $line ( @ds9 )
{
if( $line =~ /ellipse\(([\d|\.]+),([\d|\.|\+|\-]+)/ )
{
chop;
@fld = split( '[{|}]',$line);
push @{$pra},$1;
push @{$pdec},$2;
print OUT "$1 $2\n";
}
}
close(OUT);
return $fld[1];
}
# Read a catalog of images and return 2 pointers of ra dec arrays
sub readFile
{
my $file;
($file,$pra,$pdec) = @_;
open(IN,$file);
while(<IN>)
{
chop;
@fld = split, ' ';
push @{$pra}, $fld[0];
push @{$pdec}, $fld[1];
}
close(IN);
}
#----------------------------------------------
# Main program
# ---------------------------------------------
#
# Private declaration to the main prog
my @ra1,@dec1,@ra2,@dec2;
$file1='s1.cat';
$file2='s2.cat';
# Read DS9, save into $file1 and exit
if( ! -e $file1 )
{
print "INFO: Save $file1\n";
readDS9($file1,\@ra1,\@dec1);
exit 0;
}
# Read the second set of images and convert to relative coords
$name=readDS9($file2,\@ra2,\@dec2);
@ref=(3,$ra2[0],$dec2[0],3600,-3600*cos($dec2[0]/180.*3.1415926));
convertXY(\@ra2,\@dec2,@ref);
# Retreive the first set of images and convert it
readFile($file1,\@ra1,\@dec1) || die "ERROR: $file1 not found\n";
convertXY(\@ra1,\@dec1,@ref);
# Compute the RMS
for( $i=0; $i <= $#ra1; $i++ )
{
$dx=$ra1[$i]-$ra2;
$dy=$dec1[$i]-$dec2;
$avg+=sqrt($dx*$dx+$dy*$dy);
$err+=$dx*$dx+$dy*$dy;
}
$avg/=$i;
$var=$err/$i - $avg*$avg;
$rms=sqrt($var);
# Print the distance and error bars
print "$name $avg +-$rms\n";
system("rm $file1 $file2");
Event Timeline
Log In to Comment