Check pointingif (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 checkingunless ($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 ditherpush @{$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 timeelsif ( $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 existsunless ($c = find_command($self, "MP_TARGQUAT", -1)) { push @{$self->{warn}}, "$alarm Missing MP_TARGQUAT cmd\n"; return; } Verify SIM position in OR and backstop matchif (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 existsunless ($c = find_command($self, "MP_STARCAT")) { push @{$self->{warn}}, "$alarm No star catalog\n"; return; } Warn if # Fids < 3 for science observationspush @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 ERspush @warn,"$alarm Too Few Acquisition Stars\n" if (@{$self->{acq}} < $min_acq); Warn if # Guide stars < 5 for science observations or < 6 for ERspush @warn,"$alarm Too Few Guide Stars\n" if (@{$self->{gui}} < $min_guide); Warn if # Guide stars + # Acquisition stars > 8push @warn,"$alarm Too Many GUIDE + FID\n" if (@{$self->{gui}} + @{$self->{fid}} + @{$self->{mon}} > 8); Warn if # Acquisition stars > 8push @warn,"$alarm Too Many Acquisition Stars\n" if (@{$self->{acq}} > 8); Warn if star is on bad star listpush @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 selectedpush @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 boundariesif ( $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 largeif ($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 errormy $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 observationspush @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 pixelif ( @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 magsif ($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 magsmy $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 readoutif ($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 commandingpush @{$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 commandingunless (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 errorpush @{$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 |