Changeset 27838 for branches/tap_branches/magic/remove
- Timestamp:
- May 3, 2010, 8:41:49 AM (16 years ago)
- Location:
- branches/tap_branches
- Files:
-
- 1 deleted
- 15 edited
- 8 copied
-
. (modified) (1 prop)
-
magic (modified) (1 prop)
-
magic/remove (modified) (1 prop)
-
magic/remove/Doxyfile.in (copied) (copied from trunk/magic/remove/Doxyfile.in )
-
magic/remove/Makefile.am (copied) (copied from trunk/magic/remove/Makefile.am )
-
magic/remove/autogen.sh (copied) (copied from trunk/magic/remove/autogen.sh )
-
magic/remove/configure.ac (copied) (copied from trunk/magic/remove/configure.ac )
-
magic/remove/src (modified) (1 prop)
-
magic/remove/src/Makefile.am (copied) (copied from trunk/magic/remove/src/Makefile.am )
-
magic/remove/src/Makefile.simple (modified) (2 diffs)
-
magic/remove/src/diffedpixels.c (copied) (copied from trunk/magic/remove/src/diffedpixels.c )
-
magic/remove/src/isdestreaked.c (modified) (1 diff)
-
magic/remove/src/streaksVersion.c (copied) (copied from trunk/magic/remove/src/streaksVersion.c )
-
magic/remove/src/streaksVersionDefinitions.h.in (copied) (copied from trunk/magic/remove/src/streaksVersionDefinitions.h.in )
-
magic/remove/src/streaksastrom.c (modified) (1 diff)
-
magic/remove/src/streakscompare.c (modified) (1 diff)
-
magic/remove/src/streaksextern.c (modified) (1 diff)
-
magic/remove/src/streaksio.c (modified) (14 diffs)
-
magic/remove/src/streaksio.h (modified) (1 diff)
-
magic/remove/src/streaksrelease.c (modified) (6 diffs)
-
magic/remove/src/streaksremove.c (modified) (37 diffs)
-
magic/remove/src/streaksremove.h (modified) (4 diffs)
-
magic/remove/src/streaksreplace.c (modified) (1 diff)
-
magic/remove/src/warpedpixels.c (deleted)
Legend:
- Unmodified
- Added
- Removed
-
branches/tap_branches
- Property svn:mergeinfo changed
-
branches/tap_branches/magic
- Property svn:ignore
-
old new 1 1 magic 2 2 ssa-core-cpp 3 Makefile4 3 Makefile.bak
-
- Property svn:ignore
-
branches/tap_branches/magic/remove
-
Property svn:ignore
set to
configure
Makefile.in
Doxyfile
config.log
depcomp
config.status
config.guess
ltmain.sh
config.sub
autom4te.cache
libtool
missing
Makefile
aclocal.m4
install-sh
-
Property svn:ignore
set to
-
branches/tap_branches/magic/remove/src
- Property svn:ignore
-
old new 4 4 streakscompare 5 5 streaksrelease 6 makefile 6 Makefile 7 Makefile.in 8 config.h 9 .deps 10 streaksVersionDefinitions.h 11 config.h.in 12 stamp-h1
-
- Property svn:ignore
-
branches/tap_branches/magic/remove/src/Makefile.simple
r25082 r27838 10 10 11 11 REMOVE_OBJECTS= \ 12 ${COMMON_OBJECTS} \13 12 streaksremove.o \ 14 13 streaksextern.o \ 15 warpedpixels.o \14 diffedpixels.o \ 16 15 Line.o 17 16 18 17 REPLACE_OBJECTS= \ 19 ${COMMON_OBJECTS} \20 18 streaksreplace.o 21 19 22 20 COMPARE_OBJECTS= \ 23 ${COMMON_OBJECTS} \24 21 streakscompare.o 25 22 26 23 RELEASE_OBJECTS= \ 27 ${COMMON_OBJECTS} \28 24 streaksrelease.o 29 25 30 26 ISDESTREAKED_OBJECTS= \ 31 ${COMMON_OBJECTS} \32 27 isdestreaked.o 33 28 … … 45 40 HEADERS=Line.h streaksastrom.h streaksextern.h streaksio.h streaksremove.h 46 41 47 all: ${PROGRAMS}42 all: ${PROGRAMS} 48 43 49 ${REMOVE_OBJECTS}: ${HEADERS} 50 streaksremove: ${REMOVE_OBJECTS} 44 # programs all depend on the common objects and the common headers 45 PROGRAM_OBJECTS = \ 46 ${REMOVE_OBJECTS} \ 47 ${REPLACE_OBJECTS} \ 48 ${COMPARE_OBJECTS} \ 49 ${RELEASE_OBJECTS} \ 50 ${ISDESTREAKED_OBJECTS} 51 51 52 streaksreplace: ${REPLACE_OBJECTS}52 ${COMMON_OBJECTS}: ${HEADERS} 53 53 54 streakscompare: ${COMPARE_OBJECTS}54 ${PROGRAM_OBJECTS}: ${HEADERS} ${COMMON_OBJECTS} 55 55 56 streaksre lease: ${RELEASE_OBJECTS}56 streaksremove: ${REMOVE_OBJECTS} ${COMMON_OBJECTS} 57 57 58 isdestreaked: ${ISDESTREAKED_OBJECTS} 58 streaksreplace: ${REPLACE_OBJECTS} ${COMMON_OBJECTS} 59 60 streakscompare: ${COMPARE_OBJECTS} ${COMMON_OBJECTS} 61 62 streaksrelease: ${RELEASE_OBJECTS} ${COMMON_OBJECTS} 63 64 isdestreaked: ${ISDESTREAKED_OBJECTS} ${COMMON_OBJECTS} 59 65 60 66 -
branches/tap_branches/magic/remove/src/isdestreaked.c
r25082 r27838 1 1 #include "streaksremove.h" 2 3 char *streaksProgram = "isdestreaked"; 2 4 3 5 int -
branches/tap_branches/magic/remove/src/streaksastrom.c
r25082 r27838 378 378 linearizeTransforms(strkAstrom *astrom) 379 379 { 380 if (!pmAstromLinearizeTransforms((pmFPA *) astrom->fpa, (pmChip *) astrom->chip)) { 381 // streaksExit("linear fit to astrometry failed\n", PS_EXIT_UNKNOWN_ERROR); 382 psError(PS_ERR_UNKNOWN, false, "linear fit to astrometry failed ignoring"); 380 if (!pmAstromLinearizeTransforms((pmFPA *) astrom->fpa, (pmChip *) astrom->chip, NULL, NULL, NULL, 0, 0)) { 381 psErrorStackPrint(stderr, "linear fit to astrometry failed. ignoring\n"); 383 382 return false; 384 383 } -
branches/tap_branches/magic/remove/src/streakscompare.c
r25082 r27838 1 1 #include "streaksremove.h" 2 3 char *streaksProgram = "streakscompare"; 2 4 3 5 static pmConfig * parseArguments(int, char **); -
branches/tap_branches/magic/remove/src/streaksextern.c
r25001 r27838 78 78 } 79 79 } 80 printf("%d streaks on this component\n", streaksOnComponent);80 fprintf(stderr, "%d streaks on this component\n", streaksOnComponent); 81 81 return pixels; 82 82 } -
branches/tap_branches/magic/remove/src/streaksio.c
r25469 r27838 121 121 sf->transparentStreaks = psMetadataLookupF64(&status, config->arguments, "TRANSPARENT_STREAKS"); 122 122 123 sf->stats = psMetadataAlloc(); 124 psString statsFileName= psMetadataLookupStr(&status, config->arguments, "STATS"); 125 if (statsFileName) { 126 sf->statsFile = fopen(statsFileName, "w"); 127 if (!sf->statsFile) { 128 psError(PS_ERR_IO, true, "failed to open stats file %s", statsFileName); 129 streaksExit("", PS_EXIT_CONFIG_ERROR); 130 } 131 } 132 123 133 return sf; 124 134 } … … 128 138 { 129 139 freeImages(sf); 130 psFree(sf-> warpedPixels);140 psFree(sf->diffedPixels); 131 141 psFree(sf->tiles); 132 142 psFree(sf->view); … … 800 810 return; 801 811 } 812 streaksVersionHeaderFull(sfile->header); 813 802 814 if (!psFitsWriteImage(sfile->fits, sfile->header, sfile->image, 0, extname)) { 803 815 psError(PS_ERR_IO, false, "failed to write image to %s extnum: %d", … … 817 829 return; 818 830 } 831 streaksVersionHeaderFull(sfile->header); 819 832 if (!psFitsWriteImageCube(sfile->fits, sfile->header, imagecube, extname)) { 820 833 psError(PS_ERR_IO, false, "failed to write image to %s extnum: %d", … … 851 864 sfile->header = NULL; 852 865 psFree(sfile->image); 853 sfile-> header= NULL;866 sfile->image = NULL; 854 867 psFree(sfile->imagecube); 855 sfile-> header= NULL;868 sfile->imagecube = NULL; 856 869 } 857 870 … … 859 872 closeImages(streakFiles *sf) 860 873 { 874 if (sf->stage == IPP_STAGE_RAW) { 875 if (sf->view) { 876 sf->view->readout = -1; 877 pmFPAfileIOChecks(sf->config, sf->view, PM_FPA_AFTER); 878 sf->view->cell = -1; 879 pmFPAfileIOChecks(sf->config, sf->view, PM_FPA_AFTER); 880 sf->view->chip = -1; 881 pmFPAfileIOChecks(sf->config, sf->view, PM_FPA_AFTER); 882 } 883 } 861 884 closeImage(sf->inImage); 862 885 closeImage(sf->outImage); … … 913 936 bool free_user_copies = true; 914 937 if (user_copies == NULL) { 915 user_copies = "2";916 free_user_copies = false;938 // input does not have replication requested 939 return true; 917 940 } 918 941 if (!nebSetXattr(server, outFile->name, "user.copies", user_copies, NEB_REPLACE)) { … … 920 943 return false; 921 944 } 922 if (!nebReplicate(server, outFile->name, "any", NULL)) {945 if (!nebReplicate(server, outFile->name, NULL, NULL)) { 923 946 psError(PM_ERR_UNKNOWN, true, "nebReplicate failed for %s\n%s", outFile->name, nebErr(server)); 924 947 return false; … … 1111 1134 1112 1135 psImage *image = sfiles->outImage->image; 1136 int imageType = image->type.type; 1137 double exciseValue = sfiles->inImage->exciseValue; 1138 1113 1139 psImage *mask = sfiles->inMask->image; 1114 1140 psImage *weight = NULL; 1141 int weightType = 0; 1142 double weightExciseValue = NAN; 1115 1143 if (sfiles->outWeight) { 1116 1144 weight = sfiles->outWeight->image; 1117 } 1118 double exciseValue = sfiles->inImage->exciseValue; 1145 weightType = weight->type.type; 1146 weightExciseValue = sfiles->inWeight->exciseValue; 1147 } 1119 1148 1120 1149 if (printCounts) { … … 1126 1155 // these gets are not necessary, we could just set the pixels to nan 1127 1156 // but I want to get the counts 1128 double imageVal = image->data.F32[y][x]; 1129 psU32 maskVal; 1157 double imageVal = 0; // avoid compiler warning 1158 if (imageType == PS_TYPE_F32) { 1159 imageVal = image->data.F32[y][x]; 1160 } else if (imageType == PS_TYPE_S16) { 1161 imageVal = image->data.S16[y][x]; 1162 } else if (imageType == PS_TYPE_U16) { 1163 imageVal = image->data.U16[y][x]; 1164 } else { 1165 psError(PS_ERR_PROGRAMMING, true, "unexpected image type found: %d\n", 1166 imageType); 1167 streaksExit("", PS_EXIT_PROG_ERROR); 1168 } 1169 psU32 maskVal = 0; 1130 1170 if (sfiles->stage == IPP_STAGE_RAW) { 1131 1171 unsigned int xChip, yChip; … … 1137 1177 if (maskVal & maskMask) { 1138 1178 ++maskedPixels; 1139 if (!isExciseValue(imageVal, sfiles->inImage->exciseValue)) {1179 if (!isExciseValue(imageVal, exciseValue)) { 1140 1180 ++nandPixels; 1141 image->data.F32[y][x] = exciseValue; 1181 if (imageType == PS_TYPE_F32) { 1182 image->data.F32[y][x] = exciseValue; 1183 } else if (imageType == PS_TYPE_S16) { 1184 image->data.S16[y][x] = exciseValue; 1185 } else if (imageType == PS_TYPE_U16) { 1186 image->data.U16[y][x] = exciseValue; 1187 } else { 1188 psError(PS_ERR_PROGRAMMING, true, "unexpected image type found: %d\n", 1189 imageType); 1190 streaksExit("", PS_EXIT_PROG_ERROR); 1191 } 1142 1192 } 1143 1193 if (weight) { 1144 double weightVal = weight ? weight->data.F32[y][x] : 0; 1145 if (!isnan(weightVal)) { 1146 ++nandWeights; 1147 weight->data.F32[y][x] = NAN; 1194 if (weightType == PS_TYPE_F32) { 1195 double weightVal = weight->data.F32[y][x]; 1196 if (!isnan(weightVal)) { 1197 ++nandWeights; 1198 weight->data.F32[y][x] = NAN; 1199 } 1200 } else if(weightType == PS_TYPE_S16) { 1201 double weightVal = weight->data.S16[y][x]; 1202 if (!isExciseValue(weightVal, weightExciseValue)) { 1203 ++nandWeights; 1204 image->data.S16[y][x] = weightExciseValue; 1205 } 1206 } else if (weightType == PS_TYPE_U16) { 1207 double weightVal = weight->data.U16[y][x]; 1208 if (!isExciseValue(weightVal, weightExciseValue)) { 1209 ++nandWeights; 1210 image->data.U16[y][x] = weightExciseValue; 1211 } 1212 } else { 1213 psError(PS_ERR_PROGRAMMING, true, "unexpected image type found: %d\n", 1214 weightType); 1215 streaksExit("", PS_EXIT_PROG_ERROR); 1148 1216 } 1149 1217 } … … 1176 1244 psMetadataAddU16(in->header, PS_LIST_TAIL, "BLANK", 0, "", 65535); 1177 1245 psMetadataAddU16(in->header, PS_LIST_TAIL, "ZBLANK", 0, "", 65535); 1178 } else { 1246 } else if (in->image->type.type == PS_TYPE_S16) { 1247 in->exciseValue = 32767; 1248 psMetadataAddU16(in->header, PS_LIST_TAIL, "BLANK", 0, "", 32767); 1249 psMetadataAddU16(in->header, PS_LIST_TAIL, "ZBLANK", 0, "", 32767); 1250 } else if (in->image->type.type == PS_TYPE_F32) { 1179 1251 in->exciseValue = NAN; 1180 } 1181 } 1182 1183 void 1184 strkGetMaskValues(streakFiles *sfiles, psU32 *maskStreak, psU32 *maskMask) 1185 { 1252 } else { 1253 psError(PS_ERR_PROGRAMMING, true, "unexpected image type found: %d\n", in->image->type.type); 1254 streaksExit("", PS_EXIT_PROG_ERROR); 1255 } 1256 } 1257 1258 // Get the mask values that we need. 1259 // If an input mask file is provided get them from there. 1260 // Otherwise get them from the recipe MASKS 1261 void 1262 strkGetMaskValues(streakFiles *sfiles) 1263 { 1264 if (sfiles->maskStreak) { 1265 // already done 1266 return; 1267 } 1186 1268 if (sfiles->inMask && sfiles->inMask->header) { 1187 1269 if (!pmConfigMaskReadHeader(sfiles->config, sfiles->inMask->header)) { … … 1196 1278 streaksExit("", PS_EXIT_CONFIG_ERROR); 1197 1279 } 1198 *maskStreak = psMetadataLookupU32(&status, masks, "STREAK");1280 sfiles->maskStreak = psMetadataLookupU32(&status, masks, "STREAK"); 1199 1281 if (!status) { 1200 1282 psError(PM_ERR_CONFIG, false, "failed to lookup mask value for STREAK in recipes\n"); … … 1212 1294 } 1213 1295 } 1214 *maskMask = ~convPoor;1296 sfiles->maskMask = ~convPoor; 1215 1297 } 1216 1298 -
branches/tap_branches/magic/remove/src/streaksio.h
r24853 r27838 16 16 void copyFitsOptions(sFile *out, sFile *rec, sFile *in, psVector *tiles); 17 17 void setupImageRefs(sFile *out, sFile *recoveryOut, sFile *in, int extnum, bool exciseAll); 18 void strkGetMaskValues(streakFiles *sfiles , psU32 *maskStreak, psU32 *maskMask);18 void strkGetMaskValues(streakFiles *sfiles); 19 19 void copyExtraExtensions(streakFiles *sfiles); 20 20 -
branches/tap_branches/magic/remove/src/streaksrelease.c
r25082 r27838 4 4 static bool readAndCopyToOutput(streakFiles *sf, bool exciseAll); 5 5 static void writeImages(streakFiles *sf, bool exciseImageCube); 6 7 char *streaksProgram = "streaksrelease"; 6 8 7 9 int … … 16 18 return PS_EXIT_CONFIG_ERROR; 17 19 } 18 19 // Values to set for masked pixels20 psU32 maskStreak = 0; // for the image and weight (usually NAN, MAXINT for integer images)21 psU32 maskMask = 0; // value looked up for MASK.STREAK22 20 23 21 // Does true work here? … … 50 48 51 49 // now that we've read the input files, lookup the mask values that we read 52 if (maskStreak == 0) {53 strkGetMaskValues(sfiles, &maskStreak, &maskMask); 54 }55 56 setMaskedToNAN(sfiles, maskMask, true);50 strkGetMaskValues(sfiles); 51 52 if (!sfiles->inImage->imagecube) { 53 setMaskedToNAN(sfiles, sfiles->maskMask, true); 54 } 57 55 58 56 // write out the destreaked temporary images and the recovery images … … 226 224 if (sf->inImage->image) { 227 225 setupImageRefs(sf->outImage, sf->recImage, sf->inImage, sf->extnum, exciseAll); 228 } else if (sf->inImage->imagecube) {229 // Image cubes should have been excised in the destreaking process230 streaksExit("unexpected imagecube found", PS_EXIT_CONFIG_ERROR);231 226 } else { 232 return false;227 // image cubes are handled specially 233 228 } 234 229 … … 278 273 279 274 275 // XXXX: why isn't this in streaksio.c ?? See also streakremove.c 280 276 static void 281 277 writeImages(streakFiles *sf, bool exciseImageCube) … … 303 299 } 304 300 305 // borrow one of the images from the imagecube and set it to init value306 psImage *image = psArrayGet (sf->inImage->imagecube, 0);307 psMemIncrRefCounter(image);308 psImageInit(image, initValue);309 if (exciseImageCube) {310 sf->outImage->image = image;311 writeImage(sf->outImage, extname, sf->extnum);312 } else {313 // write zero valued image to reccovery314 if (sf->recImage) {315 sf->recImage->image = image;316 writeImage(sf->recImage, extname, sf->extnum);317 }318 }319 301 // Assumption: there are no mask and weight images for video cells 320 302 return; -
branches/tap_branches/magic/remove/src/streaksremove.c
r25434 r27838 12 12 static pmConfig *parseArguments(int argc, char **argv); 13 13 static bool readAndCopyToOutput(streakFiles *sf, bool exciseAll); 14 static void exciseNonWarpedPixels(streakFiles *sfiles, psImageMaskType newMaskValue);15 static bool warpedPixel(streakFiles *sfiles, int x, int y);14 static long exciseNonDiffedPixels(streakFiles *sfiles, psImageMaskType newMaskValue); 15 static bool diffedPixel(streakFiles *sfiles, int x, int y); 16 16 static void excisePixel(streakFiles *sfiles, unsigned int x, unsigned int y, bool streak, psImageMaskType newMaskValue); 17 17 static void writeImages(streakFiles *sf, bool exciseImageCube); 18 18 static void updateAstrometry(streakFiles *sfiles); 19 19 static void censorSources(streakFiles *sfiles, psImageMaskType maskStreak); 20 static long censorPixels(streakFiles *sfiles, psImage * pixels, bool checkNonWarpedPixels, psU16 maskStreak); 21 20 static long censorPixels(streakFiles *sfiles, psImage * pixels, bool checkNonDiffedPixels, psU16 maskStreak); 21 22 char *streaksProgram = "streaksremove"; 23 24 // Note: For clarity the flow of this program is in main(). 25 // There is not a lot of error checking is done in main. 26 // Until the end, where we might be doing Nebulous operations, called functions exit when an error 27 // is encountered. 22 28 int 23 29 main(int argc, char *argv[]) … … 26 32 27 33 psLibInit(NULL); 28 psTimerStart(" STREAKSREMOVE");34 psTimerStart("TOTAL_TIME"); 29 35 30 36 pmConfig *config = parseArguments(argc, argv); … … 33 39 streaksExit("", PS_EXIT_CONFIG_ERROR); 34 40 } 35 36 // Values to set for masked pixels37 psU32 maskStreak = 0; // for the image and weight (usually NAN, MAXINT for integer images)38 psU32 maskMask = 0; // value looked up for MASK.STREAK39 41 40 42 psString streaksFileName = psMetadataLookupStr(NULL, config->arguments, "STREAKS"); … … 50 52 streakFiles *sfiles = openFiles(config, true, argv[0]); 51 53 setupAstrometry(sfiles); 54 sfiles->stats = psMetadataAlloc(); 52 55 53 56 // Optionally we can set pixels that are masked to NAN since they couldn't have been … … 61 64 62 65 bool exciseAll = false; 63 // --keepnon warped is a test and debug mode64 bool keepNon WarpedPixels = psMetadataLookupBool(&status, config->arguments, "KEEP_NON_WARPED");65 66 // we need to check for non warped pixels unless we've been asked not to or the stage is diff67 // (By definition pixels in diff images were included in a diff)68 bool checkNon WarpedPixels = ! (keepNonWarpedPixels || (sfiles->stage == IPP_STAGE_DIFF) );69 70 if (checkNon WarpedPixels ) {66 // --keepnondiffed is a test and debug mode 67 bool keepNonDiffedPixels = psMetadataLookupBool(&status, config->arguments, "KEEP_NON_DIFFED"); 68 69 // we need to check for non diffed pixels unless we've been asked not to or the stage is diff 70 // (By definition pixels in diff images were included in the difference images) 71 bool checkNonDiffedPixels = ! (keepNonDiffedPixels || (sfiles->stage == IPP_STAGE_DIFF) ); 72 73 if (checkNonDiffedPixels ) { 71 74 // From magic ICD: 72 75 // In the raw and detrended images, the pixels which were not … … 76 79 // if no skycells are provided sfiles->exciseAll is set to true 77 80 78 psTimerStart("COMPUTE_ WARPED_PIXELS");79 if (! compute WarpedPixels(sfiles) ) {81 psTimerStart("COMPUTE_DIFFED_PIXELS"); 82 if (! computeDiffedPixels(sfiles) ) { 80 83 // we have no choice to excise all pixels 81 84 exciseAll = true; 82 85 } 83 psF64 cwp_t = psTimerClear("COMPUTE_WARPED_PIXELS"); 84 psLogMsg("streaksremove", PS_LOG_INFO, "time to compute warped pixels: %f\n", cwp_t); 86 psF64 cdp_t = psTimerClear("COMPUTE_DIFFED_PIXELS"); 87 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "COMPUTE_UNDIFFED_PIXELS", PS_META_REPLACE, "time to compute non-diffedpixels", cdp_t); 88 psLogMsg("streaksremove", PS_LOG_INFO, "time to compute diffed pixels: %f\n", cdp_t); 85 89 } 86 90 … … 100 104 long totalPixels = 0; 101 105 long totalStreakPixels = 0; 102 106 long nonDiffedPixels = 0; 107 108 // accumulators for the various timers 109 psF64 gsp_t = 0; 110 psF64 enw_t = 0; 111 psF64 rms_t = 0; 112 psF64 cs_t = 0; 113 psF64 wi_t = 0; 114 psF64 ua_t = 0; 103 115 // Iterate through each component of the input (except for raw images there is only one) 104 116 do { … … 118 130 119 131 // now that we've read the input files, lookup the mask values 120 if (maskStreak == 0) { 121 strkGetMaskValues(sfiles, &maskStreak, &maskMask); 122 } 132 strkGetMaskValues(sfiles); 123 133 124 134 totalPixels += sfiles->inImage->numRows * sfiles->inImage->numCols; … … 132 142 StreakPixels *pixels = streak_on_component(streaks, sfiles->astrom, sfiles->inImage->numCols, 133 143 sfiles->inImage->numRows); 144 gsp_t += psTimerClear("GET_STREAK_PIXELS"); 145 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "GET_STREAK_PIXELS", PS_META_REPLACE, "", gsp_t); 134 146 psLogMsg("streaksremove", PS_LOG_INFO, "time to get streak pixels: %f\n", psTimerClear("GET_STREAK_PIXELS")); 135 147 … … 137 149 // otherwise it contained an image cube (video cell) which is handled in the if block 138 150 if (sfiles->inImage->image) { 139 if (checkNon WarpedPixels) {140 psTimerStart("EXCISE_NON_ WARPED");141 142 // set non- warped pixels and variance to NAN, mask to maskStreak (since the pixel151 if (checkNonDiffedPixels) { 152 psTimerStart("EXCISE_NON_DIFFED"); 153 154 // set non-diffed pixels and variance to NAN, mask to maskStreak (since the pixel 143 155 // is excised as part of the destreaking process) 144 exciseNonWarpedPixels(sfiles, maskStreak); 145 146 psLogMsg("streaksremove", PS_LOG_INFO, "time to excise non warped pixels: %f\n", psTimerClear("EXCISE_NON_WARPED")); 156 nonDiffedPixels += exciseNonDiffedPixels(sfiles, sfiles->maskStreak); 157 158 enw_t += psTimerClear("EXCISE_NON_DIFFED"); 159 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "EXCISE_NON_DIFFED", PS_META_REPLACE, "", enw_t); 160 psLogMsg("streaksremove", PS_LOG_INFO, "time to excise non diffed pixels: %f\n", enw_t); 147 161 } 148 162 149 163 psTimerStart("REMOVE_STREAKS"); 150 164 151 totalStreakPixels += censorPixels(sfiles, pixels, checkNonWarpedPixels, maskStreak); 152 153 psLogMsg("streaksremove", PS_LOG_INFO, "time to remove streak pixels: %f\n", psTimerClear("REMOVE_STREAKS")); 165 totalStreakPixels += censorPixels(sfiles, pixels, checkNonDiffedPixels, sfiles->maskStreak); 166 167 rms_t += psTimerClear("REMOVE_STREAKS"); 168 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "REMOVE_STREAKS", PS_META_REPLACE, "", enw_t); 169 psLogMsg("streaksremove", PS_LOG_INFO, "time to remove streak pixels: %f\n", rms_t); 154 170 155 171 if (nanForRelease) { 156 172 // set any pixels that were masked, to NAN (unless they are already NAN) 157 setMaskedToNAN(sfiles, maskMask, true);173 setMaskedToNAN(sfiles, sfiles->maskMask, true); 158 174 } 159 175 … … 170 186 // chip processed files with the data calcuated by psastro at the camera stage 171 187 // (actually we use a linear approximation) 188 psTimerStart("UPDATE_ASTROMETRY"); 172 189 updateAstrometry(sfiles); 173 } 174 175 censorSources(sfiles, maskStreak); 190 ua_t += psTimerClear("UPDATE_ASTROMETRY"); 191 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "UPDATE_ASTROMETRY", PS_META_REPLACE, "", ua_t); 192 psLogMsg("streaksremove", PS_LOG_INFO, "time to update astrometry: %f\n", ua_t); 193 } 194 195 psTimerStart("CENSOR_SOURCES"); 196 censorSources(sfiles, sfiles->maskStreak); 197 cs_t += psTimerClear("CENSOR_SOURCES"); 198 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "CENSOR_SOURCES", PS_META_REPLACE, "", cs_t); 176 199 177 200 // write the destreaked "temporary" images and the recovery images 201 psTimerStart("WRITE_IMAGES"); 178 202 writeImages(sfiles, exciseImageCube); 179 203 wi_t += psTimerClear("WRITE_IMAGES"); 204 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "WRITE_IMAGES", PS_META_REPLACE, "", wi_t); 180 205 181 206 psLogMsg("streaksremove", PS_LOG_INFO, "time to process component %d: %f\n", sfiles->extnum, psTimerClear("PROCESS_COMPONENT")); 207 182 208 } while (streakFilesNextExtension(sfiles)); 183 209 … … 185 211 psFree(streaks); 186 212 187 psLogMsg("streaksremove", PS_LOG_INFO, "pixels: %ld streak pixels: %ld %4.2f%%\n", totalPixels, totalStreakPixels, 100. * totalStreakPixels / totalPixels); 213 if (exciseAll) { 214 totalStreakPixels = totalPixels; 215 } 216 217 psF64 streakFraction = (double) totalStreakPixels / totalPixels; 218 psLogMsg("streaksremove", PS_LOG_INFO, " total pixels: %8ld\n", totalPixels); 219 psLogMsg("streaksremove", PS_LOG_INFO, " streak pixels: %8ld %4.2f%%\n", totalStreakPixels, streakFraction * 100); 220 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "STREAK_FRACTION", PS_META_REPLACE, "", streakFraction); 221 222 psF64 nonDiffedFraction = (double) nonDiffedPixels / totalPixels; 223 psLogMsg("streaksremove", PS_LOG_INFO, "nondiffed pixels: %8ld %4.2f%%\n", nonDiffedPixels, nonDiffedFraction * 100); 224 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "NONDIFFED_FRACTION", PS_META_REPLACE, "", nonDiffedFraction); 188 225 189 226 // check the weight and mask files for extra extensions that might be in files … … 194 231 195 232 psTimerStart("CLOSE_IMAGES"); 196 197 233 closeImages(sfiles); 198 199 psLogMsg("streaksremove", PS_LOG_INFO, "time to close images: %f\n", psTimerClear("CLOSE_IMAGES")); 200 201 234 psF64 ci_t = psTimerClear("CLOSE_IMAGES"); 235 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "CLOSE_IMAGES", PS_META_REPLACE, "", ci_t); 236 237 psLogMsg("streaksremove", PS_LOG_INFO, "time to close images: %f\n", ci_t); 238 239 #ifdef DO_REPLICATE 240 psTimerStart("REPLICATE_OUTPUTS"); 202 241 if (!replicateOutputs(sfiles)) { 203 242 psErrorStackPrint(stderr, "failed to replicate output files"); … … 205 244 exit(PS_EXIT_UNKNOWN_ERROR); 206 245 } 246 psF64 ro_t = psTimerClear("REPLICATE_OUTPUTS"); 247 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "REPLICATE_OUTPUTS", PS_META_REPLACE, "", ro_t); 248 #endif 207 249 208 250 // NOTE: from here on we can't just quit if something goes wrong. … … 214 256 // swap the instances for the input and output 215 257 // Note this is a nebulous database operation. No file I/O is performed 258 psTimerStart("SWAP_INSTANCES"); 216 259 if (!swapOutputsToInputs(sfiles)) { 217 // XXX: Now what?218 260 // It is up to the program that reverts failed destreak runs to insure that 219 // any input files that have been swapped are restored and that the de-streaked220 // versions are deleted 261 // any original non-destreaked input files that have been swapped are restored and that the de-streaked 262 // versions are deleted. 221 263 222 264 psErrorStackPrint(stderr, "failed to swap files"); … … 224 266 // XXX: pick a specific error code for this failure 225 267 exit(PS_EXIT_UNKNOWN_ERROR); 268 } 269 psF64 si_t = psTimerClear("SWAP_INSTANCES"); 270 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "SWAP_INSTANCES", PS_META_REPLACE, "", si_t); 271 } 272 273 psF64 total_time = psTimerClear("TOTAL_TIME"); 274 psMetadataAddF32(sfiles->stats, PS_LIST_TAIL, "TOTAL_TIME", PS_META_REPLACE, "", total_time); 275 psLogMsg("streaksremove", PS_LOG_INFO, "time to run streaksremove: %f\n", total_time); 276 277 if (sfiles->statsFile) { 278 const char *statsMDC = psMetadataConfigFormat(sfiles->stats); 279 if (!statsMDC || strlen(statsMDC) == 0) { 280 psError(PS_ERR_IO, false, "Unable to get statistics MDC file.\n"); 281 } else { 282 fprintf(sfiles->statsFile, "%s", statsMDC); 283 psFree(statsMDC); 284 fclose(sfiles->statsFile); 285 sfiles->statsFile = NULL; 286 psFree(sfiles->stats); 287 sfiles->stats = NULL; 226 288 } 227 289 } … … 234 296 streaksNebulousCleanup(); 235 297 pmConfigDone(); 236 psLogMsg("streaksremove", PS_LOG_INFO, "time to run streaksremove: %f\n", psTimerClear("STREAKSREMOVE"));237 298 psLibFinalize(); 238 299 … … 243 304 244 305 static long 245 censorPixels(streakFiles *sfiles, psImage *pixels, bool checkNon WarpedPixels, psU16 maskStreak)306 censorPixels(streakFiles *sfiles, psImage *pixels, bool checkNonDiffedPixels, psU16 maskStreak) 246 307 { 247 308 long streakPixels = 0; … … 250 311 for (int x = 0; x < sfiles->inImage->numCols; x++) { 251 312 if (psImageGet(pixels, x, y)) { 252 ++streakPixels;253 if (!checkNonWarpedPixels || warpedPixel(sfiles, x, y)) {313 if (!checkNonDiffedPixels || diffedPixel(sfiles, x, y)) { 314 ++streakPixels; 254 315 255 316 excisePixel(sfiles, x, y, true, maskStreak); … … 257 318 } else { 258 319 // This pixel was not included in any warp and has thus already excised 259 // by exciseNon WarpedPixels320 // by exciseNonDiffedPixels 260 321 } 261 322 } … … 274 335 fprintf(stderr, "\t-weight WEIGHT.fits: weight file to de-streak\n"); 275 336 fprintf(stderr, "\t-replace: replace the input images with the output\n"); 276 fprintf(stderr, "\t-keepnon warped: do not exise pixels that were not part of difference processing\n");337 fprintf(stderr, "\t-keepnondiffed: do not exise pixels that were not part of difference processing\n"); 277 338 fprintf(stderr, "\t-transparent val: instead of setting excicsed pixel to NAN add val\n"); 278 339 fprintf(stderr, "\t-chip_mask MASK.fits: name of mask for chip stage (camera stage mask is passed tih -mask)\n"); … … 365 426 } 366 427 367 if ((argnum = psArgumentGet(argc, argv, "-keepnon warped"))) {368 psArgumentRemove(argnum, &argc, argv); 369 psMetadataAddBool(config->arguments, PS_LIST_TAIL, "KEEP_NON_ WARPED", 0,370 "skip excising of non warped pixels", true);428 if ((argnum = psArgumentGet(argc, argv, "-keepnondiffed"))) { 429 psArgumentRemove(argnum, &argc, argv); 430 psMetadataAddBool(config->arguments, PS_LIST_TAIL, "KEEP_NON_DIFFED", 0, 431 "skip excising of non diffed pixels", true); 371 432 } 372 433 … … 378 439 psArgumentRemove(argnum, &argc, argv); 379 440 double transparentStreaks = atof(argv[argnum]); 380 psMetadataAddF 64(config->arguments, PS_LIST_TAIL, "TRANSPARENT_STREAKS", 0,441 psMetadataAddF32(config->arguments, PS_LIST_TAIL, "TRANSPARENT_STREAKS", 0, 381 442 "value to adjust excised pixels", transparentStreaks); 382 443 psArgumentRemove(argnum, &argc, argv); 383 444 } 384 445 385 // if skycells are not provided then we have to execise all pixels unless -keepnon warped446 // if skycells are not provided then we have to execise all pixels unless -keepnondiffed 386 447 pmConfigFileSetsMD(config->arguments, &argc, argv, "SKYCELLS", "-skycell", "-skycelllist"); 387 448 … … 449 510 } 450 511 512 if ((argnum = psArgumentGet(argc, argv, "-stats"))) { 513 psArgumentRemove(argnum, &argc, argv); 514 psMetadataAddStr(config->arguments, PS_LIST_TAIL, "STATS", 0, 515 "name of input stats file", argv[argnum]); 516 psArgumentRemove(argnum, &argc, argv); 517 } 518 451 519 if ((argnum = psArgumentGet(argc, argv, "-tmproot"))) { 452 520 psArgumentRemove(argnum, &argc, argv); … … 491 559 updateAstrometry(streakFiles *sf) 492 560 { 493 // XXX: why do I check this here? Shouldn't it be just around the call to linearizeTransforms?494 561 if (sf->bilevelAstrometry) { 495 496 562 if (!linearizeTransforms(sf->astrom)) { 497 // fit failed, leave the astrometryunchanged563 // fit failed, leave the transform in the file unchanged 498 564 return; 499 565 } 500 501 if (!pmAstromWriteWCS(sf->outImage->header, sf->inAstrom->fpa, sf->chip, 0.001)) { 502 psError(PS_ERR_UNKNOWN, false, "failed to update astrometry for extension %d", sf->extnum); 503 streaksExit("", PS_EXIT_UNKNOWN_ERROR); 504 } 505 if (sf->outMask) { 506 pmAstromWriteWCS(sf->outMask->header, sf->inAstrom->fpa, sf->chip, 0.001); 507 } 508 if (sf->outWeight) { 509 pmAstromWriteWCS(sf->outWeight->header, sf->inAstrom->fpa, sf->chip, 0.001); 566 } 567 if (!pmAstromWriteWCS(sf->outImage->header, sf->inAstrom->fpa, sf->chip, 0.001)) { 568 psError(PS_ERR_UNKNOWN, false, "failed to update astrometry for extension %d", sf->extnum); 569 streaksExit("", PS_EXIT_UNKNOWN_ERROR); 570 } 571 if (sf->outMask) { 572 pmAstromWriteWCS(sf->outMask->header, sf->inAstrom->fpa, sf->chip, 0.001); 573 } 574 if (sf->outWeight) { 575 pmAstromWriteWCS(sf->outWeight->header, sf->inAstrom->fpa, sf->chip, 0.001); 576 } 577 } 578 579 static void 580 setStreakBits(psImage *maskImage, psU32 maskStreak) 581 { 582 for (int y=0 ; y < maskImage->numRows; y++) { 583 for (int x=0 ; x < maskImage->numCols; x++) { 584 maskImage->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= maskStreak; 510 585 } 511 586 } … … 516 591 readAndCopyToOutput(streakFiles *sf, bool exciseAll) 517 592 { 518 bool updateAstrometry = false;519 593 if (sf->inImage->pmfile) { 520 594 // image data from pmFPAfile (diff or warp file) … … 534 608 streaksExit("", PS_EXIT_UNKNOWN_ERROR); 535 609 } 536 // For the chip level files, copy the WCS from the astrometry file to the header537 // XXX: do we want to do this for raw images as well?538 if (sf->stage == IPP_STAGE_CHIP) {539 if (!sf->bilevelAstrometry) {540 updateAstrometry = true;541 if (!pmAstromWriteWCS(sf->inImage->header, sf->inAstrom->fpa, sf->chip, 0.001)) {542 psError(PS_ERR_UNKNOWN, false, "failed to update astrometry for extension %d", sf->extnum);543 streaksExit("", PS_EXIT_UNKNOWN_ERROR);544 }545 }546 }547 610 sf->outImage->header = psMemIncrRefCounter(sf->inImage->header); 548 611 if (sf->recImage) { … … 577 640 } 578 641 addDestreakKeyword(sf->outMask->header); 579 if (updateAstrometry) { 580 pmAstromWriteWCS(sf->outMask->header, sf->inAstrom->fpa, sf->chip, 0.001); 581 } 582 setupImageRefs(sf->outMask, sf->recMask, sf->inMask, sf->extnum, exciseAll); 642 // Note: we don't excise the mask pixels even if exciseAll is true. 643 setupImageRefs(sf->outMask, sf->recMask, sf->inMask, sf->extnum, false); 644 if (exciseAll) { 645 strkGetMaskValues(sf); 646 647 // add the STREAK bit to the mask image pixels 648 setStreakBits(sf->inMask->image, sf->maskStreak); 649 } 583 650 if (sf->outChMask) { 584 651 sf->outChMask->header = (psMetadata *) psMemIncrRefCounter(sf->outMask->header); … … 605 672 } 606 673 addDestreakKeyword(sf->outWeight->header); 607 if (updateAstrometry) {608 pmAstromWriteWCS(sf->inWeight->header, sf->inAstrom->fpa, sf->chip, 0.001);609 }610 674 setupImageRefs(sf->outWeight, sf->recWeight, sf->inWeight, sf->extnum, exciseAll); 611 675 … … 630 694 } else { 631 695 // we have an image cube 632 double initValue;633 696 if (exciseImageCube) { 634 697 // copy the entire input image to the recovery image 635 698 writeImageCube(sf->recImage, sf->inImage->imagecube, extname, sf->extnum); 636 initValue = NAN;637 699 } else { 638 700 // otherwise write it to the output 639 701 writeImageCube(sf->outImage, sf->inImage->imagecube, extname, sf->extnum); 640 initValue = 0; 641 } 642 643 // borrow one of the images from the imagecube and set it to init value 644 psImage *image = psArrayGet (sf->inImage->imagecube, 0); 645 psMemIncrRefCounter(image); 646 psImageInit(image, initValue); 702 } 703 704 // Now deal with the other output image 647 705 if (exciseImageCube) { 648 sf->outImage->image = image; 649 writeImage(sf->outImage, extname, sf->extnum); 706 // Set the values in the imagecube images to NAN and write them to the output image 707 for (int i = 0; i < psArrayLength(sf->inImage->imagecube); i++) { 708 psImage *image = psArrayGet (sf->inImage->imagecube, i); 709 // XXX: NAN isn't right. It should be the integer equivalent. Should use exciseValue 710 // but it isn't set with this code path. Fix that. 711 psImageInit(image, 65535); 712 } 713 writeImageCube(sf->outImage, sf->inImage->imagecube, extname, sf->extnum); 650 714 } else { 651 // write zero valued image to reccovery652 715 if (sf->recImage) { 653 sf->recImage->image = image; 654 writeImage(sf->recImage, extname, sf->extnum); 716 // Set the values in the imagecube images to zero 717 for (int i = 0; i < psArrayLength(sf->inImage->imagecube); i++) { 718 psImage *image = psArrayGet (sf->inImage->imagecube, i); 719 psImageInit(image, 0); 720 } 721 // copy the entire zeroed image to the recovery image 722 writeImageCube(sf->recImage, sf->inImage->imagecube, extname, sf->extnum); 655 723 } 656 724 } … … 683 751 } 684 752 685 float imageValue = sfiles->inImage->image->data.F32[y][x]; 686 if (sfiles->recImage && !isExciseValue(imageValue, sfiles->inImage->exciseValue) ) { 687 sfiles->recImage->image->data.F32[y][x] = imageValue; 688 } 689 690 if (sfiles->transparentStreaks == 0) { 691 sfiles->outImage->image->data.F32[y][x] = exciseValue; 753 if (sfiles->inImage->image->type.type == PS_TYPE_U16) { 754 psU16 imageValue = sfiles->inImage->image->data.U16[y][x]; 755 if (sfiles->recImage && !isExciseValue(imageValue, sfiles->inImage->exciseValue) ) { 756 sfiles->recImage->image->data.U16[y][x] = imageValue; 757 } 758 759 if (sfiles->transparentStreaks == 0) { 760 sfiles->outImage->image->data.U16[y][x] = exciseValue; 761 } else { 762 if (streak) { 763 // as a visualization aid don't mask the pixel, just change the intensity 764 sfiles->outImage->image->data.U16[y][x] = imageValue + sfiles->transparentStreaks; 765 } else { 766 sfiles->outImage->image->data.U16[y][x] = exciseValue; 767 } 768 } 692 769 } else { 693 if (streak) { 694 // as a visualization aid don't mask the pixel, just change the intensity 695 sfiles->outImage->image->data.F32[y][x] = imageValue + sfiles->transparentStreaks; 770 float imageValue = sfiles->inImage->image->data.F32[y][x]; 771 if (sfiles->recImage && !isExciseValue(imageValue, sfiles->inImage->exciseValue) ) { 772 sfiles->recImage->image->data.F32[y][x] = imageValue; 773 } 774 775 if (sfiles->transparentStreaks == 0) { 776 sfiles->outImage->image->data.F32[y][x] = exciseValue; 696 777 } else { 697 sfiles->outImage->image->data.F32[y][x] = exciseValue; 778 if (streak) { 779 // as a visualization aid don't mask the pixel, just change the intensity 780 sfiles->outImage->image->data.F32[y][x] = imageValue + sfiles->transparentStreaks; 781 } else { 782 sfiles->outImage->image->data.F32[y][x] = exciseValue; 783 } 698 784 } 699 785 } … … 711 797 sfiles->inMask->image->data.PS_TYPE_IMAGE_MASK_DATA[y][x]; 712 798 } 713 sfiles->outMask->image->data.PS_TYPE_IMAGE_MASK_DATA[y][x] = 714 sfiles->inMask->image->data.PS_TYPE_IMAGE_MASK_DATA[y][x] | newMaskValue; 715 } 716 } 717 718 static void 719 exciseNonWarpedPixels(streakFiles *sfiles, psImageMaskType newMaskValue) 799 sfiles->outMask->image->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= newMaskValue; 800 } 801 } 802 803 static long 804 exciseNonDiffedPixels(streakFiles *sfiles, psImageMaskType newMaskValue) 720 805 { 721 806 int cell_x0 = sfiles->astrom->cell_x0; … … 725 810 int numCols = sfiles->inImage->numCols; // for raw images this was calculated from the width of datasec 726 811 int numRows = sfiles->inImage->numRows; // for raw images this was calculated from the height of datasec 812 813 long excisedPixels = 0; 727 814 728 815 // printf("%2d x0: %4d y0: %4d xpar: %d ypar: %d\n", sfiles->extnum, cell_x0, cell_y0, xParity, yParity); … … 739 826 } 740 827 741 psU8 *pixels = sfiles-> warpedPixels->data.U8[yChip];828 psU8 *pixels = sfiles->diffedPixels->data.U8[yChip]; 742 829 743 830 if (xParity == 1) { … … 746 833 if (! *pixels ) { 747 834 excisePixel(sfiles, xCell, yCell, false, newMaskValue); 835 excisedPixels++; 748 836 } 749 837 } … … 755 843 if (!*pixels) { 756 844 excisePixel(sfiles, xCell, yCell, false, newMaskValue); 845 excisedPixels++; 757 846 } 758 847 } 759 848 } 760 849 } 850 return excisedPixels; 761 851 } 762 852 763 853 static bool 764 warpedPixel(streakFiles *sfiles, int x, int y)854 diffedPixel(streakFiles *sfiles, int x, int y) 765 855 { 766 856 PixelPos chipCoord; 767 857 768 858 if (!CHIP_LEVEL_INPUT(sfiles->stage)) { 769 // if we're here on a skycell image by definition this pixel was warped859 // if we're here on a skycell image by definition this pixel was diffed 770 860 return true; 771 861 } … … 780 870 cellToChipInt(&chipCoord.x, &chipCoord.y, sfiles->astrom, x, y); 781 871 782 if (chipCoord.x < 0 || chipCoord.x >= sfiles-> warpedPixels->numCols) {872 if (chipCoord.x < 0 || chipCoord.x >= sfiles->diffedPixels->numCols) { 783 873 return false; 784 874 } 785 if (chipCoord.y < 0 || chipCoord.y >= sfiles-> warpedPixels->numRows) {875 if (chipCoord.y < 0 || chipCoord.y >= sfiles->diffedPixels->numRows) { 786 876 return false; 787 877 } 788 878 789 return psImageGet(sfiles-> warpedPixels, chipCoord.x, chipCoord.y) ? true : false;879 return psImageGet(sfiles->diffedPixels, chipCoord.x, chipCoord.y) ? true : false; 790 880 } 791 881 -
branches/tap_branches/magic/remove/src/streaksremove.h
r25082 r27838 33 33 int yParity; 34 34 double exciseValue; 35 psString program; 35 36 } sFile; 36 37 37 38 typedef enum { 39 IPP_STAGE_NONE = 0, 40 IPP_STAGE_RAW, 41 IPP_STAGE_CHIP, 42 IPP_STAGE_WARP, 43 IPP_STAGE_DIFF 44 } ippStage; 45 38 // used for error messages 39 extern char * streaksProgram; 46 40 47 41 typedef struct { … … 64 58 sFile *inSources; 65 59 sFile *outSources; 60 psMetadata *stats; 61 FILE *statsFile; 66 62 psString class_id; 67 63 pmFPAfile *inAstrom; … … 71 67 pmChip *chip; // current chip 72 68 pmCell *cell; // current cell 73 psImage * warpedPixels;69 psImage *diffedPixels; 74 70 psVector *tiles; 75 71 double transparentStreaks; 76 72 psString program_name; 73 psU32 maskStreak; 74 psU32 maskMask; 77 75 } streakFiles; 78 76 … … 86 84 extern void cellToChipInt(unsigned int *xChip, unsigned int *yChip, strkAstrom *astrom, int xCell, int yCell); 87 85 88 extern bool compute WarpedPixels(streakFiles *sf);86 extern bool computeDiffedPixels(streakFiles *sf); 89 87 extern void streaksExit(psString, int); 90 88 extern ippStage parseStage(psString); 91 89 extern psString pathToDirectory(char *path); 92 90 extern void setStreakFiles( streakFiles *); 91 92 extern bool streaksVersionHeaderFull(psMetadata *header); 93 extern psString streaksVersionLong(void); 93 94 94 95 #define CHIP_LEVEL_INPUT(_stage) ((_stage == IPP_STAGE_RAW) || (_stage == IPP_STAGE_CHIP)) -
branches/tap_branches/magic/remove/src/streaksreplace.c
r25082 r27838 5 5 static void writeImages(streakFiles *sf, bool exciseImageCube); 6 6 static bool readAndCopyToOutput(streakFiles *sf, bool restoreImageCube); 7 8 char *streaksProgram = "streaksreplace"; 7 9 8 10 int main(int argc, char *argv[])
Note:
See TracChangeset
for help on using the changeset viewer.
