IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 14690


Ignore:
Timestamp:
Aug 29, 2007, 11:58:27 AM (19 years ago)
Author:
Paul Price
Message:

Fixing up normalisation of the ISIS kernels.

File:
1 edited

Legend:

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

    r14671 r14690  
    150150    kernels->subIndex = -1;
    151151
    152     if (psTraceGetLevel("psModules.imcombine.kernel") >= 10) {
    153         for (int i = 0; i < num; i++) {
    154             psKernel *kernel = kernels->preCalc->data[i]; // Kernel of interest
    155             psString kernelName = NULL;
    156             psStringAppend(&kernelName, "kernel%03d.fits", i);
    157             psFits *kernelFile = psFitsOpen(kernelName, "w");
    158             psFree(kernelName);
    159             psFitsWriteImage(kernelFile, NULL, kernel->image, 0, NULL);
    160             psFitsClose(kernelFile);
    161         }
    162     }
    163 
    164152    return kernels;
    165153}
     
    228216
    229217    // Subtract a reference kernel from all the others to maintain flux scaling
    230     psKernel *subtract = kernels->preCalc->data[0]; // Kernel to subtract from all others
    231     for (int i = 1; i < kernels->num; i++) {
    232         psKernel *kernel = kernels->preCalc->data[i]; // Kernel to subtract
    233         psBinaryOp(kernel->image, kernel->image, "-", subtract->image);
     218    int subIndex = 0;                   // Index of kernel to subtract from others
     219    psKernel *subtract = kernels->preCalc->data[subIndex]; // Kernel to subtract from others
     220    int numGaussians = fwhms->n;       // Number of Gaussians
     221    for (int i = 0, index = 0; i < numGaussians; i++) {
     222        for (int uOrder = 0; uOrder <= orders->data.S32[i]; uOrder++) {
     223            for (int vOrder = 0; vOrder <= orders->data.S32[i] - uOrder; vOrder++, index++) {
     224                if (uOrder % 2 == 0 && vOrder % 2 == 0 && index != subIndex) {
     225                    psKernel *kernel = kernels->preCalc->data[index]; // Kernel to subtract
     226                    psBinaryOp(kernel->image, kernel->image, "-", subtract->image);
     227                }
     228            }
     229        }
     230    }
     231
     232    if (psTraceGetLevel("psModules.imcombine.kernel") >= 10) {
     233        for (int i = 0; i < kernels->num; i++) {
     234            psKernel *kernel = kernels->preCalc->data[i]; // Kernel of interest
     235            psString kernelName = NULL;
     236            psStringAppend(&kernelName, "kernel%03d.fits", i);
     237            psFits *kernelFile = psFitsOpen(kernelName, "w");
     238            psFree(kernelName);
     239            psFitsWriteImage(kernelFile, NULL, kernel->image, 0, NULL);
     240            psFitsClose(kernelFile);
     241        }
    234242    }
    235243
     
    443451
    444452    // Subtract unity from the kernels to maintain photometric flux scaling
    445     for (int i = 0; i < kernels->num; i++) {
    446         psKernel *kernel = kernels->preCalc->data[i]; // Kernel of interest
    447         kernel->kernel[0][0] -= 1.0;
    448     }
    449 
    450     int numGaussians = kernels->num;    // Number of ISIS kernels
     453    int numGaussians = fwhms->n;       // Number of Gaussians
     454    for (int i = 0, index = 0; i < numGaussians; i++) {
     455        for (int uOrder = 0; uOrder <= orders->data.S32[i]; uOrder++) {
     456            for (int vOrder = 0; vOrder <= orders->data.S32[i] - uOrder; vOrder++, index++) {
     457                if (uOrder % 2 == 0 && vOrder % 2 == 0) {
     458                    psKernel *kernel = kernels->preCalc->data[index]; // Kernel to subtract
     459                    kernel->kernel[0][0] -= 1.0;
     460                }
     461            }
     462        }
     463    }
     464
     465    int numISIS = kernels->num;         // Number of ISIS kernels
    451466    int numInner = PS_SQR(2 * inner + 1); // Number of inner kernel elements
    452467
     
    455470    }
    456471
    457     kernels->subIndex = numInner/2 + numGaussians;
     472    kernels->subIndex = numInner/2 + numISIS;
    458473    assert(kernels->u->data.S32[kernels->subIndex] == 0 &&
    459474           kernels->v->data.S32[kernels->subIndex] == 0);
Note: See TracChangeset for help on using the changeset viewer.