IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 32299


Ignore:
Timestamp:
Sep 3, 2011, 11:38:19 AM (15 years ago)
Author:
eugene
Message:

thread the iterative kron analysis

Location:
branches/eam_branches/ipp-20110710/psphot/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20110710/psphot/src/psphot.h

    r32205 r32299  
    487487bool psphotKronIterate (pmConfig *config, const pmFPAview *view, const char *filerule);
    488488bool psphotKronIterateReadout(pmConfig *config, psMetadata *recipe, const pmFPAview *view, pmReadout *readout, psArray *sources, pmPSF *psf);
     489bool psphotKronIterate_Threaded (psThreadJob *job);
    489490
    490491#endif
  • branches/eam_branches/ipp-20110710/psphot/src/psphotKronIterate.c

    r32238 r32299  
    9494    // maskVal is used to test for rejected pixels, and must include markVal
    9595    maskVal |= markVal;
    96 
    97     // psphotSaveImage (NULL, readout->mask, "kron.unmasked.fits");
    98 
    99     // XXX tmp visualization
    100     // int kapa = psphotKapaChannel (1);
    10196
    10297    // source analysis is done in S/N order (brightest first)
     
    123118        psphotKronWindowSetSource (source, kronWindow, false, true);
    124119    }
    125     // psphotVisualRangeImage (kapa, kronWindow, "kronwin", 0, 0.0, 1.0);
    126 
    127     // psphotSaveImage (NULL, kronWindow, "kron.window.v0.fits");
     120
     121    // threaded measurement of the source magnitudes
     122    // choose Cx, Cy (see psphotThreadTools.c for overview of the concepts)
     123    int Cx = 1, Cy = 1;
     124    psphotChooseCellSizes (&Cx, &Cy, readout, nThreads);
     125
     126    psArray *cellGroups = psphotAssignSources (Cx, Cy, sources);
     127
     128    for (int i = 0; i < cellGroups->n; i++) {
     129
     130        psArray *cells = cellGroups->data[i];
     131
     132        for (int j = 0; j < cells->n; j++) {
     133
     134            // allocate a job -- if threads are not defined, this just runs the job
     135            psThreadJob *job = psThreadJobAlloc ("PSPHOT_KRON_ITERATE");
     136
     137            psArrayAdd(job->args, 1, readout);
     138            psArrayAdd(job->args, 1, kronWindow);
     139            psArrayAdd(job->args, 1, cells->data[j]); // sources
     140            PS_ARRAY_ADD_SCALAR(job->args, markVal,            PS_TYPE_IMAGE_MASK);
     141            PS_ARRAY_ADD_SCALAR(job->args, maskVal,            PS_TYPE_IMAGE_MASK);
     142            PS_ARRAY_ADD_SCALAR(job->args, RADIUS,             PS_TYPE_F32);
     143            PS_ARRAY_ADD_SCALAR(job->args, MIN_KRON_RADIUS,    PS_TYPE_F32);
     144            PS_ARRAY_ADD_SCALAR(job->args, EXT_FIT_MAX_RADIUS, PS_TYPE_F32);
     145
     146// set this to 0 to run without threading
     147# if (1)
     148            if (!psThreadJobAddPending(job)) {
     149                psError(PS_ERR_UNKNOWN, false, "Unable to guess model.");
     150                return false;
     151            }
     152# else
     153            if (!psphotExtendedSourceFits_Threaded(job)) {
     154                psError(PS_ERR_UNKNOWN, false, "Unable to guess model.");
     155                psFree(AnalysisRegion);
     156                return false;
     157            }
     158            psFree(job);
     159# endif
     160        }
     161
     162        // wait for the threads to finish and manage results
     163        if (!psThreadPoolWait (false)) {
     164            psError(PS_ERR_UNKNOWN, false, "Unable to guess model.");
     165            return false;
     166        }
     167
     168        // we have only supplied one type of job, so we can assume the types here
     169        psThreadJob *job = NULL;
     170        while ((job = psThreadJobGetDone()) != NULL) {
     171            if (job->args->n < 1) {
     172                fprintf (stderr, "error with job\n");
     173            }
     174            psFree(job);
     175        }
     176    }
     177    psFree (cellGroups);
     178    psFree (kronWindow);
     179
     180    psLogMsg ("psphot.kron", PS_LOG_WARN, "measure masked kron magnitudes : %f sec for %ld objects\n", psTimerMark ("psphot.kron"), sources->n);
     181    return true;
     182}
     183
     184bool psphotKronIterate_Threaded (psThreadJob *job) {
     185
     186    pmReadout *readout              = job->args->data[0];
     187    psImage *kronWindow             = job->args->data[1];
     188    psArray *sources                = job->args->data[2];
     189    psImageMaskType markVal         = PS_SCALAR_VALUE(job->args->data[3],PS_TYPE_IMAGE_MASK_DATA);
     190    psImageMaskType maskVal         = PS_SCALAR_VALUE(job->args->data[4],PS_TYPE_IMAGE_MASK_DATA);
     191    float RADIUS                    = PS_SCALAR_VALUE(job->args->data[5],F32);
     192    float MIN_KRON_RADIUS           = PS_SCALAR_VALUE(job->args->data[6],F32);
     193    float EXT_FIT_MAX_RADIUS        = PS_SCALAR_VALUE(job->args->data[7],F32);
    128194
    129195    for (int j = 0; j < 5; j++) {
     
    151217            // clear the window function for this source based on the moments
    152218            psphotKronWindowSetSource (source, kronWindow, (j > 0), false);
    153             // psphotVisualRangeImage (kapa, kronWindow, "kronwin", 1, 0.0, 1.0);
    154219
    155220            // this function populates moments->Mrf,KronFlux,KronFluxErr
     
    165230            }
    166231        }
    167         // char name[64];
    168         // sprintf (name, "kron.window.v%d.fits", j+1);
    169         // psphotSaveImage (NULL, kronWindow, name);
    170     }
    171     psFree (kronWindow);
    172 
    173     psLogMsg ("psphot.kron", PS_LOG_WARN, "measure masked kron magnitudes : %f sec for %ld objects\n", psTimerMark ("psphot.kron"), sources->n);
    174 
     232    }
    175233    return true;
    176234}
  • branches/eam_branches/ipp-20110710/psphot/src/psphotSetThreads.c

    r32023 r32299  
    3030    psFree(task);
    3131
     32    task = psThreadTaskAlloc("PSPHOT_KRON_ITERATE", 8);
     33    task->function = &psphotKronIterate_Threaded;
     34    psThreadTaskAdd(task);
     35    psFree(task);
     36
    3237    task = psThreadTaskAlloc("PSPHOT_BLEND_FIT", 10);
    3338    task->function = &psphotBlendFit_Threaded;
Note: See TracChangeset for help on using the changeset viewer.