Changeset 21183 for trunk/psModules/src/detrend/pmFringeStats.c
- Timestamp:
- Jan 26, 2009, 8:40:07 PM (17 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/detrend/pmFringeStats.c (modified) (23 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/detrend/pmFringeStats.c
r13776 r21183 70 70 fringe->x = psVectorRecycle(fringe->x, fringe->nRequested, PS_TYPE_F32); 71 71 fringe->y = psVectorRecycle(fringe->y, fringe->nRequested, PS_TYPE_F32); 72 fringe->mask = psVectorRecycle(fringe->mask, fringe->nRequested, PS_TYPE_ U8);72 fringe->mask = psVectorRecycle(fringe->mask, fringe->nRequested, PS_TYPE_VECTOR_MASK); 73 73 fringe->x->n = fringe->y->n = fringe->mask->n = fringe->nRequested; 74 74 psVectorInit(fringe->mask, 0); … … 115 115 if (mask) { 116 116 PS_ASSERT_VECTOR_NON_NULL(mask, false); 117 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_ U8, false);117 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_VECTOR_MASK, false); 118 118 PS_ASSERT_VECTOR_SIZE(mask, (long)numRows, false); 119 119 } … … 142 142 psMetadataAddF32(row, PS_LIST_TAIL, "x", PS_META_REPLACE, "Fringe position in x", x->data.F32[i]); 143 143 psMetadataAddF32(row, PS_LIST_TAIL, "y", PS_META_REPLACE, "Fringe position in y", y->data.F32[i]); 144 ps U8maskValue = 0;145 if (mask && mask->data. U8[i]) {144 psVectorMaskType maskValue = 0; 145 if (mask && mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 146 146 maskValue = 0xff; 147 147 } 148 psMetadataAdd U8(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue);148 psMetadataAddVectorMask(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue); 149 149 table->data[i] = row; 150 150 } … … 207 207 psVector *x = psVectorAlloc(numRows, PS_TYPE_F32); // x position 208 208 psVector *y = psVectorAlloc(numRows, PS_TYPE_F32); // y position 209 psVector *mask = psVectorAlloc(numRows, PS_TYPE_ U8); // mask209 psVector *mask = psVectorAlloc(numRows, PS_TYPE_VECTOR_MASK); // mask 210 210 regions->x = x; 211 211 regions->y = y; 212 212 regions->mask = mask; 213 213 214 #define READ_REGIONS_ROW(VECTOR, TYPE, NAME, DESCRIPTION) \215 VECTOR->data. TYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \214 #define READ_REGIONS_ROW(VECTOR, TYPE, DATATYPE, NAME, DESCRIPTION) \ 215 VECTOR->data.DATATYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \ 216 216 if (!mdok) { \ 217 217 psError(PS_ERR_IO, true, "Unable to find " #DESCRIPTION " .\n"); \ … … 224 224 for (long i = 0; i < numRows; i++) { 225 225 psMetadata *row = table->data[i]; // Table row 226 READ_REGIONS_ROW(x, F32, "x", "x position");227 READ_REGIONS_ROW(y, F32, "y", "y position");228 READ_REGIONS_ROW(mask, U8, "mask", "mask");226 READ_REGIONS_ROW(x, F32, F32, "x", "x position"); 227 READ_REGIONS_ROW(y, F32, F32, "y", "y position"); 228 READ_REGIONS_ROW(mask, VectorMask, PS_TYPE_VECTOR_MASK_DATA, "mask", "mask"); 229 229 } 230 230 psFree(table); … … 259 259 } 260 260 261 pmFringeStats *pmFringeStatsMeasure(pmFringeRegions *fringe, const pmReadout *readout, ps MaskType maskVal)261 pmFringeStats *pmFringeStatsMeasure(pmFringeRegions *fringe, const pmReadout *readout, psImageMaskType maskVal) 262 262 { 263 263 PS_ASSERT_PTR_NON_NULL(fringe, NULL); … … 490 490 newRegions->x = psVectorAlloc(numPoints, PS_TYPE_F32); 491 491 newRegions->y = psVectorAlloc(numPoints, PS_TYPE_F32); 492 newRegions->mask = psVectorAlloc(numPoints, PS_TYPE_ U8);492 newRegions->mask = psVectorAlloc(numPoints, PS_TYPE_VECTOR_MASK); 493 493 pmFringeStats *newStats = pmFringeStatsAlloc(newRegions); // The new list of statistics 494 494 … … 500 500 memcpy(&newRegions->x->data.F32[offset], regions->x->data.F32, regions->x->n * sizeof(psF32)); 501 501 memcpy(&newRegions->y->data.F32[offset], regions->y->data.F32, regions->y->n * sizeof(psF32)); 502 memcpy(&newRegions->mask->data. U8[offset], regions->mask->data.U8, regions->mask->n * sizeof(psU8));502 memcpy(&newRegions->mask->data.PS_TYPE_VECTOR_MASK_DATA[offset], regions->mask->data.PS_TYPE_VECTOR_MASK_DATA, regions->mask->n * sizeof(psVectorMaskType)); 503 503 memcpy(&newStats->f->data.F32[offset], fringe->f->data.F32, fringe->f->n * sizeof(psF32)); 504 504 memcpy(&newStats->df->data.F32[offset], fringe->df->data.F32, fringe->df->n * sizeof(psF32)); … … 549 549 if (mask) { 550 550 PS_ASSERT_VECTOR_NON_NULL(mask, false); 551 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_ U8, false);551 PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_VECTOR_MASK, false); 552 552 PS_ASSERT_VECTOR_SIZE(mask, (long)numRows, false); 553 553 } … … 580 580 psMetadataAddF32(row, PS_LIST_TAIL, "x", PS_META_REPLACE, "Fringe position in x", x->data.F32[i]); 581 581 psMetadataAddF32(row, PS_LIST_TAIL, "y", PS_META_REPLACE, "Fringe position in y", y->data.F32[i]); 582 ps U8maskValue = 0; // Mask value583 if (mask && mask->data. U8[i]) {582 psVectorMaskType maskValue = 0; // Mask value 583 if (mask && mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 584 584 maskValue = 0xff; 585 585 } … … 601 601 psFree(df); 602 602 603 psMetadataAdd U8(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue);603 psMetadataAddVectorMask(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue); 604 604 table->data[i] = row; 605 605 } … … 648 648 psVector *x = psVectorAlloc(numRows, PS_TYPE_F32); // x position 649 649 psVector *y = psVectorAlloc(numRows, PS_TYPE_F32); // y position 650 psVector *mask = psVectorAlloc(numRows, PS_TYPE_ U8); // mask650 psVector *mask = psVectorAlloc(numRows, PS_TYPE_VECTOR_MASK); // mask 651 651 regions->x = x; 652 652 regions->y = y; … … 656 656 psArray *fringes = NULL; // Array of fringes, to return 657 657 658 #define READ_FRINGES_VECTOR_ROW(VECTOR, TYPE, NAME, DESCRIPTION) \658 #define READ_FRINGES_VECTOR_ROW(VECTOR, TYPE, DATATYPE, NAME, DESCRIPTION) \ 659 659 { \ 660 VECTOR->data. TYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \660 VECTOR->data.DATATYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \ 661 661 if (!mdok) { \ 662 662 psError(PS_ERR_IO, true, "Unable to find " #DESCRIPTION " for row %ld.\n", i); \ … … 686 686 } 687 687 688 // XXX : need to extend this to support arbitrary types for the vectors on disk 688 689 // Translate the table into vectors 689 690 for (long i = 0; i < numRows; i++) { 690 691 psMetadata *row = table->data[i]; // Table row 691 READ_FRINGES_VECTOR_ROW(x, F32, "x", "x position");692 READ_FRINGES_VECTOR_ROW(y, F32, "y", "y position");693 READ_FRINGES_VECTOR_ROW(mask, U8, "mask", "mask");692 READ_FRINGES_VECTOR_ROW(x, F32, F32, "x", "x position"); 693 READ_FRINGES_VECTOR_ROW(y, F32, F32, "y", "y position"); 694 READ_FRINGES_VECTOR_ROW(mask, VectorMask, PS_TYPE_VECTOR_MASK_DATA, "mask", "mask"); 694 695 READ_FRINGES_ARRAY_ROW(f, F32, "f", "fringe measurement"); 695 696 READ_FRINGES_ARRAY_ROW(df, F32, "df", "fringe error"); … … 782 783 double matrix = 0.0; // The matrix sum 783 784 for (int k = 0; k < numPoints; k++) { 784 if (!mask->data. U8[k]) {785 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[k]) { 785 786 psF32 f1 = (fringe1) ? fringe1->data.F32[k] : 1.0; // Contribution from i fringe 786 787 psF32 f2 = (fringe2) ? fringe2->data.F32[k] : 1.0; // Contribution from j fringe … … 799 800 double vector = 0.0; // The vector sum 800 801 for (int k = 0; k < numPoints; k++) { 801 if (!mask->data. U8[k]) {802 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[k]) { 802 803 psF32 f1 = (fringe1) ? fringe1->data.F32[k] : 1.0; // Contribution from fringe 1 803 804 psF32 s = science->f->data.F32[k]; // Contribution from science measurement … … 855 856 856 857 for (int i = 0; i < diff->n; i++) { 857 if (!mask->data. U8[i]) {858 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) { 858 859 float difference = science->f->data.F32[i] - scale->coeff->data.F32[0]; 859 860 for (int j = 0; j < fringes->n; j++) { … … 877 878 assert(diffs->type.type == PS_TYPE_F32); 878 879 assert(mask); 879 assert(mask->type.type == PS_TYPE_ U8);880 assert(mask->type.type == PS_TYPE_VECTOR_MASK); 880 881 assert(diffs->n == mask->n); 881 882 … … 888 889 int numClipped = 0; // Number clipped 889 890 for (int i = 0; i < diffs->n; i++) { 890 psTrace("psModules.detrend", 10, "Region %d (%d): %f\n", i, mask->data. U8[i], diffs->data.F32[i]);891 if (!mask->data. U8[i] && fabs(diffs->data.F32[i]) > middle + thresh) {891 psTrace("psModules.detrend", 10, "Region %d (%d): %f\n", i, mask->data.PS_TYPE_VECTOR_MASK_DATA[i], diffs->data.F32[i]); 892 if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[i] && fabs(diffs->data.F32[i]) > middle + thresh) { 892 893 psTrace("psModules.detrend", 5, "Masking %d: %f\n", i, diffs->data.F32[i]); 893 mask->data. U8[i] = 1;894 mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 1; 894 895 numClipped++; 895 896 } … … 931 932 // Set up the mask 932 933 if (!regions->mask) { 933 regions->mask = psVectorAlloc(numRegions, PS_TYPE_ U8);934 regions->mask = psVectorAlloc(numRegions, PS_TYPE_VECTOR_MASK); 934 935 psVectorInit(regions->mask, 0); 935 936 } … … 946 947 for (int j = 0; j < numRegions; j++) { 947 948 if (!isfinite(fringe->f->data.F32[j])) { 948 mask->data. U8[j] = 1;949 mask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 1; 949 950 psTrace("psModules.detrend", 9, "Masking region %d because not finite in fringe %d.\n", j, i); 950 951 } … … 956 957 FILE *f = fopen ("fringe.dat", "w"); 957 958 for (int j = 0; j < numRegions; j++) { 958 if (mask->data. U8[j]) continue;959 if (mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) continue; 959 960 fprintf (f, "%d %f %f ", j, science->f->data.F32[j], science->df->data.F32[j]); 960 961 for (int i = 0; i < fringes->n; i++) { … … 1014 1015 // XXX note that this modifies the input fringe images 1015 1016 psImage *pmFringeCorrect(pmReadout *readout, pmFringeRegions *fringes, psArray *fringeImages, 1016 psArray *fringeStats, ps MaskType maskVal, float rej,1017 psArray *fringeStats, psImageMaskType maskVal, float rej, 1017 1018 unsigned int nIter, float keepFrac) 1018 1019 {
Note:
See TracChangeset
for help on using the changeset viewer.
