Changeset 37445
- Timestamp:
- Sep 29, 2014, 8:41:28 AM (12 years ago)
- Location:
- branches/eam_branches/ipp-20140904/Ohana/src/libdvo
- Files:
-
- 6 edited
-
Makefile (modified) (1 diff)
-
include/libdvo_astro.h (modified) (3 diffs)
-
src/AstromOffsetMapIO.c (modified) (6 diffs)
-
src/AstromOffsetMapOps.c (modified) (8 diffs)
-
src/astrom_maps.c (modified) (1 diff)
-
src/mosaic_astrom.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20140904/Ohana/src/libdvo/Makefile
r37386 r37445 88 88 $(SRC)/AstromOffsetMapIO.$(ARCH).o \ 89 89 $(SRC)/AstromOffsetMapOps.$(ARCH).o \ 90 $(SRC)/AstromOffsetMapUtils.$(ARCH).o \ 90 91 $(SRC)/dvo_set_skyregion.$(ARCH).o \ 91 92 $(SRC)/dvo_set_catdir.$(ARCH).o \ -
branches/eam_branches/ipp-20140904/Ohana/src/libdvo/include/libdvo_astro.h
r37421 r37445 57 57 float **dXv; 58 58 float **dYv; 59 unsigned int ID;59 unsigned int tableID; 60 60 unsigned int imageID; 61 61 } AstromOffsetMap; … … 63 63 typedef struct { 64 64 int Nmap; 65 AstromOffsetMap * map;65 AstromOffsetMap **map; 66 66 int *IDtoSeq; 67 int MaxID; 67 int MaxImageID; 68 int MaxTableID; 68 69 } AstromOffsetTable; 69 70 … … 164 165 int AstromOffsetMapFit (AstromOffsetMap *map, float *x, float *y, float *f, int Npts, int xdir); 165 166 167 /* in AstromOffsetMapUtils.c */ 168 int AstromOffsetTableNewMap (AstromOffsetTable *table, int order, Image *image); 169 int AstromOffsetTableMatchChips (Image *images, off_t Nimages, AstromOffsetTable *table); 170 AstromOffsetTable *AstromOffsetTableInit(); 171 166 172 # endif -
branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/AstromOffsetMapIO.c
r37389 r37445 1 1 # include "dvo.h" 2 3 /* AstromOffsetMap is the map of Astrometry Offsets for non-polynomial astrometric4 * corrections for each chip.5 */6 2 7 3 AstromOffsetTable *AstromOffsetMapLoad (char *filename, int VERBOSE) { … … 49 45 } 50 46 51 // convert the disk table format to internal format: 47 // AstromOffsetMap_Disk_6x6 *map_disk is an external format stored as an array of maps. 48 // Convert the disk array of maps to then internal format in a rich structure: 52 49 AstromOffsetTable *table = AstromOffsetMapToTable (map_disk, Nmap); 53 50 free (map_disk); … … 77 74 gfits_create_matrix (&header, &matrix); 78 75 76 // AstromOffsetMap_Disk_6x6 *map_disk is an external format stored as an array of maps. 77 // Convert the internal format in a rich structure into a disk array of maps. 79 78 AstromOffsetMap_Disk_6x6 *map_disk = AstromOffsetTableToMap (table, &Nmap); 80 79 … … 105 104 106 105 table->Nmap = Nmap; 107 ALLOCATE (table->map, AstromOffsetMap , Nmap);106 ALLOCATE (table->map, AstromOffsetMap *, Nmap); 108 107 109 108 // find the max value of imageID 110 int MaxID = 0; 109 int MaxTableID = 0; 110 int MaxImageID = 0; 111 111 for (i = 0; i < Nmap; i++) { 112 MaxID = MAX(map_disk[i].imageID, MaxID); 112 MaxTableID = MAX(map_disk[i].tableID, MaxTableID); 113 MaxImageID = MAX(map_disk[i].imageID, MaxImageID); 113 114 } 114 MaxID ++; // we want the outer bound, not the last value 115 table->MaxTableID = MaxTableID; 116 table->MaxImageID = MaxImageID; 115 117 116 118 // generate the index and init values to -1 117 ALLOCATE (table->IDtoSeq, int, MaxI D);118 for (i = 0; i < MaxID; i++) {119 ALLOCATE (table->IDtoSeq, int, MaxImageID + 1); 120 for (i = 0; i <= MaxImageID; i++) { 119 121 table->IDtoSeq[i] = -1; 120 122 } 121 table->MaxID = MaxID - 1;122 123 123 124 // assign the ID values 124 125 for (i = 0; i < Nmap; i++) { 125 int I D = map_disk[i].imageID;126 myAssert (table->IDtoSeq[I D] == -1, "oops, duplicate image IDs");127 table->IDtoSeq[I D] = i;126 int ImageID = map_disk[i].imageID; 127 myAssert (table->IDtoSeq[ImageID] == -1, "oops, duplicate image IDs"); 128 table->IDtoSeq[ImageID] = i; 128 129 } 129 130 … … 131 132 // full 6x6, saving some memory while doing the analysis) 132 133 for (i = 0; i < Nmap; i++) { 133 table->map[i].Nx = map_disk[i].Nx; 134 table->map[i].Ny = map_disk[i].Ny; 135 table->map[i].ID = map_disk[i].ID; 136 table->map[i].imageID = map_disk[i].imageID; 134 ALLOCATE (table->map[i], AstromOffsetMap, 1); 135 136 table->map[i][0].Nx = map_disk[i].Nx; 137 table->map[i][0].Ny = map_disk[i].Ny; 138 table->map[i][0].tableID = map_disk[i].tableID; 139 table->map[i][0].imageID = map_disk[i].imageID; 137 140 138 141 // STORE THESE VALUES? 139 table->map[i] .dY = map_disk[i].dX;140 table->map[i] .dX = map_disk[i].dY;142 table->map[i][0].dY = map_disk[i].dX; 143 table->map[i][0].dX = map_disk[i].dY; 141 144 142 ALLOCATE (table->map[i] .dXv, float *, map_disk[i].Nx);143 ALLOCATE (table->map[i] .dYv, float *, map_disk[i].Nx);145 ALLOCATE (table->map[i][0].dXv, float *, map_disk[i].Nx); 146 ALLOCATE (table->map[i][0].dYv, float *, map_disk[i].Nx); 144 147 145 148 for (j = 0; j < map_disk[i].Nx; j++) { 146 ALLOCATE (table->map[i] .dXv[j], float, map_disk[i].Ny);147 ALLOCATE (table->map[i] .dYv[j], float, map_disk[i].Ny);149 ALLOCATE (table->map[i][0].dXv[j], float, map_disk[i].Ny); 150 ALLOCATE (table->map[i][0].dYv[j], float, map_disk[i].Ny); 148 151 149 152 for (k = 0; k < map_disk[i].Ny; k++) { 150 table->map[i] .dXv[j][k] = map_disk[i].dXv[j][k];151 table->map[i] .dYv[j][k] = map_disk[i].dYv[j][k];153 table->map[i][0].dXv[j][k] = map_disk[i].dXv[j][k]; 154 table->map[i][0].dYv[j][k] = map_disk[i].dYv[j][k]; 152 155 } 153 156 } 154 157 } 155 156 158 return table; 157 159 } … … 167 169 // full 6x6, saving some memory while doing the analysis) 168 170 for (i = 0; i < table->Nmap; i++) { 169 map_disk[i].Nx = table->map[i] .Nx;170 map_disk[i].Ny = table->map[i] .Ny;171 map_disk[i]. ID = table->map[i].ID;172 map_disk[i].imageID = table->map[i] .imageID;171 map_disk[i].Nx = table->map[i][0].Nx; 172 map_disk[i].Ny = table->map[i][0].Ny; 173 map_disk[i].tableID = table->map[i][0].tableID; 174 map_disk[i].imageID = table->map[i][0].imageID; 173 175 174 map_disk[i].dX = table->map[i] .dX;175 map_disk[i].dY = table->map[i] .dY;176 map_disk[i].dX = table->map[i][0].dX; 177 map_disk[i].dY = table->map[i][0].dY; 176 178 177 179 for (j = 0; j < map_disk[i].Nx; j++) { 178 180 for (k = 0; k < map_disk[i].Ny; k++) { 179 map_disk[i].dXv[j][k] = table->map[i] .dXv[j][k];180 map_disk[i].dYv[j][k] = table->map[i] .dYv[j][k];181 map_disk[i].dXv[j][k] = table->map[i][0].dXv[j][k]; 182 map_disk[i].dYv[j][k] = table->map[i][0].dYv[j][k]; 181 183 } 182 184 } -
branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/AstromOffsetMapOps.c
r37389 r37445 17 17 float ymo = y * map->dY - 0.5; 18 18 int ymi = floor(ymo); 19 ymi = MAX(0,MIN(map->Ny - 1, ymi)); // force range of ymi to be 0,Ny-119 ymi = MAX(0,MIN(map->Ny - 2, ymi)); // force range of ymi to be 0,Ny-2 (Ny must be > 1) 20 20 21 21 float ymf = ymo - ymi; … … 29 29 float xmo = x * map->dX - 0.5; 30 30 int xmi = floor(xmo); 31 xmi = MAX(0,MIN(map->Nx - 1, xmi)); // force range of ymi to be 0,Ny-131 xmi = MAX(0,MIN(map->Nx - 2, xmi)); // force range of ymi to be 0,Nx-2 (Nx must be > 1) 32 32 33 33 float xmf = xmo - xmi; … … 41 41 float xmo = x * map->dX - 0.5; 42 42 int xmi = floor(xmo); 43 xmi = MAX(0,MIN(map->Nx - 1, xmi)); // force range of ymi to be 0,Ny-143 xmi = MAX(0,MIN(map->Nx - 2, xmi)); // force range of ymi to be 0,Nx-1 44 44 float xmf = xmo - xmi; 45 45 46 46 float ymo = y * map->dY - 0.5; 47 47 int ymi = floor(ymo); 48 ymi = MAX(0,MIN(map->Ny - 1, ymi)); // force range of ymi to be 0,Ny-148 ymi = MAX(0,MIN(map->Ny - 2, ymi)); // force range of ymi to be 0,Ny-2 49 49 float ymf = ymo - ymi; 50 50 … … 113 113 for (i = 0; i < Nx*Ny; i++) { 114 114 ALLOCATE (A[i], float, Nx*Ny); 115 memset (A[i], 0, sizeof(float)*Nx*Ny); 115 116 ALLOCATE (B[i], float, 1); 117 memset (B[i], 0, sizeof(float)); 116 118 } 117 119 … … 120 122 // for (int n = 1; n < Nx - 1; n++) { 121 123 // for (int m = 1; m < Ny - 1; m++) { 124 125 if (0) { 126 FILE *fd = fopen ("stats.dump.txt", "w"); 127 for (i = 0; i < Npts; i++) { 128 fprintf (fd, "%d %f %f %f\n", i, x[i], y[i], f[i]); 129 } 130 fclose(fd); 131 } 122 132 123 133 // float Total = 0.0; … … 267 277 int J = (ix + jx) + Nx * (iy + jy); 268 278 A[J][I] = sA[jx][jy]; 269 // fprintf (stderr, "A %d %d (%d %d : %d %d): %f\n", I, J, n, m, n + jn, m + jm, sA[jn][jm]); 279 if (abs(A[J][I]) > 1000) { 280 fprintf (stderr, "A %d %d (%d %d : %d %d): %f\n", I, J, ix, iy, ix + jx, iy + jy, sA[jx][jy]); 281 } 270 282 // Sum += sA[jn][jm]; 271 283 } … … 283 295 for (i = 0; i < Nx*Ny; i++) { 284 296 Empty[i] = 0; 285 if ( A[i][i] == 0.0) {297 if (fabs(A[i][i]) < 1.e-2) { 286 298 Empty[i] = 1; 287 299 for (j = 0; j < Nx*Ny; j++) { … … 292 304 B[i][0] = 0.0; 293 305 } 306 } 307 308 if (0) { 309 FILE *fd = fopen ("matrix.dat", "w"); 310 for (i = 0; i < Nx*Ny; i++) { 311 for (j = 0; j < Nx*Ny; j++) { 312 fprintf (fd, "%10.4f ", A[i][j]); 313 } 314 fprintf (fd, " : %10.4f\n", B[i][0]); 315 } 316 fclose (fd); 294 317 } 295 318 -
branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/astrom_maps.c
r37438 r37445 24 24 } 25 25 26 int 26 int AstromOffsetTableNewMap (AstromOffsetTable *table, int order, Image *image) { 27 28 int Nmap = table->Nmap; 29 30 table->Nmap++; 31 REALLOCATE (table->map, AstromOffsetMap, table->Nmap); 32 33 int Nx = order; 34 int Ny = order; 35 36 if (image->imageID > table->MaxID) { 37 int oldMaxID = table->MaxID; 38 table->MaxID = image->imageID; 39 REALLOCATE (table->IDtoSeq, int, table->MaxID + 1); 40 for (i = oldMaxID + 1; i < table->MaxID + 1; i++) { 41 table->IDtoSeq[i] = -1; 42 } 43 } 44 myAssert (table->IDtoSeq[image->imageID] == -1, "table IDtoSeq not initiazed or image collision"); 45 table->IDtoSeq[image->imageID] = Nmap; 46 47 table->map[Nmap].Nx = Nx; 48 table->map[Nmap].Ny = Ny; 49 table->map[Nmap].ID = table->maxID; table->maxID ++; 50 table->map[Nmap].imageID = image->imageID; 51 52 table->map[Nmap].dX = Nx / image->Nx; 53 table->map[Nmap].dY = Ny / image->Ny; 54 55 ALLOCATE (table->map[Nmap].dXv, float *, Nx); 56 ALLOCATE (table->map[Nmap].dYv, float *, Nx); 57 58 for (j = 0; Nx; j++) { 59 ALLOCATE (table->map[i].dXv[j], float, Ny); 60 ALLOCATE (table->map[i].dYv[j], float, Ny); 61 62 for (k = 0; k < Ny; k++) { 63 table->map[i].dXv[j][k] = 0.0; 64 table->map[i].dYv[j][k] = 0.0; 65 } 66 } 67 image[0].coords.offsetMap = &table->map[Nmap]; 68 return TRUE; 69 } 70 -
branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/mosaic_astrom.c
r37377 r37445 207 207 # endif 208 208 209 // XXX Note that this links (images[i].coords.mosaic, images[i].parent) will break 210 // if we reallocate the Image array in the middle of program 209 211 int BuildChipMatch (Image *images, off_t Nimages) { 210 212
Note:
See TracChangeset
for help on using the changeset viewer.
