00001 #include <stdlib.h>
00002 #include "sadie.h"
00003 #include "chain.h"
00004
00005
00006 void SCALE_CHAIN (
00007 CHAIN *chainmap,
00008 int scale,
00009 CHAIN **scaledChain
00010 ) {
00011 unsigned char code;
00012 unsigned int j, k, prevj, prevk;
00013 unsigned int currj, currk;
00014 int skip;
00015 LIST_NODE *newLnode, *currLnode, **prevLnode;
00016 CHAIN_NODE *newCnode, *currCnode, **prevCnode;
00017
00018
00019 (*scaledChain) = (CHAIN *)malloc(sizeof(CHAIN));
00020
00021
00022 memcpy((char *)&((*scaledChain)->nlin), (char *)&(chainmap->nlin), CHAIN_HEADER_SIZE);
00023 (*scaledChain)->nlin = chainmap->nlin/scale;
00024 (*scaledChain)->npix = chainmap->npix/scale;
00025 (*scaledChain)->list = NULL;
00026 prevLnode = (LIST_NODE **)&((*scaledChain)->list);
00027
00028
00029 currLnode = chainmap->list;
00030 while (currLnode != NULL) {
00031 j = currLnode->startj;
00032 k = currLnode->startk;
00033 prevj = j/scale;
00034 prevk = k/scale;
00035
00036 newLnode = (LIST_NODE *)malloc(sizeof(LIST_NODE));
00037 newLnode->startj = j/scale;
00038 newLnode->startk = k/scale;
00039 newLnode->ring_type = currLnode->ring_type;
00040 newLnode->ring_id = currLnode->ring_id;
00041 newLnode->chain = NULL;
00042 newLnode->next = NULL;
00043 (*prevLnode) = newLnode;
00044 prevLnode = (LIST_NODE **)&(newLnode->next);
00045 prevCnode = (CHAIN_NODE **)&(newLnode->chain);
00046
00047 currCnode = currLnode->chain;
00048 skip = 1;
00049 while (currCnode != NULL) {
00050 CHAIN_COMPUTE_COORDINATES(k, j, currCnode->code, &k, &j);
00051 if (!(skip%scale)) {
00052 currj = j/scale;
00053 currk = k/scale;
00054 CHAIN_COMPUTE_CODE(prevj, prevk, currj, currk, &code);
00055 newCnode = (CHAIN_NODE *)malloc(sizeof(CHAIN_NODE));
00056 newCnode->code = code;
00057 newCnode->valid = currCnode->valid;
00058 newCnode->next = NULL;
00059 (*prevCnode) = newCnode;
00060 prevCnode = (CHAIN_NODE **)&(newCnode->next);
00061
00062 prevj = currj;
00063 prevk = currk;
00064 }
00065
00066 skip++;
00067 currCnode = (CHAIN_NODE *)currCnode->next;
00068 }
00069
00070 currLnode = currLnode->next;
00071 }
00072
00073 }
00074
00075
00076
00077