void freeCTEParamsFast(CTEParamsFast * pars) { delete((void*)&pars->iz_data); delete((void*)&pars->wcol_data); delete((void*)&pars->scale512); delete((void*)&pars->scale1024); delete((void*)&pars->scale1536); delete((void*)&pars->scale2048); delete((void*)&pars->qlevq_data); delete((void*)&pars->dpdew_data); freeFloatHdrData(pars->rprof); freeFloatHdrData(pars->cprof); delete((void*)&pars->rprof); delete((void*)&pars->cprof); }
int SinkDetect(WF3Info *wf3, SingleGroup *x){ extern int status; int i,j, jj; short dqval=0; float scipix; /*to save the value of the science pixel*/ float refdate=50000.; int keep_going=1; sprintf(MsgText,"\nPerforming SINK pixel detection for imset %i",x->group_num); trlmessage(MsgText); /*THE SCIENCE IMAGE*/ SingleGroup raz; /*quad rotated image to work with*/ /* INIT THE SCIENCE INPUT */ initSingleGroup (&raz); allocSingleGroup (&raz,RAZ_COLS/2, RAZ_ROWS); /*CONVERT DQ DATA TO RAZ FORMAT FOR SCIENCE FILE*/ makedqRAZ(x, &raz); makeSciSingleRAZ(x, &raz); /* GET THE SINK FILE REFERENCE IMAGE FROM SINKFILE AND INITIALIZE */ FloatHdrData sinkref; initFloatHdrData(&sinkref); getFloatHD(wf3->sink.name,"SCI",x->group_num,&sinkref); /*NOW TURN THE SINK REFERENCE IMAGES INTO RAZ FORMAT*/ FloatTwoDArray sinkraz; initFloatData(&sinkraz); /*float 2d arrays*/ allocFloatData(&sinkraz,RAZ_COLS/2, RAZ_ROWS); makeFloatRaz(&sinkref.data,&sinkraz,x->group_num); /*THE MJD OF THE SCIENCE EXPOSURE IS THE COMPARISON DATE THE FOLLOWING TRANSLATION TAKEN FROM ISR WFC3-2014-22.PDF */ scipix=0.; for (i=0;i<(RAZ_COLS/2);i++){ for (j=0; j<RAZ_ROWS; j++){ if ( (PPix(&sinkraz,i,j) > refdate) && ( wf3->expstart > PPix(&sinkraz,i,j)) ){ keep_going=1; /*FLAG THE PRIMARY SINK PIXEL*/ dqval = TRAP | DQPix (raz.dq.data, i, j); DQSetPix (raz.dq.data, i, j, dqval); scipix = Pix(raz.sci.data,i,j); /*FLAG THE DOWNSTREAM PIXEL*/ if (PPix(&sinkraz,i,j-1) < 0 ){ dqval = TRAP | DQPix (raz.dq.data, i, j-1); DQSetPix (raz.dq.data, i, j-1, dqval); } /*FLAG THE UPSTREAM PIXELS*/ for (jj=j+1; jj<RAZ_ROWS; jj++){ if ((int) PPix(&sinkraz,i,jj) == 0) keep_going=0; if ( PPix(&sinkraz,i,jj) > refdate) keep_going=0; if ( 0. < PPix(&sinkraz,i,jj) && PPix(&sinkraz,i,jj) < 1000. && keep_going){ if (scipix <= PPix(&sinkraz,i,jj) ){ dqval = TRAP | DQPix (raz.dq.data, i, jj); DQSetPix (raz.dq.data, i, jj, dqval); } } else { keep_going=0; } } } /*end if*/ } /*end j*/ }/*end i*/ /*format the dq data back to expected orientation*/ undodqRAZ(x,&raz); freeSingleGroup(&raz); freeFloatData(&sinkraz); freeFloatHdrData(&sinkref); trlmessage("Sink pixel flagging complete"); return(status); }