IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 24, 2009, 6:00:00 PM (17 years ago)
Author:
Paul Price
Message:

Wrote functions to merge detections from multiple skycells, and to write detections out. Compiles, not yet tested.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/pap_mops/ppMops/src/ppMopsDetections.c

    r25162 r25181  
    2828    psFree(det->flags);
    2929    psFree(det->diffSkyfileId);
     30    psFree(det->naxis1);
     31    psFree(det->naxis2);
     32    psFree(det->mask);
    3033    return;
    3134}
     
    5659    det->magErr = psVectorAlloc(num, PS_TYPE_F32);
    5760    det->extended = psVectorAlloc(num, PS_TYPE_F32);
    58     det->angle = psVectorAlloc(num, PS_TYPE_F64);
    59     det->angleErr = psVectorAlloc(num, PS_TYPE_F64);
     61    det->angle = psVectorAlloc(num, PS_TYPE_F32);
     62    det->angleErr = psVectorAlloc(num, PS_TYPE_F32);
    6063    det->length = psVectorAlloc(num, PS_TYPE_F32);
    6164    det->lengthErr = psVectorAlloc(num, PS_TYPE_F32);
    6265    det->flags = psVectorAlloc(num, PS_TYPE_U32);
    6366    det->diffSkyfileId = psVectorAlloc(num, PS_TYPE_S64);
     67    det->naxis1 = psVectorAlloc(num, PS_TYPE_S32);
     68    det->naxis2 = psVectorAlloc(num, PS_TYPE_S32);
     69    det->mask = psVectorAlloc(num, PS_TYPE_U8);
    6470
    6571    return det;
     
    6773
    6874
     75ppMopsDetections *ppMopsDetectionsRealloc(ppMopsDetections *det, long num)
     76{
     77    det->x = psVectorRealloc(det->x, num);
     78    det->y = psVectorRealloc(det->y, num);
     79    det->ra = psVectorRealloc(det->ra, num);
     80    det->dec = psVectorRealloc(det->dec, num);
     81    det->raErr = psVectorRealloc(det->raErr, num);
     82    det->decErr = psVectorRealloc(det->decErr, num);
     83    det->mag = psVectorRealloc(det->mag, num);
     84    det->magErr = psVectorRealloc(det->magErr, num);
     85    det->extended = psVectorRealloc(det->extended, num);
     86    det->angle = psVectorRealloc(det->angle, num);
     87    det->angleErr = psVectorRealloc(det->angleErr, num);
     88    det->length = psVectorRealloc(det->length, num);
     89    det->lengthErr = psVectorRealloc(det->lengthErr, num);
     90    det->flags = psVectorRealloc(det->flags, num);
     91    det->diffSkyfileId = psVectorRealloc(det->diffSkyfileId, num);
     92    det->naxis1 = psVectorRealloc(det->naxis1, num);
     93    det->naxis2 = psVectorRealloc(det->naxis2, num);
     94    det->mask = psVectorRealloc(det->mask, num);
     95
     96    return det;
     97}
     98
     99
     100bool ppMopsDetectionsAdd(ppMopsDetections *det, float x, float y, double ra, double dec,
     101                         double raErr, double decErr, float mag, float magErr, float extended,
     102                         float angle, float angleErr, float length, float lengthErr,
     103                         psU32 flags, psS64 diffSkyfileId, int naxis1, int naxis2)
     104{
     105    psVectorAppend(det->x, x);
     106    psVectorAppend(det->y, y);
     107    psVectorAppend(det->ra, ra);
     108    psVectorAppend(det->dec, dec);
     109    psVectorAppend(det->raErr, raErr);
     110    psVectorAppend(det->decErr, decErr);
     111    psVectorAppend(det->mag, mag);
     112    psVectorAppend(det->magErr, magErr);
     113    psVectorAppend(det->extended, extended);
     114    psVectorAppend(det->angle, angle);
     115    psVectorAppend(det->angleErr, angleErr);
     116    psVectorAppend(det->length, length);
     117    psVectorAppend(det->lengthErr, lengthErr);
     118    psVectorAppend(det->flags, flags);
     119    psVectorAppend(det->diffSkyfileId, diffSkyfileId);
     120    psVectorAppend(det->naxis1, naxis1);
     121    psVectorAppend(det->naxis2, naxis2);
     122    psVectorAppend(det->mask, 0);
     123    return true;
     124}
     125
     126
     127bool ppMopsDetectionsCopySingle(ppMopsDetections *target, const ppMopsDetections *source, long index)
     128{
     129    psVectorAppend(target->x, source->x->data.F32[index]);
     130    psVectorAppend(target->y, source->y->data.F32[index]);
     131    psVectorAppend(target->ra, source->ra->data.F64[index]);
     132    psVectorAppend(target->dec, source->dec->data.F64[index]);
     133    psVectorAppend(target->raErr, source->raErr->data.F64[index]);
     134    psVectorAppend(target->decErr, source->decErr->data.F64[index]);
     135    psVectorAppend(target->mag, source->mag->data.F32[index]);
     136    psVectorAppend(target->magErr, source->magErr->data.F32[index]);
     137    psVectorAppend(target->extended, source->extended->data.F32[index]);
     138    psVectorAppend(target->angle, source->angle->data.F32[index]);
     139    psVectorAppend(target->angleErr, source->angleErr->data.F32[index]);
     140    psVectorAppend(target->length, source->length->data.F32[index]);
     141    psVectorAppend(target->lengthErr, source->lengthErr->data.F32[index]);
     142    psVectorAppend(target->flags, source->flags->data.U32[index]);
     143    psVectorAppend(target->diffSkyfileId, source->diffSkyfileId->data.S64[index]);
     144    psVectorAppend(target->naxis1, source->naxis1->data.S32[index]);
     145    psVectorAppend(target->naxis2, source->naxis2->data.S32[index]);
     146    psVectorAppend(target->mask, 0);
     147    return true;
     148}
     149
     150
     151bool ppMopsDetectionsPurge(ppMopsDetections *det)
     152{
     153    long num = 0;
     154    for (long i = 0; i < det->num; i++) {
     155        if (!det->mask->data.U8[i]) {
     156            if (i == num) {
     157                // No need to copy
     158                num++;
     159                continue;
     160            }
     161            det->x->data.F32[num] = det->x->data.F32[i];
     162            det->y->data.F32[num] = det->y->data.F32[i];
     163            det->ra->data.F64[num] = det->ra->data.F64[i];
     164            det->dec->data.F64[num] = det->dec->data.F64[i];
     165            det->raErr->data.F64[num] = det->raErr->data.F64[i];
     166            det->decErr->data.F64[num] = det->decErr->data.F64[i];
     167            det->mag->data.F32[num] = det->mag->data.F32[i];
     168            det->magErr->data.F32[num] = det->magErr->data.F32[i];
     169            det->extended->data.F32[num] = det->extended->data.F32[i];
     170            det->angle->data.F32[num] = det->angle->data.F32[i];
     171            det->angleErr->data.F32[num] = det->angleErr->data.F32[i];
     172            det->length->data.F32[num] = det->length->data.F32[i];
     173            det->lengthErr->data.F32[num] = det->lengthErr->data.F32[i];
     174            det->flags->data.U32[num] = det->flags->data.U32[i];
     175            det->diffSkyfileId->data.S64[num] = det->diffSkyfileId->data.S64[i];
     176            det->naxis1->data.S32[num] = det->naxis1->data.S32[i];
     177            det->naxis2->data.S32[num] = det->naxis2->data.S32[i];
     178            det->mask->data.U8[num] = 0;
     179            num++;
     180        }
     181    }
     182    det->x->n = num;
     183    det->y->n = num;
     184    det->ra->n = num;
     185    det->dec->n = num;
     186    det->raErr->n = num;
     187    det->decErr->n = num;
     188    det->mag->n = num;
     189    det->magErr->n = num;
     190    det->extended->n = num;
     191    det->angle->n = num;
     192    det->angleErr->n = num;
     193    det->length->n = num;
     194    det->lengthErr->n = num;
     195    det->flags->n = num;
     196    det->diffSkyfileId->n = num;
     197    det->naxis1->n = num;
     198    det->naxis2->n = num;
     199    det->mask->n = num;
     200    det->num = num;
     201    return true;
     202}
     203
Note: See TracChangeset for help on using the changeset viewer.