& /htmlheader, title => (sprintf "%s TJD %d, %d-%d", $sm, ($nn + 1 - 50000), $offset + 1, $offset + $limit) &> <& modelheader &> % my $sm_str = ", $sm" || '';
Nonsynthetic Tracklets, <% $min_dets %>+ Detections<% $sm_str %>TJD <% $nn + 1 - 50000 %> (MOPS Night Number <% $nn %>)
|
% if ($cz and scalar keys %{$cz} > 1) {
Also czaring this chunk: <% map { qq{ $_ } } grep { $_ ne $ENV{REMOTE_USER} } sort keys %{$cz} %> % } |
<& stamp_pager, rooturi => "?nn=$nn&sort=$sort&run_id=$run_id&maxv=$maxv&minv=$minv&sm=$smesc&min_dets=$min_dets&min_prob=$min_prob", limit => $limit, offset => $offset, found => $found, nostamp => $nostamp &>
<& /htmlfooter &> <%args> $nn $limit => 100 $sort => 'd' # 'd', 'v', 'q', 'p', 'k', 'g', 'prob', 'sub' allowed (digest, velocity, q, posang, known, gcr, probability, submitted+prob) $offset => 0 $found => undef $min_prob => .5 $minv => 0.1 # default min deg/day $maxv => 20 $min_dets => 3 $sm => 'nomd' # survey mode to czar $nostamp => undef # set to show no postage stamps $field_id => undef # single field_id $run_id => '' %args> <%init> use List::Util qw(sum); use URI::Escape; use Astro::Time; use PS::MOPS::DC::Orbit; use PS::MOPS::Lib qw(:all); use PS::MOPS::Constants qw(:all); use PS::MOPS::DC::Field; use PS::MOPS::DC::Tracklet; use PS::MOPS::DC::Known; use Data::Dumper; #my $ISS_Q_THRESHOLD = 5.5; # don't submit anything with known q > this my $ISS_Q_THRESHOLD = 99; #my $MPC_DIGEST_THRESHOLD = 50; # NEO digest threshold my $MPC_DIGEST_THRESHOLD = 30; # NEO digest threshold # XXX LD Put IASC outreach exposure names here. my %OUTREACH_MAP = $m->comp('/lib/outreach'); # If $offset and $inc are defined, use them for the mysql query. # Otherwise use $limit, then as a last resort, all of em. my $limit_str = ''; my $sort_str = ''; my $found_str = ''; if (defined($offset)) { $limit = 100 unless $limit; $limit_str = sprintf 'limit %d,%d', $offset, $limit; } else { $limit_str = $limit ? "limit $limit" : ''; } if ($sort eq 'q') { $sort_str = 'order by if(q is null,999,q)'; } elsif ($sort eq 'v') { $sort_str = 'order by v_tot desc'; } elsif ($sort eq 'va') { $sort_str = 'order by v_tot'; } elsif ($sort eq 'p') { $sort_str = 'order by pos_ang_deg'; } elsif ($sort eq 'g') { $sort_str = 'order by gcr_arcsec'; } elsif ($sort eq 'prob') { $sort_str = 'order by probability'; } elsif ($sort eq 'sub') { $sort_str = 'order by if(known_id is null, 0, 1) desc, probability desc'; } elsif ($sort eq 'k') { $sort_str = 'order by if(known_id is null, 0, 1), digest desc, t.gcr_arcsec'; } else { # $sort_str = 'order by digest desc, v_tot desc'; $sort_str = 'order by digest desc, t.gcr_arcsec'; } my $field_sel = ''; if ($field_id) { $field_sel = "and field_id=$field_id"; } my $survey_mode_str = ''; if ($sm =~ /^MD/) { $survey_mode_str = "and (f.survey_mode like '$sm%')"; } elsif ($sm ne 'nomd') { $survey_mode_str = "and (f.survey_mode like '%$sm%')"; } else { $survey_mode_str = "and (not f.survey_mode like 'MD%')"; } my $smesc = uri_escape($sm); my $utdate_str = mopslib_mjd2utctimestr($nn + 1); $utdate_str =~ s/T.*//; # trim everything after date $utdate_str .= 'UT'; my $prob_str = ''; if (defined($min_prob)) { if ($min_prob < 0) { $prob_str = "and t.probability < " . (-$min_prob); } else { $prob_str = "and t.probability > $min_prob"; } } if (!defined($found)) { $found_str = 'SQL_CALC_FOUND_ROWS'; } my $inst = $m->notes('INST'); my $dbname = $inst->dbname; my $model = $m->notes('MODEL'); my $dbh = $inst->dbh(); my $substh = $dbh->prepare(<<"SQL") or die $dbh->errstr; select disposition, desig, mpc_desig, submitter from export.mpc_sub where dbname=? and tracklet_id=? limit 1 SQL my $fields_from = ''; my $run_where = ''; if ($run_id) { $fields_from = 'runs r join fields f using(field_id)'; $run_where = "and r.run_id=$run_id"; } else { $fields_from = 'fields f'; } my $sql = <<"SQL"; select $found_str t.tracklet_id tracklet_id, group_concat(ta.det_id) det_ids, t.digest digest, t.v_tot v_tot, t.ext_mag ext_mag, t.pos_ang_deg pos_ang_deg, t.gcr_arcsec gcr_arcsec, t.probability probability, k.q q, k.known_name known_name, f.se_deg sol_elong, f.eb_deg ecl_lat, f.survey_mode, f.fpa_id from $fields_from join tracklets t ignore index(classification) using(field_id) join tracklet_attrib ta using(tracklet_id) left join known k using(known_id) where f.nn = $nn and t.classification='N' $survey_mode_str and t.digest >= 0 and v_tot > $minv and v_tot < $maxv $run_where $prob_str $field_sel group by t.tracklet_id having count(*) >= $min_dets $sort_str $limit_str SQL my $sth = $dbh->prepare($sql) or die $dbh->errstr; $sth->execute() or die $sth->errstr; my @rows; my $href; while ($href = $sth->fetchrow_hashref()) { push @rows, $href; } $sth->finish(); if ($found_str) { ($found) = $dbh->selectrow_array("select FOUND_ROWS()"); } # Make a list of survey modes used. my @survey_modes_found = map { $_->[0] } modcf_retrieveSurveyModes($inst, nn => $nn); s/^\d+\.\w+\.\w\.// foreach @survey_modes_found; s/\.[PQ][12]$// foreach @survey_modes_found; # Who's czaring this chunk? my $czkey = "czaring:$nn:$sm:$run_id"; my $cz = $m->comp('/lib/last_user_access', key => $czkey); sub _avg { my (@vals) = @_; if (@_) { return sum(@_) / @_; } return 0; } %init>