Exemplo n.º 1
0
hd_catalog_t* henry_draper_open(const char* fn) {
    hd_catalog_t* hd = calloc(1, sizeof(hd_catalog_t));
    hd->fn = strdup(fn);
    hd->kd = kdtree_fits_read(hd->fn, NULL, NULL);
    if (!hd->kd) {
        ERROR("Failed to read a kdtree from file %s", hd->fn);
        return NULL;
    }
    return hd;
}
Exemplo n.º 2
0
static PyObject* spherematch_kdtree_open(PyObject* self, PyObject* args) {
    kdtree_t* kd;
    char* fn;
    char* treename = NULL;
    int n;

    n = PyTuple_Size(args);
    if (!((n == 1) || (n == 2))) {
        PyErr_SetString(PyExc_ValueError, "need one or two args: kdtree filename + optionally tree name");
        return NULL;
    }
    if (n == 1) {
        if (!PyArg_ParseTuple(args, "s", &fn)) {
            return NULL;
        }
    } else {
        if (!PyArg_ParseTuple(args, "ss", &fn, &treename)) {
            return NULL;
        }
    }
    kd = kdtree_fits_read(fn, treename, NULL);
    return Py_BuildValue("k", kd);
}
Exemplo n.º 3
0
int main(int argc, char** args) {
    int argchar;
	char* progname = args[0];
	kdtree_t* kd;
	char* fn;
	int printData = 0;
	int treeData = 0;

    while ((argchar = getopt(argc, args, OPTIONS)) != -1)
        switch (argchar) {
		case 'h':
			printHelp(progname);
			exit(-1);
		case 'd':
			printData = 1;
			break;
		case 'n':
			treeData = 1;
			break;
		}

    if (argc - optind == 1) {
		fn = args[optind];
		optind++;
    } else {
		printHelp(progname);
		exit(-1);
	}

	printf("Reading kdtree from file %s ...\n", fn);
	kd = kdtree_fits_read(fn, NULL, NULL);

    printf("Tree name: \"%s\"\n", kd->name);

	printf("Treetype: 0x%x\n", kd->treetype);

	printf("Data type:     %s\n", kdtree_kdtype_to_string(kdtree_datatype(kd)));
	printf("Tree type:     %s\n", kdtree_kdtype_to_string(kdtree_treetype(kd)));
	printf("External type: %s\n", kdtree_kdtype_to_string(kdtree_exttype(kd)));

	printf("N data points:  %i\n", kd->ndata);
	printf("Dimensions:     %i\n", kd->ndim);
	printf("Nodes:          %i\n", kd->nnodes);
	printf("Leaf nodes:     %i\n", kd->nbottom);
	printf("Non-leaf nodes: %i\n", kd->ninterior);
	printf("Tree levels:    %i\n", kd->nlevels);

	printf("LR array:     %s\n", (kd->lr     ? "yes" : "no"));
	printf("Perm array:   %s\n", (kd->perm   ? "yes" : "no"));
	printf("Bounding box: %s\n", (kd->bb.any ? "yes" : "no"));
	printf("Split plane:  %s\n", (kd->split.any ? "yes" : "no"));
	printf("Split dim:    %s\n", (kd->splitdim  ? "yes" : "no"));
	printf("Data:         %s\n", (kd->data.any  ? "yes" : "no"));

	if (kd->minval && kd->maxval) {
		int d;
		printf("Data ranges:\n");
		for (d=0; d<kd->ndim; d++)
			printf("  %i: [%g, %g]\n", d, kd->minval[d], kd->maxval[d]);
	}

	printf("Running kdtree_check...\n");
	if (kdtree_check(kd)) {
		printf("kdtree_check failed.\n");
		exit(-1);
	}

	if (printData) {
		int i, d;
		int dt = kdtree_datatype(kd);
		double data[kd->ndim];
		for (i=0; i<kd->ndata; i++) {
			int iarray;
			kdtree_copy_data_double(kd, i, 1, data);
			printf("data[%i] = %n(", i, &iarray);
			for (d=0; d<kd->ndim; d++)
				printf("%s%g", d?", ":"", data[d]);
			printf(")\n");

			if (treeData) {
				printf("%*s(", iarray, "");
				for (d=0; d<kd->ndim; d++)
					switch (dt) {
					case KDT_DATA_DOUBLE:
						printf("%s%g", (d?", ":""),
							   kd->data.d[kd->ndim * i + d]);
						break;
					case KDT_DATA_FLOAT:
						printf("%s%g", (d?", ":""),
							   kd->data.f[kd->ndim * i + d]);
						break;
					case KDT_DATA_U32:
						printf("%s%u", (d?", ":""),
							   kd->data.u[kd->ndim * i + d]);
						break;
					case KDT_DATA_U16:
						printf("%s%u", (d?", ":""),
							   (unsigned int)kd->data.s[kd->ndim * i + d]);
						break;
					}
				printf(")\n");
			}
		}
	}

	kdtree_fits_close(kd);

	return 0;
}