Index: trunk/PS-IPP-PStamp/lib/PS/IPP/PStamp/Job.pm
===================================================================
--- trunk/PS-IPP-PStamp/lib/PS/IPP/PStamp/Job.pm	(revision 35466)
+++ trunk/PS-IPP-PStamp/lib/PS/IPP/PStamp/Job.pm	(revision 35467)
@@ -51,4 +51,7 @@
 
 my $default_data_groups = "";
+
+# old locate_images() function. Still used by dqueryparse
+# Postage stamp server now uses locate_images_for_row()
 
 sub locate_images {
@@ -172,4 +175,5 @@
     my $results = lookup($ipprc, $rowList, $imagedb, $req_type, $stage, $id, $tess_id, $component,
         $need_magic, $dateobs_begin, $dateobs_end, $filter, $data_group, $option_mask, $mjd_min, $mjd_max, 
+        0, 0,   # fwhm cuts are not applied here
         undef, undef, undef, $verbose);
 
@@ -250,5 +254,8 @@
     }
 
-    my ($release_name, $survey) = get_release_info($row);
+    my ($release_name, $survey, $default_tess_id) = get_release_info($row);
+    if (!$tess_id and $default_tess_id) {
+        $tess_id = $default_tess_id;
+    }
 
     if ($req_type eq "bydiff") {
@@ -304,4 +311,5 @@
     my $results = lookup($ipprc, $rowList, $imagedb, $req_type, $stage, $id, $tess_id, $component,
         0, $dateobs_begin, $dateobs_end, $filter, $data_group, $option_mask, $mjd_min, $mjd_max,
+        getValOrZero($row->{FWHM_MIN}), getValOrZero($row->{FWHM_MAX}),
         undef, $release_name, $survey,
         $verbose);
@@ -330,4 +338,6 @@
     my $mjd_min = shift;
     my $mjd_max = shift;
+    my $fwhm_min = shift;
+    my $fwhm_max = shift;
     my $selectedAstrom = shift;
     my $release_name = shift;
@@ -365,7 +375,11 @@
     my $release_args;
     if (($req_type eq 'byexp' and $stage ne 'raw') or ($req_type eq 'byskycell' and $stage ne 'diff')) {
-        unless (isnull($release_name) and isnull($survey)) {
+        if ($release_name or $survey) {
             $use_releasetool = 1;
-            $release_args = " -release_name $release_name" if $release_name;
+            if ($release_name) {
+                $release_args = " -release_name $release_name";
+            } else {
+                $release_args = " -priority_order";
+            }
             $release_args .= " -surveyName $survey" if $survey;
         }
@@ -402,5 +416,5 @@
         # choose the chips containing the center pixel by calling selectComponets() below
         if ($use_releasetool) {
-            $command = "$releasetool -dbname $imagedb -priority_order -listrelexp $release_args";
+            $command = "$releasetool -dbname $imagedb -listrelexp $release_args";
             $choose_components = 1;
         } else {
@@ -433,5 +447,5 @@
     } elsif ($stage eq 'warp') {
         if ($use_releasetool) {
-            $command = "$releasetool -dbname $imagedb -priority_order -listrelexp $release_args";
+            $command = "$releasetool -dbname $imagedb -listrelexp $release_args";
             $skycell_id = $component;
             $choose_components = 1;
@@ -481,4 +495,8 @@
             $command = "$releasetool -listrelstack -dbname $imagedb $release_args";
             $base_name = 'stack_path_base';
+            my $stack_type = $row->{RUN_TYPE};
+            if (!isnull($stack_type)) {
+                $command .= " -stack_type $stack_type";
+            }
         } else {
             $command = "$stacktool -sumskyfile -dbname $imagedb";
@@ -540,6 +558,6 @@
         $command .= " -dateobs_end $dateobs_end" if $dateobs_end;
     } elsif ($req_type ne "byid") {
-        $command .= " -mjd_obs_begin $mjd_min" if $mjd_min;
-        $command .= " -mjd_obs_end $mjd_max" if $mjd_max;
+        $command .= " -mjd_min $mjd_min" if $mjd_min;
+        $command .= " -mjd_max $mjd_max" if $mjd_max;
     }
 
@@ -551,4 +569,10 @@
         # XXX: Why am I using default data_groups only for byskycell requests?
         $command .= $default_data_groups;
+    }
+
+    if ($use_releasetool) {
+        # fwhm arguments are currently only supported when using releasetool for lookups
+        $command .= " -fwhm_min $fwhm_min" if $fwhm_min;
+        $command .= " -fwhm_max $fwhm_max" if $fwhm_max;
     }
 
@@ -752,4 +776,6 @@
         }
 
+        # XXX: The logic below is somewhat messed up. See XXX: ... below
+        #
         # The standard way to do a diff is warp - stack 
         # so we interpret the requested image in that way
@@ -766,4 +792,9 @@
         }
         my $stack_id;
+        if ($image->{diff_mode} == 2) {
+            # XXX: .. stack_id wasn't getting set
+            $stack_id = $stack2;
+            $image->{stack_id} = $stack_id;
+        }
         if ($stack1 and $stack2) {
             # we have a stack - stack diff (well it might be stack - warp....)
@@ -860,15 +891,21 @@
     my $ra         = shift;
     my $dec        = shift;
-    my $dateobs_begin  = shift;
+    my $dateobs_begin  = shift; # these are used for single frame lookups
     my $dateobs_end    = shift;
     my $filter     = shift;
     my $data_group = shift;
     my $option_mask = shift;
-    my $mjd_min = shift;
-    my $mjd_max = shift;
-    my $astrom = shift;
+    my $mjd_min = shift;        # these are used for stack lookups
+    my $mjd_max = shift;        # these are used for stack lookups
     my $verbose    = shift;
 
-    my ($release_name, $survey) = get_release_info($row);
+    my $fwhm_min = getValOrZero($row->{FWHM_MIN});
+    my $fwhm_max = getValOrZero($row->{FWHM_MAX});
+    
+
+    my ($release_name, $survey, $default_tess_id) = get_release_info($row);
+    if (!$tess_id and $default_tess_id) {
+        $tess_id = $default_tess_id;
+    }
 
     my $rowList = [$row];
@@ -878,5 +915,6 @@
 
         my $chips = lookup_by_cam_id_and_coords($ipprc, $imagedb, $stage,
-            $ra, $dec, $need_magic, $dateobs_begin, $dateobs_end, $filter, $data_group, $verbose, $release_name, $survey, $row->{FWHM_MIN}, $row->{FWHM_MAX});
+            $ra, $dec, $need_magic, $dateobs_begin, $dateobs_end, $filter, $data_group, $verbose,
+            $release_name, $survey, $fwhm_min, $fwhm_max);
 
         if (!$chips or scalar @$chips == 0) {
@@ -888,4 +926,5 @@
                     $tess_id, $chip->{component}, $need_magic, 
                     $dateobs_begin, $dateobs_end, $filter, $data_group, $option_mask, $mjd_min, $mjd_max,
+                    $fwhm_min, $fwhm_max,
                     $chip->{astrom}, undef, undef,
                     $verbose);
@@ -906,8 +945,10 @@
             setErrorCodes($rowList, $PSTAMP_NO_IMAGE_MATCH);
         } else {
+            # XXX: We are not applying the fwhm cuts
             foreach my $skycell (@$skycells) {
                 my $these_results = lookup($ipprc, $rowList, $imagedb, "byskycell", $stage, undef,
                     $skycell->{tess_id}, $skycell->{component}, $need_magic, 
                     $dateobs_begin, $dateobs_end, $filter, $data_group, $option_mask, $mjd_min, $mjd_max, 
+                    $fwhm_min, $fwhm_max,
                     undef, $release_name, $survey,
                     $verbose);
@@ -949,8 +990,8 @@
     if ($release_name or $survey) {
         $command = "$releasetool -dbname $imagedb -listrelexp";
-        if (!isnull($survey)) {
-            $command .= " -survey_name $survey";
-        }
-        if (!isnull($release_name)) {
+        if ($survey) {
+            $command .= " -surveyName $survey";
+        }
+        if ($release_name) {
             $command .= " -release_name $release_name";
         } else {
@@ -1302,4 +1343,9 @@
     my $val = shift;
     return (!defined($val) or ($val == 0));
+}
+
+sub getValOrZero {
+    my $val = shift;
+    return iszero($val) ? 0.0 : $val;
 }
 
@@ -1768,10 +1814,20 @@
         $release_name = "";
         # no release check for survey
-        $survey = $row->{SURVEY_NAME};
+        $survey = isnull($row->{SURVEY_NAME}) ? "" : $row->{SURVEY_NAME};
     } else {
+        # if release is given leave survey empty
         $survey = "";
     }
 
-    return ($release_name, $survey);
+    my $tess_id;
+    if ($release_name) {
+        # hack to optimize bycoord and byskycell lookups for well known releases
+        # XXX: todo query database and return a list for the survey or release
+        if ($release_name eq '3PI.PV1') {
+            $tess_id = 'RINGS.V3';
+        }
+    }
+
+    return ($release_name, $survey, $tess_id);
 }
 
