Changeset 18879
- Timestamp:
- Aug 4, 2008, 7:22:47 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20080804/psModules/src/detrend/pmBias.c
r16841 r18879 17 17 #include "pmOverscan.h" 18 18 #include "pmBias.h" 19 20 typedef struct { 21 pmReadout *in; 22 pmReadout *sub; 23 float scan; 24 int xOffset, yOffset; 25 int rowStart, rowStop; 26 } pmBiasSubtractScanArgs; 27 28 void pmBiasSubtractScanArgsFree (pmBiasSubtractScanArgs *args) { 29 return; 30 } 31 32 pmBiasSubtractScanArgs *pmBiasSubtractScanArgsAlloc () { 33 34 } 35 36 pmBiasSubtractScan_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 49 bool 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 } 59 bool 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 } 19 87 20 88 // pmBiasSubtractFrame(): this routine will take as input a readout for the input image and a readout for the bias … … 76 144 } 77 145 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); 96 173 } 97 174
Note:
See TracChangeset
for help on using the changeset viewer.
