IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 18862


Ignore:
Timestamp:
Aug 1, 2008, 1:59:36 PM (18 years ago)
Author:
eugene
Message:

adding threaded code for DARK and SHUTTER

Location:
trunk/ppMerge/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppMerge/src/ppMergeLoop_Threaded.c

    r18839 r18862  
    1111
    1212#include "ppMerge.h"
     13
     14// XXX this function is now sufficiently different for the major types, it would make sense to just
     15// split it into three: BASIC, SHUTTER, DARK
    1316
    1417bool ppMergeLoop(pmConfig *config)
     
    145148
    146149            float shutterRef = NAN;     // Reference shutter correction
     150            pmReadout *pattern = NULL;
    147151            if (type == PPMERGE_TYPE_SHUTTER) {
    148152                shutterRef = pmShutterCorrectionReference(shutters->data[cellNum]);
     153                pattern = pmReadoutAlloc(NULL);
    149154            }
    150155
     
    159164            }
    160165
     166            ppMergeFileGroup *fileGroup = NULL;
    161167            psArray *fileGroups = psArrayAlloc (nThreads + 1);
    162168
     
    170176                }
    171177
    172                 ppMergeFileGroup *fileGroup = ppMergeFileGroupAlloc();
     178                fileGroup = ppMergeFileGroupAlloc();
    173179                fileGroup->readouts = readouts;
    174180                fileGroup->read = false;
     
    185191              case PPMERGE_TYPE_FRINGE:
    186192                psAssert (fileGroups->n > 0, "no valid file groups defined");
    187                 ppMergeFileGroup *fileGroup = fileGroups->data[0];
     193                fileGroup = fileGroups->data[0];
    188194                if (!pmReadoutCombinePrepare(outRO, fileGroup->readouts, combination)) {
    189195                    goto ERROR;
    190196                }
    191197                break;
    192 
     198              case PPMERGE_TYPE_DARK:
     199                psAssert (fileGroups->n > 0, "no valid file groups defined");
     200                fileGroup = fileGroups->data[0];
     201                if (!pmDarkCombinePrepare(outCell, fileGroup->readouts, darkOrdinates, darkNorm)) {
     202                    goto ERROR;
     203                }
     204                break;
     205              case PPMERGE_TYPE_SHUTTER:
     206                psAssert (fileGroups->n > 0, "no valid file groups defined");
     207                fileGroup = fileGroups->data[0];
     208                if (!pmShutterCorrectionGeneratePrepare(outRO, pattern, fileGroup->readouts, maskVal)) {
     209                    goto ERROR;
     210                }
     211                break;
    193212              default:
    194213                fprintf (stderr, "not yet ready");
     
    197216
    198217            // Read input data by chunks
    199             // psTimerStart ("ppMergeLoop");
     218            psTimerStart ("ppMergeLoop");
    200219            for (int numChunk = 0; true; numChunk++) {
    201220
    202221                bool status = false;
    203                 ppMergeFileGroup *fileGroup = ppMergeReadChunk (&status, fileGroups, config, numChunk);
     222                fileGroup = ppMergeReadChunk (&status, fileGroups, config, numChunk);
    204223                if (!status) goto ERROR;
    205224                if (!fileGroup) break;
     
    208227
    209228                switch (type) {
    210                   case PPMERGE_TYPE_SHUTTER:
     229                  case PPMERGE_TYPE_BIAS:
     230                  case PPMERGE_TYPE_FLAT:
     231                  case PPMERGE_TYPE_FRINGE:
    211232                    // allocate a job
    212                     job = psThreadJobAlloc ("PPMERGE_SHUTTER_CORRECTION");
     233                    job = psThreadJobAlloc ("PPMERGE_READOUT_COMBINE");
    213234
    214235                    // construct the arguments for this job
    215236                    psArrayAdd (job->args, 1, outRO);
    216237                    psArrayAdd (job->args, 1, fileGroup);
    217                     psArrayAdd (job->args, 1, psScalarAlloc(shutterRef, PS_TYPE_F32));
    218                     psArrayAdd (job->args, 1, shutters->data[cellNum]);
    219                     psArrayAdd (job->args, 1, psScalarAlloc(iter, PS_TYPE_S32));
    220                     psArrayAdd (job->args, 1, psScalarAlloc(rej, PS_TYPE_F32));
    221                     psArrayAdd (job->args, 1, psScalarAlloc(maskVal, PS_TYPE_U8));
    222 
    223                     // call: pmShutterCorrectionGenerate(outRO, NULL, fileGroup->readouts, shutterRef, shutters->data[cellNum], iter, rej, maskVal)
     238                    psArrayAdd (job->args, 1, zeros);
     239                    psArrayAdd (job->args, 1, scales);
     240                    psArrayAdd (job->args, 1, combination);
     241
     242                    // call: pmReadoutCombine(outRO, fileGroup->readouts, zeros, scales, combination);
    224243                    if (!psThreadJobAddPending (job)) {
    225244                        goto ERROR;
     
    233252                    psArrayAdd (job->args, 1, outCell);
    234253                    psArrayAdd (job->args, 1, fileGroup);
    235                     psArrayAdd (job->args, 1, darkOrdinates);
    236                     psArrayAdd (job->args, 1, darkNorm);
    237254                    psArrayAdd (job->args, 1, psScalarAlloc(iter, PS_TYPE_S32));
    238255                    psArrayAdd (job->args, 1, psScalarAlloc(rej, PS_TYPE_F32));
    239256                    psArrayAdd (job->args, 1, psScalarAlloc(maskVal, PS_TYPE_U8));
    240257
    241                     // call: pmDarkCombine(outCell, fileGroup->readouts, darkOrdinates, darkNorm, iter, rej, maskVal);
     258                    // call: pmDarkCombine(outCell, fileGroup->readouts, iter, rej, maskVal);
    242259                    if (!psThreadJobAddPending (job)) {                 
    243260                        goto ERROR;
    244261                    }
    245262                    break;
    246                   case PPMERGE_TYPE_BIAS:
    247                   case PPMERGE_TYPE_FLAT:
    248                   case PPMERGE_TYPE_FRINGE:
     263                  case PPMERGE_TYPE_SHUTTER:
    249264                    // allocate a job
    250                     job = psThreadJobAlloc ("PPMERGE_READOUT_COMBINE");
     265                    job = psThreadJobAlloc ("PPMERGE_SHUTTER_CORRECTION");
    251266
    252267                    // construct the arguments for this job
    253268                    psArrayAdd (job->args, 1, outRO);
     269                    psArrayAdd (job->args, 1, pattern);
    254270                    psArrayAdd (job->args, 1, fileGroup);
    255                     psArrayAdd (job->args, 1, zeros);
    256                     psArrayAdd (job->args, 1, scales);
    257                     psArrayAdd (job->args, 1, combination);
    258 
    259                     // call: pmReadoutCombine(outRO, fileGroup->readouts, zeros, scales, combination);
     271                    psArrayAdd (job->args, 1, psScalarAlloc(shutterRef, PS_TYPE_F32));
     272                    psArrayAdd (job->args, 1, shutters->data[cellNum]);
     273                    psArrayAdd (job->args, 1, psScalarAlloc(iter, PS_TYPE_S32));
     274                    psArrayAdd (job->args, 1, psScalarAlloc(rej, PS_TYPE_F32));
     275                    psArrayAdd (job->args, 1, psScalarAlloc(maskVal, PS_TYPE_U8));
     276
     277                    // call: pmShutterCorrectionGenerate(outRO, pattern, fileGroup->readouts, shutterRef, shutters->data[cellNum], iter, rej, maskVal)
    260278                    if (!psThreadJobAddPending (job)) {
    261279                        goto ERROR;
     
    281299            psFree(fileGroups);
    282300
     301            // XXX eventually need to keep both the shutter and the pattern, as we do with dark
     302            psFree(pattern);
     303
    283304            // Get list of cells for concepts averaging
    284305            psList *inCells = psListAlloc(NULL); // List of cells
     
    295316            }
    296317            psFree(inCells);
    297             // fprintf (stdout, "done ppMergeLoop for cell : %f\n", psTimerMark ("ppMergeLoop"));
     318            fprintf (stdout, "done ppMergeLoop for cell : %f\n", psTimerMark ("ppMergeLoop"));
    298319
    299320            // Plug supplementary images into their own FPAs
  • trunk/ppMerge/src/ppMergeSetThreads.c

    r18839 r18862  
    2121    pmCell *outCell             = job->args->data[0];
    2222    ppMergeFileGroup *fileGroup = job->args->data[1];
    23     psArray *darkOrdinates      = job->args->data[2];
    24     psString darkNorm           = job->args->data[3];
    25     psScalar *iter              = job->args->data[4];
    26     psScalar *rej               = job->args->data[5];
    27     psScalar *maskVal           = job->args->data[6];
     23    psScalar *iter              = job->args->data[2];
     24    psScalar *rej               = job->args->data[3];
     25    psScalar *maskVal           = job->args->data[4];
    2826
    29     bool status = pmDarkCombine(outCell, fileGroup->readouts, darkOrdinates, darkNorm, iter->data.S32, rej->data.F32, maskVal->data.U8);
     27    bool status = pmDarkCombine(outCell, fileGroup->readouts, iter->data.S32, rej->data.F32, maskVal->data.U8);
    3028
    3129    // after we are done, tell the I/O system that this file group is done
     
    3432}
    3533
    36 bool ppMergeThread_pmShuttderCorrectionGenerate (psThreadJob *job) {
     34bool ppMergeThread_pmShutterCorrectionGenerate (psThreadJob *job) {
    3735
    3836    pmReadout *output             = job->args->data[0];
    39     ppMergeFileGroup *fileGroup   = job->args->data[1];
    40     psScalar *shutterRef          = job->args->data[2];
    41     pmShutterCorrectionData *data = job->args->data[3];
    42     psScalar *iter                = job->args->data[4];
    43     psScalar *rej                 = job->args->data[5];
    44     psScalar *maskVal             = job->args->data[6];
     37    pmReadout *pattern            = job->args->data[1];
     38    ppMergeFileGroup *fileGroup   = job->args->data[2];
     39    psScalar *shutterRef          = job->args->data[3];
     40    pmShutterCorrectionData *data = job->args->data[4];
     41    psScalar *iter                = job->args->data[5];
     42    psScalar *rej                 = job->args->data[6];
     43    psScalar *maskVal             = job->args->data[7];
    4544
    46     bool status = pmShutterCorrectionGenerate(output, NULL, fileGroup->readouts, shutterRef->data.F32, data, iter->data.S32, rej->data.F32, maskVal->data.U8);
     45    bool status = pmShutterCorrectionGenerate(output, pattern, fileGroup->readouts, shutterRef->data.F32, data, iter->data.S32, rej->data.F32, maskVal->data.U8);
    4746
    4847    // after we are done, tell the I/O system that this file group is done
     
    5958    psThreadTaskAdd (task);
    6059
    61     task = psThreadTaskAlloc ("PPMERGE_DARK_COMBINE", 7);
    62     task->function = &ppMergeThread_pmReadoutCombine;
     60    task = psThreadTaskAlloc ("PPMERGE_DARK_COMBINE", 5);
     61    task->function = &ppMergeThread_pmDarkCombine;
    6362    psThreadTaskAdd (task);
    6463
    65     task = psThreadTaskAlloc ("PPMERGE_SHUTTER_CORRECTION", 7);
    66     task->function = &ppMergeThread_pmReadoutCombine;
     64    task = psThreadTaskAlloc ("PPMERGE_SHUTTER_CORRECTION", 8);
     65    task->function = &ppMergeThread_pmShutterCorrectionGenerate;
    6766    psThreadTaskAdd (task);
    6867
Note: See TracChangeset for help on using the changeset viewer.