Changeset 7311 for trunk/psModules/src/objects
- Timestamp:
- Jun 2, 2006, 3:02:08 PM (20 years ago)
- Location:
- trunk/psModules/src/objects
- Files:
-
- 12 edited
-
pmPSF.c (modified) (3 diffs)
-
pmPSF.h (modified) (3 diffs)
-
pmPSF_IO.c (modified) (2 diffs)
-
pmPSFtry.c (modified) (2 diffs)
-
pmPSFtry.h (modified) (3 diffs)
-
pmPeaks.c (modified) (4 diffs)
-
pmPeaks.h (modified) (3 diffs)
-
pmSource.c (modified) (5 diffs)
-
pmSource.h (modified) (3 diffs)
-
pmSourceFitModel.c (modified) (2 diffs)
-
pmSourceIO.c (modified) (9 diffs)
-
pmSourceIO_CMP.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/pmPSF.c
r6960 r7311 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1. 7$ $Name: not supported by cvs2svn $9 * @date $Date: 2006-0 4-23 01:07:51$8 * @version $Revision: 1.8 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2006-06-03 01:02:08 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 97 97 // the ApTrend components are (x, y, r2rflux, flux) 98 98 psf->ApTrend = psPolynomial4DAlloc (PS_POLYNOMIAL_ORD, 2, 2, 1, 1); 99 pmPSF_MaskApTrend (psf , PM_PSF_SKYBIAS);99 pmPSF_MaskApTrend (psf->ApTrend, PM_PSF_SKYBIAS); 100 100 101 101 if (psf->poissonErrors) { … … 239 239 * to enable the specific subset of the coefficients 240 240 **********************************************/ 241 bool pmPSF_MaskApTrend (pmPSF *psf, pmPSF_ApTrendOptions option) 241 bool pmPSF_MaskApTrend (psPolynomial4D *trend, 242 pmPSF_ApTrendOptions option) 242 243 { 243 244 244 245 switch (option) { 245 246 case PM_PSF_NONE: 246 maskAllTerms ( psf->ApTrend);247 maskAllTerms (trend); 247 248 return true; 248 249 249 250 case PM_PSF_CONSTANT: 250 maskAllTerms ( psf->ApTrend);251 psf->ApTrend->mask[0][0][0][0] = 0; // unmask constant251 maskAllTerms (trend); 252 trend->mask[0][0][0][0] = 0; // unmask constant 252 253 return true; 253 254 254 255 case PM_PSF_SKYBIAS: 255 maskAllTerms ( psf->ApTrend);256 psf->ApTrend->mask[0][0][0][0] = 0; // unmask constant257 psf->ApTrend->mask[0][0][1][0] = 0; // unmask skybias256 maskAllTerms (trend); 257 trend->mask[0][0][0][0] = 0; // unmask constant 258 trend->mask[0][0][1][0] = 0; // unmask skybias 258 259 return true; 259 260 260 261 case PM_PSF_SKYSAT: 261 maskAllTerms ( psf->ApTrend);262 psf->ApTrend->mask[0][0][0][0] = 0; // unmask constant263 psf->ApTrend->mask[0][0][1][0] = 0; // unmask skybias264 psf->ApTrend->mask[0][0][0][1] = 0; // unmask skybias262 maskAllTerms (trend); 263 trend->mask[0][0][0][0] = 0; // unmask constant 264 trend->mask[0][0][1][0] = 0; // unmask skybias 265 trend->mask[0][0][0][1] = 0; // unmask skysat 265 266 return true; 266 267 267 268 case PM_PSF_XY_LIN: 268 maskAllTerms ( psf->ApTrend);269 psf->ApTrend->mask[0][0][0][0] = 0; // unmask constant270 psf->ApTrend->mask[1][0][0][0] = 0; // unmask x271 psf->ApTrend->mask[0][1][0][0] = 0; // unmask y269 maskAllTerms (trend); 270 trend->mask[0][0][0][0] = 0; // unmask constant 271 trend->mask[1][0][0][0] = 0; // unmask x 272 trend->mask[0][1][0][0] = 0; // unmask y 272 273 return true; 273 274 274 275 case PM_PSF_XY_QUAD: 275 maskAllTerms ( psf->ApTrend);276 psf->ApTrend->mask[0][0][0][0] = 0; // unmask constant277 psf->ApTrend->mask[1][0][0][0] = 0; // unmask x278 psf->ApTrend->mask[2][0][0][0] = 0; // unmask x^2279 psf->ApTrend->mask[1][1][0][0] = 0; // unmask x y280 psf->ApTrend->mask[0][1][0][0] = 0; // unmask y281 psf->ApTrend->mask[0][2][0][0] = 0; // unmask y^2276 maskAllTerms (trend); 277 trend->mask[0][0][0][0] = 0; // unmask constant 278 trend->mask[1][0][0][0] = 0; // unmask x 279 trend->mask[2][0][0][0] = 0; // unmask x^2 280 trend->mask[1][1][0][0] = 0; // unmask x y 281 trend->mask[0][1][0][0] = 0; // unmask y 282 trend->mask[0][2][0][0] = 0; // unmask y^2 282 283 return true; 283 284 284 285 case PM_PSF_SKY_XY_LIN: 285 maskAllTerms ( psf->ApTrend);286 psf->ApTrend->mask[0][0][0][0] = 0; // unmask constant287 psf->ApTrend->mask[1][0][0][0] = 0; // unmask x288 psf->ApTrend->mask[0][1][0][0] = 0; // unmask y289 psf->ApTrend->mask[0][0][1][0] = 0; // unmask skybias286 maskAllTerms (trend); 287 trend->mask[0][0][0][0] = 0; // unmask constant 288 trend->mask[1][0][0][0] = 0; // unmask x 289 trend->mask[0][1][0][0] = 0; // unmask y 290 trend->mask[0][0][1][0] = 0; // unmask skybias 290 291 return true; 291 292 292 293 case PM_PSF_SKYSAT_XY_LIN: 293 maskAllTerms ( psf->ApTrend);294 psf->ApTrend->mask[0][0][0][0] = 0; // unmask constant295 psf->ApTrend->mask[1][0][0][0] = 0; // unmask x296 psf->ApTrend->mask[0][1][0][0] = 0; // unmask y297 psf->ApTrend->mask[0][0][1][0] = 0; // unmask skybias298 psf->ApTrend->mask[0][0][0][1] = 0; // unmask skysat294 maskAllTerms (trend); 295 trend->mask[0][0][0][0] = 0; // unmask constant 296 trend->mask[1][0][0][0] = 0; // unmask x 297 trend->mask[0][1][0][0] = 0; // unmask y 298 trend->mask[0][0][1][0] = 0; // unmask skybias 299 trend->mask[0][0][0][1] = 0; // unmask skysat 299 300 return true; 300 301 301 302 case PM_PSF_ALL: 302 303 default: 303 maskAllTerms ( psf->ApTrend);304 psf->ApTrend->mask[0][0][0][0] = 0; // unmask constant305 psf->ApTrend->mask[0][0][1][0] = 0; // unmask skybias306 psf->ApTrend->mask[0][0][0][1] = 0; // unmask skysat307 308 psf->ApTrend->mask[1][0][0][0] = 0; // unmask x309 psf->ApTrend->mask[2][0][0][0] = 0; // unmask x^2310 psf->ApTrend->mask[1][1][0][0] = 0; // unmask x y311 psf->ApTrend->mask[0][1][0][0] = 0; // unmask y312 psf->ApTrend->mask[0][2][0][0] = 0; // unmask y^2304 maskAllTerms (trend); 305 trend->mask[0][0][0][0] = 0; // unmask constant 306 trend->mask[0][0][1][0] = 0; // unmask skybias 307 trend->mask[0][0][0][1] = 0; // unmask skysat 308 309 trend->mask[1][0][0][0] = 0; // unmask x 310 trend->mask[2][0][0][0] = 0; // unmask x^2 311 trend->mask[1][1][0][0] = 0; // unmask x y 312 trend->mask[0][1][0][0] = 0; // unmask y 313 trend->mask[0][2][0][0] = 0; // unmask y^2 313 314 return true; 314 315 } -
trunk/psModules/src/objects/pmPSF.h
r6873 r7311 31 31 psArray *params; ///< Model parameters (psPolynomial2D) 32 32 psPolynomial1D *ChiTrend; ///< Chisq vs flux fit (correction for systematic errors) 33 psPolynomial4D *ApTrend; ///< ApResid vs (x,y,rflux) (rflux = ten(0.4*mInst) 34 pmGrowthCurve *growth; ///< apMag vs Radius33 psPolynomial4D *ApTrend; ///< ApResid vs (x,y,rflux) (rflux = ten(0.4*mInst)) 34 //pmGrowthCurve *growth; ///< apMag vs Radius // move to end as gdb is confused by it here 35 35 float ApResid; ///< apMag - psfMag (for PSF stars) 36 36 float dApResid; ///< scatter of ApResid … … 41 41 int nApResid; ///< number of stars used to measure ApResid 42 42 bool poissonErrors; 43 pmGrowthCurve *growth; ///< apMag vs Radius 43 44 } 44 45 pmPSF; … … 100 101 ); 101 102 102 bool pmPSF_MaskApTrend (p mPSF *psf, pmPSF_ApTrendOptions option);103 bool pmPSF_MaskApTrend (psPolynomial4D *trend, pmPSF_ApTrendOptions option); 103 104 104 105 # endif -
trunk/psModules/src/objects/pmPSF_IO.c
r6872 r7311 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $9 * @date $Date: 2006-0 4-17 18:01:05$8 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2006-06-03 01:02:08 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 287 287 { 288 288 289 int Nfail;289 unsigned int Nfail; 290 290 char *filename; 291 291 -
trunk/psModules/src/objects/pmPSFtry.c
r7283 r7311 5 5 * @author EAM, IfA 6 6 * 7 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $8 * @date $Date: 2006-06-0 2 02:16:05$7 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2006-06-03 01:02:08 $ 9 9 * 10 10 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 263 263 psLogMsg ("pmPSFtryMetric", 4, "fit stats: %f +/- %f\n", stats->sampleMedian, stats->sampleStdev); 264 264 265 pmPSF_MaskApTrend (psfTry->psf , PM_PSF_SKYBIAS);265 pmPSF_MaskApTrend (psfTry->psf->ApTrend, PM_PSF_SKYBIAS); 266 266 psfTry->psf->ApTrend->coeff[0][0][0][0] = poly->coeff[0]; 267 267 psfTry->psf->ApTrend->coeff[0][0][1][0] = 0; -
trunk/psModules/src/objects/pmPSFtry.h
r6873 r7311 6 6 * @author EAM, IfA 7 7 * 8 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2006-06-03 01:02:08 $ 8 10 * 9 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 76 78 * 77 79 */ 78 pmPSFtry *pmPSFtryAlloc( 79 psArray *stars, ///< Add comment. 80 char *modelName, ///< Add comment. 81 bool poissonErrors // use poissonian or constant errors? 82 ); 83 80 pmPSFtry *pmPSFtryAlloc (psArray *sources, char *modelName, bool poissonErrors); 84 81 85 82 /** pmPSFtryModel() … … 90 87 * 91 88 */ 92 pmPSFtry *pmPSFtryModel( 93 psArray *sources, ///< Add comment. 94 char *modelName, ///< Add comment. 95 float radius, ///< Add comment. 96 bool poissonErrors // use poissonian or constant errors? 97 ); 98 89 pmPSFtry *pmPSFtryModel (psArray *sources, char *modelName, float RADIUS, bool poissonErrors); 99 90 100 91 /** pmPSFtryMetric() -
trunk/psModules/src/objects/pmPeaks.c
r6943 r7311 6 6 * @author EAM, IfA: significant modifications. 7 7 * 8 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $9 * @date $Date: 2006-0 4-21 21:26:44$8 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2006-06-03 01:02:08 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 94 94 pmPeakAlloc(): Allocate the pmPeak data structure and set appropriate members. 95 95 *****************************************************************************/ 96 static void peakFree(pmPeak *tmp) 97 {} // used by pmIsPeak() 98 96 99 pmPeak *pmPeakAlloc(psS32 x, 97 100 psS32 y, … … 100 103 { 101 104 psTrace(__func__, 3, "---- %s() begin ----\n", __func__); 105 static int id = 1; 102 106 pmPeak *tmp = (pmPeak *) psAlloc(sizeof(pmPeak)); 107 *(int *)&tmp->id = id++; 103 108 tmp->x = x; 104 109 tmp->y = y; … … 106 111 tmp->type = type; 107 112 113 psMemSetDeallocator(tmp, (psFreeFunc) peakFree); 114 108 115 psTrace(__func__, 3, "---- %s() end ----\n", __func__); 109 116 return(tmp); 117 } 118 119 bool pmIsPeak(const psPtr ptr) 120 { 121 return (psMemGetDeallocator(ptr) == (psFreeFunc)peakFree); 110 122 } 111 123 -
trunk/psModules/src/objects/pmPeaks.h
r6872 r7311 10 10 * @author GLG, MHPCC 11 11 * 12 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $13 * @date $Date: 2006-0 4-17 18:01:05$12 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2006-06-03 01:02:08 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 47 47 typedef struct 48 48 { 49 const int id; ///< Unique ID for object 49 50 int x; ///< X-coordinate of peak pixel. 50 51 int y; ///< Y-coordinate of peak pixel. … … 66 67 ); 67 68 69 bool pmIsPeak(const psPtr ptr); 68 70 69 71 /** pmFindVectorPeaks() -
trunk/psModules/src/objects/pmSource.c
r7283 r7311 6 6 * @author EAM, IfA: significant modifications. 7 7 * 8 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $9 * @date $Date: 2006-06-0 2 02:16:05$8 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2006-06-03 01:02:08 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 46 46 { 47 47 psTrace(__func__, 3, "---- %s() begin ----\n", __func__); 48 static int id = 1; 48 49 pmSource *tmp = (pmSource *) psAlloc(sizeof(pmSource)); 50 *(int *)&tmp->id = id++; 49 51 tmp->peak = NULL; 50 52 tmp->pixels = NULL; … … 69 71 } 70 72 73 bool pmIsSource(const psPtr ptr) 74 { 75 return (psMemGetDeallocator(ptr) == (psFreeFunc)sourceFree); 76 } 77 71 78 // x,y are defined in the parent image coords of readout->image 72 79 bool pmSourceDefinePixels(pmSource *mySource, … … 82 89 srcRegion = psRegionForImage (readout->image, srcRegion); 83 90 84 mySource->pixels = ps ImageSubset(readout->image, srcRegion);85 mySource->weight = ps ImageSubset(readout->weight, srcRegion);86 mySource->mask = ps ImageSubset(readout->mask, srcRegion);91 mySource->pixels = psMemIncrRefCounter(psImageSubset(readout->image, srcRegion)); 92 mySource->weight = psMemIncrRefCounter(psImageSubset(readout->weight, srcRegion)); 93 mySource->mask = psMemIncrRefCounter(psImageSubset(readout->mask, srcRegion)); 87 94 mySource->region = srcRegion; 88 95 … … 123 130 psFree (mySource->mask); 124 131 125 mySource->pixels = ps ImageSubset(readout->image, newRegion);126 mySource->weight = ps ImageSubset(readout->weight, newRegion);127 mySource->mask = ps ImageSubset(readout->mask, newRegion);132 mySource->pixels = psMemIncrRefCounter(psImageSubset(readout->image, newRegion)); 133 mySource->weight = psMemIncrRefCounter(psImageSubset(readout->weight, newRegion)); 134 mySource->mask = psMemIncrRefCounter(psImageSubset(readout->mask, newRegion)); 128 135 mySource->region = newRegion; 129 136 } -
trunk/psModules/src/objects/pmSource.h
r6905 r7311 3 3 * @author EAM, IfA; GLG, MHPCC 4 4 * 5 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $6 * @date $Date: 2006-0 4-19 20:29:57$5 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-06-03 01:02:08 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 73 73 typedef struct 74 74 { 75 const int id; ///< Unique ID for object 75 76 pmPeak *peak; ///< Description of peak pixel. 76 77 psImage *pixels; ///< Rectangular region including object pixels. … … 114 115 pmSource *pmSourceAlloc(); 115 116 117 bool pmIsSource(const psPtr ptr); 116 118 117 119 /** pmSourceDefinePixels() -
trunk/psModules/src/objects/pmSourceFitModel.c
r6960 r7311 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $9 * @date $Date: 2006-0 4-23 01:07:51$8 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2006-06-03 01:02:08 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 515 515 psTrace (__func__, 5, "fitting function\n"); 516 516 fitStatus = psMinimizeLMChi2(myMin, covar, params, constrain, x, y, yErr, pmModelFitSet); 517 if (!fitStatus) { 518 psError(PS_ERR_UNKNOWN, false, "Failed to fit model\n"); 519 } 517 520 518 521 // parameter errors from the covariance matrix -
trunk/psModules/src/objects/pmSourceIO.c
r7306 r7311 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $6 * @date $Date: 2006-06-03 0 0:40:28 $5 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-06-03 01:02:08 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 57 57 } 58 58 59 // Given a FITS file pointer, readthe table of object data59 // Given a FITS file pointer, write the table of object data 60 60 bool pmFPAviewWriteObjects (const pmFPAview *view, pmFPAfile *file) 61 61 { … … 64 64 65 65 if (view->chip == -1) { 66 pmFPAWriteObjects (fpa, view, file); 66 if (!pmFPAWriteObjects (fpa, view, file)) { 67 psError(PS_ERR_IO, false, "Failed to write objects from fpa"); 68 return false; 69 } 67 70 return true; 68 71 } 69 72 70 73 if (view->chip >= fpa->chips->n) { 74 psError(PS_ERR_UNKNOWN, false, "Writing chip == %d (>= chips->n == %d)", view->chip, fpa->chips->n); 71 75 return false; 72 76 } … … 74 78 75 79 if (view->cell == -1) { 76 pmChipWriteObjects (chip, view, file); 80 if (!pmChipWriteObjects (chip, view, file)) { 81 psError(PS_ERR_IO, false, "Failed to write objects from chip"); 82 return false; 83 } 77 84 return true; 78 85 } 79 86 80 87 if (view->cell >= chip->cells->n) { 88 psError(PS_ERR_UNKNOWN, false, "Writing cell == %d (>= cells->n == %d)", 89 view->cell, chip->cells->n); 81 90 return false; 82 91 } … … 84 93 85 94 if (view->readout == -1) { 86 pmCellWriteObjects (cell, view, file); 95 if (!pmCellWriteObjects (cell, view, file)) { 96 psError(PS_ERR_IO, false, "Failed to write objects from cell"); 97 return false; 98 } 99 87 100 return true; 88 101 } 89 102 90 103 if (view->readout >= cell->readouts->n) { 104 psError(PS_ERR_UNKNOWN, false, "Writing readout == %d (>= readouts->n == %d)", 105 view->readout, cell->readouts->n); 91 106 return false; 92 107 } 93 108 pmReadout *readout = cell->readouts->data[view->readout]; 94 109 95 pmReadoutWriteObjects (readout, view, file); 110 if (!pmReadoutWriteObjects (readout, view, file)) { 111 psError(PS_ERR_IO, false, "Failed to write objects from readout %d", view->readout); 112 return false; 113 } 114 96 115 return true; 97 116 } … … 104 123 105 124 pmChip *chip = fpa->chips->data[i]; 106 pmChipWriteObjects (chip, view, file); 125 if (!pmChipWriteObjects (chip, view, file)) { 126 psError(PS_ERR_IO, false, "Failed to write %dth chip", i); 127 return false; 128 } 107 129 } 108 130 return true; … … 116 138 117 139 pmCell *cell = chip->cells->data[i]; 118 pmCellWriteObjects (cell, view, file); 140 if (!pmCellWriteObjects (cell, view, file)) { 141 psError(PS_ERR_IO, false, "Failed to write %dth cell", i); 142 return false; 143 } 119 144 } 120 145 return true; … … 128 153 129 154 pmReadout *readout = cell->readouts->data[i]; 130 pmReadoutWriteObjects (readout, view, file); 155 if (!pmReadoutWriteObjects (readout, view, file)) { 156 psError(PS_ERR_IO, false, "Failed to write %dth readout", i); 157 return false; 158 } 131 159 } 132 160 return true; … … 181 209 psMetadataCopy (outhead, updates); 182 210 183 pmSourcesWriteCMP (sources, filename, outhead);211 bool status = pmSourcesWriteCMP (sources, filename, outhead); 184 212 psFree (outhead); 185 213 psFree (filename); 214 215 if (!status) { 216 psError(PS_ERR_IO, false, "Failed to write CMP file\n"); 217 return false; 218 } 186 219 break; 187 220 -
trunk/psModules/src/objects/pmSourceIO_CMP.c
r7306 r7311 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $6 * @date $Date: 2006-06-03 0 0:40:46$5 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2006-06-03 01:02:08 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 69 69 70 70 psFits *fits = psFitsOpen (filename, "w"); 71 psFitsWriteBlank(fits, header); 72 psFitsClose (fits); 71 if (fits == NULL) { 72 psError(PS_ERR_IO, false, "can't open output file for write %s\n", filename); 73 return false; 74 } 75 if (!psFitsWriteBlank(fits, header)) { 76 psError(PS_ERR_IO, false, "Writing header to %s\n", filename); 77 (void)psFitsClose(fits); 78 return false; 79 } 80 if (!psFitsClose(fits)) { 81 const psErrorCode code = psErrorCodeLast(); 82 83 if (code == PS_ERR_BAD_FITS) { 84 psErrorClear(); 85 } else { 86 psError(PS_ERR_IO, false, "Closing %s\n", filename); 87 return false; 88 } 89 } 73 90 74 91 // re-open, add data to end of file 75 92 FILE *f = fopen (filename, "a+"); 76 93 if (f == NULL) { 77 psLogMsg ("WriteSourceOBJ", 3, "can't open output file for output %s\n", filename); 94 psLogMsg ("WriteSourceOBJ", 3, "can't reopen output file for append %s\n", filename); 95 psError(PS_ERR_IO, false, "can't open output file for output %s\n", filename); 78 96 return false; 79 97 }
Note:
See TracChangeset
for help on using the changeset viewer.
