Changeset 20936 for trunk/Ohana/src/opihi/dvo/avextract.c
- Timestamp:
- Dec 7, 2008, 3:31:01 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/dvo/avextract.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/dvo/avextract.c
r20819 r20936 6 6 int Nsecfilt, mode, VERBOSE; 7 7 char **cstack, name[1024]; 8 float *values;9 8 void *Signal; 10 9 11 10 Catalog catalog; 11 12 Vector **vec; 13 dbStack *stack; 14 dbField *fields; 15 dbValue *values; 12 16 SkyList *skylist; 13 17 SkyRegionSelection *selection; 14 PhotCode *code;15 Vector **vec;16 dbField *fields;17 dbStack *stack;18 18 19 19 /* defaults */ 20 vec = NULL; 21 stack = NULL; 22 fields = NULL; 23 values = NULL; 20 24 skylist = NULL; 21 25 selection = NULL; 22 code = NULL; 26 23 27 mode = MAG_AVE; 24 fields = NULL;25 stack = NULL;26 28 27 29 if ((N = get_argument (argc, argv, "-h"))) goto help; … … 47 49 // parse the fields to be extracted and returned 48 50 fields = dbCmdlineFields (argc, argv, DVO_TABLE_AVERAGE, &last, &Nfields); 49 if (fields == NULL) return (FALSE); 51 if (fields == NULL) goto escape; 52 if (Nfields == 0) { 53 FreeSkyRegionSelection (selection); 54 dbFreeFields (fields, Nfields); 55 dvo_catalog_free (&catalog); 56 goto help; 57 } 50 58 51 59 // examine line for 'where' or 'match to'. 'match to' is forbidden … … 66 74 Nreturn = Nfields; 67 75 if (!dbCheckStack (stack, Nstack, DVO_TABLE_AVERAGE, &fields, &Nfields)) goto escape; 68 // XXX handle errors69 76 70 77 /* load region corresponding to selection above */ … … 72 79 73 80 /* create output storage vectors */ 74 ALLOCATE (values, float, Nfields);81 ALLOCATE (values, dbValue, Nfields); 75 82 ALLOCATE (vec, Vector *, Nreturn); 76 83 for (i = 0; i < Nreturn; i++) { … … 81 88 } 82 89 if ((vec[i] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) goto escape; 90 ResetVector (vec[i], fields[i].type, NPTS); 83 91 } 84 92 … … 109 117 110 118 m = catalog.average[j].measureOffset; 111 dbExtractAveragesInit (); // reset counters for saved fields 119 120 // reset counters for saved fields, extract fields 121 dbExtractAveragesInit (); 112 122 for (n = 0; n < Nfields; n++) { 113 123 values[n] = dbExtractAverages (&catalog.average[j], &catalog.secfilt[j*Nsecfilt], &catalog.measure[m], &fields[n]); 114 124 } 125 115 126 // test the conditional statement 116 127 if (!dbBooleanCond (stack, Nstack, values)) continue; 117 128 for (n = 0; n < Nreturn; n++) { 118 vec[n][0].elements[Npts] = values[n]; 129 if (vec[n][0].type == OPIHI_FLT) { 130 vec[n][0].elements.Flt[Npts] = values[n].Flt; 131 } else { 132 vec[n][0].elements.Int[Npts] = values[n].Int; 133 } 119 134 } 120 135 Npts++; … … 122 137 NPTS += 2000; 123 138 for (n = 0; n < Nreturn; n++) { 124 REALLOCATE (vec[n][0].elements, float, NPTS); 139 if (vec[n][0].type == OPIHI_FLT) { 140 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, NPTS); 141 } else { 142 REALLOCATE (vec[n][0].elements.Int, opihi_int, NPTS); 143 } 125 144 } 126 145 } … … 132 151 for (n = 0; n < Nreturn; n++) { 133 152 vec[n][0].Nelements = Npts; 134 REALLOCATE (vec[n][0].elements, float, MAX(1,Npts)); 135 } 136 153 if (vec[n][0].type == OPIHI_FLT) { 154 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, MAX(1,Npts)); 155 } else { 156 REALLOCATE (vec[n][0].elements.Int, opihi_int, MAX(1,Npts)); 157 } 158 } 159 160 if (vec) free (vec); 161 if (values) free (values); 137 162 dbFreeFields (fields, Nfields); 138 163 dbFreeStack (stack, Nstack); 139 free (stack);164 if (stack) free (stack); 140 165 SkyListFree (skylist); 141 166 FreeSkyRegionSelection (selection); … … 143 168 144 169 escape: 170 if (vec) free (vec); 171 if (values) free (values); 145 172 dbFreeFields (fields, Nfields); 146 173 dbFreeStack (stack, Nstack); 147 free (stack);174 if (stack) free (stack); 148 175 SkyListFree (skylist); 149 176 FreeSkyRegionSelection (selection);
Note:
See TracChangeset
for help on using the changeset viewer.
