Changeset 35769 for trunk/psphot/src/psphotAddNoise.c
- Timestamp:
- Jul 3, 2013, 2:43:13 PM (13 years ago)
- Location:
- trunk/psphot
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20130509/psphot (added) merged: 35594,35614,35630-35634,35640-35641,35650-35652,35654-35655,35659,35661,35701,35751
- Property svn:mergeinfo changed
-
trunk/psphot/src
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20130509/psphot/src (added) merged: 35594,35614,35630-35634,35640,35651,35654,35659,35661,35751
- Property svn:mergeinfo changed
-
trunk/psphot/src/psphotAddNoise.c
r34492 r35769 1 1 # include "psphotInternal.h" 2 2 3 bool psphotAddOrSubNoise_Threaded (psThreadJob *job); 3 4 bool psphotMaskSource(pmSource *source, bool add, psImageMaskType maskVal); 4 5 … … 32 33 } 33 34 34 static int Nmasked = 0;35 36 35 // the return state indicates if any sources were actually replaced 37 36 bool psphotAddOrSubNoiseReadout (pmConfig *config, const pmFPAview *view, const char *filerule, int index, psMetadata *recipe, bool add) { 38 37 39 38 bool status = false; 39 40 psTimerStart ("psphot.noise"); 40 41 41 42 // find the currently selected readout … … 55 56 if (!sources) return false; 56 57 57 psTimerStart ("psphot.noise"); 58 // determine the number of allowed threads 59 int nThreads = psMetadataLookupS32(&status, config->arguments, "NTHREADS"); // Number of threads 60 if (!status) { 61 nThreads = 0; 62 } 58 63 59 64 // user-defined masks to test for good/bad pixels (build from recipe list if not yet set) … … 84 89 85 90 psphotVisualShowImage (readout); 91 92 // choose Cx, Cy (see psphotThreadTools.c for overview of the concepts) 93 int Cx = 1, Cy = 1; 94 psphotChooseCellSizes (&Cx, &Cy, readout, nThreads); 95 96 psArray *cellGroups = psphotAssignSources (Cx, Cy, sources); 97 98 for (int i = 0; i < cellGroups->n; i++) { 99 100 psArray *cells = cellGroups->data[i]; 101 102 for (int j = 0; j < cells->n; j++) { 103 104 // allocate a job -- if threads are not defined, this just runs the job 105 psThreadJob *job = psThreadJobAlloc ("PSPHOT_ADD_NOISE"); 106 psArrayAdd(job->args, 1, cells->data[j]); // sources 107 PS_ARRAY_ADD_SCALAR(job->args, maskVal, PS_TYPE_IMAGE_MASK); 108 PS_ARRAY_ADD_SCALAR(job->args, markVal, PS_TYPE_IMAGE_MASK); 109 PS_ARRAY_ADD_SCALAR(job->args, FACTOR, PS_TYPE_F32); 110 PS_ARRAY_ADD_SCALAR(job->args, SIZE, PS_TYPE_F32); 111 PS_ARRAY_ADD_SCALAR(job->args, add, PS_TYPE_U8); 112 113 # if (1) 114 if (!psThreadJobAddPending(job)) { 115 psError(PS_ERR_UNKNOWN, false, "Unable to add/sub noise."); 116 return false; 117 } 118 # else 119 if (!psphotAddOrSubNoise_Threaded(job)) { 120 psError(PS_ERR_UNKNOWN, false, "Unable to add/sub noise."); 121 return false; 122 } 123 psFree(job); 124 # endif 125 } 126 127 // wait for the threads to finish and manage results 128 if (!psThreadPoolWait (false, true)) { 129 psFree(cellGroups); 130 psError(PS_ERR_UNKNOWN, false, "Unable to add/sub noise."); 131 return false; 132 } 133 134 // we have only supplied one type of job, so we can assume the types here 135 psThreadJob *job = NULL; 136 while ((job = psThreadJobGetDone()) != NULL) { 137 // we have no returned data from this operation 138 if (job->args->n < 1) { 139 fprintf (stderr, "error with job\n"); 140 } 141 psFree(job); 142 } 143 } 144 145 if (add) { 146 psLogMsg ("psphot.noise", PS_LOG_WARN, "add noise for %ld objects: %f sec\n", sources->n, psTimerMark ("psphot.noise")); 147 } else { 148 psLogMsg ("psphot.noise", PS_LOG_WARN, "sub noise for %ld objects: %f sec\n", sources->n, psTimerMark ("psphot.noise")); 149 } 150 151 psFree (cellGroups); 152 153 psphotVisualShowImage (readout); 154 155 return true; 156 } 157 158 bool psphotAddOrSubNoise_Threaded (psThreadJob *job) { 159 160 psArray *sources = job->args->data[0]; 161 psImageMaskType maskVal = PS_SCALAR_VALUE(job->args->data[1], PS_TYPE_IMAGE_MASK_DATA); 162 psImageMaskType markVal = PS_SCALAR_VALUE(job->args->data[2], PS_TYPE_IMAGE_MASK_DATA); 163 psF32 FACTOR = PS_SCALAR_VALUE(job->args->data[3], F32); 164 psF32 SIZE = PS_SCALAR_VALUE(job->args->data[4], F32); 165 psBool add = PS_SCALAR_VALUE(job->args->data[5], U8); 86 166 87 167 // loop over all source … … 104 184 psphotMaskSource (source, add, markVal); 105 185 } 106 if (add) {107 psLogMsg ("psphot.noise", PS_LOG_WARN, "add noise for %ld objects: %f sec\n", sources->n, psTimerMark ("psphot.noise"));108 } else {109 psLogMsg ("psphot.noise", PS_LOG_WARN, "sub noise for %ld objects: %f sec\n", sources->n, psTimerMark ("psphot.noise"));110 }111 fprintf (stderr, "masked %d objects\n", Nmasked);112 113 psphotVisualShowImage (readout);114 115 186 return true; 116 187 } … … 142 213 } 143 214 } 144 Nmasked ++; 145 146 return true; 147 } 148 215 return true; 216 } 217
Note:
See TracChangeset
for help on using the changeset viewer.
