IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 30550


Ignore:
Timestamp:
Feb 9, 2011, 4:28:33 PM (15 years ago)
Author:
watersc1
Message:

Updated fringe scale solver. This looks like it eliminates the serious issues Heather noticed, and does not seem to increase the error in current good fits.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/detrend/pmFringeStats.c

    r25930 r30550  
    10081008        }
    10091009    }
     1010    // Allocate array of vectors to hold data.
     1011    psArray *bins = psArrayAlloc(4000);
     1012    for (int j = 0; j < bins->n; j++) {
     1013      bins->data[j] = psVectorAllocEmpty(1,PS_TYPE_F32);
     1014      //      psVector *v = psVectorAllocEmpty(1,PS_TYPE_F32);
     1015      //      bins = psArrayAdd(bins,1,v);
     1016    }
     1017
     1018    // Fill vectors
     1019    pmFringeStats *fringe = fringes->data[0];
     1020    for (int j = 0; j < numRegions; j++) {
     1021      if (mask->data.PS_TYPE_VECTOR_MASK_DATA[j] == 0) {
     1022        int array_bin = (int) ((fringe->f->data.F32[j] - -0.1) / 5e-5);
     1023        psVector *bin = bins->data[array_bin];
     1024        psVectorAppend(bin,science->f->data.F32[j]);
     1025      }
     1026    }
    10101027   
     1028    psVector *fringe_positions = psVectorAllocEmpty(4000,PS_TYPE_F32);
     1029    psVector *science_values   = psVectorAllocEmpty(4000,PS_TYPE_F32);
     1030    psVector *science_errors   = psVectorAllocEmpty(4000,PS_TYPE_F32);
     1031
     1032    psStats *binStats = psStatsAlloc(PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV);
     1033    for (int i = 0; i < 4000; i++) {
     1034      psVector *bin = bins->data[i];
     1035      if (bin->n > 2) {
     1036        psStatsInit(binStats);
     1037
     1038        psVectorStats(binStats,bin,NULL,NULL,1);
     1039       
     1040        if (isfinite(binStats->robustStdev) &&
     1041            isfinite(binStats->robustMedian) &&
     1042            binStats->robustStdev > 0) {
     1043          psVectorAppend(fringe_positions,-0.1 + i * 5e-5);
     1044          psVectorAppend(science_values, binStats->robustMedian);
     1045          psVectorAppend(science_errors, binStats->robustStdev);
     1046        }
     1047      }
     1048      psFree(bins->data[i]);
     1049    }
     1050    psFree(bins);
     1051    psFree(binStats);
     1052
     1053    for (int i = 0; i < fringe_positions->n; i++) {
     1054      psTrace("psModules.detrend",7,"FITDATA: %f %f %f\n",
     1055              fringe_positions->data.F32[i],
     1056              science_values->data.F32[i],
     1057              science_errors->data.F32[i]);
     1058    }
    10111059/*     // Begin switch from old outlier removal and fitting code. */
    10121060
    10131061    psPolynomial1D *poly = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1);
    10141062
    1015     pmFringeStats *fringe = fringes->data[0];
    1016     psVector *errors = psVectorAlloc(science->df->n,PS_TYPE_F32);
    1017     for (int j = 0; j < errors->n; j++) {
    1018       errors->data.F32[j] = 1 / science->df->data.F32[j];
    1019     }
    1020     psVectorFitPolynomial1D(poly,mask,0xff,science->f,errors,fringe->f);
    1021 
     1063    //    pmFringeStats *fringe = fringes->data[0];
     1064/*     psVector *errors = psVectorAlloc(science->df->n,PS_TYPE_F32); */
     1065/*     for (int j = 0; j < errors->n; j++) { */
     1066/*       errors->data.F32[j] = 1 / science->df->data.F32[j]; */
     1067/*     } */
     1068/*     psVectorFitPolynomial1D(poly,mask,0xff,science->f,errors,fringe->f); */
     1069    psVectorFitPolynomial1D(poly,NULL,0xff,science_values,science_errors,fringe_positions);
     1070    psFree(fringe_positions);
     1071    psFree(science_values);
     1072    psFree(science_errors);
     1073   
    10221074    for (int i = 0; i <= poly->nX; i++) {
    10231075      scale->coeff->data.F32[i] = poly->coeff[i];
     
    10271079    psFree(poly);
    10281080    //    psFree(fringe);
    1029     psFree(errors);
     1081    //    psFree(errors);
    10301082
    10311083    psFree(median);
Note: See TracChangeset for help on using the changeset viewer.