IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 35412


Ignore:
Timestamp:
Apr 19, 2013, 3:39:39 PM (13 years ago)
Author:
eugene
Message:

merged from trunk

Location:
branches/eam_branches/ipp-20130307
Files:
46 edited
4 copied

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20130307/Ohana

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/Ohana/src/libohana/src

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/Ohana/src/opihi

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/Ohana/src/opihi/cmd.astro

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/Ohana/src/opihi/cmd.data

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/Ohana/src/relastro/src

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippScripts/scripts/camera_exp.pl

    r35159 r35412  
    363363    }
    364364    # Construct FPA continuity corrected background images
    365     {
     365    if ($camera =~ /ISP/) {
     366        print "Skipping FPA continuity corrected background images for ISP\n";
     367    } else {
    366368        my $command;
    367369        $command = "$ppImage";
  • branches/eam_branches/ipp-20130307/ippScripts/scripts/chip_imfile.pl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippScripts/scripts/destreak_restore_camera.pl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippScripts/scripts/ipp_apply_burntool_single.pl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippScripts/scripts/magic_destreak.pl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippScripts/scripts/publish_file.pl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippScripts/scripts/relgroup_exp_list.pl

    r35247 r35412  
    1616
    1717
    18 my ($group_id, $group_type, $lap_id, $release_name, $rebuild, $dbname, $no_update, $verbose);
     18my ($group_id, $group_type, $lap_id, $group_name, $release_name, $rebuild, $dbname, $no_update, $verbose);
    1919
    2020GetOptions(
    2121    'group_id=s'    =>      \$group_id,
     22    'group_type=s'  =>      \$group_type,
    2223    'lap_id=s'      =>      \$lap_id,
    23     'group_type=s'  =>      \$group_type,
     24    'group_name=s'  =>      \$group_name,
    2425    'release_name=s' =>     \$release_name,
    2526    'rebuild'       =>      \$rebuild,      # rebuild directory if it exists
     
    3637           -exitval => 3)
    3738        unless $lap_id;
     39    $group_name = "lap_$lap_id";
     40} else {
     41    pod2usage( -msg => "--group_name is required with --group_type $group_type",
     42           -exitval => 3)
     43        unless $group_name;
    3844}
    3945
     
    4854
    4955# XXX: get this from site.config
    50 my $outputBase = "/data/ippc17.0/www/ipp-misc/ps1-data/single-frame/$release_name";
    51 
    52 my $outdir;
    53 if ($group_type eq 'lap') {
    54     $outdir = "$outputBase/lap_$lap_id";
    55     if (-e $outdir) {
    56         if ($rebuild) {
    57             my $rc = system "rm -rf $outdir";
    58             if ($rc) {
    59                 my $status = $rc >> 8;
    60                 my_die("failed to remove existing directory $outdir: $rc $status", $group_id, $PS_EXIT_UNKNOWN_ERROR);
    61             }
    62         } else {
    63             my_die("directory $outdir already exists and --rebuild not supplied", $group_id, $PS_EXIT_UNKNOWN_ERROR);
    64         }
    65     }
    66 } else {
    67     my_die("Not ready to do group_type $group_type\n", $group_id, $PS_EXIT_UNKNOWN_ERROR);
     56my $exposureListRoot = "/data/ippc17.0/www/ipp-misc/ps1-data/single-frame";
     57
     58my $outputBase = "$exposureListRoot/$release_name";
     59
     60if (!-e $outputBase) {
     61    mkdir $outputBase or &my_die("Failed to create $outputBase", $group_id, $PS_EXIT_SYS_ERROR);
     62}
     63
     64my $outdir = "$outputBase/$group_name";
     65if (-e $outdir) {
     66    if ($rebuild) {
     67        my $rc = system "rm -rf $outdir";
     68        if ($rc) {
     69            my $status = $rc >> 8;
     70            my_die("failed to remove existing directory $outdir: $rc $status", $group_id, $PS_EXIT_UNKNOWN_ERROR);
     71        }
     72    } else {
     73        my_die("directory $outdir already exists and --rebuild not supplied", $group_id, $PS_EXIT_UNKNOWN_ERROR);
     74    }
    6875}
    6976
    7077mkdir $outdir or my_die ("failed to create $outdir", $group_id, $PS_EXIT_UNKNOWN_ERROR);
    71 
    72 if (0) {
    73     # XXX: old code from prototype for nightly lists
    74         my $outroot;
    75         my $oh;
    76         my ($year, $month, $day);
    77         if ($outroot) {
    78         die "usage: $0 <year> <month> <day>\n" unless $year and $month and $day;
    79             my $monthdir = sprintf "$outroot/%4d/%02d", $year, $month;
    80             if (! -e $monthdir) {
    81                 die "can't find directory for $year-$month\n";
    82             }
    83             my $daydir = sprintf "$monthdir/%02d", $day;
    84             if (! -e $daydir) {
    85                 mkdir $daydir or die "failed to create $daydir\n";
    86             }
    87             my $outfile = sprintf "$daydir/index.html", $day;
    88             open $oh, ">$outfile" or die "failed to open $outfile";
    89         } else {
    90             $oh = *STDOUT;
    91         }
    92 
    93         my $ticks = timegm(0, 0, 0, $day, $month - 1, $year - 1900);
    94 
    95         my $mjd = 40587 + ($ticks / 86400.);
    96         my $date = sprintf "%04d-%02d-%02d", $year, $month, $day;
    97 }
    9878
    9979my $oh;
     
    10585open $oh2, ">$outfile2" or my_die("failed to open $outfile2", $group_id, $PS_EXIT_UNKNOWN_ERROR);
    10686
    107 my $title = "PS1 Exposure List for $release_name LAP run $lap_id";
     87my $title = "PS1 Exposure List for";
     88if ($group_type eq 'lap') {
     89    $title .= " $release_name LAP run $lap_id";
     90} else {
     91    $title .= " $group_name";
     92}
    10893
    10994my $head = "
     
    125110
    126111
    127 # find all exposures on given day that have a chip run
     112# find all exposures in this relGroup
    128113my $query = "
    129114SELECT
     
    149134$stmt->execute() or my_die("failed to execute query: $stmt->errstr\n", $group_id, $PS_EXIT_UNKNOWN_ERROR);
    150135
    151 printf STDERR "%4d exposures in group for LAP run $lap_id\n", $stmt->rows;
     136printf STDERR "%4d exposures in group for $group_name\n", $stmt->rows;
    152137
    153138# $stmt->dump_results(1000);
  • branches/eam_branches/ipp-20130307/ippScripts/scripts/warp_skycell.pl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippTools/share

  • branches/eam_branches/ipp-20130307/ippTools/share/Makefile.am

    r35350 r35412  
    473473        releasetool_definerelstack.sql \
    474474        releasetool_definerelstack_with_skycal.sql \
     475        releasetool_listrelstack.sql \
    475476        releasetool_definerelgroup_select_lap.sql \
    476477        releasetool_definerelgroup_select_data_group.sql \
  • branches/eam_branches/ipp-20130307/ippTools/share/camtool_find_pendingimfile.sql

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippTools/share/chiptool_setimfiletoupdate.sql

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippTools/share/pstamptool_completedreq.sql

    r29563 r35412  
    88        SELECT count(*) FROM pstampJob
    99        WHERE pstampJob.req_id = pstampRequest.req_id
    10                 AND pstampJob.state != 'stop'
     10                AND pstampJob.state != 'stop'
     11                AND pstampJob.state != 'cancel'
    1112        ) = 0
  • branches/eam_branches/ipp-20130307/ippTools/share/pstamptool_getdependent.sql

    r28145 r35412  
    11SELECT DISTINCT pstampDependent.*
    22FROM pstampDependent
    3 WHERE pstampDependent.state = 'new'
     3WHERE (pstampDependent.state = 'new' OR pstampDependent.state = 'hold')
  • branches/eam_branches/ipp-20130307/ippTools/share/pxadmin_create_tables.sql

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippTools/share/releasetool_listrelexp.sql

    r35213 r35412  
    2525    warpRun.warp_id,
    2626    warpRun.state as warp_state,
     27    warpRun.tess_id,
    2728    rawExp.filter,
    2829    rawExp.dateobs,
  • branches/eam_branches/ipp-20130307/ippTools/share/releasetool_pendingrelgroup.sql

    r35350 r35412  
    55    JOIN ippRelease USING(rel_id)
    66WHERE relGroup.state = 'new'
     7    AND relGroup.fault = 0
  • branches/eam_branches/ipp-20130307/ippTools/share/warptool_towarped.sql

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippTools/src

  • branches/eam_branches/ipp-20130307/ippTools/src/camtool.c

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippTools/src/camtoolConfig.c

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippTools/src/magictool.c

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/eam_branches/ipp-20130307/ippTools/src/pstamptool.c

    r35350 r35412  
    4949static bool revertjobMode(pxConfig *config);
    5050
    51 # if (1)
    52 // these are unused functions -- since they are 'static', this raises an warning
    53 // XXX: They actually are used
    5451static bool addprojectMode(pxConfig *config);
    5552static bool projectMode(pxConfig *config);
     
    6360static bool listfileMode(pxConfig *config);
    6461static bool deletefileMode(pxConfig *config);
    65 # endif
    6662
    6763# define MODECASE(caseName, func) \
     
    10399        MODECASE(PSTAMPTOOL_MODE_STOPDEPENDENTJOB, stopdependentjobMode);
    104100        MODECASE(PSTAMPTOOL_MODE_REVERTJOB, revertjobMode);
    105 # if (1)
    106101        MODECASE(PSTAMPTOOL_MODE_ADDPROJECT, addprojectMode);
    107102        MODECASE(PSTAMPTOOL_MODE_MODPROJECT, modprojectMode);
     
    115110        MODECASE(PSTAMPTOOL_MODE_LISTFILE, listfileMode);
    116111        MODECASE(PSTAMPTOOL_MODE_DELETEFILE, deletefileMode);
    117 # endif
     112
    118113        default:
    119114            psAbort("invalid option (this should not happen)");
     
    624619    if (outdir) {
    625620        psStringAppend(&query, ", outdir = '%s'", outdir);
     621    }
     622    if (username) {
     623        psStringAppend(&query, ", username = '%s'", username);
    626624    }
    627625    if (clearfault) {
     
    12361234    PXOPT_LOOKUP_BOOL(need_magic, config->args, "-need_magic", false);
    12371235    PXOPT_LOOKUP_BOOL(no_create,  config->args, "-no_create", false);
     1236    PXOPT_LOOKUP_BOOL(hold,       config->args, "-hold", false);
    12381237
    12391238    psMetadata *where = psMetadataAlloc();
     
    12431242    PXOPT_COPY_STR(config->args, where, "-component", "component", "==");
    12441243
    1245     // start a transaction eraly so it will contain any row level locks
     1244    // start a transaction early so it will contain any row level locks
    12461245    if (!psDBTransaction(config->dbh)) {
    12471246        psError(PS_ERR_UNKNOWN, false, "database error");
     
    12671266        psError(PS_ERR_UNKNOWN, false, "database error");
    12681267        psFree(query);
     1268        if (!psDBRollback(config->dbh)) {
     1269            psError(PS_ERR_UNKNOWN, false, "database error");
     1270        }
    12691271        return false;
    12701272    }
     
    12741276    if (!output) {
    12751277        psError(PS_ERR_UNKNOWN, false, "database error");
     1278        if (!psDBRollback(config->dbh)) {
     1279            psError(PS_ERR_UNKNOWN, false, "database error");
     1280        }
    12761281        return false;
    12771282    }
     
    12821287            psError(PS_ERR_UNKNOWN, false, "database error");
    12831288            psFree(output);
     1289            if (!psDBRollback(config->dbh)) {
     1290                psError(PS_ERR_UNKNOWN, false, "database error");
     1291            }
    12841292            return false;
    12851293        }
     
    12871295        if (fault > 0) {
    12881296            fprintf(stderr, "existing dependent has fault %d\n", fault);
     1297            if (!psDBRollback(config->dbh)) {
     1298                psError(PS_ERR_UNKNOWN, false, "database error");
     1299            }
     1300            // return the fault to the client. This is used by the postage stamp parser
    12891301            exit (fault);
    12901302        }
     1303        bool commit = false;
     1304        // Check the state of the exisiting dependent. By query it is either
     1305        // new or hold
     1306        psString state = psMetadataLookupStr(NULL, dep, "state");
     1307        if (!hold && !strcmp(state, "hold")) {
     1308            // There is a dependent for this component but it's state is hold.
     1309            // This client needs one that will run.
     1310            // Update the state
     1311            psString updateQuery = NULL;
     1312            psStringAppend(&updateQuery, "UPDATE pstampDependent SET state = 'new' "
     1313                "\nWHERE stage = '%s' AND imagedb = '%s' AND stage_id = %"PRId64 " AND component = '%s'",
     1314                    stage, imagedb, stage_id, component);
     1315
     1316            if (!p_psDBRunQuery(config->dbh, updateQuery)) {
     1317                psError(PS_ERR_UNKNOWN, false, "database error");
     1318                psFree(updateQuery);
     1319                if (!psDBRollback(config->dbh)) {
     1320                    psError(PS_ERR_UNKNOWN, false, "database error");
     1321                }
     1322                return false;
     1323            }
     1324            // set flag to commit this change
     1325            commit = true;
     1326            psFree(updateQuery);
     1327        }
     1328        // print the dep_id for the user
    12911329        printf("%" PRId64 "\n", dep_id);
    12921330        psFree(output);
    1293         if (!psDBRollback(config->dbh)) {
     1331        // now either commit the change or rollback the transaction which releases the lock
     1332        if (commit) {
     1333            if (!psDBCommit(config->dbh)) {
     1334                // rollback
     1335                if (!psDBRollback(config->dbh)) {
     1336                    psError(PS_ERR_UNKNOWN, false, "database error");
     1337                }
    12941338            psError(PS_ERR_UNKNOWN, false, "database error");
     1339            return false;
     1340            }
     1341        } else if (!psDBRollback(config->dbh)) {
     1342            psError(PS_ERR_UNKNOWN, false, "database error");
     1343            return false;
    12951344        }
    12961345        return true;
     
    13101359        config->dbh,
    13111360        0,              // dep_id
    1312         "new",          // state
     1361        hold ? "hold" : "new",          // state
    13131362        stage,
    13141363        stage_id,
  • branches/eam_branches/ipp-20130307/ippTools/src/pstamptoolConfig.c

    r35350 r35412  
    223223    psMetadataAddBool(getdependentArgs,PS_LIST_TAIL, "-need_magic", 0, "define need_magic", false);
    224224    psMetadataAddStr(getdependentArgs, PS_LIST_TAIL, "-outdir", 0,    "define output directory for dependent (required)", NULL);
     225    psMetadataAddBool(getdependentArgs,PS_LIST_TAIL, "-hold", 0, "if creating new dependent set it's state to hold", false);
    225226    psMetadataAddBool(getdependentArgs,PS_LIST_TAIL, "-no_create", 0, "if no matching dependent do not create one", false);
    226227
  • branches/eam_branches/ipp-20130307/ippTools/src/releasetool.c

    r35350 r35412  
    832832    PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
    833833    PXOPT_LOOKUP_BOOL(simple, config->args,  "-simple", false);
     834    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    834835
    835836    // find the parameters of all the exposures that we want to add to the release
     
    852853
    853854    psFree(where);
     855
     856    if (limit) {
     857        psString limitString = psDBGenerateLimitSQL(limit);
     858        psStringAppend(&query, " %s", limitString);
     859        psFree(limitString);
     860    }
    854861
    855862    if (!p_psDBRunQuery(config->dbh, query)) {
     
    968975    psMetadata *where = psMetadataAlloc();
    969976
     977    PXOPT_COPY_S64(config->args, where, "-relstack_id", "relStack.relstack_id", "==");
     978    PXOPT_COPY_S64(config->args, where, "-stack_id",    "relStack.stack_id", "==");
     979    PXOPT_COPY_S64(config->args, where, "-skycal_id",   "relStack.skycal_id", "==");
     980    PXOPT_COPY_S64(config->args, where, "-relstack_id", "relStack.relstack_id", "==");
    970981    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE");
    971982    pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "==");
    972     PXOPT_COPY_STR(config->args, where, "-state",       "relExp.state", "==");
    973     PXOPT_COPY_STR(config->args, where, "-filter",      "rawExp.filter", "LIKE");
    974     PXOPT_COPY_TIME(config->args, where, "-dateobs_begin","rawExp.dateobs", ">=");
    975     PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<=");
    976     PXOPT_COPY_F32(config->args, where, "-fwhm_min",    "skycalResult.fwhm_major", ">=");
     983    PXOPT_COPY_STR(config->args, where, "-state",       "relStack.state", "==");
     984    PXOPT_COPY_STR(config->args, where, "-filter",      "relStack.filter", "LIKE");
     985    PXOPT_COPY_F32(config->args, where, "-mjd_min",    "stackSumSkyfile.mjd_obs", ">=");
     986    PXOPT_COPY_F32(config->args, where, "-mjd_max",    "stackSumSkyfile.mjd_obs", "<=");
     987    PXOPT_COPY_F32(config->args, where, "-fwhm_min",    "skycalResult.fwhm_minor", ">=");
    977988    PXOPT_COPY_F32(config->args, where, "-fwhm_max",    "skycalresult.fwhm_major", "<=");
    978     PXOPT_COPY_STR(config->args, where, "-exp_name",    "rawExp.exp_ame", "==");
    979     PXOPT_COPY_S64(config->args, where, "-exp_id",      "relExp.exp_id", "==");
    980     PXOPT_COPY_S64(config->args, where, "-chip_id",     "relExp.chip_id", "==");
    981     PXOPT_COPY_S64(config->args, where, "-cam_id",      "relExp.cam_id", "==");
    982     PXOPT_COPY_S64(config->args, where, "-warp_id",     "warpRun.warp_id", "==");
    983     PXOPT_COPY_STR(config->args, where, "-chip_data_group", "chipRun.data_group", "LIKE");
    984     PXOPT_COPY_STR(config->args, where, "-cam_data_group",  "camRun.data_group", "LIKE");
    985     PXOPT_COPY_STR(config->args, where, "-warp_data_group", "warpRun.data_group", "LIKE");
     989    PXOPT_COPY_STR(config->args, where, "-tess_id",     "relStack.tess_id", "==");
     990    PXOPT_COPY_STR(config->args, where, "-skycell_id",  "relStack.skycell_id", "LIKE");
     991    PXOPT_COPY_STR(config->args, where, "-stack_data_group",  "stackRun.data_group", "LIKE");
     992    PXOPT_COPY_STR(config->args, where, "-skycal_data_group", "skycalRun.data_group", "LIKE");
    986993
    987994    PXOPT_COPY_STR(config->args, where, "-surveyName",  "survey.surveyName", "LIKE");
    988995    PXOPT_COPY_S32(config->args, where, "-rel_id",      "relExp.rel_id", "==");
     996    pxskycellAddWhere(config, where);
    989997
    990998    PXOPT_LOOKUP_BOOL(priority_order, config->args, "-priority_order", false);
     
    9931001    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    9941002
    995     psString query = pxDataGet("releasetool_listrelexp.sql");
     1003    psString query = pxDataGet("releasetool_listrelstack.sql");
    9961004    if (!query) {
    9971005        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    998         return false;
    999     }
    1000 
    1001     psString where2 = NULL;
    1002     if (!pxspaceAddWhere(config, &where2, "rawExp")) {
    1003         psError(psErrorCodeLast(), false, "pxspaceAddWhere failed");
    10041006        return false;
    10051007    }
     
    10091011        psStringAppend(&query, "\nWHERE %s", whereClause);
    10101012        psFree(whereClause);
    1011     } else if (where2) {
    1012         psStringAppend(&query, "\nWHERE ");
    10131013    } else {
    10141014        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n");
     
    10171017    }
    10181018
    1019     if (where2) {
    1020         psStringAppend(&query, "\n%s", where2);
    1021         psFree(where2);
    1022     }
    1023 
    10241019    if (priority_order) {
    1025         psStringAppend(&query, "\nAND priority > 0 order by exp_id, priority");
     1020        psStringAppend(&query, "\nAND priority > 0 order by stack_id, priority");
    10261021    }
    10271022
     
    10511046    }
    10521047
    1053     if (!ippdbPrintMetadatas(stdout, output, "relExp", !simple)) {
     1048    if (!ippdbPrintMetadatas(stdout, output, "relStack", !simple)) {
    10541049        psError(PS_ERR_UNKNOWN, false, "failed to print array");
    10551050        psFree(output);
     
    13311326    PS_ASSERT_PTR_NON_NULL(config, false);
    13321327
    1333     PXOPT_LOOKUP_S32(group_id, config->args,      "-group_id", true, false);
     1328    PXOPT_LOOKUP_S32(group_id, config->args,      "-group_id", false, false);
     1329    PXOPT_LOOKUP_STR(group_name, config->args,    "-group_name",  false, false);
     1330    if (!group_id && !group_name) {
     1331        psError(PXTOOLS_ERR_CONFIG, true, "either group_id or group_name is required\n");
     1332        return false;
     1333    }
    13341334
    13351335    PXOPT_LOOKUP_STR(state,    config->args,    "-set_state",  false, false);
     
    13521352
    13531353    PXOPT_COPY_S64(config->args, where, "-group_id", "relGroup.group_id", "==");
     1354    PXOPT_COPY_STR(config->args, where, "-group_name", "relGroup.group_name", "==");
    13541355    // XXX TODO if label is enabled (for changing label or state for a block) we should
    13551356    // disallow setting some parameters such as exp_list_path
  • branches/eam_branches/ipp-20130307/ippTools/src/releasetoolConfig.c

    r35350 r35412  
    195195    psMetadataAddF32(definerelstackArgs,  PS_LIST_TAIL, "-set_zpt_stdev", 0,  "define zero point stdev", NAN);
    196196    psMetadataAddF32(definerelstackArgs,  PS_LIST_TAIL, "-set_fwhm_major", 0, "define fwhm_major", NAN);
    197     psMetadataAddStr(definerelstackArgs,  PS_LIST_TAIL, "-set_path_base", 0,  "define state (required)", NULL);
     197    psMetadataAddStr(definerelstackArgs,  PS_LIST_TAIL, "-set_path_base", 0,  "define state", NULL);
    198198    psMetadataAddS16(definerelstackArgs,  PS_LIST_TAIL, "-set_fault", 0,      "define fault", 0);
    199199
    200     psMetadataAddBool(definerelstackArgs, PS_LIST_TAIL, "-pretend",  0, "do not actually modify the database", false);
     200    psMetadataAddBool(definerelstackArgs, PS_LIST_TAIL, "-pretend", 0, "do not actually modify the database", false);
    201201    psMetadataAddBool(definerelstackArgs, PS_LIST_TAIL, "-simple",  0, "use the simple output format", false);
     202    psMetadataAddU64(definerelstackArgs, PS_LIST_TAIL,  "-limit",   0, "limit result set to N items", 0);
     203
     204    // -listrelstack
     205    psMetadata *listrelstackArgs = psMetadataAlloc();
     206    psMetadataAddS64(listrelstackArgs, PS_LIST_TAIL,  "-relstack_id", 0,   "select by released exposure ID", 0);
     207    psMetadataAddS64(listrelstackArgs, PS_LIST_TAIL,  "-stack_id", 0,   "select by stack ID", 0);
     208    psMetadataAddS64(listrelstackArgs, PS_LIST_TAIL,  "-skycal_id", 0,   "select by skycal ID", 0);
     209    psMetadataAddStr(listrelstackArgs,  PS_LIST_TAIL, "-release_name", 0, "select by release name (LIKE comparision)", NULL);
     210    psMetadataAddStr(listrelstackArgs,  PS_LIST_TAIL, "-release_state", PS_META_DUPLICATE_OK, "select by release state", NULL);
     211    psMetadataAddStr(listrelstackArgs,  PS_LIST_TAIL, "-state", 0,        "select by released stack state", NULL);
     212
     213    psMetadataAddStr(listrelstackArgs,  PS_LIST_TAIL, "-filter", 0,       "select by filter name (LIKE comparison)", NULL);
     214    // psMetadataAddTime(listrelstackArgs, PS_LIST_TAIL, "-dateobs_begin", 0,"search for exposures by time (>=)", NULL);
     215    // psMetadataAddTime(listrelstackArgs, PS_LIST_TAIL, "-dateobs_end", 0,  "search for exposures by time (<=)", NULL);
     216
     217    pxskycellAddArguments(listrelstackArgs);
     218
     219    psMetadataAddF32(listrelstackArgs,  PS_LIST_TAIL, "-fwhm_min", 0, "search by measured seeing (>=)", NAN);
     220    psMetadataAddF32(listrelstackArgs,  PS_LIST_TAIL, "-fwhm_max", 0, "search by seeing (<=)", NAN);
     221
     222    psMetadataAddStr(listrelstackArgs,  PS_LIST_TAIL, "-tess_id", 0, "select by tess_id", NULL);
     223    psMetadataAddStr(listrelstackArgs,  PS_LIST_TAIL, "-skycell_id", 0, "select by skycell_id (LIKE comparision)", NULL);
     224
     225    psMetadataAddStr(listrelstackArgs,  PS_LIST_TAIL, "-stack_data_group", 0, "select by stackRun.data_group (LIKE comparison)", NULL);
     226    psMetadataAddStr(listrelstackArgs,  PS_LIST_TAIL, "-skycal_data_group", 0, "select by skycalRun.data_group (LIKE comparison)", NULL);
     227
     228    psMetadataAddStr(listrelstackArgs,  PS_LIST_TAIL, "-surveyName", 0, "select by survey name (LIKE comparision)", NULL);
     229    psMetadataAddS64(listrelstackArgs,  PS_LIST_TAIL, "-rel_id", 0, "select by release ID", 0);
     230
     231    psMetadataAddBool(listrelstackArgs, PS_LIST_TAIL, "-priority_order",   0, "order by release priority", false);
     232
     233    psMetadataAddU64(listrelstackArgs,  PS_LIST_TAIL, "-limit",       0, "limit result set to N items", 0);
     234    psMetadataAddBool(listrelstackArgs, PS_LIST_TAIL, "-simple",      0, "use the simple output format", false);
     235
    202236
    203237    // -definerelgroup
     
    240274    psMetadata *updaterelgroupArgs = psMetadataAlloc();
    241275
    242     psMetadataAddS32(updaterelgroupArgs,  PS_LIST_TAIL, "-group_id", 0,   "select by group ID (required)", 0);
     276    psMetadataAddS32(updaterelgroupArgs,  PS_LIST_TAIL, "-group_id", 0,   "select by group ID",  0);
     277    psMetadataAddStr(updaterelgroupArgs,  PS_LIST_TAIL, "-group_name", 0, "select by group name", 0);
    243278
    244279        // parameters of the relGroup
     
    272307
    273308    PXOPT_ADD_MODE("-definerelstack",     "define a released stack",    RELEASETOOL_MODE_DEFINERELSTACK,  definerelstackArgs);
     309    PXOPT_ADD_MODE("-listrelstack",       "list released stacks",      RELEASETOOL_MODE_LISTRELSTACK,    listrelstackArgs);
    274310
    275311    PXOPT_ADD_MODE("-definerelgroup",     "define a group of exposures", RELEASETOOL_MODE_DEFINERELGROUP,  definerelgroupArgs);
  • branches/eam_branches/ipp-20130307/psLib/src/math/Makefile.am

    r16793 r35412  
    1616        psMinimizePowell.c \
    1717        psMinimizePolyFit.c \
     18        psMixtureModels.c \
    1819        psPolynomial.c \
    1920        psPolynomialMetadata.c \
     
    4546        psMinimizePowell.h \
    4647        psMinimizePolyFit.h \
     48        psMixtureModels.h \
    4749        psPolynomial.h \
    4850        psPolynomialMetadata.h \
  • branches/eam_branches/ipp-20130307/psLib/src/pslib_strict.h

    r32251 r35412  
    7676#include "psMinimizePowell.h"
    7777#include "psMinimizePolyFit.h"
     78#include "psMixtureModels.h"
    7879#include "psMutex.h"
    7980#include "psRandom.h"
  • branches/eam_branches/ipp-20130307/pstamp/scripts

  • branches/eam_branches/ipp-20130307/pstamp/scripts/psmkreq

    r34611 r35412  
    2828my ($ra, $dec, $x, $y, $list, $output, $req_name, $req_name_base);
    2929
    30 my ($image, $mask, $variance, $cmf, $psf, $backmdl, $inverse);
    31 my ($unconvolved, $use_imfile_id, $no_wait);
     30my ($image, $mask, $variance, $jpeg, $cmf, $psf, $backmdl, $inverse);
     31my ($convolved, $unconvolved, $uncompressed, $use_imfile_id, $no_wait);
     32
     33# new header keywords for version 2
     34my $action = 'PROCESS';
     35my $email = 'null';
    3236
    3337my $default_size = 100;
     
    5256my $comment;
    5357
     58# new request specification columns for version 2
     59my $survey_name ='null';
     60my $release_name = 'null';
     61my $run_type ='null';
     62my $fwhm_min = 0;
     63my $fwhm_max = 0;
     64
     65
    5466my $missing_tools;
    5567my $pstamp_request_file  = can_run('pstamp_request_file')  or (warn "Can't find required program pstamp_request_file"  and $missing_tools = 1);
     
    6274GetOptions(
    6375    'list=s'            => \$list,          # list of coordinates if undef ra and dec or x and y are required
    64     'ra=s'              => \$ra,            #
     76    'ra=s'              => \$ra,
    6577    'dec=s'             => \$dec,
    6678    'x=s'               => \$x,
     
    8799    'comment=s'         => \$comment,
    88100
     101    'survey=s'          => \$survey_name,
     102    'release=s'         => \$release_name,
     103    'run_type=s'        => \$run_type,
     104    'fwhm_min=s'        => \$fwhm_min,
     105    'fwhm_max=s'        => \$fwhm_max,
     106
    89107    'option_mask=i'     => \$option_mask,
    90108    'image'             => \$image,
    91109    'mask'              => \$mask,
     110    'jpeg'              => \$jpeg,
    92111    'variance'          => \$variance,
    93112    'cmf'               => \$cmf,
     
    96115    'inverse'           => \$inverse,
    97116    'unconvolved'       => \$unconvolved,
     117    'convolved'         => \$convolved,
     118    'uncompressed'      => \$uncompressed,
    98119    'use_imfile_id'     => \$use_imfile_id,
    99120    'do_not_wait'       => \$no_wait,
     121
     122    'action=s'          => \$action,
     123    'email=s'           => \$email,
    100124
    101125    'verbose'           => \$verbose,
     
    156180}
    157181
     182if ($stage eq 'stack') {
     183    # default is to do convolved stack
     184    unless (defined $option_mask || $convolved) {
     185        $unconvolved = 1;
     186    }
     187}
     188
    158189checkFilter($filter, 'null', $filter)  if $filter;
    159190checkMJD($mjd_min, 0, "") if $mjd_min;
     
    167198        $option_mask |= $PSTAMP_SELECT_MASK     if $mask;
    168199        $option_mask |= $PSTAMP_SELECT_VARIANCE if $variance;
     200        $option_mask |= $PSTAMP_SELECT_JPEG     if $jpeg;
     201
     202        # if no image was requested make a stamp of the image
    169203        $option_mask = $PSTAMP_SELECT_IMAGE    if $option_mask == 0;
    170204
    171         # if no image was requested make a stamp of the image
    172205
    173206        $option_mask |= $PSTAMP_SELECT_CMF      if $cmf;
     
    207240} else {
    208241    $rows = [];
    209     push @$rows, buildRow("", $comment, $x, $y, $filter, $mjd_min, $mjd_max);
     242    push @$rows, buildRow("", $comment, 1, $x, $y, $filter, $mjd_min, $mjd_max);
    210243}
    211244
    212245my ($tdf, $table_def_name) = tempfile ("/tmp/tabledef.XXXX", UNLINK => !$save_temps);
    213 print $tdf "$req_name 1\n";
     246my $line = "$req_name 2 $action $email";
     247print "$line\n" if $verbose;
     248print $tdf "$line\n";
    214249my $rownum = 0;
    215250foreach my $row (@$rows) {
    216251    $rownum++;
    217252    my $line = "$rownum $row->{ra}\t$row->{dec}\t$width $height"
    218         . " $coord_mask $job_type $option_mask $project $req_type"
     253        . " $coord_mask $job_type $option_mask $project $survey_name $release_name $req_type"
    219254        . " $stage $id $tess_id $component $data_group"
    220         . " $row->{filter} $row->{mjd_min} $row->{mjd_max}";
     255        . " $row->{filter} $row->{mjd_min} $row->{mjd_max} $run_type $fwhm_min $fwhm_max";
    221256
    222257    if ($row->{comment} and $row->{comment} ne '') {
     
    235270    $command .= " --output $output" if $output;
    236271    my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) =
    237         run(command => $command, verbose => 0);
     272        run(command => $command, verbose => $verbose);
    238273    unless ($success) {
    239274        print STDERR @$stderr_buf;
     
    274309
    275310    my $row = {};
    276     $row->{ra}      = checkRA($vals[0], $linenumber);
    277     $row->{dec}     = checkDEC($vals[1], $linenumber);
    278     $row->{filter}  = checkFilter($vals[2], $filter, $linenumber);
    279     $row->{mjd_min} = checkMJD($vals[3], $mjd_min, $linenumber);;
    280     $row->{mjd_max} = checkMJD($vals[4], $mjd_max, $linenumber);;
     311    $row->{rownum}  = checkRownum($vals[0], $linenumber);
     312    $row->{ra}      = checkRA($vals[1], $linenumber);
     313    $row->{dec}     = checkDEC($vals[2], $linenumber);
     314    $row->{filter}  = checkFilter($vals[3], $filter, $linenumber);
     315    $row->{mjd_min} = checkMJD($vals[4], $mjd_min, $linenumber);;
     316    $row->{mjd_max} = checkMJD($vals[5], $mjd_max, $linenumber);;
    281317    $row->{comment} = $comment;
    282318
     
    305341    my $linenumber = shift;
    306342
    307     my $result;
     343   my $result;
    308344    if ($c =~ /\:/) {
    309345        # sexagesmial format not valid for pixel coordinates
     
    329365}
    330366
     367sub checkRownum {
     368    my $rownum = shift;
     369    my $linenumber = shift;
     370    die "rownum can not be null at $linenumber\n" unless defined $rownum;
     371
     372    # XXX: For now just check that rownum is defined and a single word
     373    # extend this. Should we require a number?
     374    my @words = split " ", $rownum;
     375    die "$rownum is not a vaild rownum at $linenumber\n" unless (scalar @words) == 1;
     376}
     377
    331378sub checkRA {
    332379    my $ra = shift;
     
    335382
    336383    if ($ra =~ /\:/) {
     384        # assume RA is in hours:minutes:seconds
    337385        return $checked * 360. / 24.;
    338386    } else {
  • branches/eam_branches/ipp-20130307/pstamp/scripts/psstatus

    r30692 r35412  
    6868    IFNULL(depcount, 0) AS 'Image updates'
    6969    , timestamp AS 'last state change (UTC)'
     70    , registered AS 'Submit time (UTC)'
    7071FROM (
    7172    SELECT
     
    7778        pstampRequest.fault,
    7879        timestamp,
     80        registered,
    7981        IFNULL(priority,10000) AS priority
    8082FROM pstampRequest
    8183LEFT JOIN Label USING(label)
    8284    WHERE pstampRequest.state = 'run' or pstampRequest.state ='new'
     85        OR pstampRequest.state = 'parsed'
    8386   --     OR pstampRequest.state = 'run.wait'
    8487) as unfinishedReq
     
    8992FROM pstampRequest JOIN pstampJob USING(req_id)
    9093    WHERE (pstampRequest.state = 'run' or pstampRequest.state = 'new'
    91         OR pstampRequest.state = 'run.wait')
     94        OR pstampRequest.state = 'run.wait'
     95        OR pstampRequest.state = 'parsed')
    9296    GROUP BY req_id
    9397) as rowCounts
     
    101105    JOIN pstampDependent USING(dep_id)
    102106    WHERE (pstampRequest.state = 'run' or pstampRequest.state = 'new'
     107            OR pstampRequest.state = 'parsed'
    103108            OR pstampRequest.state = 'run.wait')
    104109        AND dep_id > 0
     
    178183    IFNULL(faulted,0) AS 'Faulted Jobs',
    179184    IFNULL(depcount, 0) AS 'Image updates completed',
    180     timestamp AS 'Completion Time (UTC)'
     185    timestamp AS 'Completion Time (UTC)',
     186    registered AS 'Submit Time (UTC)'
    181187FROM (
    182188    SELECT
     
    187193--    pstampRequest.state,
    188194--    pstampRequest.fault,
    189     timestamp
     195    timestamp,
     196    registered
    190197FROM pstampRequest
    191198    WHERE pstampRequest.state = 'stop'
  • branches/eam_branches/ipp-20130307/pstamp/scripts/pstamp_cleanup.pl

    r34231 r35412  
    183183    }
    184184
    185     my $command = "rm -r $dir";
     185    # do an ls of the directory before starting
     186#    print "directory listing for $dir\n";
     187#    system "ls $dir";
     188
     189    my $command = "rm -rf $dir";
    186190    unless ($no_update) {
    187191        my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) =
    188192            run(command => $command, verbose => $verbose);
    189193        unless ($success) {
    190             my $rc = $error_code >> 8;
    191             my_die("Unable to perform $command return status: $rc", $req_id, $rc);
     194            if (-e $dir) {
     195                my $rc = $error_code >> 8;
     196                my_die("Unable to perform $command return status: $rc", $req_id, $rc);
     197            } else {
     198                print STDERR "rm claimed to fail but directory no longer exists\n";
     199            }
    192200        }
    193201    } else {
  • branches/eam_branches/ipp-20130307/pstamp/scripts/pstamp_finish.pl

    r34447 r35412  
    107107    my ($header, $rows) = read_request_file($req_file);
    108108
    109     my $action = $header->{ACTION};
    110 
    111     if (!$header or (($action eq 'PROCESS') and !$rows)) {
     109    if (!$header or !$rows) {
    112110        # Since a request got queued, the request file must have been readable at some point
    113111        my_die("failed to read request file $req_file", $req_id, $PS_EXIT_CONFIG_ERROR);
     
    128126
    129127    my $request_fault = 0;
    130     if ($action eq 'PROCESS') {
     128    {
    131129        # The results table definition file
    132130        my ($tdf, $table_def_name) = tempfile ("$outdir/tabledef.XXXX", UNLINK => !$save_temps);
     
    238236                } else {
    239237                    my_die("No reglist for successful job: $job_id", $req_id, $PS_EXIT_PROG_ERROR)
    240                         if $fault eq $PSTAMP_SUCCESS;
     238                        if $job->{state} eq 'stop' and $fault eq $PSTAMP_SUCCESS;
    241239                    print STDERR "no reglist file for job $job_id\n" if $verbose;
    242240                    print $tdf "$rownum|$fault|$error_string|0|$job_id|";
     
    273271            }
    274272        }
    275     } elsif ($action ne 'LIST') {
    276         my_die("Unexpected action $action found", $req_id, $PS_EXIT_PROG_ERROR);
    277     } else {
    278         # pstampparse did all of the work
    279273    }
    280274
  • branches/eam_branches/ipp-20130307/pstamp/scripts/pstamp_job_run.pl

    r33512 r35412  
    113113
    114114    if ($stage eq "raw") {
     115        # zap options that don't apply to raw stage
    115116        $options &= ~($PSTAMP_SELECT_MASK | $PSTAMP_SELECT_VARIANCE);
    116117    }
     
    136137        $argString .= " -astrom $params->{astrom}";
    137138        push @file_list, $params->{astrom};
     139    }
     140
     141    if ($options & $PSTAMP_SELECT_SOURCES) {
     142        # Extract sources from astrometry file if provided. This will be the smf for chip stage
     143        # or the skycal cmf for stacks
     144        if ($params->{astrom}) {
     145            $argString .= " -write_cmf";
     146            if ($stage eq 'stack') {
     147                # Set psphot recipe to STACKPHOT so that the extended source paramters will
     148                # be copied from the cmf file.
     149                $argString .= " -recipe PSPHOT STACKPHOT"
     150            }
     151        } elsif ($params->{cmf}) {
     152            $argString .= " -write_cmf";
     153            push @file_list, $params->{cmf};
     154        } else {
     155            print "Could not find suitable sources file will not write cmf\n";
     156        }
    138157    }
    139158
     
    254273                           $PSTAMP_SELECT_MASK     => "mk.fits",
    255274                           $PSTAMP_SELECT_VARIANCE => "wt.fits",
     275                           $PSTAMP_SELECT_SOURCES  => "cmf",
    256276                           $PSTAMP_SELECT_JPEG     => "jpg");
    257277
    258         my $output_mask = $options & ($PSTAMP_SELECT_IMAGE | $PSTAMP_SELECT_MASK | $PSTAMP_SELECT_VARIANCE | $PSTAMP_SELECT_JPEG);
     278        my $output_mask = $options & ($PSTAMP_SELECT_IMAGE | $PSTAMP_SELECT_MASK | $PSTAMP_SELECT_VARIANCE | $PSTAMP_SELECT_JPEG | $PSTAMP_SELECT_SOURCES);
    259279
    260280        foreach my $key (keys (%extensions)) {
     
    400420        my $pattern_file = $params->{pattern} if ($options & $PSTAMP_SELECT_BACKMDL);
    401421        my $cmf_file;
    402         if ($stage ne 'chip') {
    403             # we don't ship chip stage cmf files because they may not be censored
    404             $cmf_file = $params->{cmf} if ($options & $PSTAMP_SELECT_CMF);
    405         }
     422#        if ($stage ne 'chip') {
     423#            # we don't ship chip stage cmf files because they may not be censored
     424#            $cmf_file = $params->{cmf} if ($options & $PSTAMP_SELECT_CMF);
     425#        }
    406426
    407427        my $outdir = dirname($output_base);
  • branches/eam_branches/ipp-20130307/pstamp/scripts/pstamp_parser_run.pl

    r34232 r35412  
    158158my $request_fault = $PSTAMP_INVALID_REQUEST;
    159159
     160# default action is to process the request after parsing. This can be overridden by
     161# PREVIEW mode for pstamp requests
     162my $action = 'PROCESS';
     163
    160164if (-r $uri) {
    161165    # run the appropriate parse command to parse the queue the jobs for this request
    162166    # first check the extension header to find the EXTNAME
    163     $request_type = find_request_type($uri);
     167    $request_type = find_request_type($uri, \$action);
    164168
    165169    if ($request_type) {
     
    240244
    241245    if ($success) {
    242         $newState = 'run';
     246        # XXX: This bit of the postage stamp request API has slipped in here because we need to control
     247        # the new state of the request
     248        if ($action eq 'PROCESS') {
     249            $newState = 'run';
     250        } elsif ($action eq 'PREVIEW') {
     251            $newState = 'parsed';
     252        } else {
     253            print STDERR "WARNING Ignoring unexpected value for ACTION found in request header: $action\n";
     254        }
    243255    } else {
    244256        $fault = $error_code >> 8;
     
    275287    # find the EXTNAME in the input fits table
    276288    my $file_name = shift;
    277     my $out = `echo $file_name | fields -x 0 EXTNAME`;
     289    my $r_action = shift;
     290
     291    my $out = `echo $file_name | fields -x 0 EXTNAME ACTION`;
    278292
    279293    if ($out) {
    280294        # output from fields is filename value
    281         my ($dummy, $extname) = split " ", $out;
     295        my ($dummy, $extname, $action) = split " ", $out;
     296
     297        # Set the action if it is defined in the request header
     298        # XXX:consider doing this only if extname is PS1_PS_REQUSET
     299        $$r_action = $action if ($action);
    282300
    283301        return $extname;
  • branches/eam_branches/ipp-20130307/pstamp/scripts/pstamp_request_file

    r34447 r35412  
    5454                    value => undef
    5555        },
    56         { name => 'USERNAME',
    57                     writetype => TSTRING,
    58                     comment => 'username for request (optional)',
    59                     value => undef
    60         },
     56#        { name => 'USERNAME',
     57#                    writetype => TSTRING,
     58#                    comment => 'username for request (optional)',
     59#                    value => undef
     60#        },
    6161        { name => 'EMAIL',
    6262                    writetype => TSTRING,
     
    9797        { name => 'MJD_MIN',    type => 'D',   writetype => TDOUBLE },
    9898        { name => 'MJD_MAX',    type => 'D',   writetype => TDOUBLE },
     99        # new in version 2
    99100        { name => 'RUN_TYPE',   type => '16A', writetype => TSTRING },
     101        { name => 'FWHM_MIN',   type => 'D',   writetype => TDOUBLE },
     102        { name => 'FWHM_MAX',   type => 'D',   writetype => TDOUBLE },
    100103
    101104        { name => 'COMMENT ',   type => '64A', writetype => TSTRING },
     
    326329        pop @colData;
    327330        pop @colData;
     331        pop @colData;
     332        pop @colData;
    328333    }
    329334
     
    346351        }
    347352        # trim leading whitespace from comment
    348         $comment =~ s/^\s+//;
     353        $comment =~ s/^\s+// if $comment;
    349354        if ($comment) {
    350355            if ($comment =~ /#/) {
  • branches/eam_branches/ipp-20130307/pstamp/scripts/pstamp_webrequest.pl

    r29383 r35412  
    55#
    66# The arguments are the command line parameters for the program psmkreq
    7 #
    8 # Unless the argument -list is provided the output is the request id for the resulting request
    9 #
    10 # If -list is the first argument, the request file is built and parsed and the
    11 # the selected "input" uris are listed on stdout.
    127#
    138# Note: Despite the name there nothing particularly web specific about this program.
     
    2318
    2419my $host = hostname();
    25 my $verbose = 1;
     20my $verbose = 0;
    2621my $dbname;
    2722my $dbserver;
     23my $pretend;
     24my $label = 'WEB';
     25my $req_name_prefix = 'web';
     26my $username;
    2827
    2928GetOptions(
    3029    'dbname=s'      =>  \$dbname,
    3130    'dbserver=s'    =>  \$dbserver,
    32     'verbose'       => \$verbose,
     31    'label=s'       =>  \$label,
     32    'username=s'    =>  \$username,
     33    'prefix=s'      =>  \$req_name_prefix,
     34    'pretend'       =>  \$pretend,
     35    'verbose'       =>  \$verbose,
    3336);
    3437
     
    3639
    3740if ($verbose) {
    38     print "\n\n";
    39     print "Starting script $0 on $host\n\n";
     41    print STDERR "\n\n";
     42    print STDERR "Starting script $0 on $host\n\n";
    4043}
    4144
     
    7073# make a request file
    7174my $cur_dir = getcwd();
     75
    7276#print STDERR "cur_dir is $cur_dir\n";
    7377
    74 my $datestr = strftime "%Y%m%d", gmtime;
     78my $datestr = strftime "%Y/%m/%d", gmtime;
    7579my $datedir = "$cur_dir/webreq/$datestr";
    7680if (! -e $datedir ) {
    77     if (!  mkdir $datedir ) {
    78         print STDERR  "failed to create working directory $datedir";
     81    my $rc = system "mkdir -p $datedir";
     82    if ($rc) {
     83        my $status = $rc >> 8;
     84        print STDERR  "failed to create working directory $datedir: $rc $status";
    7985        exit $PS_EXIT_CONFIG_ERROR;
    8086    }
    8187}
    8288
    83 my $request_name = "web_" . get_webreq_num();
     89my $request_name = $req_name_prefix . '_' . get_webreq_num();
    8490my $request_file = "$datedir/$request_name.fits";
    8591{
     
    96102# Queue the request
    97103my $req_id = 0;
    98 {
     104unless ($pretend) {
    99105
    100106    my $command = "$pstamptool -addreq -uri $request_file -ds_id 0";
    101     $command .= " -label WEB";
     107    $command .= " -label $label";
     108    $command .= " -username $username" if $username;
    102109    $command .= " -dbname $dbname" if $dbname;
    103110    $command .= " -dbserver $dbserver" if $dbserver;
     
    109116    }
    110117    $req_id = ${$stdout_buf}[0];
     118    chomp $req_id;
    111119}
    112120
  • branches/eam_branches/ipp-20130307/pstamp/scripts/pstampparse.pl

    r34447 r35412  
    2727my $outdir;
    2828my $product;
    29 my $label;
     29my $label = "";
    3030my $save_temps;
    3131my $no_update;
     
    5757    die "outdir is required"  if !$outdir;
    5858    die "product is required"  if !$product;
     59} else {
     60    $req_id = 0;
     61    $outdir = "nowhere";
     62    $product = "dummy";
    5963}
    6064
     
    8387$pstamptool .= " -dbserver $dbserver" if $dbserver;
    8488
    85 # list_job is a deugging mode
    86 $no_update = 1 if $mode eq "list_job";
     89# If $mode is not queue_job we are using a debugging mode
     90# do not update the database
     91$no_update = 1 if $mode ne "queue_job";
    8792
    8893my $mdcParser = PS::IPP::Metadata::Config->new; # Parser for metadata config files
    8994
    9095#
    91 # get the data from the extension header
     96# Read the keywords from the extension header
    9297#
    9398my $fields_output;
    9499{
    95     my $command = "echo $request_file_name | $fields -x 0 EXTNAME EXTVER REQ_NAME ACTION USER EMAIL";
     100    my $command = "echo $request_file_name | $fields -x 0 EXTNAME EXTVER REQ_NAME ACTION EMAIL";
    96101    my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) =
    97102        run(command => $command, verbose => $verbose);
    98     # fields doesn't return zero when it succeeds
    99     #unless ($success) {
    100     #    print STDERR @$stderr_buf;
    101     #}
     103
     104    # note fields doesn't return zero when it succeeds.
    102105    $fields_output = join "", @$stdout_buf;
    103106}
    104 my (undef, $extname, $extver, $req_name, $action, $username, $email) = split " ", $fields_output;
     107my (undef, $extname, $extver, $req_name, $action, $email) = split " ", $fields_output;
    105108
    106109# make sure the file contains what we are expecting
    107 # This program shouldn't have been run if the request file is bogus.
    108 # No need to notify the client
    109 my_die("$request_file_name is not a PS1_PS_REQEST", $PS_EXIT_PROG_ERROR) if $extname ne "PS1_PS_REQUEST";
    110 my_die("REQ_NAME not found in $request_file_name", $PS_EXIT_PROG_ERROR)  if (!$req_name);
    111 my_die("wrong EXTVER $extver found in $request_file_name", $PS_EXIT_PROG_ERROR) if ($extver ne "1" and $extver ne "2");
    112 
     110# pstamp_parser_run.pl would not have run this program unless the request file was ok
     111my_die("$request_file_name does not contain EXTNAME\n", $PS_EXIT_PROG_ERROR) if !$extname;
     112my_die("$request_file_name is not a PS1_PS_REQUEST\n", $PS_EXIT_PROG_ERROR) if $extname ne "PS1_PS_REQUEST";
     113my_die("REQ_NAME not found in $request_file_name\n", $PS_EXIT_PROG_ERROR)  if (!$req_name);
     114my_die("wrong EXTVER $extver found in $request_file_name\n", $PS_EXIT_PROG_ERROR) if ($extver ne "1" and $extver ne "2");
     115
     116if ($extver >= 2) {
     117    # We have a version 2 file. Require that the new keywords be supplied.
     118    my_die("action not supplied in version $extver request file $request_file_name\n", $PSTAMP_INVALID_REQUEST) unless defined $action;
     119
     120    my_die("invalid action: $action supplied in version $extver request file $request_file_name\n", $PSTAMP_INVALID_REQUEST) unless (uc($action) eq 'PROCESS' or uc($action) eq 'PREVIEW');
     121
     122    my_die("email not supplied in version $extver request file $request_file_name\n", $PSTAMP_INVALID_REQUEST) unless $email;
     123    # XXX check for "valid" $email
     124} else {
     125    # for version 1 file the action is process and email is not used
     126    $action = 'PROCESS';
     127    $email = 'null';
     128}
     129
     130print "Request Header Keywords EXTVER: $extver REQ_NAME: $req_name ACTION: $action EMAIL: $email\n";
    113131
    114132# check for duplicate request name
     
    161179    # the output data store's product name
    162180    my $command = "$pstamptool -updatereq -req_id $req_id  -set_name $req_name";
     181    $command .= " -set_username $email" if $email ne 'null';
    163182    $command .= " -set_outProduct $product";
    164183    $command .= " -set_label $label" if $label_changed;
     
    174193
    175194#
    176 # now convert the request table to an array of metadata config docs
     195# now convert the request table to an array of metadatas
    177196#
    178197
     
    191210    my $dtime_request_file = gettimeofday() - $start_request_file;
    192211    print "Time to read and parse request file: $dtime_request_file\n";
    193 
    194 }
    195 
    196 #
    197 # Loop over rows in the request file collecting consecutive rows that have the "same images of interest"
    198 # in the sense that their selection parameters will yield the same "Runs".
    199 # Process the groups of rows together to reduce lookup time and to potentially make multiple
    200 # stamps from the same ppstamp process.
    201 #
    202 my @rowList;
     212}
     213
     214my $nRows = scalar @$rows;
     215print "\n$nRows rows read from request file\n";
     216
     217
    203218my $num_jobs = 0;
    204219my $imageList;
    205220my $stage;
    206 my $need_magic;
    207221foreach my $row (@$rows) {
    208     # santiy check the paramaters
     222
     223    if ($label eq 'WEB.UP' and ($nRows > 500 or $num_jobs > 500) and $req_id and !$no_update) {
     224        # this is a big request and it came from the upload page and doesn't have a specific label assigned
     225        # change it to the generic one that has lower with lower priority
     226        $label = 'WEB.BIG';
     227        print "\nChanging label for big WEB.UP request to $label\n";
     228
     229        my $command = "$pstamptool -updatereq -req_id $req_id  -set_label $label";
     230        my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) =
     231            run(command => $command, verbose => $verbose);
     232        unless ($success) {
     233            my_die("$command failed", $PS_EXIT_UNKNOWN_ERROR);
     234        }
     235    }
     236
     237    # validate the paramaters
    209238    if (!checkRow($row)) {
    210239        # when it enconters an error checkRow adds a fake job with an appropriate error code to the database
     
    216245    $row->{error_code} = 0;
    217246
    218     if (scalar @rowList == 0) {
    219         push @rowList, $row;
    220         next;
    221     }
    222 
    223     my $firstRow = $rowList[0];
    224     if (same_images_of_interest($firstRow, $row)) {
    225         # add this row to the list and move on
    226         push @rowList, $row;
    227         next;
    228     }
    229 
    230     # the images of interest for this new row doesn't match the list.
    231     # process the list ...
    232     $num_jobs += processRows($action, \@rowList);
    233 
    234     # and reset the list to contain just the new row
    235     @rowList = ($row);
    236 }
    237 
    238 # out of rows process the list
    239 if (scalar @rowList > 0) {
    240     $num_jobs += processRows($action, \@rowList);
     247    $num_jobs += processRow($action, $row);
    241248}
    242249
     
    252259    my $row = shift;
    253260
     261    # check validity of the paramters in a request specification
    254262    # If we encounter an error for a particular row add a job with the proper fault code.
     263    # also adjust some paramterers like filter and set defaults for some others
    255264
    256265    my $stage = $row->{IMG_TYPE};
     
    284293    }
    285294
    286 
    287295    my $component = $row->{COMPONENT};
    288296    if (!defined $component or (lc($component) eq "null") or (lc($component) eq "all")) {
     
    314322        return 0;
    315323    }
     324
     325    my $fwhm_min = $row->{FWHM_MIN};
     326    if (!defined $fwhm_min) {
     327        $row->{FWHM_MIN} = 0;
     328    } elsif (!validNumber($fwhm_min)) {
     329        print STDERR "$fwhm_min is not a valid FWHM_MIN\n";
     330        insertFakeJobForRow($row, 1, $PSTAMP_INVALID_REQUEST);
     331        return 0;
     332    }
     333    my $fwhm_max = $row->{FWHM_MAX};
     334    if (!defined $fwhm_max) {
     335        $row->{FWHM_MAX} = 0;
     336    } elsif (!validNumber($fwhm_max)) {
     337        print STDERR "$fwhm_max is not a valid FWHM_MAX\n";
     338        insertFakeJobForRow($row, 1, $PSTAMP_INVALID_REQUEST);
     339        return 0;
     340    }
     341
    316342    my $data_group = $row->{DATA_GROUP};
    317343    if (!defined $data_group) {
     
    363389    }
    364390
    365     # $mode list_uri is a debugging mode (it may used by the http interface)
    366     # if this happens just croak
    367    # my_die("job_type is list_uri but mode is $mode", $PS_EXIT_PROG_ERROR) if ($job_type eq "list_uri") and ($mode ne "list_uri");
    368 
    369 
    370391    if ($req_type eq "bycoord") {
    371392        if (!$skycenter) {
     
    384405    }
    385406
     407
    386408    return 1;
    387409}
     
    392414
    393415    $num_jobs = 1;
     416    return $num_jobs;
     417}
     418
     419sub processRow {
     420    my $action  = shift;
     421    my $row     = shift;
     422
     423    my $num_jobs = 0;
     424
     425    my $project  = $row->{PROJECT};
     426
     427    # note: resolve_project avoids running pstamptool every time by remembering the
     428    # last project resolved
     429    my $proj_hash = resolve_project($ipprc, $project, $dbname, $dbserver);
     430    if (!$proj_hash) {
     431        insertFakeJobForRow($row, 1, $PSTAMP_UNKNOWN_PROJECT);
     432        $num_jobs++;
     433        return $num_jobs;
     434    }
     435    my $image_db   = $proj_hash->{dbname};
     436    my $camera     = $proj_hash->{camera};
     437
     438    my $req_type    = $row->{REQ_TYPE};
     439    my $rownum      = $row->{ROWNUM};
     440
     441    # Since user can get unmagicked data "by coordinate" requests can go back in time
     442    # to dredge unusable data from the "dark days"...
     443    if ($req_type eq 'bycoord' and $row->{IMG_TYPE} ne 'stack' and $row->{MJD_MIN} == 0) {
     444        # ... so unless the user sets mjd_min clamp it to 2009-04-01
     445        # XXX: This value should live in the pstampProject table not be hardcoded here
     446        $row->{MJD_MIN} = 54922;
     447    }
     448
     449    if (($req_type eq 'byskycell') or ($req_type eq 'bycoord')) {
     450        # avoid error from print below if $id isn't needed
     451        $row->{ID} = "" if !$row->{ID};
     452    }
     453   
     454    # Call PS::IPP::PStamp::Job locate_images subroutine to get the images for this
     455    # request specification. An array reference is returned.
     456    my $start_locate = gettimeofday();
     457
     458    print "\nCalling new_locate_images for row: $rownum\n";
     459
     460    $imageList = locate_images_for_row($ipprc, $image_db, $camera, $row, $verbose);
     461
     462    my $dtime_locate = gettimeofday() - $start_locate;
     463    print "Time to locate_images for row $rownum $dtime_locate\n";
     464
     465    my @rowList = ($row);
     466    $num_jobs += queueJobs($action, \@rowList, $imageList);
     467
     468    # if this row slipped through without a job being added add one.
     469    if ($row->{job_num} == 0) {
     470        print "row $row->{ROWNUM} produced no jobs\n";
     471        print STDERR "row $row->{ROWNUM} produced no jobs\n";
     472        my $error_code = $row->{error_code};
     473        $error_code =  $PSTAMP_NO_IMAGE_MATCH if !$error_code;
     474        insertFakeJobForRow($row, ++$row->{job_num}, $error_code);
     475    }
     476
    394477    return $num_jobs;
    395478}
     
    401484
    402485    if ($action eq 'LIST') {
     486        # LIST is not allowed by caller. Can't get here.
    403487        return list_targets($rowList);
    404488    }
     
    420504    }
    421505    my $req_type  = $row->{REQ_TYPE};
    422     $stage        = $row->{IMG_TYPE};
     506    my $stage     = $row->{IMG_TYPE};
    423507    my $id        = $row->{ID};
    424508    my $component = $row->{COMPONENT};
     
    436520    my $image_db   = $proj_hash->{dbname};
    437521    my $camera     = $proj_hash->{camera};
    438     $need_magic    = $proj_hash->{need_magic};
     522    my $need_magic    = $proj_hash->{need_magic};
    439523    # Since user can get unmagicked data "by coordinate" requests can go back in time
    440524    # to dredge unusable data from the "dark days"...
     
    496580    # information required is contained there
    497581
    498     $imageList = locate_images($ipprc, $image_db, \@rowList, $req_type, $stage, $id, $tess_id, $component,
     582    $imageList = locate_images($ipprc, $image_db, $rowList, $req_type, $stage, $id, $tess_id, $component,
    499583                $option_mask, $need_magic, $mjd_min, $mjd_max, $filter, $data_group, $verbose);
    500584
     
    506590    $row->{need_magic} = $need_magic;
    507591
    508     $num_jobs += queueJobs($mode, \@rowList, $imageList);
     592    $num_jobs += queueJobs($action, $rowList, $imageList);
    509593
    510594    # if a row slipped through with no jobs add a faulted one
    511     foreach my $row (@rowList) {
     595    foreach my $row (@$rowList) {
    512596        if ($row->{job_num} == 0) {
    513597            print "row $row->{ROWNUM} produced no jobs\n";
     
    528612    my $image = shift;
    529613    my $need_magic = shift;
    530     my $mode = shift;
     614    my $action = shift;
    531615
    532616    my $rownum = $row->{ROWNUM};
     
    611695    write_params($output_base, $image);
    612696
    613     my $newState = "run";
     697    my $newState = $action eq 'PROCESS' ? "run" : "parsed";
    614698    my $fault = 0;
    615699    my $dep_id;
    616700
    617     queueUpdatesIfNeeded($stage, $image, $option_mask, \$newState, \$fault, \$dep_id);
     701    queueUpdatesIfNeeded($action, $stage, $image, $option_mask, \$newState, \$fault, \$dep_id);
    618702
    619703    my $command = "$pstamptool -addjob  -req_id $req_id -job_type $row->{JOB_TYPE}"
     
    644728sub queueJobs
    645729{
    646     my $mode = shift;
     730    my $action = shift;
    647731    my $rowList = shift;
    648732    my $imageList = shift;
    649733
    650     my $firstRow = $rowList[0];
     734    my $firstRow = $rowList->[0];
    651735    my $stage    = $firstRow->{IMG_TYPE};
    652736    my $job_type = $firstRow->{JOB_TYPE};
     
    656740
    657741    if ($mode eq "list_uri") {
     742        $num_jobs = $imageList ? scalar @$imageList : 0;
     743        print "List of $num_jobs Images selected for row: $firstRow->{ROWNUM}\n";
    658744        foreach my $image (@$imageList) {
    659745            print "$image->{image}\n";
     746            ++$firstRow->{job_num};
    660747        }
    661748    } elsif ($job_type eq "get_image") {
     
    664751        my_die( "error: unexpected number of rows for get_image request: $n", $PS_EXIT_PROG_ERROR) if $n != 1;
    665752
    666         $num_jobs = queueGetImageJobs($firstRow, $imageList, $stage, $need_magic, $mode);
     753        $num_jobs = queueGetImageJobs($firstRow, $imageList, $stage, $need_magic, $action);
    667754
    668755    } else {
     
    692779                my $row = $rowList->[$i];
    693780
    694                 $num_jobs += queueJobForImage($row, $stage, $image, $need_magic, $mode);
     781                $num_jobs += queueJobForImage($row, $stage, $image, $need_magic, $action);
    695782            }
    696783        }
     
    706793    my $stage = shift;
    707794    my $need_magic = shift;
    708     my $mode = shift;
     795    my $action = shift;
    709796
    710797    my $num_jobs = 0;
     
    753840        write_params($output_base, $image);
    754841
    755         my $newState = "run";
     842        my $newState = $action eq 'PROCESS' ? "run" : "parsed";
    756843        my $fault = 0;
    757844        my $dep_id;
    758845
    759         queueUpdatesIfNeeded($stage, $image, $option_mask, \$newState, \$fault, \$dep_id);
     846        queueUpdatesIfNeeded($action, $stage, $image, $option_mask, \$newState, \$fault, \$dep_id);
    760847
    761848        $num_jobs++;
     
    899986sub get_dependent
    900987{
    901     my ($r_jobState, $r_fault, $r_dep_id, $imagedb, $state, $stage, $stage_id, $component, $need_magic) = @_;
     988    my ($action, $r_jobState, $r_fault, $r_dep_id, $imagedb, $state, $stage, $stage_id, $component, $need_magic) = @_;
    902989
    903990    # chipRun's can be in full state if destreaking is necessary
     
    9181005    my $command = "$pstamptool -getdependent -stage $stage -stage_id $stage_id -imagedb $imagedb -component $component -outdir $outdir";
    9191006    $command .= " -need_magic" if $need_magic;
    920 
    921     # compute rlabel for the run.
    922     # XXX: This bit of policy shouldn't be buried so deeply in the code
    923     # For now use one that implies 'postage stamp server' 'update' 'request_label"
    924     my $rlabel = "ps_ud_" . $label if $label;
    925     $command .= " -rlabel $rlabel" if $rlabel;
     1007    $command .= ' -hold' if $action eq 'PREVIEW';
     1008
     1009    if ($label) {
     1010        # compute rlabel for the run.
     1011        # XXX: This bit of policy shouldn't be buried so deeply in the code
     1012        # For now use one that implies 'postage stamp server' 'update' 'request_label"
     1013        my $rlabel = "ps_ud_" . $label;
     1014        $command .= " -rlabel $rlabel";
     1015    }
    9261016
    9271017    if (!$no_update) {
     
    9311021            my $fault = $error_code >> 8;
    9321022            print STDERR "$command failed with fault $fault\n";
    933             if ($fault < 10) {
     1023            if ($fault < $PSTAMP_FIRST_ERROR_CODE) {
    9341024                # pstamptool returns an error if an existing depenent is faulted
    935                 # Set the object to not available even if the fault < 10
     1025                # Set the object to not available even if the fault < $PSTAMP_FIRST_ERROR_CODE
    9361026                # which is nominally a recoverable error in order to keep
    9371027                # the request from faulting (which can be very expensive if
     
    9391029                $fault = $PSTAMP_NOT_AVAILABLE
    9401030            }
    941             if ($fault >= 10) {
     1031            if ($fault >= $PSTAMP_FIRST_ERROR_CODE) {
    9421032                $$r_dep_id = 0;
    9431033                $$r_fault = $fault;
     
    9671057
    9681058sub queueUpdatesIfNeeded {
     1059    my $action = shift;
    9691060    my $stage = shift;
    9701061    my $image = shift;
     
    9731064    my $r_fault = shift;
    9741065    my $r_dep_id = shift;
     1066
     1067    my $need_magic = 0;
    9751068
    9761069    if ($stage ne 'raw') {
     
    10161109                    # set up to queue an update run
    10171110                    my $require_magic = ($need_magic or $image->{magicked});
    1018                     get_dependent(\$$r_newState, \$$r_fault, $r_dep_id, $image->{imagedb},
     1111                    get_dependent($action, \$$r_newState, \$$r_fault, $r_dep_id, $image->{imagedb},
    10191112                        $run_state, $stage, $image->{stage_id}, $image->{component}, $require_magic );
    10201113                }
     
    10701163    my $fault = shift;
    10711164
    1072     carp $msg;
     1165    print STDERR $msg;
    10731166
    10741167    # we don't fault the request here pstamp_parser_run.pl handles that if necessary
  • branches/eam_branches/ipp-20130307/pstamp/src/ppstampParseCamera.c

    r34596 r35412  
    9595    }
    9696       
    97 
    98     // XXX: create a filerule for PPSTAMP.ASTROM
    9997    pmFPAfile *astrom = pmFPAfileDefineFromArgs(&status, config, "PSWARP.ASTROM", "ASTROM");
    10098    if (!status) {
     
    103101    }
    104102    if (astrom) {
    105         psLogMsg ("ppstamp", 3, "using supplied astrometry\n");
     103        psLogMsg ("ppstamp", 3, "Using supplied astrometry\n");
    106104    } else {
    107         psLogMsg ("ppstamp", 3, "using header astrometry\n");
     105        psLogMsg ("ppstamp", 3, "Using header astrometry\n");
    108106    }
    109 
    110 #ifdef notyet
    111     // add recipe options supplied on command line
    112     psMetadata *recipe  = psMetadataLookupPtr (&status, config->recipes, RECIPE_NAME);
    113 #endif
    114107
    115108    // Set up the output target
     
    138131            }
    139132        } else {
    140             psLogMsg ("ppstamp", PS_LOG_INFO, "output sources file requested but no input supplied. Will try the supplied astrometry file.\n");
     133            psLogMsg ("ppstamp", PS_LOG_INFO, "Output sources file requested but no -sources supplied.\n");
     134            psLogMsg ("ppstamp", PS_LOG_INFO, "Will use the sources in the supplied astrometry file.\n");
    141135        }
    142136       
  • branches/eam_branches/ipp-20130307/tools/heathers_plots/heathers_plots.py

    r35198 r35412  
    1 #!/usr/bin env python
     1#!/usr/local/bin/python2.7
    22
    33"""
     
    1010import numpy as np
    1111import matplotlib as mpl
     12mpl.use('Agg')
    1213import matplotlib.pyplot as plt
    1314import pylab
     
    2425    IMAGES_DIRECTORY = "/data/ipp009.0/czartool_plots/heathers_plots"
    2526    CAM_WEB_FILENAME = "/data/ipp009.0/czartool_plots/heathers_plots/cam.png"
     27    CAM_MERGED_WEB_FILENAME = "/data/ipp009.0/czartool_plots/heathers_plots/cam_merged.png"
    2628    SKYCAL_WEB_FILENAME = "/data/ipp009.0/czartool_plots/heathers_plots/skycal.png"
     29    SKYCAL_MERGED_WEB_FILENAME = "/data/ipp009.0/czartool_plots/heathers_plots/skycal_merged.png"
    2730
    2831    def __init__(self):
     
    3740WHERE stage = 'cam' and addRun.dvodb = 'LAP.20120706'
    3841"""
     42
     43    CAM_MERGED_STATEMENT = """SELECT ra, decl, mergedvodbRun.state, mergedvodbProcessed.fault
     44FROM mergedvodbRun
     45 LEFT JOIN mergedvodbProcessed USING(merge_id)
     46 LEFT JOIN minidvodbRun USING(minidvodb_id)
     47 LEFT JOIN addRun USING(minidvodb_name)
     48 LEFT JOIN addProcessedExp USING(add_id)
     49 JOIN camRun ON stage_id = cam_id
     50 JOIN chipRun USING(chip_id)
     51 JOIN rawExp USING(exp_id)
     52WHERE stage = 'cam' AND mergedvodbRun.mergedvodb = 'LAP.20120706'
     53"""
     54
    3955    SKYCAL_STATEMENT = """SELECT radeg*3.1415927/180., decdeg*3.1415927/180., addRun.state, addProcessedExp.fault
    4056FROM addRun
     
    4864WHERE stage = 'skycal' AND addRun.dvodb = 'LAP.20120706'
    4965"""
     66
     67    SKYCAL_MERGED_STATEMENT = """SELECT radeg*3.1415927/180., decdeg*3.1415927/180., mergedvodbRun.state, mergedvodbProcessed.fault
     68FROM mergedvodbRun
     69 LEFT JOIN mergedvodbProcessed USING(merge_id)
     70 LEFT JOIN minidvodbRun USING(minidvodb_id)
     71 LEFT JOIN addRun USING(minidvodb_name)
     72 LEFT JOIN addProcessedExp USING(add_id)
     73 JOIN skycalRun ON skycal_id = stage_id
     74 JOIN skycalResult USING(skycal_id)
     75 JOIN staticskyInput USING(sky_id, stack_id)
     76 JOIN staticskyRun USING (sky_id)
     77 JOIN stackRun using (stack_id)
     78 JOIN skycell using (tess_id, skycell_id)
     79WHERE stage = 'skycal' AND addRun.dvodb = 'LAP.20120706'"""
    5080
    5181    def fetch_data(self, statement):
     
    95125        try:
    96126            os.unlink(web_filename)
    97         except OSError: # No such file or directory
    98             pass
     127        except OSError, e: # No such file or directory
     128            print e
    99129        os.symlink(new_filename, web_filename)
    100130
     
    115145        self.relink_webfiles(HeathersPlot.CAM_WEB_FILENAME, new_filename)
    116146
     147    def update_cam_merged_plot(self):
     148        HeathersPlot.mkdir(HeathersPlot.IMAGES_DIRECTORY)
     149        (ras, decs, states) = self.fetch_data(HeathersPlot.CAM_MERGED_STATEMENT)
     150        new_filename = self.plot(ras, decs, states, 'Camera_Merged')
     151        self.relink_webfiles(HeathersPlot.CAM_MERGED_WEB_FILENAME, new_filename)
     152
    117153    def update_skycal_plot(self):
    118154        HeathersPlot.mkdir(HeathersPlot.IMAGES_DIRECTORY)
     
    121157        self.relink_webfiles(HeathersPlot.SKYCAL_WEB_FILENAME, new_filename)
    122158
     159    def update_skycal_merged_plot(self):
     160        HeathersPlot.mkdir(HeathersPlot.IMAGES_DIRECTORY)
     161        (ras, decs, states) = self.fetch_data(HeathersPlot.SKYCAL_MERGED_STATEMENT)
     162        new_filename = self.plot(ras, decs, states, 'SkyCal_Merged')
     163        self.relink_webfiles(HeathersPlot.SKYCAL_MERGED_WEB_FILENAME, new_filename)
     164
    123165if __name__ == "__main__":
    124166    hp = HeathersPlot()
    125167    hp.update_cam_plot()
    126168    hp.update_skycal_plot()
     169    hp.update_cam_merged_plot()
     170    hp.update_skycal_merged_plot()
Note: See TracChangeset for help on using the changeset viewer.