#!perl # Test that we can read a JCMT catalogue that is not rigid about its # columns. Test simply creates a catalogue with random junk attached # and then reads it in and compares target values. use strict; use Test::More tests => 13; require_ok( 'Astro::Coords' ); require_ok( 'Astro::Catalog::Star' ); require_ok( 'Astro::Catalog' ); # test sources my @input = ( { ra => '03:25:27.1', dec => '30:45:11', type => 'j2000', name => 'a space', comment => 'with comment' }, { ra => '13:25:27.1', dec => '-30:45:11', type => 'b1950', name => 'test', }, { long => '03:26:30.0', lat => '-1:45:0', type => 'galactic', name => 'gal 2', } ); # Start by having some test coordinates # convert test sources to Astro::Coords and randomly my @ref = map { new Astro::Coords( units => 'sex', %$_ ); } @input; # Make sure we have constructed objects for (@ref) { isa_ok( $_, "Astro::Coords::Equatorial"); } # Generate a catalogue manually my @lines = ("* a comment\n"); for my $c (@ref) { my $line = $c->name; my $ra = $c->ra(format => 's'); my $dec = $c->dec( format => 's'); $ra =~ s/:/ /g; $dec =~ s/:/ /g; $line .= "$ra $dec "; # Always RJ $line .= "rj "; if (rand(1) < 0.5) { # add some extra stuff my $vel = (rand(1)<0.5 ? "- 35." : "N/A"); my $flux = (rand(1)<0.5 ? "42.4" : "n/a"); my $range = 'n/a'; my $frame = "LSR"; my $veldef = "RADIO"; my $comment = ($c->comment ? $c->comment : "ooh"); $line .= " $vel $flux $range $frame $veldef $comment"; } $line .= "\n"; push(@lines, $line); } # Read the data array my $cat = new Astro::Catalog( Format => 'JCMT', Data => \@lines ); # Get the source list and remove planets my @sources = $cat->stars; my @filter = grep { $_->coords->isa("Astro::Coords::Equatorial") } @sources; is($#filter, $#ref, "Compare size"); # Now compare for my $i (0..$#ref) { is($filter[$i]->id, $ref[$i]->name, "Compare names"); ok($ref[$i]->distance( $filter[$i]->coords) < 0.1, "Compare distance"); } # Write catalog to array so we can prepend test output with a # my @output; $cat->write_catalog( Format => 'JCMT', File => \@output ); print "# " . join("\n# ", @output) ."\n";