Astro-App-Satpass2
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Astro/App/Satpass2.pm view on Meta::CPAN
quiet! transit|maximum|culmination!
},
$self->_templates_to_options( pass => $opt ),
];
}
{
my @selector;
$selector[ PASS_EVENT_SHADOWED ] = 'illumination';
$selector[ PASS_EVENT_LIT ] = 'illumination';
$selector[ PASS_EVENT_DAY ] = 'illumination';
$selector[ PASS_EVENT_RISE ] = 'horizon';
$selector[ PASS_EVENT_MAX ] = 'transit';
$selector[ PASS_EVENT_SET ] = 'horizon';
$selector[ PASS_EVENT_APPULSE ] = 'appulse';
$selector[ PASS_EVENT_START ] = 'horizon';
$selector[ PASS_EVENT_END ] = 'horizon';
$selector[ PASS_EVENT_BRIGHTEST ] = 'brightest';
# Remove from the pass data any events that are not wanted. The
# arguments are $self, the $opt hash reference that (among other
# things) specifies the desired events, and the passes, each pass
# being an argument. The modified passes are returned.
sub _pass_select_event {
my ( undef, $opt, @passes ) = @_; # Invocant unused
my @rslt;
foreach my $pass ( @passes ) {
@{ $pass->{events} } = grep {
_pass_select_event_code( $opt, $_->{event} )
} @{ $pass->{events} }
and push @rslt, $pass;
}
return @rslt
}
# Determine whether an event is to be reported for the pass. The
# arguments are the $opt hash reference and the event code or name.
# Anything that is not a dualvar and not an integer is accepted, on
# the presumption that it is an ad-hoc event provided by some
# subclass. The null event is always accepted on the presumption
# that if the user did not want it he or she would not have asked
# for it. Anything that is left is accepted or rejected based on the
# option hash and the @selector array (defined above).
sub _pass_select_event_code {
my ( $opt, $event ) = @_;
isdual( $event )
or $event !~ m/ \D /smx
or return 1;
$event == PASS_EVENT_NONE
and return 1;
return defined $selector[ $event ] && $opt->{ $selector[ $event ] };
}
}
sub perl : Tokenize( -noexpand_tilde ) : Verb( eval! setup! ) {
my ( $self, $opt, $file, @args ) = __arguments( @_ );
defined $file
or $self->wail( 'At least one argument is required' );
$opt->{setup}
and push @{ $self->{_perl} ||= [] }, [ $opt, $file, @args ];
local @ARGV = ( $self, map { $self->expand_tilde( $_ ) } @args );
$opt->{eval}
or local $0 = $self->expand_tilde( $file );
my $data = $opt->{eval} ?
$file :
$self->_file_reader( $file, { glob => 1 } );
my $rslt;
{
# "random" package to prevent whoopsies in our own name space
package qq_eval_namespace; ## no critic (Modules::ProhibitMultiplePackages)
$rslt = eval $data; ## no critic (BuiltinFunctions::ProhibitStringyEval)
$@
and $self->wail( "Failed to eval '$file': $@" );
}
instance( $rslt, 'Astro::App::Satpass2' )
or return $rslt;
return;
}
sub phase : Verb( choose=s@ ) {
my ( $self, $opt, @args ) = __arguments( @_ );
my $time = $self->__parse_time (shift @args, time );
my @sky = $self->__choose( $opt->{choose}, $self->{sky} )
or $self->wail( 'No bodies selected' );
return $self->__format_data(
phase => [
map { { body => $_->universal( $time ), time => $time } }
grep { $_->can( 'phase' ) }
@sky
], $opt );
}
sub position : Verb( choose=s@ questionable|spare! quiet! ) {
my ( $self, $opt, $time ) = __arguments( @_ );
if ( defined $time ) {
$time = $self->__parse_time($time);
} else {
$time = time;
}
# Define the observing station.
my $sta = $self->station();
$sta->universal( $time );
my @list = $self->__choose( { bodies => 1, sky => 1 },
$opt->{choose} );
my @good;
my $horizon = deg2rad ($self->{horizon});
foreach my $body (@list) {
if ( $body->represents( 'Astro::Coord::ECI::TLE' ) ) {
$body->set (
backdate => $self->{backdate},
debug => $self->{debug},
edge_of_earths_shadow => $self->{edge_of_earths_shadow},
geometric => $self->{geometric},
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.938 second using v1.00-cache-2.02-grep-82fe00e-cpan-f5108d614456 )