Changeset 4832
- Timestamp:
- Aug 19, 2005, 5:13:28 PM (21 years ago)
- Location:
- trunk/Ohana/src
- Files:
-
- 17 edited
-
delstar/Makefile (modified) (1 diff)
-
delstar/include/delstar.h (modified) (1 diff)
-
delstar/src/ConfigInit.c (modified) (2 diffs)
-
delstar/src/gcatalog.c (modified) (1 diff)
-
delstar/src/wcatalog.c (modified) (1 diff)
-
libautocode/Makefile (modified) (2 diffs)
-
libautocode/def/average-elixir.d (modified) (1 diff)
-
libautocode/def/average.d (modified) (1 diff)
-
libautocode/def/measure-elixir.d (modified) (1 diff)
-
libautocode/def/measure-panstarrs.d (modified) (1 diff)
-
libautocode/def/measure.d (modified) (1 diff)
-
libohana/Makefile (modified) (2 diffs)
-
libohana/doc/dvo-structures.txt (modified) (1 diff)
-
libohana/doc/libohana.html (modified) (3 diffs)
-
libohana/include/dvo.h (modified) (2 diffs)
-
libohana/src/dvo_convert.c (modified) (1 diff)
-
libohana/src/phot_catalog.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/delstar/Makefile
r4805 r4832 16 16 # 17 17 INCS = -I$(INC) -I$(LINC) -I$(XINC) 18 LIBS = -L$(LLIB) -l FITS -lohana-lm18 LIBS = -L$(LLIB) -lohana -lFITS -lm 19 19 CFLAGS = -o $*.$(ARCH).o $(INCS) -O2 20 20 CCFLAGS = $(INCS) $(LIBS) -
trunk/Ohana/src/delstar/include/delstar.h
r4805 r4832 17 17 char GSCFILE[256]; 18 18 char CATDIR[256]; 19 char CATMODE[16]; /* raw, mef, split, mysql */ 20 char CATFORMAT[16]; /* internal, elixir, loneos, panstarrs */ 19 21 double NSIGMA; 20 22 double ALPHA; -
trunk/Ohana/src/delstar/src/ConfigInit.c
r4680 r4832 23 23 ScanConfig (config, "GSCFILE", "%s", 0, GSCFILE); 24 24 ScanConfig (config, "CATDIR", "%s", 0, CATDIR); 25 ScanConfig (config, "CATMODE", "%s", 0, CATMODE); 26 ScanConfig (config, "CATFORMAT", "%s", 0, CATFORMAT); 25 27 ScanConfig (config, "PHOTCODE_FILE", "%s", 0, PhotCodeFile); 26 28 … … 30 32 ScanConfig (config, "MJD-KEYWORD", "%s", 0, MJDKeyword); 31 33 ScanConfig (config, "JD-KEYWORD", "%s", 0, JDKeyword); 34 35 if (*CATMODE == 0) strcpy (CATMODE, "RAW"); 36 if (*CATFORMAT == 0) strcpy (CATFORMAT, "ELIXIR"); 32 37 33 38 if (!LoadPhotcodes (PhotCodeFile)) { -
trunk/Ohana/src/delstar/src/gcatalog.c
r2463 r4832 5 5 int Nsecfilt; 6 6 char mode; 7 8 /* no autodetect for CATMODE yet */ 9 strcpy (catalog[0].catmode, CATMODE); 7 10 8 11 /* read catalog header */ -
trunk/Ohana/src/delstar/src/wcatalog.c
r4680 r4832 3 3 int wcatalog (Catalog *catalog) { 4 4 5 /* we'll leave these for now, but they are LONEOS specific */ 6 fits_modify (&catalog[0].header, "MARKSTAR", "%t", 1, FALSE); 7 fits_modify (&catalog[0].header, "ADDUSNO", "%t", 1, FALSE); 8 fits_modify (&catalog[0].header, "MARKROCK", "%t", 1, FALSE); 5 /* set catalog format (elixir, loneos, etc) */ 6 if (!strcmp (CATFORMAT, "INTERNAL")) { 7 sprintf (catalog[0].average_format, "DVO_AVERAGE"); 8 sprintf (catalog[0].measure_format, "DVO_MEASURE"); 9 } else { 10 sprintf (catalog[0].average_format, "DVO_AVERAGE_%s", CATFORMAT); 11 sprintf (catalog[0].measure_format, "DVO_MEASURE_%s", CATFORMAT); 12 } 9 13 10 14 if (!save_catalog (catalog, VERBOSE)) { -
trunk/Ohana/src/libautocode/Makefile
r4463 r4832 25 25 $(SRC)/coords.$(ARCH).o \ 26 26 $(SRC)/average.$(ARCH).o \ 27 $(SRC)/average-loneos.$(ARCH).o \ 28 $(SRC)/average-elixir.$(ARCH).o \ 29 $(SRC)/average-panstarrs.$(ARCH).o \ 27 30 $(SRC)/secfilt.$(ARCH).o \ 28 31 $(SRC)/measure.$(ARCH).o \ 32 $(SRC)/measure-loneos.$(ARCH).o \ 33 $(SRC)/measure-elixir.$(ARCH).o \ 34 $(SRC)/measure-panstarrs.$(ARCH).o \ 29 35 $(SRC)/missing.$(ARCH).o \ 30 36 $(SRC)/photcode.$(ARCH).o \ … … 41 47 $(INC)/coords.h \ 42 48 $(INC)/average.h \ 49 $(INC)/average-loneos.h \ 50 $(INC)/average-elixir.h \ 51 $(INC)/average-panstarrs.h \ 43 52 $(INC)/secfilt.h \ 44 53 $(INC)/measure.h \ 54 $(INC)/measure-loneos.h \ 55 $(INC)/measure-elixir.h \ 56 $(INC)/measure-panstarrs.h \ 45 57 $(INC)/missing.h \ 46 58 $(INC)/photcode.h \ -
trunk/Ohana/src/libautocode/def/average-elixir.d
r4800 r4832 1 STRUCT Average 2 EXTNAME DVO_AVERAGE 1 STRUCT AverageElixir 2 EXTNAME DVO_AVERAGE_ELIXIR 3 3 TYPE BINTABLE 4 4 SIZE 32 -
trunk/Ohana/src/libautocode/def/average.d
r4800 r4832 6 6 # elements of data structure / FITS table 7 7 8 FIELD R_PS, RA, double,RA, decimal degrees9 FIELD D_PS, DEC, double,DEC, decimal degrees8 FIELD R_PS, RA, double, RA, decimal degrees 9 FIELD D_PS, DEC, double, DEC, decimal degrees 10 10 FIELD M, MAG, short, primary mag, millimag 11 11 FIELD Nm, NMEAS, unsigned short, number of measures -
trunk/Ohana/src/libautocode/def/measure-elixir.d
r4800 r4832 1 STRUCT Measure 2 EXTNAME DVO_MEASURE 1 STRUCT MeasureElixir 2 EXTNAME DVO_MEASURE_ELIXIR 3 3 TYPE BINTABLE 4 4 SIZE 32 -
trunk/Ohana/src/libautocode/def/measure-panstarrs.d
r4800 r4832 1 STRUCT Measure 2 EXTNAME DVO_MEASURE 1 STRUCT MeasurePanstarrs 2 EXTNAME DVO_MEASURE_PANSTARRS 3 3 TYPE BINTABLE 4 4 SIZE 32 -
trunk/Ohana/src/libautocode/def/measure.d
r4800 r4832 9 9 # FIELD dR, D_RA, short, RA offset, 1/100 arcsec 10 10 # FIELD dD, D_DEC, short, DEC offset, 1/100 arcsec 11 11 12 # replace these with the above names 12 13 FIELD dR_PS, D_RA, float, RA offset, arcsec 13 14 FIELD dD_PS, D_DEC, float, DEC offset, arcsec 14 15 15 FIELD M, MAG, short, catalog mag, millimag 16 16 FIELD Mcal, Mcal, short, image cal mag, millimag -
trunk/Ohana/src/libohana/Makefile
r4810 r4832 33 33 $(SRC)/ohana_allocate.$(ARCH).o \ 34 34 $(SRC)/string.$(ARCH).o \ 35 $(SRC)/time.$(ARCH).o \36 35 $(SRC)/findexec.$(ARCH).o \ 37 36 $(SRC)/glockfile.$(ARCH).o \ 37 $(SRC)/time.$(ARCH).o \ 38 38 $(SRC)/config.$(ARCH).o \ 39 39 $(SRC)/version.$(ARCH).o 40 40 41 41 OBJ2 = \ 42 $(SRC)/Fread.$(ARCH).o \ 42 43 $(SRC)/coordops.$(ARCH).o \ 43 $(SRC)/Fread.$(ARCH).o \44 44 $(SRC)/LoadPhotcodes.$(ARCH).o \ 45 $(SRC)/photfits.$(ARCH).o \46 $(SRC)/phot_catalog.$(ARCH).o \47 45 $(SRC)/imreg_datatypes.$(ARCH).o \ 48 46 $(SRC)/mosaic_astrom.$(ARCH).o \ 49 $(SRC)/fits_db.$(ARCH).o 47 $(SRC)/fits_db.$(ARCH).o \ 48 $(SRC)/photfits.$(ARCH).o \ 49 $(SRC)/phot_catalog.$(ARCH).o \ 50 $(SRC)/phot_catalog_mef.$(ARCH).o \ 51 $(SRC)/phot_catalog_raw.$(ARCH).o \ 52 $(SRC)/dvo_convert.$(ARCH).o \ 53 $(SRC)/dvo_convert_elixir.$(ARCH).o \ 54 $(SRC)/dvo_convert_loneos.$(ARCH).o \ 55 $(SRC)/dvo_convert_panstarrs.$(ARCH).o 50 56 51 57 AOBJ = \ 52 58 $(ASRC)/coords.$(ARCH).o \ 59 $(ASRC)/average.$(ARCH).o \ 60 $(ASRC)/average-loneos.$(ARCH).o \ 61 $(ASRC)/average-elixir.$(ARCH).o \ 62 $(ASRC)/average-panstarrs.$(ARCH).o \ 63 $(ASRC)/secfilt.$(ARCH).o \ 64 $(ASRC)/measure.$(ARCH).o \ 65 $(ASRC)/measure-loneos.$(ARCH).o \ 66 $(ASRC)/measure-elixir.$(ARCH).o \ 67 $(ASRC)/measure-panstarrs.$(ARCH).o \ 68 $(ASRC)/missing.$(ARCH).o \ 69 $(ASRC)/photcode.$(ARCH).o \ 70 $(ASRC)/image.$(ARCH).o \ 53 71 $(ASRC)/regimage.$(ARCH).o \ 54 72 $(ASRC)/detreg.$(ARCH).o \ … … 57 75 $(ASRC)/smpdata.$(ARCH).o \ 58 76 $(ASRC)/spectrum.$(ARCH).o \ 59 $(ASRC)/spectrum-ascii.$(ARCH).o \ 60 $(ASRC)/image.$(ARCH).o 77 $(ASRC)/spectrum-ascii.$(ARCH).o 61 78 62 79 ACOM = $(ADEF)/autocode.c $(ADEF)/autocode.h $(ADEF)/common.h -
trunk/Ohana/src/libohana/doc/dvo-structures.txt
r3466 r4832 36 36 (can be loaded with translation, losing the exptime, 37 37 and limited the number of Naverage to 0xffffff - in load_catalog) */ 38 39 ------ 40 41 the DVO structure Catalog contains the data from a single sky patch, including: 42 average, measure, missing, and secfilt. 43 44 the catalog may be saved in one of 4 modes (catalog.catmode): 45 raw : the old Elixir style which is a header + 4 binary tables 46 mef : catalog is a single file with header and 4 fits tables 47 split : catalog is 5 files, one with the header and one for each table 48 mysql : catalog is 4 (or 5?) mysql tables 49 50 in split mode, the filename is the file of the descriptive header 51 and the averages, the measure, missing, and secfilt data are 52 stored in additional files referenced in the header and named 53 based on the filename (replacing extension .cpa with .cpb, .cpc, 54 .cpd, for example) 55 56 -
trunk/Ohana/src/libohana/doc/libohana.html
r4810 r4832 1 1 2 <h2> libohana API reference </h2> 2 <h1> libohana API reference </h1> 3 4 <h2> generic ohana functions </h2> 5 6 <h3> basic macros </h3> 7 8 <pre> 9 TRUE 10 FALSE 11 SIGN(X) 12 ROUND(X) 13 SQR(X) 14 SQ(X) 15 MIN(X,Y) 16 MAX(X,Y) 17 SWAP(X,Y) 18 whitespace (char c) 19 </pre> 3 20 4 21 <h3> ohana memory management functions </h3> … … 66 83 <pre> int fclearlockfile (char *filename, FILE *f, int type, int *state); </pre> 67 84 68 <h3> read/write (Fread.c) </h3> 69 70 <pre> int Fread (char ptr, int size, int nitems, FILE *f, char *type); </pre> 71 <pre> int Fwrite (char ptr, int size, int nitems, FILE *f, char *type); </pre> 72 <pre> int ByteSwap (char *ptr, int size, int nitems, char *type); </pre> 73 <pre> int ConvertStruct (char *buffer, int size, int nitems, char *type); </pre> 74 75 Several of these functions are used to perform byte-swapping for 76 structures in the pre-autocode days. They should be deprecated and 77 dropped, but the autocoding must superceed the hard-wired structure 78 first. 79 80 <h3> miscellaneous functions </h3> 81 82 <pre> char *ohana_version (); </pre> 83 84 <h3> photcode manipulations (LoadPhotcodes.c) </h3> 85 86 <pre> int LoadPhotcodes (char *filename, PhotCodeData *photcodes); </pre> 87 <pre> int FreePhotcodes (PhotCodeData *photcodes); </pre> 88 89 <pre> PhotCode *GetPhotcodebyName (char *name); </pre> 90 <pre> PhotCode *GetPhotcodeEquivbyName (char *name); </pre> 91 <pre> PhotCode *GetPhotcodebyCode (int code); </pre> 92 <pre> PhotCode *GetPhotcodeEquivbyCode (int code); </pre> 93 <pre> PhotCode *GetPhotcodebyNsec (int Nsec); </pre> 94 <pre> char *GetPhotcodeNamebyCode (int code); </pre> 95 96 <pre> int GetPhotcodeCodebyName (char *name); </pre> 97 <pre> int GetPhotcodeEquivCodebyName (char *name); </pre> 98 <pre> int GetPhotcodeEquivCodebyCode (int code); </pre> 99 <pre> int GetPhotcodeNsec (int code); </pre> 100 <pre> int GetPhotcodeNsecfilt (); </pre> 101 <pre> int *GetPhotcodeEquivList (int code, int *nlist); </pre> 102 103 <pre> void SetZeroPoint (double ZP); </pre> 104 <pre> void ParseColorTerms (char *terms, float *X, int *N); </pre> 105 106 <pre> int PhotColor (Average *average, SecFilt *secfilt, Measure *measure, int c1, int c2, double *color); </pre> 107 <pre> short iPhotColor (Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code); </pre> 108 109 <pre> double PhotInst (Measure *measure); </pre> 110 <pre> double PhotCat (Measure *measure); </pre> 111 <pre> double PhotSys (Measure *measure, Average *average, SecFilt *secfilt); </pre> 112 <pre> double PhotRel (Measure *measure, Average *average, SecFilt *secfilt); </pre> 113 <pre> double PhotCal (Measure *thisone, Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code); </pre> 114 <pre> double PhotAve (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 115 <pre> double PhotRef (PhotCode *code, Average *average, SecFilt *secfilt, Measure *measure); </pre> 116 <pre> double PhotdM (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 117 <pre> double PhotXm (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 118 119 <pre> short iPhotInst (Measure *measure); </pre> 120 <pre> short iPhotCat (Measure *measure); </pre> 121 <pre> short iPhotSys (Measure *measure, Average *average, SecFilt *secfilt); </pre> 122 <pre> short iPhotRel (Measure *measure, Average *average, SecFilt *secfilt); </pre> 123 <pre> short iPhotCal (Measure *thisone, Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code); </pre> 124 <pre> short iPhotAve (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 125 <pre> short iPhotRef (PhotCode *code, Average *average, SecFilt *secfilt, Measure *measure); </pre> 126 <pre> short iPhotdM (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 127 <pre> short iPhotXm (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 128 129 <h3> functions in config.c </h3> 130 131 <pre> char *SelectConfigFile (int *argc, char **argv, char *progname); </pre> 132 <pre> char *LoadConfigFile (char *filename); </pre> 133 <pre> char *ScanConfig (char *config, char *field, char *mode, int Nentry, ...); </pre> 134 <pre> char *expandline (char *line, char *config); </pre> 135 <pre> char *LoadRawConfigFile (char *filename, int options); </pre> 136 137 <h3> functions in coordops.c </h3> 138 139 <pre> int XY_to_RD (double *ra, double *dec, double x, double y, Coords *coords); </pre> 140 <pre> int RD_to_XY (double *x, double *y, double ra, double dec, Coords *coords); </pre> 141 <pre> int fXY_to_RD (float *ra, float *dec, float x, float y, Coords *coords); </pre> 142 <pre> int fRD_to_XY (float *x, float *y, float ra, float dec, Coords *coords); </pre> 143 <pre> int GetCoords (Coords *coords, Header *header); </pre> 144 <pre> int coords_precess (double *ra, double *dec, double in_epoch, double out_epoch); </pre> 145 146 <h3> functions in phot_catalog.c </h3> 147 148 <pre> int lock_catalog (Catalog *catalog, int lockmode); </pre> 149 <pre> int unlock_catalog (Catalog *catalog); </pre> 150 <pre> int load_catalog (Catalog *catalog, char mode, int VERBOSE); </pre> 151 <pre> int save_catalog (Catalog *catalog, char VERBOSE); </pre> 152 <pre> Measure *FixOldMeasure (OldMeasure *in, int Nvalues); </pre> 153 <pre> Average *FixOldAverage (OldAverage *in, int Nvalues); </pre> 154 <pre> SecFilt *FixOldSecFilt (OldSecFilt *in, int Nvalues); </pre> 155 156 <h3> functions in photfits.c </h3> 157 158 <pre> short int putMi (double value); </pre> 159 <pre> double getMi (short int value); </pre> 160 <pre> void returnMcal (Image *image, double *c); </pre> 161 <pre> void assignMcal (Image *image, double *c, int order); </pre> 162 <pre> double applyMcal (Image *image, double x, double y); </pre> 163 <pre> double findscatter (double *X, double *Y, double *M, double *dM, int N, double *c, int order); </pre> 164 165 <h3> defined macros </h3> 166 167 the ohana library includes the following macros: 85 associated constants: 168 86 169 87 <pre> 170 171 SIGN(X)172 ROUND(X)173 SQR(X)174 SQ(X)175 MIN(X,Y)176 MAX(X,Y)177 SWAP(X,Y)178 179 whitespace (char c)180 </pre>181 182 <h3> defined constants </h3>183 184 <pre>185 TRUE186 FALSE187 188 88 LCK_SOFT - block writing 189 89 LCK_XCLD - block reading and writing … … 200 100 LCK_UNKNOWN - can't stat file to get size 201 101 </pre> 102 103 <h3> time / radec manipulation functions (time.c) </h3> 104 105 <pre> int dms_to_ddd (double *Value, char *string); </pre> 106 <pre> int str_to_radec (double *ra, double *dec, char *str1, char *str2); </pre> 107 <pre> int chk_time (char *line); </pre> 108 <pre> int str_to_time (char *line, time_t *second); </pre> 109 <pre> int str_to_dtime (char *line, double *second); </pre> 110 <pre> double sec_to_jd (time_t second); </pre> 111 <pre> time_t jd_to_sec (double jd); </pre> 112 <pre> double sec_to_mjd (time_t second); </pre> 113 <pre> time_t mjd_to_sec (double mjd); </pre> 114 <pre> char *sec_to_date (time_t second); </pre> 115 <pre> time_t date_to_sec (char *date); </pre> 116 <pre> time_t short_date_to_sec (char *date); </pre> 117 <pre> int hstgsc_hms_to_deg (double *h0, double *h1, double *d0, double *d1, char *string); </pre> 118 119 <h3> functions in config.c </h3> 120 121 <pre> char *SelectConfigFile (int *argc, char **argv, char *progname); </pre> 122 <pre> char *LoadConfigFile (char *filename); </pre> 123 <pre> char *ScanConfig (char *config, char *field, char *mode, int Nentry, ...); </pre> 124 <pre> char *expandline (char *line, char *config); </pre> 125 <pre> char *LoadRawConfigFile (char *filename, int options); </pre> 126 127 <h3> miscellaneous functions </h3> 128 129 <pre> char *ohana_version (); </pre> 130 131 <h2> DVO data structures and catalog I/O functions </h2> 132 133 <h3> read/write (Fread.c) </h3> 134 135 <pre> int Fread (char ptr, int size, int nitems, FILE *f, char *type); </pre> 136 <pre> int Fwrite (char ptr, int size, int nitems, FILE *f, char *type); </pre> 137 <pre> int ByteSwap (char *ptr, int size, int nitems, char *type); </pre> 138 <pre> int ConvertStruct (char *buffer, int size, int nitems, char *type); </pre> 139 140 Several of these functions are used to perform byte-swapping for 141 structures in the pre-autocode days. They should be deprecated and 142 dropped, but the autocoding must superceed the hard-wired structure 143 first. 144 145 <h3> coordinate structure manipulations (coordops.c) </h3> 146 147 <pre> int XY_to_RD (double *ra, double *dec, double x, double y, Coords *coords); </pre> 148 <pre> int RD_to_XY (double *x, double *y, double ra, double dec, Coords *coords); </pre> 149 <pre> int fXY_to_RD (float *ra, float *dec, float x, float y, Coords *coords); </pre> 150 <pre> int fRD_to_XY (float *x, float *y, float ra, float dec, Coords *coords); </pre> 151 <pre> int GetCoords (Coords *coords, Header *header); </pre> 152 <pre> int coords_precess (double *ra, double *dec, double in_epoch, double out_epoch); </pre> 153 154 <h3> photcode manipulations (LoadPhotcodes.c) </h3> 155 156 <pre> int LoadPhotcodes (char *filename, PhotCodeData *photcodes); </pre> 157 <pre> int FreePhotcodes (PhotCodeData *photcodes); </pre> 158 159 <pre> PhotCode *GetPhotcodebyName (char *name); </pre> 160 <pre> PhotCode *GetPhotcodeEquivbyName (char *name); </pre> 161 <pre> PhotCode *GetPhotcodebyCode (int code); </pre> 162 <pre> PhotCode *GetPhotcodeEquivbyCode (int code); </pre> 163 <pre> PhotCode *GetPhotcodebyNsec (int Nsec); </pre> 164 <pre> char *GetPhotcodeNamebyCode (int code); </pre> 165 166 <pre> int GetPhotcodeCodebyName (char *name); </pre> 167 <pre> int GetPhotcodeEquivCodebyName (char *name); </pre> 168 <pre> int GetPhotcodeEquivCodebyCode (int code); </pre> 169 <pre> int GetPhotcodeNsec (int code); </pre> 170 <pre> int GetPhotcodeNsecfilt (); </pre> 171 <pre> int *GetPhotcodeEquivList (int code, int *nlist); </pre> 172 173 <pre> void SetZeroPoint (double ZP); </pre> 174 <pre> void ParseColorTerms (char *terms, float *X, int *N); </pre> 175 176 <pre> int PhotColor (Average *average, SecFilt *secfilt, Measure *measure, int c1, int c2, double *color); </pre> 177 <pre> short iPhotColor (Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code); </pre> 178 179 <pre> double PhotInst (Measure *measure); </pre> 180 <pre> double PhotCat (Measure *measure); </pre> 181 <pre> double PhotSys (Measure *measure, Average *average, SecFilt *secfilt); </pre> 182 <pre> double PhotRel (Measure *measure, Average *average, SecFilt *secfilt); </pre> 183 <pre> double PhotCal (Measure *thisone, Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code); </pre> 184 <pre> double PhotAve (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 185 <pre> double PhotRef (PhotCode *code, Average *average, SecFilt *secfilt, Measure *measure); </pre> 186 <pre> double PhotdM (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 187 <pre> double PhotXm (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 188 189 <pre> short iPhotInst (Measure *measure); </pre> 190 <pre> short iPhotCat (Measure *measure); </pre> 191 <pre> short iPhotSys (Measure *measure, Average *average, SecFilt *secfilt); </pre> 192 <pre> short iPhotRel (Measure *measure, Average *average, SecFilt *secfilt); </pre> 193 <pre> short iPhotCal (Measure *thisone, Average *average, SecFilt *secfilt, Measure *measure, PhotCode *code); </pre> 194 <pre> short iPhotAve (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 195 <pre> short iPhotRef (PhotCode *code, Average *average, SecFilt *secfilt, Measure *measure); </pre> 196 <pre> short iPhotdM (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 197 <pre> short iPhotXm (PhotCode *code, Average *average, SecFilt *secfilt); </pre> 198 199 <h3> photometry catalog I/O functions (phot_catalog.c) </h3> 200 201 <pre> int lock_catalog (Catalog *catalog, int lockmode); </pre> 202 <pre> int unlock_catalog (Catalog *catalog); </pre> 203 <pre> int load_catalog (Catalog *catalog, char mode, int VERBOSE); </pre> 204 <pre> int save_catalog (Catalog *catalog, char VERBOSE); </pre> 205 206 <h3> DVO format conversions (dvo_convert.c) </h3> 207 208 <pre> Measure *FixOldMeasure (OldMeasure *in, int Nvalues); </pre> 209 <pre> Average *FixOldAverage (OldAverage *in, int Nvalues); </pre> 210 <pre> SecFilt *FixOldSecFilt (OldSecFilt *in, int Nvalues); </pre> 211 212 <h3> image type / mode lookups (imreg_datatypes.c) </h3> 213 <pre> int get_image_type (char *name); </pre> 214 <pre> char *get_type_name (int type); </pre> 215 <pre> int get_image_mode (char *name); </pre> 216 <pre> char *get_mode_name (int mode); </pre> 217 218 <h3> mosaic astrometry functions (mosaic_astrom.c) </h3> 219 220 <pre> int FindMosaicForImage (Image *images, int Nimages, int entry); </pre> 221 <pre> int FindMosaicForImage_TableSearch (Image *images, int Nimages, int entry); </pre> 222 <pre> int FindMosaicForImage_MatchSearch (Image *images, int Nimages, int entry); </pre> 223 <pre> int BuildChipMatch (Image *images, int Nimages); </pre> 224 225 <h3> FITS DB I/O functions (fits_db.c) </h3> 226 227 <pre> int fits_db_init (FITS_DB *db); </pre> 228 <pre> int fits_db_create (FITS_DB *db); </pre> 229 <pre> int fits_db_lock (FITS_DB *db, char *filename); </pre> 230 <pre> int fits_db_load (FITS_DB *db); </pre> 231 <pre> int fits_db_save (FITS_DB *db); </pre> 232 <pre> int fits_db_update (FITS_DB *db, VTable *vtable); </pre> 233 <pre> int fits_db_free (FITS_DB *db); </pre> 234 <pre> int fits_db_close (FITS_DB *db); </pre> 235 236 <h3> functions in photfits.c </h3> 237 238 <pre> short int putMi (double value); </pre> 239 <pre> double getMi (short int value); </pre> 240 <pre> void returnMcal (Image *image, double *c); </pre> 241 <pre> void assignMcal (Image *image, double *c, int order); </pre> 242 <pre> double applyMcal (Image *image, double x, double y); </pre> 243 <pre> double findscatter (double *X, double *Y, double *M, double *dM, int N, double *c, int order); </pre> 244 245 These functions manipulate the high-order polynomial fit of magnitude 246 offset as a function of image position for the Image structure. 247 -
trunk/Ohana/src/libohana/include/dvo.h
r4810 r4832 108 108 /* a catalog contains this data */ 109 109 typedef struct { 110 /* data in the file: */ 110 /* description of the catalog file: */ 111 char *filename; 112 int lockmode; 113 FILE *f; 114 115 /* extra table data if needed (move these to enums?) */ 116 char catmode[10]; /* storage mode: raw, mef, split, mysql */ 117 char average_format[80]; /* table format: internal, loneos, elixir, panstarrs */ 118 char measure_format[80]; /* table format: must match average_format */ 119 120 /* data in the catalog */ 121 Header header; 111 122 Average *average; 112 123 Measure *measure; 113 124 Missing *missing; 114 125 SecFilt *secfilt; 115 Header header;116 126 int Naverage, Nmeasure, Nmissing, Nsecfilt; 117 /* description of the catalog file: */ 118 char *filename; 119 int lockmode; 120 FILE *f; 127 121 128 /* pointers for data manipulation */ 122 129 int *found; … … 222 229 int ConvertStruct (char *buffer, int size, int Nbytes, char *type); 223 230 231 /*** conversion functions / I/O conversions ***/ 232 233 Average *AveragePanstarrsToInternal (AveragePanstarrs *in, int Nvalues); 234 Average *FtableToAverage (FTable *ftable, int *Naverage, char *extname); 235 Average *ReadRawAverage (FILE *f, int Naverage, char *format); 236 Average *AverageLoneosToInternal (AverageLoneos *in, int Nvalues); 237 Average *AverageElixirToInternal (AverageElixir *in, int Nvalues); 238 AverageElixir *AverageInternalToElixir (Average *in, int Nvalues); 239 AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues); 240 AveragePanstarrs *AverageInternalToPanstarrs (Average *in, int Nvalues); 241 Measure *MeasurePanstarrsToInternal (MeasurePanstarrs *in, int Nvalues); 242 Measure *FtableToMeasure (FTable *ftable, int *Nmeasure, char *extname); 243 Measure *ReadRawMeasure (FILE *f, int Nmeasure, char *format); 244 Measure *MeasureLoneosToInternal (MeasureLoneos *in, int Nvalues); 245 Measure *MeasureElixirToInternal (MeasureElixir *in, int Nvalues); 246 MeasureElixir *MeasureInternalToElixir (Measure *in, int Nvalues); 247 MeasureLoneos *MeasureInternalToLoneos (Measure *in, int Nvalues); 248 MeasurePanstarrs *MeasureInternalToPanstarrs (Measure *in, int Nvalues); 249 int AverageToFtable (FTable *ftable, Average *average, int Naverage, char *extname); 250 int MeasureToFtable (FTable *ftable, Measure *measure, int Nmeasure, char *extname); 251 int WriteRawAverage (FILE *f, Average *average, int Naverage, char *format); 252 int WriteRawMeasure (FILE *f, Measure *measure, int Nmeasure, char *format); 253 int load_catalog_raw (Catalog *catalog, char mode, int VERBOSE); 254 int save_catalog_raw (Catalog *catalog, char VERBOSE); 255 int load_catalog_mef (Catalog *catalog, char mode, int VERBOSE); 256 int save_catalog_mef (Catalog *catalog, char VERBOSE); 257 224 258 # endif -
trunk/Ohana/src/libohana/src/dvo_convert.c
r3473 r4832 1 SecFilt *FixOldSecFilt (OldSecFilt *in, int Nvalues); 2 Average *FixOldAverage (OldAverage *in, int Nvalues); 3 Measure *FixOldMeasure (OldMeasure *in, int Nvalues); 4 5 /* the old load_catalog automatically converted 6 now we error, and require conversion by hand 7 */ 8 9 /* this is (a bit) dangerous: the load function will automatically 10 convert from the old (Loneos) format to the new (CFHT) format. 11 But, if you load an old-format catalog, then save the new-format 12 version, the new file will be corrupted unless you load all four 13 data components. Actually, 'save_catalog' assumes you've loaded 14 all four anyway, so it is not such a problem... */ 15 16 int load_catalog (Catalog *catalog, char mode, int VERBOSE) { 17 18 int Nitems, nitems; 19 int i, Nmeas, Nmiss, size, ssize; 20 int NewMeasure, NewAverage, NewSecFilt; 21 FILE *f; 22 OldMeasure *tmpmeasure; 23 OldAverage *tmpaverage; 24 OldSecFilt *tmpsecfilt; 25 struct stat filestatus; 26 27 f = catalog[0].f; 28 fseek (f, 0, SEEK_SET); 29 30 /* read catalog header */ 31 if (!fits_load_header (f, &catalog[0].header)) { 32 if (VERBOSE) fprintf (stderr, "catalog file does not exist: %s\n", catalog[0].filename); 1 # include <ohana.h> 2 # include <dvo.h> 3 4 /* The Ftable-TYPE conversion functions determine the format of table based on EXTNAME in header. 5 they convert the table to the internal format, and set 'extname'. 6 7 The TYPE-Ftable conversions functions create output tables in the format requested 8 by the 'extname' function parameter. 9 */ 10 11 /** this file might be more readable if I use macros for the repetative 12 constructions below **/ 13 14 /*** Average / FTable conversion functions ***/ 15 16 Average *FtableToAverage (FTable *ftable, int *Naverage, char *extname) { 17 18 Average *average; 19 20 /* convert to the internal format */ 21 if (!fits_scan (ftable[0].header, "EXTNAME", "%s", 1, extname)) { 22 fprintf (stderr, "EXTNAME missing for average table\n"); 33 23 return (FALSE); 34 24 } 35 36 /* this is done by the load anyway... */ 37 fseek (f, catalog[0].header.size, SEEK_SET); 38 39 /* get the components from the header */ 40 catalog[0].Naverage = catalog[0].Nmeasure = catalog[0].Nmissing = catalog[0].Nsecfilt = 0; 41 if (!fits_scan (&catalog[0].header, "NSTARS", "%d", 1, &catalog[0].Naverage)) return (FALSE); 42 if (!fits_scan (&catalog[0].header, "NMEAS", "%d", 1, &catalog[0].Nmeasure)) return (FALSE); 43 if (!fits_scan (&catalog[0].header, "NMISS", "%d", 1, &catalog[0].Nmissing)) return (FALSE); 44 if (!fits_scan (&catalog[0].header, "NSECFILT", "%d", 1, &catalog[0].Nsecfilt)) catalog[0].Nsecfilt = 0; 45 if (!fits_scan (&catalog[0].header, "NEWMEAS", "%t", 1, &NewMeasure)) NewMeasure = FALSE; 46 if (!fits_scan (&catalog[0].header, "NEWAVES", "%t", 1, &NewAverage)) NewAverage = FALSE; 47 if (!fits_scan (&catalog[0].header, "NEWSECF", "%t", 1, &NewSecFilt)) NewSecFilt = FALSE; 48 49 /* predicted file size - for double checking data validity */ 50 size = catalog[0].header.size; 51 ssize = NewAverage ? sizeof (Average) : sizeof (OldAverage); 52 size += ssize * catalog[0].Naverage; 53 ssize = NewMeasure ? sizeof (Measure) : sizeof (OldMeasure); 54 size += ssize * catalog[0].Nmeasure; 55 ssize = sizeof (Missing); 56 size += ssize * catalog[0].Nmissing; 57 ssize = NewSecFilt ? sizeof (SecFilt) : sizeof (OldSecFilt); 58 size += ssize * catalog[0].Nsecfilt * catalog[0].Naverage; 59 60 /* check that file size makes sense */ 61 if (stat (catalog[0].filename, &filestatus) == -1) { 62 if (VERBOSE) fprintf (stderr, "failed to get status of catalog\n"); 25 if (!strcmp (extname, "DVO_AVERAGE")) { 26 average = fits_table_get_Average (ftable, Naverage); 27 return (average); 28 } 29 if (!strcmp (extname, "DVO_AVERAGE_ELIXIR")) { 30 AverageElixir *tmpaverage; 31 tmpaverage = fits_table_get_AverageElixir (ftable, Naverage); 32 average = AverageElixirToInternal (tmpaverage, *Naverage); 33 free (tmpaverage); 34 return (average); 35 } 36 if (!strcmp (extname, "DVO_AVERAGE_LONEOS")) { 37 AverageLoneos *tmpaverage; 38 tmpaverage = fits_table_get_AverageLoneos (ftable, Naverage); 39 average = AverageLoneosToInternal (tmpaverage, *Naverage); 40 free (tmpaverage); 41 return (average); 42 } 43 if (!strcmp (extname, "DVO_AVERAGE_PANSTARRS")) { 44 AveragePanstarrs *tmpaverage; 45 tmpaverage = fits_table_get_AveragePanstarrs (ftable, Naverage); 46 average = AveragePanstarrsToInternal (tmpaverage, *Naverage); 47 free (tmpaverage); 48 return (average); 49 } 50 51 fprintf (stderr, "table format unknown: %s\n", extname); 52 53 *Naverage = 0; 54 return (NULL); 55 } 56 57 int AverageToFtable (FTable *ftable, Average *average, int Naverage, char *extname) { 58 59 /* convert from the internal format */ 60 if (!strcmp (extname, "DVO_AVERAGE")) { 61 fits_table_set_Average (ftable, average, Naverage); 62 return (TRUE); 63 } 64 if (!strcmp (extname, "DVO_AVERAGE_ELIXIR")) { 65 AverageElixir *tmpaverage; 66 tmpaverage = AverageInternalToElixir (average, Naverage); 67 fits_table_set_AverageElixir (ftable, tmpaverage, Naverage); 68 free (tmpaverage); 69 return (TRUE); 70 } 71 if (!strcmp (extname, "DVO_AVERAGE_LONEOS")) { 72 AverageLoneos *tmpaverage; 73 tmpaverage = AverageInternalToLoneos (average, Naverage); 74 fits_table_set_AverageLoneos (ftable, tmpaverage, Naverage); 75 free (tmpaverage); 76 return (TRUE); 77 } 78 if (!strcmp (extname, "DVO_AVERAGE_PANSTARRS")) { 79 AveragePanstarrs *tmpaverage; 80 tmpaverage = AverageInternalToPanstarrs (average, Naverage); 81 fits_table_set_AveragePanstarrs (ftable, tmpaverage, Naverage); 82 free (tmpaverage); 83 return (TRUE); 84 } 85 fprintf (stderr, "table format unknown: %s\n", extname); 86 return (FALSE); 87 } 88 89 /*** Measure / FTable conversion functions ***/ 90 91 Measure *FtableToMeasure (FTable *ftable, int *Nmeasure, char *extname) { 92 93 Measure *measure; 94 95 /* convert to the internal format */ 96 if (!fits_scan (ftable[0].header, "EXTNAME", "%s", 1, extname)) { 97 fprintf (stderr, "EXTNAME missing for measure table\n"); 63 98 return (FALSE); 64 99 } 65 if (size > filestatus.st_size) { 66 if (VERBOSE) { 67 fprintf (stderr, "star catalog has inconsistent size\n"); 68 ssize = NewAverage ? sizeof (Average) : sizeof (OldAverage); 69 fprintf (stderr, "average: %d = %d bytes\n", catalog[0].Naverage, catalog[0].Naverage*ssize); 70 ssize = NewMeasure ? sizeof (Measure) : sizeof (OldMeasure); 71 fprintf (stderr, "measure: %d = %d bytes\n", catalog[0].Nmeasure, catalog[0].Nmeasure*ssize); 72 ssize = sizeof (Missing); 73 fprintf (stderr, "missing: %d = %d bytes\n", catalog[0].Nmissing, catalog[0].Nmissing*ssize); 74 ssize = NewSecFilt ? sizeof (SecFilt) : sizeof (OldSecFilt); 75 fprintf (stderr, "secfilt: %d = %d bytes\n", catalog[0].Nsecfilt, catalog[0].Nsecfilt*catalog[0].Naverage*ssize); 76 fprintf (stderr, "expect: %d, found: %d\n", size, (int)filestatus.st_size); 77 } 78 return (FALSE); 79 } 80 if (size < filestatus.st_size) { 81 if (VERBOSE) fprintf (stderr, "warning: file larger than expected\n"); 82 } 83 84 if (catalog[0].Naverage == 0) { 85 if (VERBOSE) fprintf (stderr, "no stars yet in catalog %s\n", catalog[0].filename); 86 return (TRUE); 87 } 88 89 if (mode & LOAD_AVES) { 90 /* read average values */ 91 if (NewAverage) { 92 ALLOCATE (catalog[0].average, Average, MAX (catalog[0].Naverage, 1)); 93 Nitems = catalog[0].Naverage; 94 nitems = Fread (catalog[0].average, sizeof(Average), Nitems, f, "average"); 95 } else { 96 ALLOCATE (tmpaverage, OldAverage, MAX (catalog[0].Naverage, 1)); 97 Nitems = catalog[0].Naverage; 98 nitems = Fread (tmpaverage, sizeof(OldAverage), Nitems, f, "oldaverage"); 99 catalog[0].average = FixOldAverage (tmpaverage, Nitems); 100 } 101 if (nitems != Nitems) { 102 if (VERBOSE) fprintf (stderr, "failed to read averages from catalog file %s (%d vs %d)\n", catalog[0].filename, nitems, Nitems); 103 return (FALSE); 104 } 105 } else { 106 /* skip over averages */ 107 fseek (f, catalog[0].Naverage * sizeof(Average), SEEK_CUR); 108 } 109 110 if (mode & LOAD_MEAS) { 111 /* read measurements */ 112 if (NewMeasure) { 113 ALLOCATE (catalog[0].measure, Measure, MAX (catalog[0].Nmeasure, 1)); 114 Nitems = catalog[0].Nmeasure; 115 nitems = Fread (catalog[0].measure, sizeof(Measure), Nitems, f, "measure"); 116 } else { 117 ALLOCATE (tmpmeasure, OldMeasure, MAX (catalog[0].Nmeasure, 1)); 118 Nitems = catalog[0].Nmeasure; 119 nitems = Fread (tmpmeasure, sizeof(OldMeasure), Nitems, f, "oldmeasure"); 120 catalog[0].measure = FixOldMeasure (tmpmeasure, Nitems); 121 } 122 if (nitems != Nitems) { 123 if (VERBOSE) fprintf (stderr, "failed to read measures from catalog file %s (%d vs %d)\n", catalog[0].filename, nitems, Nitems); 124 return (FALSE); 125 } 126 } else { 127 /* skip over measures */ 128 fseek (f, catalog[0].Nmeasure * sizeof(Measure), SEEK_CUR); 129 } 130 131 if (mode & LOAD_MISS) { 132 /* read missing */ 133 ALLOCATE (catalog[0].missing, Missing, MAX (catalog[0].Nmissing, 1)); 134 Nitems = catalog[0].Nmissing; 135 nitems = Fread (catalog[0].missing, sizeof(Missing), Nitems, f, "missing"); 136 if (nitems != Nitems) { 137 if (VERBOSE) fprintf (stderr, "failed to read missing from catalog file %s (%d vs %d)\n", catalog[0].filename, nitems, Nitems); 138 return (FALSE); 139 } 140 } else { 141 /* skip over missings */ 142 fseek (f, catalog[0].Nmissing * sizeof(Missing), SEEK_CUR); 143 } 144 145 if (mode & LOAD_SECF) { 146 /* read missing */ 147 if (NewSecFilt) { 148 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt; 149 ALLOCATE (catalog[0].secfilt, SecFilt, MAX (Nitems, 1)); 150 nitems = Fread (catalog[0].secfilt, sizeof(SecFilt), Nitems, f, "secfilt"); 151 } else { 152 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt; 153 ALLOCATE (tmpsecfilt, OldSecFilt, MAX (Nitems, 1)); 154 nitems = Fread (tmpsecfilt, sizeof(OldSecFilt), Nitems, f, "oldsecfilt"); 155 catalog[0].secfilt = FixOldSecFilt (tmpsecfilt, Nitems); 156 } 157 if (nitems != Nitems) { 158 if (VERBOSE) fprintf (stderr, "failed to read secondary filters from catalog file %s (%d vs %d)\n", catalog[0].filename, nitems, Nitems); 159 return (FALSE); 160 } 161 } else { 162 /* skip over secfilts */ 163 fseek (f, catalog[0].Naverage * catalog[0].Nsecfilt * sizeof(SecFilt), SEEK_CUR); 164 } 165 166 if (VERBOSE) fprintf (stderr, "read %d stars from catalog file %s (%d measurements, %d missing, %d secondary filters)\n", 167 catalog[0].Naverage, catalog[0].filename, catalog[0].Nmeasure, catalog[0].Nmissing, catalog[0].Nsecfilt); 168 169 /* check data integrity */ 170 if (mode & LOAD_AVES) { 171 for (i = Nmeas = Nmiss = 0; i < catalog[0].Naverage; i++) { 172 Nmeas += catalog[0].average[i].Nm; 173 Nmiss += catalog[0].average[i].Nn; 174 } 175 if ((Nmeas != catalog[0].Nmeasure) || (Nmiss != catalog[0].Nmissing)) { 176 if (VERBOSE) { 177 fprintf (stderr, "****** data in catalog %s is corrupt, sums don't check\n", catalog[0].filename); 178 fprintf (stderr, "****** Nmeas: %d, %d\n", Nmeas, catalog[0].Nmeasure); 179 fprintf (stderr, "****** Nmiss: %d, %d\n", Nmiss, catalog[0].Nmissing); 180 } 181 return (FALSE); 182 } 183 } 184 return (TRUE); 185 } 186 187 /**** tools to convert between formats - this happens automatically in load_catalog */ 188 189 Measure *FixOldMeasure (OldMeasure *in, int Nvalues) { 190 191 int i; 192 Measure *out; 193 194 ALLOCATE (out, Measure, Nvalues); 195 196 for (i = 0; i < Nvalues; i++) { 197 out[i].dR = in[i].dR; 198 out[i].dD = in[i].dD; 199 out[i].M = in[i].M; 200 out[i].dM = in[i].dM; 201 out[i].Mcal = in[i].Mcal; 202 out[i].dophot = in[i].dophot; 203 out[i].source = in[i].source; 204 out[i].t = in[i].t; 205 206 out[i].dt = 0xffff; 207 out[i].averef = in[i].average & 0x00ffffff; 208 out[i].flags = (in[i].average & 0xff000000) >> 24; 209 } 210 211 free (in); 212 213 return (out); 214 } 215 216 Average *FixOldAverage (OldAverage *in, int Nvalues) { 217 218 int i; 219 Average *out; 220 221 ALLOCATE (out, Average, Nvalues); 222 223 for (i = 0; i < Nvalues; i++) { 224 out[i].R = in[i].R; 225 out[i].D = in[i].D; 226 out[i].M = in[i].M; 227 out[i].Xp = in[i].Xp; 228 out[i].Xm = in[i].Xm; 229 out[i].Nm = in[i].Nm; 230 out[i].Nn = in[i].Nn; 231 out[i].code = in[i].code; 232 out[i].offset = in[i].offset; 233 out[i].missing = in[i].missing; 234 235 out[i].dM = 0xffff; 236 } 237 238 free (in); 239 240 return (out); 241 } 242 243 SecFilt *FixOldSecFilt (OldSecFilt *in, int Nvalues) { 244 245 int i; 246 SecFilt *out; 247 248 ALLOCATE (out, SecFilt, Nvalues); 249 250 for (i = 0; i < Nvalues; i++) { 251 out[i].M = in[i].M; 252 out[i].Xm = in[i].Xm; 253 254 out[i].dM = 0xffff; 255 } 256 257 free (in); 258 259 return (out); 260 } 261 100 if (!strcmp (extname, "DVO_MEASURE")) { 101 measure = fits_table_get_Measure (ftable, Nmeasure); 102 return (measure); 103 } 104 if (!strcmp (extname, "DVO_MEASURE_ELIXIR")) { 105 MeasureElixir *tmpmeasure; 106 tmpmeasure = fits_table_get_MeasureElixir (ftable, Nmeasure); 107 measure = MeasureElixirToInternal (tmpmeasure, *Nmeasure); 108 free (tmpmeasure); 109 return (measure); 110 } 111 if (!strcmp (extname, "DVO_MEASURE_LONEOS")) { 112 MeasureLoneos *tmpmeasure; 113 tmpmeasure = fits_table_get_MeasureLoneos (ftable, Nmeasure); 114 measure = MeasureLoneosToInternal (tmpmeasure, *Nmeasure); 115 free (tmpmeasure); 116 return (measure); 117 } 118 if (!strcmp (extname, "DVO_MEASURE_PANSTARRS")) { 119 MeasurePanstarrs *tmpmeasure; 120 tmpmeasure = fits_table_get_MeasurePanstarrs (ftable, Nmeasure); 121 measure = MeasurePanstarrsToInternal (tmpmeasure, *Nmeasure); 122 free (tmpmeasure); 123 return (measure); 124 } 125 126 fprintf (stderr, "table format unknown: %s\n", extname); 127 128 *Nmeasure = 0; 129 return (NULL); 130 } 131 132 int MeasureToFtable (FTable *ftable, Measure *measure, int Nmeasure, char *extname) { 133 134 /* convert from the internal format */ 135 if (!strcmp (extname, "DVO_MEASURE")) { 136 fits_table_set_Measure (ftable, measure, Nmeasure); 137 return (TRUE); 138 } 139 if (!strcmp (extname, "DVO_MEASURE_ELIXIR")) { 140 MeasureElixir *tmpmeasure; 141 tmpmeasure = MeasureInternalToElixir (measure, Nmeasure); 142 fits_table_set_MeasureElixir (ftable, tmpmeasure, Nmeasure); 143 free (tmpmeasure); 144 return (TRUE); 145 } 146 if (!strcmp (extname, "DVO_MEASURE_LONEOS")) { 147 MeasureLoneos *tmpmeasure; 148 tmpmeasure = MeasureInternalToLoneos (measure, Nmeasure); 149 fits_table_set_MeasureLoneos (ftable, tmpmeasure, Nmeasure); 150 free (tmpmeasure); 151 return (TRUE); 152 } 153 if (!strcmp (extname, "DVO_MEASURE_PANSTARRS")) { 154 MeasurePanstarrs *tmpmeasure; 155 tmpmeasure = MeasureInternalToPanstarrs (measure, Nmeasure); 156 fits_table_set_MeasurePanstarrs (ftable, tmpmeasure, Nmeasure); 157 free (tmpmeasure); 158 return (TRUE); 159 } 160 161 fprintf (stderr, "table format unknown: %s\n", extname); 162 return (FALSE); 163 } 164 165 /** Average / Raw Table conversions **/ 166 167 Average *ReadRawAverage (FILE *f, int Naverage, char *format) { 168 169 int nitems; 170 Average *average; 171 172 if (!strcmp (format, "DVO_AVERAGE")) { 173 ALLOCATE (average, Average, MAX (Naverage, 1)); 174 nitems = fread (average, sizeof(Average), Naverage, f); 175 if (nitems != Naverage) { 176 fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage); 177 return (NULL); 178 } 179 fits_convert_Average (average, sizeof(Average), Naverage); 180 return (average); 181 } 182 if (!strcmp (format, "DVO_AVERAGE_ELIXIR")) { 183 AverageElixir *tmpaverage; 184 ALLOCATE (tmpaverage, AverageElixir, MAX (Naverage, 1)); 185 nitems = fread (tmpaverage, sizeof(AverageElixir), Naverage, f); 186 if (nitems != Naverage) { 187 fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage); 188 return (NULL); 189 } 190 fits_convert_AverageElixir (tmpaverage, sizeof(AverageElixir), Naverage); 191 average = AverageElixirToInternal (tmpaverage, Naverage); 192 free (tmpaverage); 193 return (average); 194 } 195 if (!strcmp (format, "DVO_AVERAGE_LONEOS")) { 196 AverageLoneos *tmpaverage; 197 ALLOCATE (tmpaverage, AverageLoneos, MAX (Naverage, 1)); 198 nitems = fread (tmpaverage, sizeof(AverageLoneos), Naverage, f); 199 if (nitems != Naverage) { 200 fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage); 201 return (NULL); 202 } 203 fits_convert_AverageLoneos (tmpaverage, sizeof(AverageLoneos), Naverage); 204 average = AverageLoneosToInternal (tmpaverage, Naverage); 205 free (tmpaverage); 206 return (average); 207 } 208 if (!strcmp (format, "DVO_AVERAGE_PANSTARRS")) { 209 AveragePanstarrs *tmpaverage; 210 ALLOCATE (tmpaverage, AveragePanstarrs, MAX (Naverage, 1)); 211 nitems = fread (tmpaverage, sizeof(AveragePanstarrs), Naverage, f); 212 if (nitems != Naverage) { 213 fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage); 214 return (NULL); 215 } 216 fits_convert_AveragePanstarrs (tmpaverage, sizeof(AveragePanstarrs), Naverage); 217 average = AveragePanstarrsToInternal (tmpaverage, Naverage); 218 free (tmpaverage); 219 return (average); 220 } 221 fprintf (stderr, "error reading averages\n"); 222 return (NULL); 223 } 224 225 /* accepts and converts internal average formats and outputs 226 raw data in the specified format */ 227 int WriteRawAverage (FILE *f, Average *average, int Naverage, char *format) { 228 229 int nitems; 230 231 if (!strcmp (format, "DVO_AVERAGE")) { 232 fits_convert_Average (average, sizeof(Average), Naverage); 233 nitems = fwrite (average, sizeof(Average), Naverage, f); 234 if (nitems != Naverage) { 235 fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage); 236 return (FALSE); 237 } 238 return (TRUE); 239 } 240 if (!strcmp (format, "DVO_AVERAGE_ELIXIR")) { 241 AverageElixir *tmpaverage; 242 tmpaverage = AverageInternalToElixir (average, Naverage); 243 fits_convert_AverageElixir (tmpaverage, sizeof(AverageElixir), Naverage); 244 nitems = fwrite (tmpaverage, sizeof(AverageElixir), Naverage, f); 245 free (tmpaverage); 246 if (nitems != Naverage) { 247 fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage); 248 return (FALSE); 249 } 250 return (TRUE); 251 } 252 if (!strcmp (format, "DVO_AVERAGE_LONEOS")) { 253 AverageLoneos *tmpaverage; 254 tmpaverage = AverageInternalToLoneos (average, Naverage); 255 fits_convert_AverageLoneos (tmpaverage, sizeof(AverageLoneos), Naverage); 256 nitems = fwrite (tmpaverage, sizeof(AverageLoneos), Naverage, f); 257 free (tmpaverage); 258 if (nitems != Naverage) { 259 fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage); 260 return (FALSE); 261 } 262 return (TRUE); 263 } 264 if (!strcmp (format, "DVO_AVERAGE_PANSTARRS")) { 265 AveragePanstarrs *tmpaverage; 266 tmpaverage = AverageInternalToPanstarrs (average, Naverage); 267 fits_convert_AveragePanstarrs (tmpaverage, sizeof(AveragePanstarrs), Naverage); 268 nitems = fwrite (tmpaverage, sizeof(AveragePanstarrs), Naverage, f); 269 free (tmpaverage); 270 if (nitems != Naverage) { 271 fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage); 272 return (FALSE); 273 } 274 return (TRUE); 275 } 276 fprintf (stderr, "error writing averages\n"); 277 return (FALSE); 278 } 279 /** Average / Raw Table conversions **/ 280 281 Measure *ReadRawMeasure (FILE *f, int Nmeasure, char *format) { 282 283 int nitems; 284 Measure *measure; 285 286 if (!strcmp (format, "DVO_MEASURE")) { 287 ALLOCATE (measure, Measure, MAX (Nmeasure, 1)); 288 nitems = fread (measure, sizeof(Measure), Nmeasure, f); 289 if (nitems != Nmeasure) { 290 fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure); 291 return (NULL); 292 } 293 fits_convert_Measure (measure, sizeof(Measure), Nmeasure); 294 return (measure); 295 } 296 if (!strcmp (format, "DVO_MEASURE_ELIXIR")) { 297 MeasureElixir *tmpmeasure; 298 ALLOCATE (tmpmeasure, MeasureElixir, MAX (Nmeasure, 1)); 299 nitems = fread (tmpmeasure, sizeof(MeasureElixir), Nmeasure, f); 300 if (nitems != Nmeasure) { 301 fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure); 302 return (NULL); 303 } 304 fits_convert_MeasureElixir (tmpmeasure, sizeof(MeasureElixir), Nmeasure); 305 measure = MeasureElixirToInternal (tmpmeasure, Nmeasure); 306 free (tmpmeasure); 307 return (measure); 308 } 309 if (!strcmp (format, "DVO_MEASURE_LONEOS")) { 310 MeasureLoneos *tmpmeasure; 311 ALLOCATE (tmpmeasure, MeasureLoneos, MAX (Nmeasure, 1)); 312 nitems = fread (tmpmeasure, sizeof(MeasureLoneos), Nmeasure, f); 313 if (nitems != Nmeasure) { 314 fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure); 315 return (NULL); 316 } 317 fits_convert_MeasureLoneos (tmpmeasure, sizeof(MeasureLoneos), Nmeasure); 318 measure = MeasureLoneosToInternal (tmpmeasure, Nmeasure); 319 free (tmpmeasure); 320 return (measure); 321 } 322 if (!strcmp (format, "DVO_MEASURE_PANSTARRS")) { 323 MeasurePanstarrs *tmpmeasure; 324 ALLOCATE (tmpmeasure, MeasurePanstarrs, MAX (Nmeasure, 1)); 325 nitems = fread (tmpmeasure, sizeof(MeasurePanstarrs), Nmeasure, f); 326 if (nitems != Nmeasure) { 327 fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure); 328 return (NULL); 329 } 330 fits_convert_MeasurePanstarrs (tmpmeasure, sizeof(MeasurePanstarrs), Nmeasure); 331 measure = MeasurePanstarrsToInternal (tmpmeasure, Nmeasure); 332 free (tmpmeasure); 333 return (measure); 334 } 335 fprintf (stderr, "error reading measures\n"); 336 return (NULL); 337 } 338 339 /* accepts and converts internal measure formats and outputs 340 raw data in the specified format */ 341 int WriteRawMeasure (FILE *f, Measure *measure, int Nmeasure, char *format) { 342 343 int nitems; 344 345 if (!strcmp (format, "DVO_MEASURE")) { 346 fits_convert_Measure (measure, sizeof(Measure), Nmeasure); 347 nitems = fwrite (measure, sizeof(Measure), Nmeasure, f); 348 if (nitems != Nmeasure) { 349 fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure); 350 return (FALSE); 351 } 352 return (TRUE); 353 } 354 if (!strcmp (format, "DVO_MEASURE_ELIXIR")) { 355 MeasureElixir *tmpmeasure; 356 tmpmeasure = MeasureInternalToElixir (measure, Nmeasure); 357 fits_convert_MeasureElixir (tmpmeasure, sizeof(MeasureElixir), Nmeasure); 358 nitems = fwrite (tmpmeasure, sizeof(MeasureElixir), Nmeasure, f); 359 free (tmpmeasure); 360 if (nitems != Nmeasure) { 361 fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure); 362 return (FALSE); 363 } 364 return (TRUE); 365 } 366 if (!strcmp (format, "DVO_MEASURE_LONEOS")) { 367 MeasureLoneos *tmpmeasure; 368 tmpmeasure = MeasureInternalToLoneos (measure, Nmeasure); 369 fits_convert_MeasureLoneos (tmpmeasure, sizeof(MeasureLoneos), Nmeasure); 370 nitems = fwrite (tmpmeasure, sizeof(MeasureLoneos), Nmeasure, f); 371 free (tmpmeasure); 372 if (nitems != Nmeasure) { 373 fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure); 374 return (FALSE); 375 } 376 return (TRUE); 377 } 378 if (!strcmp (format, "DVO_MEASURE_PANSTARRS")) { 379 MeasurePanstarrs *tmpmeasure; 380 tmpmeasure = MeasureInternalToPanstarrs (measure, Nmeasure); 381 fits_convert_MeasurePanstarrs (tmpmeasure, sizeof(MeasurePanstarrs), Nmeasure); 382 nitems = fwrite (tmpmeasure, sizeof(MeasurePanstarrs), Nmeasure, f); 383 free (tmpmeasure); 384 if (nitems != Nmeasure) { 385 fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure); 386 return (FALSE); 387 } 388 return (TRUE); 389 } 390 fprintf (stderr, "error writing measures\n"); 391 return (FALSE); 392 } -
trunk/Ohana/src/libohana/src/phot_catalog.c
r3649 r4832 36 36 int load_catalog (Catalog *catalog, char mode, int VERBOSE) { 37 37 38 int Nitems, nitems; 39 int i, Nmeas, Nmiss, size, ssize; 40 int NewMeasure, NewAverage, NewSecFilt; 41 FILE *f; 42 struct stat filestatus; 38 if (!strcmp (catalog[0].catmode, "RAW")) { 39 load_catalog_raw (catalog, mode, VERBOSE); 40 return (TRUE); 41 } 42 if (!strcmp (catalog[0].catmode, "MEF")) { 43 load_catalog_mef (catalog, mode, VERBOSE); 44 return (TRUE); 45 } 46 /* 47 if (!strcmp (catalog[0].catmode, "SPLIT")) { 48 load_catalog_split (catalog, mode, VERBOSE); 49 return (TRUE); 50 } 51 if (!strcmp (catalog[0].catmode, "MYSQL")) { 52 load_catalog_mysql (catalog, mode, VERBOSE); 53 return (TRUE); 54 } 55 */ 56 return (FALSE); 57 } 43 58 44 f = catalog[0].f; 45 fseek (f, 0, SEEK_SET); 59 int save_catalog (Catalog *catalog, char VERBOSE) { 46 60 47 /* read catalog header */ 48 if (!fits_load_header (f, &catalog[0].header)) { 49 if (VERBOSE) fprintf (stderr, "catalog file does not exist: %s\n", catalog[0].filename); 50 return (FALSE); 61 if (!strcmp (catalog[0].catmode, "RAW")) { 62 save_catalog_raw (catalog, VERBOSE); 63 return (TRUE); 51 64 } 52 53 /* this is done by the load anyway... */ 54 fseek (f, catalog[0].header.size, SEEK_SET); 55 56 /* require the file to contain the NEW versions (ELIXIR) */ 57 if (!fits_scan (&catalog[0].header, "NEWMEAS", "%t", 1, &NewMeasure)) return (FALSE); 58 if (!fits_scan (&catalog[0].header, "NEWAVES", "%t", 1, &NewAverage)) return (FALSE); 59 if (!fits_scan (&catalog[0].header, "NEWSECF", "%t", 1, &NewSecFilt)) return (FALSE); 60 61 /* get the components from the header */ 62 catalog[0].Naverage = catalog[0].Nmeasure = catalog[0].Nmissing = catalog[0].Nsecfilt = 0; 63 if (!fits_scan (&catalog[0].header, "NSTARS", "%d", 1, &catalog[0].Naverage)) return (FALSE); 64 if (!fits_scan (&catalog[0].header, "NMEAS", "%d", 1, &catalog[0].Nmeasure)) return (FALSE); 65 if (!fits_scan (&catalog[0].header, "NMISS", "%d", 1, &catalog[0].Nmissing)) return (FALSE); 66 if (!fits_scan (&catalog[0].header, "NSECFILT", "%d", 1, &catalog[0].Nsecfilt)) catalog[0].Nsecfilt = 0; 67 68 /* predicted file size - for double checking data validity */ 69 size = catalog[0].header.size; 70 ssize = sizeof (Average); 71 size += ssize * catalog[0].Naverage; 72 ssize = sizeof (Measure); 73 size += ssize * catalog[0].Nmeasure; 74 ssize = sizeof (Missing); 75 size += ssize * catalog[0].Nmissing; 76 ssize = sizeof (SecFilt); 77 size += ssize * catalog[0].Nsecfilt * catalog[0].Naverage; 78 79 /* check that file size makes sense */ 80 if (stat (catalog[0].filename, &filestatus) == -1) { 81 if (VERBOSE) fprintf (stderr, "failed to get status of catalog\n"); 82 return (FALSE); 83 } 84 if (size > filestatus.st_size) { 85 if (VERBOSE) { 86 fprintf (stderr, "star catalog has inconsistent size\n"); 87 ssize = sizeof (Average); 88 fprintf (stderr, "average: %d = %d bytes\n", catalog[0].Naverage, catalog[0].Naverage*ssize); 89 ssize = sizeof (Measure); 90 fprintf (stderr, "measure: %d = %d bytes\n", catalog[0].Nmeasure, catalog[0].Nmeasure*ssize); 91 ssize = sizeof (Missing); 92 fprintf (stderr, "missing: %d = %d bytes\n", catalog[0].Nmissing, catalog[0].Nmissing*ssize); 93 ssize = sizeof (SecFilt); 94 fprintf (stderr, "secfilt: %d = %d bytes\n", catalog[0].Nsecfilt, catalog[0].Nsecfilt*catalog[0].Naverage*ssize); 95 fprintf (stderr, "expect: %d, found: %d\n", size, (int)filestatus.st_size); 96 } 97 return (FALSE); 98 } 99 if (size < filestatus.st_size) { 100 if (VERBOSE) fprintf (stderr, "warning: file larger than expected\n"); 101 } 102 103 if (catalog[0].Naverage == 0) { 104 if (VERBOSE) fprintf (stderr, "no stars yet in catalog %s\n", catalog[0].filename); 65 if (!strcmp (catalog[0].catmode, "MEF")) { 66 save_catalog_mef (catalog, VERBOSE); 105 67 return (TRUE); 106 68 } 107 69 108 if (mode & LOAD_AVES) { 109 ALLOCATE (catalog[0].average, Average, MAX (catalog[0].Naverage, 1)); 110 Nitems = catalog[0].Naverage; 111 nitems = Fread (catalog[0].average, sizeof(Average), Nitems, f, "average"); 112 if (nitems != Nitems) { 113 if (VERBOSE) fprintf (stderr, "failed to read averages from catalog file %s (%d vs %d)\n", catalog[0].filename, nitems, Nitems); 114 return (FALSE); 115 } 116 } else { 117 /* skip over averages */ 118 fseek (f, catalog[0].Naverage * sizeof(Average), SEEK_CUR); 119 } 120 121 if (mode & LOAD_MEAS) { 122 ALLOCATE (catalog[0].measure, Measure, MAX (catalog[0].Nmeasure, 1)); 123 Nitems = catalog[0].Nmeasure; 124 nitems = Fread (catalog[0].measure, sizeof(Measure), Nitems, f, "measure"); 125 if (nitems != Nitems) { 126 if (VERBOSE) fprintf (stderr, "failed to read measures from catalog file %s (%d vs %d)\n", catalog[0].filename, nitems, Nitems); 127 return (FALSE); 128 } 129 } else { 130 /* skip over measures */ 131 fseek (f, catalog[0].Nmeasure * sizeof(Measure), SEEK_CUR); 132 } 133 134 if (mode & LOAD_MISS) { 135 /* read missing */ 136 ALLOCATE (catalog[0].missing, Missing, MAX (catalog[0].Nmissing, 1)); 137 Nitems = catalog[0].Nmissing; 138 nitems = Fread (catalog[0].missing, sizeof(Missing), Nitems, f, "missing"); 139 if (nitems != Nitems) { 140 if (VERBOSE) fprintf (stderr, "failed to read missing from catalog file %s (%d vs %d)\n", catalog[0].filename, nitems, Nitems); 141 return (FALSE); 142 } 143 } else { 144 /* skip over missings */ 145 fseek (f, catalog[0].Nmissing * sizeof(Missing), SEEK_CUR); 146 } 147 148 if (mode & LOAD_SECF) { 149 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt; 150 ALLOCATE (catalog[0].secfilt, SecFilt, MAX (Nitems, 1)); 151 nitems = Fread (catalog[0].secfilt, sizeof(SecFilt), Nitems, f, "secfilt"); 152 if (nitems != Nitems) { 153 if (VERBOSE) fprintf (stderr, "failed to read secondary filters from catalog file %s (%d vs %d)\n", catalog[0].filename, nitems, Nitems); 154 return (FALSE); 155 } 156 } else { 157 /* skip over secfilts */ 158 fseek (f, catalog[0].Naverage * catalog[0].Nsecfilt * sizeof(SecFilt), SEEK_CUR); 159 } 160 161 if (VERBOSE) fprintf (stderr, "read %d stars from catalog file %s (%d measurements, %d missing, %d secondary filters)\n", 162 catalog[0].Naverage, catalog[0].filename, catalog[0].Nmeasure, catalog[0].Nmissing, catalog[0].Nsecfilt); 163 164 /* check data integrity */ 165 if (mode & LOAD_AVES) { 166 for (i = Nmeas = Nmiss = 0; i < catalog[0].Naverage; i++) { 167 Nmeas += catalog[0].average[i].Nm; 168 Nmiss += catalog[0].average[i].Nn; 169 } 170 if ((Nmeas != catalog[0].Nmeasure) || (Nmiss != catalog[0].Nmissing)) { 171 if (VERBOSE) { 172 fprintf (stderr, "****** data in catalog %s is corrupt, sums don't check\n", catalog[0].filename); 173 fprintf (stderr, "****** Nmeas: %d, %d\n", Nmeas, catalog[0].Nmeasure); 174 fprintf (stderr, "****** Nmiss: %d, %d\n", Nmiss, catalog[0].Nmissing); 175 } 176 return (FALSE); 177 } 178 } 179 return (TRUE); 70 return (FALSE); 180 71 } 181 72 182 /* this is not robust: an error will not return us to the original 183 state. But, it is faster: only limited data written to disk? * 73 /* 74 mode : items to read (LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF) 75 format : what structure on disk (INTERNAL, ELIXIR, LONEOS, PANSTARRS) 76 style : raw, mef, split, mysql 184 77 */ 185 186 int save_catalog (Catalog *catalog, char VERBOSE) {187 188 int Nitems, nitems;189 FILE *f;190 191 if (catalog[0].Naverage == 0) {192 if (VERBOSE) fprintf (stderr, "no stars in catalog, skipping\n");193 return (TRUE);194 }195 196 /* make sure header is consistent with data */197 fits_modify (&catalog[0].header, "NSTARS", "%d", 1, catalog[0].Naverage);198 fits_modify (&catalog[0].header, "NMEAS", "%d", 1, catalog[0].Nmeasure);199 fits_modify (&catalog[0].header, "NMISS", "%d", 1, catalog[0].Nmissing);200 fits_modify (&catalog[0].header, "NSECFILT", "%d", 1, catalog[0].Nsecfilt);201 fits_modify (&catalog[0].header, "NEWMEAS", "%t", 1, TRUE);202 fits_modify (&catalog[0].header, "NEWAVES", "%t", 1, TRUE);203 fits_modify (&catalog[0].header, "NEWSECF", "%t", 1, TRUE);204 205 f = catalog[0].f;206 /* rewind file pointers and truncate */207 fseek (f, 0, SEEK_SET);208 ftruncate (fileno (catalog[0].f), 0);209 210 nitems = Fwrite (catalog[0].header.buffer, 1, catalog[0].header.size, f, "char");211 if (nitems != catalog[0].header.size) {212 if (VERBOSE) fprintf (stderr, "failed to write header\n");213 return (FALSE);214 }215 216 Nitems = catalog[0].Naverage;217 nitems = Fwrite (catalog[0].average, sizeof(Average), Nitems, f, "average");218 if (nitems != Nitems) {219 if (VERBOSE) fprintf (stderr, "failed to write catalog file aves %s\n", catalog[0].filename);220 return (FALSE);221 }222 223 Nitems = catalog[0].Nmeasure;224 nitems = Fwrite (catalog[0].measure, sizeof(Measure), Nitems, f, "measure");225 if (nitems != Nitems) {226 if (VERBOSE) fprintf (stderr, "failed to write catalog file meas %s\n", catalog[0].filename);227 return (FALSE);228 }229 230 Nitems = catalog[0].Nmissing;231 nitems = Fwrite (catalog[0].missing, sizeof(Missing), Nitems, f, "missing");232 if (nitems != Nitems) {233 if (VERBOSE) fprintf (stderr, "failed to write catalog file miss %s\n", catalog[0].filename);234 return (FALSE);235 }236 237 Nitems = catalog[0].Naverage * catalog[0].Nsecfilt;238 nitems = Fwrite (catalog[0].secfilt, sizeof(SecFilt), Nitems, f, "secfilt");239 if (nitems != Nitems) {240 if (VERBOSE) fprintf (stderr, "failed to write catalog file secondary filters %s\n", catalog[0].filename);241 return (FALSE);242 }243 244 return (TRUE);245 246 }247
Note:
See TracChangeset
for help on using the changeset viewer.
