IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 18879


Ignore:
Timestamp:
Aug 4, 2008, 7:22:47 AM (18 years ago)
Author:
eugene
Message:

setting up threading at the module level for detrending

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branch_20080804/psModules/src/detrend/pmBias.c

    r16841 r18879  
    1717#include "pmOverscan.h"
    1818#include "pmBias.h"
     19
     20typedef struct {
     21  pmReadout *in;
     22  pmReadout *sub;
     23  float scan;
     24  int xOffset, yOffset;
     25  int rowStart, rowStop;
     26} pmBiasSubtractScanArgs;
     27
     28void pmBiasSubtractScanArgsFree (pmBiasSubtractScanArgs *args) {
     29  return;
     30}
     31
     32pmBiasSubtractScanArgs *pmBiasSubtractScanArgsAlloc () {
     33
     34}
     35
     36pmBiasSubtractScan_Threaded (psThreadJob *job) {
     37
     38      args->in = in;
     39      args->sub = sub;
     40      args->scan = scan;
     41      args->xOffset = xOffset;
     42      args->yOffset = yOffset;
     43      args->rowStart = rowStart;
     44      args->rowStop = rowStop;
     45      bool status = pmBiasSubtractScan (args->in, args->sub, args->scan, args->xOffset, args->yOffset, args->rowStart, args->rowStop);
     46      return status;
     47}
     48
     49bool pmModulesDetrendSetThreads () {
     50
     51    psThreadTask *task = NULL;
     52
     53    task = psThreadTaskAlloc ("PSMODULES_DETREND_BIAS", 1);
     54    task->function = &pmBiasSubtractScan_Threaded;
     55    psThreadTaskAdd (task);
     56
     57    return true;
     58}
     59bool pmBiasSubtractScan (pmReadout *in, pmReadout *sub, float scan, int xOffset, int yOffset, int rowStart, int rowStop) {
     60
     61    psImage *inImage  = in->image;      // The input image
     62    psImage *inMask   = in->mask;       // The input mask
     63    psImage *subImage = sub->image;     // The image to be subtracted
     64    psImage *subMask  = sub->mask;      // The mask for the subtraction image
     65
     66    if (scale == 1.0) {
     67        for (int i = rowStart; i < rowStop; i++) {
     68            for (int j = 0; j < inImage->numCols; j++) {
     69                inImage->data.F32[i][j] -= subImage->data.F32[i+yOffset][j+xOffset];
     70                if (inMask && subMask) {
     71                    inMask->data.U8[i][j] |= subMask->data.U8[i+yOffset][j+xOffset];
     72                }
     73            }
     74        }
     75    } else {
     76        for (int i = rowStart; i < rowStop; i++) {
     77            for (int j = 0; j < inImage->numCols; j++) {
     78                inImage->data.F32[i][j] -= subImage->data.F32[i+yOffset][j+xOffset] * scale;
     79                if (inMask && subMask) {
     80                    inMask->data.U8[i][j] |= subMask->data.U8[i+yOffset][j+xOffset];
     81                }
     82            }
     83        }
     84    }
     85    return true;
     86}
    1987
    2088// pmBiasSubtractFrame(): this routine will take as input a readout for the input image and a readout for the bias
     
    76144    }
    77145
    78     if (scale == 1.0) {
    79         for (int i = 0; i < inImage->numRows; i++) {
    80             for (int j = 0; j < inImage->numCols; j++) {
    81                 inImage->data.F32[i][j] -= subImage->data.F32[i+y0in-y0sub][j+x0in-x0sub];
    82                 if (inMask && subMask) {
    83                     inMask->data.U8[i][j] |= subMask->data.U8[i+y0in-y0sub][j+x0in-x0sub];
    84                 }
    85             }
    86         }
    87     } else {
    88         for (int i = 0; i < inImage->numRows; i++) {
    89             for (int j = 0; j < inImage->numCols; j++) {
    90                 inImage->data.F32[i][j] -= subImage->data.F32[i+y0in-y0sub][j+x0in-x0sub] * scale;
    91                 if (inMask && subMask) {
    92                     inMask->data.U8[i][j] |= subMask->data.U8[i+y0in-y0sub][j+x0in-x0sub];
    93                 }
    94             }
    95         }
     146    int xOffset = x0in - x0sub;
     147    int yOffset = y0in - y0sub;
     148    for (int rowStart = 0; rowStart < inImage->numRows; rowStart += scanRows) {
     149      int rowStop = PS_MIN (rowStart + scanRows, inImage->numRows);
     150
     151      // allocate a job
     152      psThreadJob *job = psThreadJobAlloc ("PSMODULES_DETREND_BIAS");
     153
     154      pmBiasSubtractScanArgs *args = pmBiasSubtractScanArgsAlloc ();
     155      args->in = in;
     156      args->sub = sub;
     157      args->scan = scan;
     158      args->xOffset = xOffset;
     159      args->yOffset = yOffset;
     160      args->rowStart = rowStart;
     161      args->rowStop = rowStop;
     162
     163      // construct the arguments for this job
     164      psArrayAdd (job->args, 1, args);
     165      psFree (args);
     166
     167      // ppImageDetrendReadout(config, options, view)
     168      if (!psThreadJobAddPending (job)) {
     169        return false;
     170      }
     171
     172      pmBiasSubtractScan (in, sub, scan, xOffset, yOffset, rowStart, rowStop);
    96173    }
    97174
Note: See TracChangeset for help on using the changeset viewer.