Astro-Catalog

 view release on metacpan or  search on metacpan

lib/Astro/Catalog/IO/LCOGTFITSTable.pm  view on Meta::CPAN

                    $isoarea_value = $isoarea->[$i];
                }
                my $ell_value;
                if ($ell_column != -1) {
                    $ell_value = $ell->[$i];
                }
                my $posang_value;
                if ($posang_column != -1) {
                    $posang_value = $posang->[$i];
                }
                my $x_pos_value;
                if ($x_column != -1) {
                    $x_pos_value = $x_pos->[$i];
                }
                my $y_pos_value;
                if ($y_column != -1) {
                    $y_pos_value = $y_pos->[$i];
                }
                my $flags_value = 0;
                if ($flag_column != -1) {
                    $flags_value = $flags->[$i];
                }

                # Create a temporary Astro::Catalog::Item object.
                my $star = new Astro::Catalog::Item();

                # Set up the Astro::Coords object, assuming our RA and Dec are in units
                # of degrees.
                my $coords;
                if (defined($ra_value) && defined($dec_value)) {
                    $coords = new Astro::Coords(
                        ra => $ra_value,
                        dec => $dec_value,
                        units => 'degrees',
                        type => 'J2000',
                    );
                    $star->coords($coords);
                }

                if ($flag_column != -1) {
                    $star->quality($flags_value);
                }
                else {
                    $star->quality(0);
                }

                if ($id_column != -1) {
                    $star->id($id_value);
                }

                if ($x_column != -1) {
                    $star->x($x_pos_value);
                }
                if ($y_column != -1) {
                    $star->y($y_pos_value);
                }

                # Set up the Astro::Flux objects.
                if ($iso_flux_column != -1) {
                    my $num;
                    $num = new Number::Uncertainty(Value => $iso_flux_value);
                    my $flux_iso = new Astro::Flux($num, 'isophotal_flux', $waveband,
                            datetime => $datetime, obsid => $obsid);
                    $star->fluxes(new Astro::Fluxes($flux_iso));
                }

                if ($total_flux_column != -1) {
                    my $num;
                    $num = new Number::Uncertainty(Value => $total_flux_value);
                    my $flux_total = new Astro::Flux($num, 'total_flux', $waveband,
                            datetime => $datetime, obsid => $obsid );
                    $star->fluxes(new Astro::Fluxes($flux_total));
                }

                if ($core_flux_column != -1) {
                    my $num;
                    $num = new Number::Uncertainty(Value => $core_flux_value);
                    my $core_flux_obj = new Astro::Flux($num, 'core_flux', $waveband,
                            datetime => $datetime, obsid => $obsid );
                    $star->fluxes(new Astro::Fluxes($core_flux_obj));
                }

                if ($core1_flux_column != -1) {
                    my $num;
                    $num = new Number::Uncertainty(Value => $core1_flux_value);
                    my $core1_flux_obj = new Astro::Flux($num, 'core1_flux', $waveband,
                            datetime => $datetime, obsid => $obsid );
                    $star->fluxes(new Astro::Fluxes($core1_flux_obj));
                }

                if ($core2_flux_column != -1) {
                    my $num;
                    $num = new Number::Uncertainty(Value => $core2_flux_value);
                    my $core2_flux_obj = new Astro::Flux($num, 'core2_flux', $waveband,
                            datetime => $datetime, obsid => $obsid );
                    $star->fluxes(new Astro::Fluxes($core2_flux_obj));
                }

                if ($core3_flux_column != -1) {
                    my $num;
                    $num = new Number::Uncertainty(Value => $core3_flux_value);
                    my $core3_flux_obj = new Astro::Flux($num, 'core3_flux', $waveband,
                            datetime => $datetime, obsid => $obsid );
                    $star->fluxes(new Astro::Fluxes($core3_flux_obj));
                }

                if ($core4_flux_column != -1) {
                    my $num;
                    $num = new Number::Uncertainty(Value => $core4_flux_value);
                    my $core4_flux_obj = new Astro::Flux($num, 'core4_flux', $waveband,
                        datetime => $datetime, obsid => $obsid);
                    $star->fluxes(new Astro::Fluxes($core4_flux_obj));
                }

                # Compute a magnitude and mag. error from the total flux value and total
                # flux error (if available).
                if ($total_flux_value > 0.0 and $total_flux_err_value > 0.0) {
                    my $mag = -2.5 * log10($total_flux_value);
                    my $num;
                    if ($total_flux_err_column != -1) {
                        my $magerr = 2.5 / log(10) * $total_flux_err_value / $total_flux_value;
                        $num = new Number::Uncertainty(
                            Value => $mag,
                            Error => 2.0 * $magerr);
                    }
                    else {
                        $num = new Number::Uncertainty(Value => $mag);
                    }
                    my $mag_obj = new Astro::Flux($num, 'MAG',  $waveband,
                        datetime => $datetime, obsid => $obsid);
                    $star->fluxes(new Astro::Fluxes($mag_obj));
                }
                # And set up the Astro::Catalog::Item::Morphology object.
                my $morphology = new Astro::Catalog::Item::Morphology(
                    area => $isoarea_value,
                    ellipticity => $ell_value,
                    position_angle_pixel => $posang_value,
                );
                $star->morphology($morphology);


                # Push it onto the Astro::Catalog object.
                $catalog->pushstar($star);
            }

        }
        $status = 0;

        # Move to the next one.
        $fptr->movrel_hdu(1, $hdutype, $status);
        last if ($status == END_OF_FILE);

        # And set $hdu_pos.
        $fptr->get_hdu_num($hdu_pos);
    }

    # Set the origin.
    $catalog->origin('IO::LCOGTFITSTable');

    # And return.
    return $catalog;
}

=item B<_write_catalog>

Create an output catalog as a binary FITS table.

    $ref = Astro::Catalog::IO::LCOGTFITSTable->_write_catalog($catalog);

Argument is an C<Astro::Catalog> object.

This method is not yet implemented.

=cut

sub _write_catalog {
    croak "Not yet implemented.";
}

1;

__END__

=back

=head1 SEE ALSO



( run in 1.205 second using v1.01-cache-2.11-cpan-5a3173703d6 )