| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Astro::Correlate::Method::RITMatch; |
|
2
|
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
=head1 NAME |
|
4
|
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
Astro::Correlate::Method::RITMatch - Correlation using RIT Match. |
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
( $corrcat1, $corrcat2 ) = Astro::Correlate::Match::RITMatch->correlate( catalog1 => $cat1, catalog2 => $cat2 ); |
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
This class implements catalogue cross-correlation using the RIT Match |
|
14
|
|
|
|
|
|
|
application. |
|
15
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
=cut |
|
17
|
|
|
|
|
|
|
|
|
18
|
1
|
|
|
1
|
|
1799
|
use 5.006; |
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
49
|
|
|
19
|
1
|
|
|
1
|
|
6
|
use strict; |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
37
|
|
|
20
|
1
|
|
|
1
|
|
4
|
use warnings; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
42
|
|
|
21
|
1
|
|
|
1
|
|
5
|
use warnings::register; |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
131
|
|
|
22
|
|
|
|
|
|
|
|
|
23
|
1
|
|
|
1
|
|
6
|
use Carp; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
250
|
|
|
24
|
1
|
|
|
1
|
|
6
|
use File::Temp qw/ tempfile /; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
52
|
|
|
25
|
1
|
|
|
1
|
|
992
|
use File::SearchPath qw/ searchpath /; |
|
|
1
|
|
|
|
|
1775
|
|
|
|
1
|
|
|
|
|
71
|
|
|
26
|
1
|
|
|
1
|
|
1279
|
use Storable qw/ dclone /; |
|
|
1
|
|
|
|
|
4490
|
|
|
|
1
|
|
|
|
|
1798
|
|
|
27
|
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
our $VERSION = '0.02'; |
|
29
|
|
|
|
|
|
|
our $DEBUG = 0; |
|
30
|
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
=head1 METHODS |
|
32
|
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
=head2 General Methods |
|
34
|
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
=over 4 |
|
36
|
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
=item B |
|
38
|
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
Cross-correlates two catalogues. |
|
40
|
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
( $corrcat1, $corrcat2 ) = Astro::Correlate::Method::RITMatch->correlate( catalog1 => $cat1, |
|
42
|
|
|
|
|
|
|
catalog2 => $cat2 ); |
|
43
|
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
This method takes two mandatory arguments, both C objects. |
|
45
|
|
|
|
|
|
|
It returns two C objects containing C |
|
46
|
|
|
|
|
|
|
objects that matched spatially between the two input catalogues. The |
|
47
|
|
|
|
|
|
|
first returned catalogue contains matched objects from the first input |
|
48
|
|
|
|
|
|
|
catalogue, and ditto for the second. The C objects |
|
49
|
|
|
|
|
|
|
in the returned catalogues are not in the original order, nor do they have |
|
50
|
|
|
|
|
|
|
the same IDs as in the input catalogues. A matched object has the same ID |
|
51
|
|
|
|
|
|
|
in the two returned catalogues, allowing for further comparisons between |
|
52
|
|
|
|
|
|
|
matched objects. |
|
53
|
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
This method takes the following optional named arguments: |
|
55
|
|
|
|
|
|
|
|
|
56
|
|
|
|
|
|
|
=item cat1magtype - The magnitude type to use for the first supplied |
|
57
|
|
|
|
|
|
|
catalogue. If not defined, will default to 'mag'. This is used for |
|
58
|
|
|
|
|
|
|
Astro::Catalog::Item objects that have fluxes that are not standard |
|
59
|
|
|
|
|
|
|
magnitudes (for example, one might set this to 'mag_iso' for |
|
60
|
|
|
|
|
|
|
magnitudes that come from the MAG_ISO column of a SExtractor |
|
61
|
|
|
|
|
|
|
catalogue). |
|
62
|
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
=item cat2magtype - As for cat1magtype, but for the second supplied |
|
64
|
|
|
|
|
|
|
catalogue. |
|
65
|
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
=item keeptemps - If this argument is set to true (1), then this |
|
67
|
|
|
|
|
|
|
method will keep temporary files used in processing. Defaults to |
|
68
|
|
|
|
|
|
|
false. |
|
69
|
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
=item messages - no effect. |
|
71
|
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
=item temp - Set the directory to hold temporary files. If not set, |
|
73
|
|
|
|
|
|
|
then a new temporary directory will be created using File::Temp. |
|
74
|
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
=item timeout - Set the time in seconds to wait for the CCDPACK |
|
76
|
|
|
|
|
|
|
monolith to time out. Defaults to 60 seconds. |
|
77
|
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
=item verbose - If this argument is set to true (1), then this method will |
|
79
|
|
|
|
|
|
|
print progress statements. Defaults to false. |
|
80
|
|
|
|
|
|
|
|
|
81
|
|
|
|
|
|
|
This method usees the RIT Match application. In order for this method |
|
82
|
|
|
|
|
|
|
to work it must be able to find the match binary. It looks in the |
|
83
|
|
|
|
|
|
|
directory pointed to by the MATCH_DIR environment variable, and if |
|
84
|
|
|
|
|
|
|
that fails, looks through your $PATH. If it cannot be found, this |
|
85
|
|
|
|
|
|
|
method will croak. |
|
86
|
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
=cut |
|
88
|
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
sub correlate { |
|
90
|
0
|
|
|
0
|
1
|
|
my $class = shift; |
|
91
|
|
|
|
|
|
|
|
|
92
|
|
|
|
|
|
|
# Grab the arguments, and make sure they're defined and are |
|
93
|
|
|
|
|
|
|
# Astro::Catalog objects (the catalogues, at least). |
|
94
|
0
|
|
|
|
|
|
my %args = @_; |
|
95
|
0
|
|
|
|
|
|
my $cat1 = dclone( $args{'catalog1'} ); |
|
96
|
0
|
|
|
|
|
|
my $cat2 = dclone( $args{'catalog2'} ); |
|
97
|
|
|
|
|
|
|
|
|
98
|
0
|
0
|
0
|
|
|
|
if( ! defined( $cat1 ) || |
|
99
|
|
|
|
|
|
|
! UNIVERSAL::isa( $cat1, "Astro::Catalog" ) ) { |
|
100
|
0
|
|
|
|
|
|
croak "catalog1 parameter to Astro::Correlate::Method::RITMatch->correlate " |
|
101
|
|
|
|
|
|
|
. "method must be defined and must be an Astro::Catalog object" |
|
102
|
|
|
|
|
|
|
; |
|
103
|
|
|
|
|
|
|
} |
|
104
|
0
|
0
|
0
|
|
|
|
if( ! defined( $cat2 ) || |
|
105
|
|
|
|
|
|
|
! UNIVERSAL::isa( $cat2, "Astro::Catalog" ) ) { |
|
106
|
0
|
|
|
|
|
|
croak "catalog2 parameter to Astro::Correlate::Method::RITMatch->correlate " |
|
107
|
|
|
|
|
|
|
. "method must be defined and must be an Astro::Catalog object" |
|
108
|
|
|
|
|
|
|
; |
|
109
|
|
|
|
|
|
|
} |
|
110
|
|
|
|
|
|
|
|
|
111
|
|
|
|
|
|
|
# Retrieve the scaling factor. |
|
112
|
0
|
|
|
|
|
|
my $scale = _determine_scaling_factor( $cat1, $cat2 ); |
|
113
|
|
|
|
|
|
|
|
|
114
|
0
|
0
|
|
|
|
|
my $keeptemps = defined( $args{'keeptemps'} ) ? $args{'keeptemps'} : 0; |
|
115
|
0
|
|
|
|
|
|
my $temp; |
|
116
|
0
|
0
|
0
|
|
|
|
if( exists( $args{'temp'} ) && defined( $args{'temp'} ) ) { |
|
117
|
0
|
|
|
|
|
|
$temp = $args{'temp'}; |
|
118
|
|
|
|
|
|
|
} else { |
|
119
|
0
|
|
|
|
|
|
$temp = tempdir ( UNLINK => ! $keeptemps ); |
|
120
|
|
|
|
|
|
|
} |
|
121
|
0
|
0
|
|
|
|
|
my $verbose = defined( $args{'verbose'} ) ? $args{'verbose'} : 0; |
|
122
|
0
|
0
|
|
|
|
|
my $cat1magtype = defined( $args{'cat1magtype'} ) ? $args{'cat1magtype'} : 'mag'; |
|
123
|
0
|
0
|
|
|
|
|
my $cat2magtype = defined( $args{'cat2magtype'} ) ? $args{'cat2magtype'} : 'mag'; |
|
124
|
|
|
|
|
|
|
|
|
125
|
|
|
|
|
|
|
# Try to find the match binary in the directory pointed to by the |
|
126
|
|
|
|
|
|
|
# MATCH_DIR environment variable. If that doesn't work, check the |
|
127
|
|
|
|
|
|
|
# user's $PATH. If that doesn't work, croak. |
|
128
|
0
|
|
|
|
|
|
my $match_bin; |
|
129
|
0
|
0
|
0
|
|
|
|
if( defined( $ENV{'MATCH_DIR'} ) && |
|
|
|
|
0
|
|
|
|
|
|
130
|
|
|
|
|
|
|
-d $ENV{'MATCH_DIR'} && |
|
131
|
|
|
|
|
|
|
-e File::Spec->catfile( $ENV{'MATCH_DIR'}, "match" ) ) { |
|
132
|
0
|
|
|
|
|
|
$match_bin = File::Spec->catfile( $ENV{'MATCH_DIR'}, "match" ); |
|
133
|
|
|
|
|
|
|
} else { |
|
134
|
0
|
|
|
|
|
|
$match_bin = searchpath( "match" ); |
|
135
|
0
|
0
|
|
|
|
|
if( ! defined( $match_bin ) ) { |
|
136
|
0
|
|
|
|
|
|
croak "Could not find match binary. Ensure MATCH_DIR environment variable is set"; |
|
137
|
|
|
|
|
|
|
} |
|
138
|
|
|
|
|
|
|
} |
|
139
|
|
|
|
|
|
|
|
|
140
|
0
|
0
|
|
|
|
|
print "match binary is in $match_bin\n" if $DEBUG; |
|
141
|
|
|
|
|
|
|
|
|
142
|
|
|
|
|
|
|
# Get two temporary filenames for catalog files. |
|
143
|
0
|
|
|
|
|
|
( undef, my $catfile1 ) = tempfile( DIR => $temp ); |
|
144
|
0
|
|
|
|
|
|
( undef, my $catfile2 ) = tempfile( DIR => $temp ); |
|
145
|
|
|
|
|
|
|
|
|
146
|
|
|
|
|
|
|
# Match is sensitive to the scaling of the problem, requiring that the |
|
147
|
|
|
|
|
|
|
# error is of order 1, and certainly less than 50. To meet this requirement |
|
148
|
|
|
|
|
|
|
# scale the X and Y coordinates to have a range of 200 (XXX make this some |
|
149
|
|
|
|
|
|
|
# multiple of the image scale). |
|
150
|
0
|
|
|
|
|
|
my $cat1stars = $cat1->stars; |
|
151
|
0
|
|
|
|
|
|
foreach my $cat1star ( @$cat1stars ) { |
|
152
|
0
|
|
|
|
|
|
$cat1star->x( $cat1star->x() / $scale ); |
|
153
|
0
|
|
|
|
|
|
$cat1star->y( $cat1star->y() / $scale ); |
|
154
|
|
|
|
|
|
|
} |
|
155
|
0
|
|
|
|
|
|
my $cat2stars = $cat2->stars; |
|
156
|
0
|
|
|
|
|
|
foreach my $cat2star ( @$cat2stars ) { |
|
157
|
0
|
|
|
|
|
|
$cat2star->x( $cat2star->x() / $scale ); |
|
158
|
0
|
|
|
|
|
|
$cat2star->y( $cat2star->y() / $scale ); |
|
159
|
|
|
|
|
|
|
} |
|
160
|
|
|
|
|
|
|
|
|
161
|
|
|
|
|
|
|
# Write the two input catalogues for match. |
|
162
|
0
|
0
|
|
|
|
|
print "Writing catalog 1 to $catfile1 using $cat1magtype magnitude.\n" if $DEBUG; |
|
163
|
0
|
|
|
|
|
|
$cat1->write_catalog( Format => 'RITMatch', |
|
164
|
|
|
|
|
|
|
File => $catfile1, |
|
165
|
|
|
|
|
|
|
mag_type => $cat1magtype ); |
|
166
|
0
|
0
|
|
|
|
|
print "Input catalog 1 written to $catfile1.\n" if $DEBUG; |
|
167
|
0
|
0
|
|
|
|
|
print "Writing catalog 2 to $catfile2 using $cat2magtype magnitude.\n" if $DEBUG; |
|
168
|
0
|
|
|
|
|
|
$cat2->write_catalog( Format => 'RITMatch', |
|
169
|
|
|
|
|
|
|
File => $catfile2, |
|
170
|
|
|
|
|
|
|
mag_type => $cat2magtype ); |
|
171
|
0
|
0
|
|
|
|
|
print "Input catalog 2 written to $catfile2.\n" if $DEBUG; |
|
172
|
|
|
|
|
|
|
|
|
173
|
|
|
|
|
|
|
# Create two hash lookup tables. Key will be the "match-ed" ID, which |
|
174
|
|
|
|
|
|
|
# is the original ID with all non-numeric characters removed, and |
|
175
|
|
|
|
|
|
|
# value will be the original ID. This will allow us to match up stars |
|
176
|
|
|
|
|
|
|
# after the correlation has happened. |
|
177
|
0
|
|
|
|
|
|
my %lookup_cat1; |
|
178
|
|
|
|
|
|
|
my %lookup_cat2; |
|
179
|
|
|
|
|
|
|
|
|
180
|
0
|
|
|
|
|
|
$cat1stars = $cat1->stars; |
|
181
|
0
|
|
|
|
|
|
my $newid = 1; |
|
182
|
0
|
|
|
|
|
|
foreach my $cat1star ( @$cat1stars ) { |
|
183
|
0
|
|
|
|
|
|
$lookup_cat1{$newid} = $cat1star->id; |
|
184
|
0
|
|
|
|
|
|
$newid++; |
|
185
|
|
|
|
|
|
|
} |
|
186
|
|
|
|
|
|
|
|
|
187
|
0
|
|
|
|
|
|
$cat2stars = $cat2->stars; |
|
188
|
0
|
|
|
|
|
|
$newid = 1; |
|
189
|
0
|
|
|
|
|
|
foreach my $cat2star ( @$cat2stars ) { |
|
190
|
0
|
|
|
|
|
|
$lookup_cat2{$newid} = $cat2star->id; |
|
191
|
0
|
|
|
|
|
|
$newid++; |
|
192
|
|
|
|
|
|
|
} |
|
193
|
|
|
|
|
|
|
|
|
194
|
|
|
|
|
|
|
# Create a base filename for the output catalogues. Put it in the |
|
195
|
|
|
|
|
|
|
# temporary directory previously set up. |
|
196
|
0
|
|
|
|
|
|
my $outfilebase = File::Spec->catfile( $temp, "outfile$$" ); |
|
197
|
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
# Set up the parameter list for match. |
|
199
|
0
|
|
|
|
|
|
my @matchargs = ( "$catfile1", |
|
200
|
|
|
|
|
|
|
"1", |
|
201
|
|
|
|
|
|
|
"2", |
|
202
|
|
|
|
|
|
|
"3", |
|
203
|
|
|
|
|
|
|
"$catfile2", |
|
204
|
|
|
|
|
|
|
"1", |
|
205
|
|
|
|
|
|
|
"2", |
|
206
|
|
|
|
|
|
|
"3", |
|
207
|
|
|
|
|
|
|
"outfile=$outfilebase", |
|
208
|
|
|
|
|
|
|
"nobj=30", |
|
209
|
|
|
|
|
|
|
"id1=0", |
|
210
|
|
|
|
|
|
|
"id2=0", |
|
211
|
|
|
|
|
|
|
); |
|
212
|
|
|
|
|
|
|
|
|
213
|
|
|
|
|
|
|
# Run match. |
|
214
|
0
|
0
|
|
|
|
|
my $pid = open my $stdout, "$match_bin " . ( join ' ', @matchargs ) . "|" or croak "Could not execute match: $!"; |
|
215
|
0
|
|
|
|
|
|
close $stdout; |
|
216
|
|
|
|
|
|
|
|
|
217
|
|
|
|
|
|
|
# Read in the first output catalogue of matching objects. The old ID |
|
218
|
|
|
|
|
|
|
# will be in the comment field. |
|
219
|
0
|
|
|
|
|
|
my $tempcat = new Astro::Catalog( Format => 'RITMatch', |
|
220
|
|
|
|
|
|
|
File => $outfilebase . ".mtA" ); |
|
221
|
|
|
|
|
|
|
|
|
222
|
|
|
|
|
|
|
# Loop through the stars, making a new catalogue with new stars using |
|
223
|
|
|
|
|
|
|
# a combination of the new ID and the old information. |
|
224
|
0
|
|
|
|
|
|
my $corrcat1 = new Astro::Catalog(); |
|
225
|
0
|
|
|
|
|
|
my @stars = $tempcat->stars; |
|
226
|
0
|
|
|
|
|
|
$newid = 1; |
|
227
|
0
|
|
|
|
|
|
foreach my $star ( @stars ) { |
|
228
|
|
|
|
|
|
|
|
|
229
|
|
|
|
|
|
|
# The old ID is found in the first column of the star's comment. |
|
230
|
|
|
|
|
|
|
# However, this old ID has been "match-ed", i.e. all non-numeric |
|
231
|
|
|
|
|
|
|
# characters have been stripped from it. Use the lookup table we |
|
232
|
|
|
|
|
|
|
# generated earlier to find the proper old ID. |
|
233
|
0
|
|
|
|
|
|
$star->id =~ /^(\w+)/; |
|
234
|
0
|
|
|
|
|
|
my $oldmatchid = $1; |
|
235
|
0
|
|
|
|
|
|
my $oldid = $lookup_cat1{$oldmatchid}; |
|
236
|
|
|
|
|
|
|
|
|
237
|
|
|
|
|
|
|
# Get the star's information. |
|
238
|
0
|
|
|
|
|
|
my $oldstar = $cat1->popstarbyid( $oldid ); |
|
239
|
0
|
|
|
|
|
|
$oldstar = $oldstar->[0]; |
|
240
|
0
|
0
|
|
|
|
|
next if ! defined( $oldstar ); |
|
241
|
|
|
|
|
|
|
|
|
242
|
|
|
|
|
|
|
# Set the ID to the new star's ID. |
|
243
|
0
|
|
|
|
|
|
$oldstar->id( $newid ); |
|
244
|
|
|
|
|
|
|
|
|
245
|
|
|
|
|
|
|
# Restore X and Y. |
|
246
|
0
|
|
|
|
|
|
$oldstar->x( $oldstar->x() * $scale ); |
|
247
|
0
|
|
|
|
|
|
$oldstar->y( $oldstar->y() * $scale ); |
|
248
|
|
|
|
|
|
|
|
|
249
|
|
|
|
|
|
|
# Set the comment denoting the old ID. |
|
250
|
0
|
|
|
|
|
|
$oldstar->comment( "Old ID: " . $oldid ); |
|
251
|
|
|
|
|
|
|
|
|
252
|
|
|
|
|
|
|
# And push this star onto the output catalogue. |
|
253
|
0
|
|
|
|
|
|
$corrcat1->pushstar( $oldstar ); |
|
254
|
|
|
|
|
|
|
|
|
255
|
0
|
|
|
|
|
|
$newid++; |
|
256
|
|
|
|
|
|
|
} |
|
257
|
|
|
|
|
|
|
|
|
258
|
|
|
|
|
|
|
# And do the same for the second catalogue. |
|
259
|
0
|
|
|
|
|
|
$tempcat = new Astro::Catalog( Format => 'RITMatch', |
|
260
|
|
|
|
|
|
|
File => $outfilebase . ".mtB" ); |
|
261
|
|
|
|
|
|
|
|
|
262
|
0
|
|
|
|
|
|
my $corrcat2 = new Astro::Catalog(); |
|
263
|
0
|
|
|
|
|
|
@stars = $tempcat->stars; |
|
264
|
0
|
|
|
|
|
|
$newid = 1; |
|
265
|
0
|
|
|
|
|
|
foreach my $star ( @stars ) { |
|
266
|
|
|
|
|
|
|
|
|
267
|
|
|
|
|
|
|
# The old ID is found in the first column of the star's comment. |
|
268
|
|
|
|
|
|
|
# However, this old ID has been "match-ed", i.e. all non-numeric |
|
269
|
|
|
|
|
|
|
# characters have been stripped from it. Use the lookup table we |
|
270
|
|
|
|
|
|
|
# generated earlier to find the proper old ID. |
|
271
|
0
|
|
|
|
|
|
$star->id =~ /^(\w+)/; |
|
272
|
0
|
|
|
|
|
|
my $oldmatchid = $1; |
|
273
|
0
|
|
|
|
|
|
my $oldid = $lookup_cat2{$oldmatchid}; |
|
274
|
|
|
|
|
|
|
|
|
275
|
|
|
|
|
|
|
# Get the star's information. |
|
276
|
0
|
|
|
|
|
|
my $oldstar = $cat2->popstarbyid( $oldid ); |
|
277
|
0
|
|
|
|
|
|
$oldstar = $oldstar->[0]; |
|
278
|
0
|
0
|
|
|
|
|
next if ! defined( $oldstar ); |
|
279
|
|
|
|
|
|
|
|
|
280
|
|
|
|
|
|
|
# Set the ID to the new star's ID. |
|
281
|
0
|
|
|
|
|
|
$oldstar->id( $newid ); |
|
282
|
|
|
|
|
|
|
|
|
283
|
|
|
|
|
|
|
# Restore X and Y. |
|
284
|
0
|
|
|
|
|
|
$oldstar->x( $oldstar->x() * $scale ); |
|
285
|
0
|
|
|
|
|
|
$oldstar->y( $oldstar->y() * $scale ); |
|
286
|
|
|
|
|
|
|
|
|
287
|
|
|
|
|
|
|
# Set the comment denoting the old ID. |
|
288
|
0
|
|
|
|
|
|
$oldstar->comment( "Old ID: " . $oldid ); |
|
289
|
|
|
|
|
|
|
|
|
290
|
|
|
|
|
|
|
# And push this star onto the output catalogue. |
|
291
|
0
|
|
|
|
|
|
$corrcat2->pushstar( $oldstar ); |
|
292
|
|
|
|
|
|
|
|
|
293
|
0
|
|
|
|
|
|
$newid++; |
|
294
|
|
|
|
|
|
|
} |
|
295
|
|
|
|
|
|
|
|
|
296
|
|
|
|
|
|
|
# Delete the temporary files if we're not in debug mode. |
|
297
|
0
|
0
|
|
|
|
|
if( ! $DEBUG ) { |
|
298
|
0
|
|
|
|
|
|
unlink $catfile1; |
|
299
|
0
|
|
|
|
|
|
unlink $catfile2; |
|
300
|
0
|
|
|
|
|
|
unlink $outfilebase . ".mtA"; |
|
301
|
0
|
|
|
|
|
|
unlink $outfilebase . ".mtB"; |
|
302
|
0
|
|
|
|
|
|
unlink $outfilebase . ".unA"; |
|
303
|
0
|
|
|
|
|
|
unlink $outfilebase . ".unB"; |
|
304
|
|
|
|
|
|
|
} |
|
305
|
|
|
|
|
|
|
|
|
306
|
0
|
|
|
|
|
|
return ( $corrcat1, $corrcat2 ); |
|
307
|
|
|
|
|
|
|
} |
|
308
|
|
|
|
|
|
|
|
|
309
|
|
|
|
|
|
|
=back |
|
310
|
|
|
|
|
|
|
|
|
311
|
|
|
|
|
|
|
=head2 Private Methods |
|
312
|
|
|
|
|
|
|
|
|
313
|
|
|
|
|
|
|
=over 4 |
|
314
|
|
|
|
|
|
|
|
|
315
|
|
|
|
|
|
|
=item B<_determine_scaling_factor> |
|
316
|
|
|
|
|
|
|
|
|
317
|
|
|
|
|
|
|
match v0.09 and above had a requirement (or strong suggestion) that |
|
318
|
|
|
|
|
|
|
coordinate values be less than about 5000. Testing has shown that this |
|
319
|
|
|
|
|
|
|
limit is closer to about 1000, so this method looks at all of the |
|
320
|
|
|
|
|
|
|
coordinate values in the two catalogues and determines a scaling |
|
321
|
|
|
|
|
|
|
factor to bring those coordinate values under 1000. |
|
322
|
|
|
|
|
|
|
|
|
323
|
|
|
|
|
|
|
my $factor = _determine_scaling_factor( $cat1, $cat2 ); |
|
324
|
|
|
|
|
|
|
|
|
325
|
|
|
|
|
|
|
=cut |
|
326
|
|
|
|
|
|
|
|
|
327
|
|
|
|
|
|
|
sub _determine_scaling_factor { |
|
328
|
0
|
|
|
0
|
|
|
my $cat1 = shift; |
|
329
|
0
|
|
|
|
|
|
my $cat2 = shift; |
|
330
|
|
|
|
|
|
|
|
|
331
|
0
|
|
|
|
|
|
my $max = 0; |
|
332
|
0
|
|
|
|
|
|
my $max_pos = 500; |
|
333
|
|
|
|
|
|
|
|
|
334
|
0
|
|
|
|
|
|
foreach my $cat ( ( $cat1, $cat2 ) ) { |
|
335
|
0
|
|
|
|
|
|
foreach my $item ( $cat->stars ) { |
|
336
|
0
|
0
|
|
|
|
|
if( $item->x > $max ) { |
|
337
|
0
|
|
|
|
|
|
$max = $item->x; |
|
338
|
|
|
|
|
|
|
} |
|
339
|
0
|
0
|
|
|
|
|
if( $item->y > $max ) { |
|
340
|
0
|
|
|
|
|
|
$max = $item->y; |
|
341
|
|
|
|
|
|
|
} |
|
342
|
|
|
|
|
|
|
} |
|
343
|
|
|
|
|
|
|
} |
|
344
|
|
|
|
|
|
|
|
|
345
|
0
|
0
|
|
|
|
|
my $scale = ( $max > $max_pos ? $max / $max_pos : 1 ); |
|
346
|
|
|
|
|
|
|
|
|
347
|
0
|
|
|
|
|
|
return $scale; |
|
348
|
|
|
|
|
|
|
|
|
349
|
|
|
|
|
|
|
} |
|
350
|
|
|
|
|
|
|
|
|
351
|
|
|
|
|
|
|
=head1 SEE ALSO |
|
352
|
|
|
|
|
|
|
|
|
353
|
|
|
|
|
|
|
C |
|
354
|
|
|
|
|
|
|
|
|
355
|
|
|
|
|
|
|
http://spiff.rit.edu/match/ |
|
356
|
|
|
|
|
|
|
|
|
357
|
|
|
|
|
|
|
=head1 REVISION |
|
358
|
|
|
|
|
|
|
|
|
359
|
|
|
|
|
|
|
$Id$ |
|
360
|
|
|
|
|
|
|
|
|
361
|
|
|
|
|
|
|
=head1 AUTHORS |
|
362
|
|
|
|
|
|
|
|
|
363
|
|
|
|
|
|
|
Brad Cavanagh |
|
364
|
|
|
|
|
|
|
|
|
365
|
|
|
|
|
|
|
=head1 COPYRIGHT |
|
366
|
|
|
|
|
|
|
|
|
367
|
|
|
|
|
|
|
Copyright (C) 2006 Particle Physics and Astronomy Research Council. |
|
368
|
|
|
|
|
|
|
All Rights Reserved. |
|
369
|
|
|
|
|
|
|
|
|
370
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify it under |
|
371
|
|
|
|
|
|
|
the terms of the GNU General Public License as published by the Free Software |
|
372
|
|
|
|
|
|
|
Foundation; either version 2 of the License, or (at your option) any later |
|
373
|
|
|
|
|
|
|
version. |
|
374
|
|
|
|
|
|
|
|
|
375
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,but WITHOUT ANY |
|
376
|
|
|
|
|
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A |
|
377
|
|
|
|
|
|
|
PARTICULAR PURPOSE. See the GNU General Public License for more details. |
|
378
|
|
|
|
|
|
|
|
|
379
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License along with |
|
380
|
|
|
|
|
|
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
|
381
|
|
|
|
|
|
|
Place,Suite 330, Boston, MA 02111-1307, USA |
|
382
|
|
|
|
|
|
|
|
|
383
|
|
|
|
|
|
|
=cut |
|
384
|
|
|
|
|
|
|
|
|
385
|
|
|
|
|
|
|
1; |