Check pointing
if (abs($q_diff->{ra0}*3600) > 1.0 || abs($q_diff->{dec}*3600) > 1.0 || abs($q_diff->{roll0}*3600) > 10.0) {
push @{$self->{warn}}, sprintf("$alarm Target uplink precision problem for MP_TARGQUAT at $c->{date}\n"
. " Error is yaw, pitch, roll (arcsec) = %.2f %.2f %.2f\n"
. " Use Q1,Q2,Q3,Q4 = %.12f %.12f %.12f %.12f\n",
$q_diff->{ra0}*3600, $q_diff->{dec}*3600, $q_diff->{roll0}*3600,
$q_man[0], $q_man[1], $q_man[2], $q_man[3]);
}
Check dither checking
unless ($c = find_command($self, "MP_TARGQUAT", -1) and defined $self->{DITHER_ON}) {
push @{$self->{warn}}, "$alarm Dither status not checked\n";
return;
}
Verify OR dither matches backstop dither
push @{$self->{warn}}, "$alarm Dither mismatch - OR: $or_val != Backstop: $bs_val\n"
if ($or_val ne $bs_val);
Verify no dither changes during scheduled observing time
elsif ( $dither->{time} > ( $obs_tstart + $obs_beg_pad ) && $dither->{time} <= $obs_tstop - $obs_end_pad ) {
push @{$self->{warn}}, "$alarm Dither commanding at $dither->{time}. During observation.\n";
}
Verify Quaternion exists
unless ($c = find_command($self, "MP_TARGQUAT", -1)) {
push @{$self->{warn}}, "$alarm Missing MP_TARGQUAT cmd\n";
return;
}
Verify SIM position in OR and backstop match
if (abs($par{POS} - $sim_z) > 4) {
push @{$self->{warn}}, "$alarm SIM position mismatch: OR=$sim_z BACKSTOP=$par{POS}\n";
}
Verify that a star catalog exists
unless ($c = find_command($self, "MP_STARCAT")) {
push @{$self->{warn}}, "$alarm No star catalog\n";
return;
}
Warn if # Fids < 3 for science observations
push @warn,"$alarm Too Few Fid Lights\n" if (@{$self->{fid}} < $min_fid && $is_science);
Warn if # Acquisition Stars < 4 for science observations or < 5 for ERs
push @warn,"$alarm Too Few Acquisition Stars\n" if (@{$self->{acq}} < $min_acq);
Warn if # Guide stars < 5 for science observations or < 6 for ERs
push @warn,"$alarm Too Few Guide Stars\n" if (@{$self->{gui}} < $min_guide);
Warn if # Guide stars + # Acquisition stars > 8
push @warn,"$alarm Too Many GUIDE + FID\n" if (@{$self->{gui}} + @{$self->{fid}} + @{$self->{mon}} > 8);
Warn if # Acquisition stars > 8
push @warn,"$alarm Too Many Acquisition Stars\n" if (@{$self->{acq}} > 8);
Warn if star is on bad star list
push @warn,sprintf "$alarm Bad AGASC ID. [%2d]: %s\n",$i,$sid if ($bad_id{$sid});
Warn if guide star has no color information (B-V = 0.700)
if ( $c->{"GS_NOTES$i"} =~ /c/ && $type =~ /BOT|GUI/ ) { push @warn, $marginal_note }
Warn if a non-stellar object is selected
push @warn, sprintf("$alarm Bad star. [%2d]: Class = %s %s\n", $i,$c->{"GS_CLASS$i"},$note) if ($c->{"GS_NOTES$i"} =~ /b/);
Warn if a Star/fid + $dither outside of CCD boundaries
if ( $yag > $y_ang_max - $slot_dither || $yag < $y_ang_min + $slot_dither
|| $zag > $z_ang_max - $slot_dither || $zag < $z_ang_min + $slot_dither) {
push @warn,sprintf "$alarm Angle Too Large. [%2d]\n",$i;
}
Warn if outside faint and bright limits ( 6.0 < mag_ok < 10.7 )
if ($type ne 'MON' and $mag ne '---') {
if ($mag < $mag_bright or $mag > $mag_faint_red) {
push @warn, sprintf "$alarm Magnitude. [%2d]: %6.3f\n",$i,$mag;
} elsif ($mag > $mag_faint_yellow) {
push @yellow_warn, sprintf "$alarm Magnitude. [%2d]: %6.3f\n",$i,$mag;
}
}
Warn if Search box is too large
if ($type ne 'MON' and $c->{"HALFW$i"} > 200) {
push @warn, sprintf "$alarm Search Box Too Large. [%2d]\n",$i;
}
Warn if ACQ/BOTH search box smaller than slew error
my $slew_err = $targquat->{man_err} || 120;
if (($type =~ /BOT|ACQ/) and $c->{"HALFW$i"} < $slew_err) {
push @warn, sprintf "$alarm Search Box smaller than slew error [%2d]\n",$i;
}
Check that readout sizes are all 6x6 for science observations
push @warn, sprintf("$alarm Readout Size. [%2d]: %s Should be 6x6\n", $i, $c->{"SIZE$i"})
if ($is_science && $type =~ /BOT|GUI|ACQ/ && $c->{"SIZE$i"} ne "6x6");
Warn if guide star is within dither + 25 arc-seconds (yang or zang) of a bad pixel
if ( @close_pixels > 0 ) {
my ($closest) = sort { $dr[$a] <=> $dr[$b] } (0 .. $#dr);
my $warn = sprintf("$alarm Nearby ACA bad pixel. [%2d] - " .
"Y,Z,Radial seps: " . $close_pixels[$closest],
$i); #Only warn for the closest pixel
push @warn, $warn;
}
Warn if Fid within $dither + 25 arcsec of a star and within 4 mags
if ($type eq 'FID' and $dz < $dither+25 and $dy < $dither+25 and $dm > -5.0) {
my $warn = sprintf("$alarm Fid spoiler. [%2d]- %10d: " .
"Y,Z,Radial,Mag seps: %3d %3d %3d %4s\n",$i,$star->{id},$dy,$dz,$dr,$dm_string);
if ($dm > -4.0) { push @warn, $warn }
else { push @yellow_warn, $warn }
}
Warn if star within search box + search error and within 0.2 mags
my $search_err = $targquat->{man_err} || 120;
if ($type ne 'MON' and $dz < $halfw + $search_err and $dy < $halfw + $search_err and $dm > -1.0) {
my $warn = sprintf("$alarm Search spoiler. [%2d]- %10d: " .
"Y,Z,Radial,Mag seps: %3d %3d %3d %4s\n",$i,$star->{id},$dy,$dz,$dr,$dm_string);
if ($dm > -0.2) { push @warn, $warn }
else { push @yellow_warn, $warn }
}
Warn for Common column: spolier within 50 arc-secs, spoiler is 4.5 mags brighter than star, and spoiler is located between star and readout
if ($type ne 'MON'
and $dz < $col_sep_dist
and $dm > $col_sep_mag
and ($star->{yag}/$yag) > 1.0
and abs($star->{yag}) < 2500) {
push @warn,sprintf("$alarm Common Column. [%2d] - %10d " .
"at Y,Z,Mag: %5d %5d %5.2f\n",$i,$star->{id},$star->{yag},$star->{zag},$star->{mag});
}
Check monitor commanding
push @{$self->{warn}}, sprintf("$alarm Monitor Window [%2d] is in slot %2d and should be in slot 7.\n"
, $_, $c->{"IMNUM$_"}) if $c->{"IMNUM$_"} != 7;
push @{$self->{warn}}, sprintf("$alarm Monitor Window [%2d] is %6.2f arc-seconds off of OR specification\n"
, $_, $sep) if $sep > 20.;
push @{$self->{warn}}, sprintf("$alarm Monitor Window [%2d] is set to Convert-to-Track\n"
, $_) if $track == 1;
push @{$self->{warn}}, sprintf("$alarm DTS for [%2d] is set to slot %2d which does not contain a guide star.\n",
$_, $dts_slot) if $dts_type =~ /NULL/;
unless ($manv = find_command($self, "MP_TARGQUAT", -1)) {
push @{$self->{warn}}, sprintf("$alarm Cannot find maneuver for checking monitor commanding\n");
return;
}
foreach $cmd (qw (AODSDITH AOACRSET AOENDITH)) {
next if ($cnt{$cmd} == 1);
$cnt{$cmd} = 'no' if ($cnt{$cmd} == 0);
push @{$self->{warn}}, "$alarm Found $cnt{$cmd} $cmd commands near " . time2date($t_manv+$dt{$cmd}) . "\n";
}
Check Fid commanding
unless (defined $self->{SI} && defined $self->{SIM_OFFSET_Z}) {
push @{$warn}, "$alarm Unable to check fids because SI or SIM_OFFSET_Z undefined\n";
return;
}
my ($yag, $zag, $error) = calc_fid_ang($fid, $self->{SI}, $self->{SIM_OFFSET_Z});
if ($error) {
push @{$warn}, "$alarm $error\n";
next;
}
push @{$warn}, "$alarm Fid $self->{SI} $fid is turned on with FIDSEL but not found in star catalog\n"
unless ($fidsel_ok);
push @{$warn}, "$alarm Fid with IDX=\[$self->{fid}[$i_fid]\] is in star catalog but is not turned on via FIDSEL\n"
unless ($fid_ok[$i_fid]);
Flag stars with bad magnitude or magnitude error
push @{$self->{warn}}, sprintf("$alarm Star with bad mag %.1f or magerr %.1f at (yag,zag)=%.1f,%.1f\n",
$mag, $magerr, $yag, $zag);
}
Aspect Information main page Comments or questions: Aspect Help |