IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 18, 2007, 4:33:33 PM (19 years ago)
Author:
Paul Price
Message:

Putting GUNK in macros.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/imcombine/pmSubtraction.c

    r14311 r14313  
    44 *  @author GLG, MHPCC
    55 *
    6  *  @version $Revision: 1.25 $ $Name: not supported by cvs2svn $
    7  *  @date $Date: 2007-07-19 02:03:42 $
     6 *  @version $Revision: 1.26 $ $Name: not supported by cvs2svn $
     7 *  @date $Date: 2007-07-19 02:33:33 $
    88 *
    99 *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
     
    2525#include "pmSubtraction.h"
    2626
    27 #define USE_FUNCTIONS_INSTEAD_OF_MACROS          // Can I pass the address of a static inline function?
     27//#define USE_FUNCTIONS_INSTEAD_OF_MACROS          // Can I pass the address of a static inline function?
    2828
    2929//////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    125125            } \
    126126            break; \
     127          } \
     128          case PM_SUBTRACTION_KERNEL_GUNK: { \
     129              if (i < (KERNELS)->inner) { \
     130                  /* Using pre-calculated function */ \
     131                  psKernel *preCalc = (KERNELS)->preCalc->data[i]; /* Precalculated values */ \
     132                  for (int v = -size; v <= size; v++) { \
     133                      for (int u = -size; u <= size; u++) { \
     134                          (TARGET)->kernel[v][u] += value * FUNC(preCalc->kernel[v][u]); \
     135                      } \
     136                  } \
     137              } else { \
     138                  /* Using delta function */ \
     139                  int u = (KERNELS)->u->data.S32[i]; /* Offset in x */ \
     140                  int v = (KERNELS)->v->data.S32[i]; /* Offset in y */ \
     141                  (TARGET)->kernel[v][u] += value; \
     142              } \
     143              /* The (0,0) kernel is subtracted from other kernels to preserve photometric scaling */ \
     144              if ((KERNELS)->spatialOrder > 0 && i != (KERNELS)->subIndex) { \
     145                  (TARGET)->kernel[0][0] += subValue; \
     146              } \
     147              break; \
    127148          } \
    128149          case PM_SUBTRACTION_KERNEL_ISIS: { \
     
    309330          break; \
    310331      } \
     332      case PM_SUBTRACTION_KERNEL_GUNK: { \
     333          double value;                 /* The value to return */ \
     334          if ((INDEX) < (KERNELS)->inner) { \
     335              /* Using pre-calculated function */ \
     336              psKernel *kernel = (KERNELS)->preCalc->data[(INDEX)]; /* The convolution kernel */ \
     337              int size = (KERNELS)->size;     /* Kernel half-size */ \
     338              double sum = 0.0;             /* Accumulated sum from convolution */ \
     339              for (int v = -size; v <= size; v++) { \
     340                  for (int u = -size; u <= size; u++) { \
     341                      sum += FUNC(kernel->kernel[v][u]) * (IMAGE)->data.F32[(Y) + v][(X) + u]; \
     342                  } \
     343              } \
     344              value = FUNC(polyValue) * sum; \
     345          } else { \
     346              /* Using delta function */ \
     347              int u = (KERNELS)->u->data.S32[(INDEX)]; /* Offset in x */ \
     348              int v = (KERNELS)->v->data.S32[(INDEX)]; /* Offset in y */ \
     349              value = FUNC(polyValue) * (IMAGE)->data.F32[(Y) + v][(X) + u]; /* Value of convolution */ \
     350          } \
     351          /* The (0,0) delta function is subtracted from most kernels to preserve photometric scaling */ \
     352          if ((KERNELS)->spatialOrder > 0 && (INDEX) != (KERNELS)->subIndex) { \
     353              value += FUNC(-1.0) * (IMAGE)->data.F32[(Y)][(X)]; \
     354          } \
     355          (TARGET) = value; \
     356      } \
    311357      case PM_SUBTRACTION_KERNEL_ISIS: { \
    312358          psKernel *kernel = (KERNELS)->preCalc->data[(INDEX)]; /* The convolution kernel */ \
     
    383429              int size = kernels->size;     // Kernel half-size
    384430              double sum = 0.0;             // Accumulated sum from convolution
    385               double sub = 0.0;             // Accumulated sum to subtract
    386431              for (int v = -size; v <= size; v++) {
    387432                  for (int u = -size; u <= size; u++) {
     
    389434                  }
    390435              }
    391               value = weightFunc(polyValue) * sum + weightFunc(-1.0) * sub;
     436              value = weightFunc(polyValue) * sum;
    392437          } else {
    393438              // Using delta function
Note: See TracChangeset for help on using the changeset viewer.