IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 7, 2005, 10:14:09 AM (21 years ago)
Author:
magnier
Message:

I extended the pmModelGroup functions to allow dynamic manipulation of
the availble models. This lets user code add models without modifying
the psModule installed library. To do this I've added the following
functions to pmModelGroup.[ch]:

static void ModelGroupFree (pmModelGroup *modelGroup);
pmModelGroup *pmModelGroupAlloc (int nModels);
void pmModelGroupInit (void);
void pmModelGroupAdd (pmModelGroup *model);

changed models to defaultModels, and added a new dymically allocated
local static variable *models.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_rel9_b0/psModules/src/objects/pmModelGroup.c

    r5255 r5730  
    1010#include "models/pmModel_SGAUSS.c"
    1111
    12 static pmModelGroup models[] = {
    13                                    {"PS_MODEL_GAUSS",        7, pmModelFunc_GAUSS,   pmModelFlux_GAUSS,   pmModelRadius_GAUSS,   pmModelLimits_GAUSS,   pmModelGuess_GAUSS,  pmModelFromPSF_GAUSS,  pmModelFitStatus_GAUSS},
    14                                    {"PS_MODEL_PGAUSS",       7, pmModelFunc_PGAUSS,  pmModelFlux_PGAUSS,  pmModelRadius_PGAUSS,  pmModelLimits_PGAUSS,  pmModelGuess_PGAUSS, pmModelFromPSF_PGAUSS, pmModelFitStatus_PGAUSS},
    15                                    {"PS_MODEL_QGAUSS",       8, pmModelFunc_QGAUSS,  pmModelFlux_QGAUSS,  pmModelRadius_QGAUSS,  pmModelLimits_QGAUSS,  pmModelGuess_QGAUSS, pmModelFromPSF_QGAUSS, pmModelFitStatus_QGAUSS},
    16                                    {"PS_MODEL_SGAUSS",       9, pmModelFunc_SGAUSS,  pmModelFlux_SGAUSS,  pmModelRadius_SGAUSS,  pmModelLimits_SGAUSS,  pmModelGuess_SGAUSS, pmModelFromPSF_SGAUSS, pmModelFitStatus_SGAUSS},
    17                                };
     12static pmModelGroup defaultModels[] = {
     13                                          {"PS_MODEL_GAUSS",        7, pmModelFunc_GAUSS,   pmModelFlux_GAUSS,   pmModelRadius_GAUSS,   pmModelLimits_GAUSS,   pmModelGuess_GAUSS,  pmModelFromPSF_GAUSS,  pmModelFitStatus_GAUSS},
     14                                          {"PS_MODEL_PGAUSS",       7, pmModelFunc_PGAUSS,  pmModelFlux_PGAUSS,  pmModelRadius_PGAUSS,  pmModelLimits_PGAUSS,  pmModelGuess_PGAUSS, pmModelFromPSF_PGAUSS, pmModelFitStatus_PGAUSS},
     15                                          {"PS_MODEL_QGAUSS",       8, pmModelFunc_QGAUSS,  pmModelFlux_QGAUSS,  pmModelRadius_QGAUSS,  pmModelLimits_QGAUSS,  pmModelGuess_QGAUSS, pmModelFromPSF_QGAUSS, pmModelFitStatus_QGAUSS},
     16                                          {"PS_MODEL_SGAUSS",       9, pmModelFunc_SGAUSS,  pmModelFlux_SGAUSS,  pmModelRadius_SGAUSS,  pmModelLimits_SGAUSS,  pmModelGuess_SGAUSS, pmModelFromPSF_SGAUSS, pmModelFitStatus_SGAUSS},
     17                                      };
     18
     19static pmModelGroup *models = NULL;
     20static int Nmodels = 0;
     21
     22static void ModelGroupFree (pmModelGroup *modelGroup)
     23{
     24
     25    if (modelGroup == NULL)
     26        return;
     27    psFree (modelGroup);
     28    return;
     29}
     30
     31pmModelGroup *pmModelGroupAlloc (int nModels)
     32{
     33
     34    pmModelGroup *modelGroup = (pmModelGroup *) psAlloc (nModels * sizeof(pmModelGroup));
     35    psMemSetDeallocator(modelGroup, (psFreeFunc) ModelGroupFree);
     36    return (modelGroup);
     37}
     38
     39void pmModelGroupAdd (pmModelGroup *model)
     40{
     41
     42    if (models == NULL) {
     43        pmModelGroupInit ();
     44    }
     45
     46    Nmodels ++;
     47    models = (pmModelGroup *) psRealloc (models, Nmodels*sizeof(pmModelGroup));
     48    models[Nmodels-1] = model[0];
     49    return;
     50}
     51
     52void pmModelGroupInit (void)
     53{
     54
     55    int Nnew = sizeof (defaultModels) / sizeof (pmModelGroup);
     56
     57    models = pmModelGroupAlloc (Nnew);
     58    for (int i = 0; i < Nnew; i++) {
     59        models[i] = defaultModels[i];
     60    }
     61    Nmodels = Nnew;
     62    return;
     63}
    1864
    1965pmModelFunc pmModelFunc_GetFunction (pmModelType type)
    2066{
    21     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    2267    if ((type < 0) || (type >= Nmodels)) {
    2368        psError(PS_ERR_UNKNOWN, true, "Undefined pmModelType");
     
    2974pmModelFlux pmModelFlux_GetFunction (pmModelType type)
    3075{
    31     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    3276    if ((type < 0) || (type >= Nmodels)) {
    3377        psError(PS_ERR_UNKNOWN, true, "Undefined pmModelType");
     
    3983pmModelRadius pmModelRadius_GetFunction (pmModelType type)
    4084{
    41     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    4285    if ((type < 0) || (type >= Nmodels)) {
    4386        psError(PS_ERR_UNKNOWN, true, "Undefined pmModelType");
     
    4992pmModelLimits pmModelLimits_GetFunction (pmModelType type)
    5093{
    51     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    5294    if ((type < 0) || (type >= Nmodels)) {
    5395        psError(PS_ERR_UNKNOWN, true, "Undefined pmModelType");
     
    59101pmModelGuessFunc pmModelGuessFunc_GetFunction (pmModelType type)
    60102{
    61     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    62103    if ((type < 0) || (type >= Nmodels)) {
    63104        psError(PS_ERR_UNKNOWN, true, "Undefined pmModelType");
     
    69110pmModelFitStatusFunc pmModelFitStatusFunc_GetFunction (pmModelType type)
    70111{
    71     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    72112    if ((type < 0) || (type >= Nmodels)) {
    73113        psError(PS_ERR_UNKNOWN, true, "Undefined pmModelType");
     
    79119pmModelFromPSFFunc pmModelFromPSFFunc_GetFunction (pmModelType type)
    80120{
    81     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    82121    if ((type < 0) || (type >= Nmodels)) {
    83122        psError(PS_ERR_UNKNOWN, true, "Undefined pmModelType");
     
    89128psS32 pmModelParameterCount (pmModelType type)
    90129{
    91     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    92130    if ((type < 0) || (type >= Nmodels)) {
    93131        psError(PS_ERR_UNKNOWN, true, "Undefined pmModelType");
     
    99137psS32 pmModelSetType (char *name)
    100138{
    101 
    102     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    103139    for (int i = 0; i < Nmodels; i++) {
    104140        if (!strcmp(models[i].name, name)) {
     
    111147char *pmModelGetType (pmModelType type)
    112148{
    113 
    114     int Nmodels = sizeof (models) / sizeof (pmModelGroup);
    115149    if ((type < 0) || (type >= Nmodels)) {
    116150        psError(PS_ERR_UNKNOWN, true, "Undefined pmModelType");
Note: See TracChangeset for help on using the changeset viewer.