#include #include #include static PyObject *hildebrand_sekhon(PyObject *self, PyObject *args); static PyMethodDef extensionsMethods[] = { { "hildebrand_sekhon", (PyCFunction)hildebrand_sekhon, METH_VARARGS, "get noise with" }, { NULL, NULL, 0, NULL } }; PyMODINIT_FUNC initcSchain() { Py_InitModule("cSchain", extensionsMethods); import_array(); } static PyObject *hildebrand_sekhon(PyObject *self, PyObject *args) { /* Do your stuff here. */ double navg; PyObject *data_obj, *data_array; if (!PyArg_ParseTuple(args, "Od", &data_obj, &navg)) return NULL; data_array = PyArray_FROM_OTF(data_obj, NPY_FLOAT64, NPY_IN_ARRAY); if (data_array == NULL) { Py_XDECREF(data_array); Py_XDECREF(data_obj); return NULL; } double *sortdata = (double*)PyArray_DATA(data_array); int lenOfData = (int)PyArray_SIZE(data_array) ; double nums_min = lenOfData*0.2; if (nums_min <= 5) nums_min = 5; double sump = 0; double sumq = 0; int j = 0; int cont = 1; double rtest = 0; while ((cont == 1) && (j < lenOfData)) { sump = sump + sortdata[j]; sumq = sumq + pow(sortdata[j], 2); if (j > nums_min) { rtest = (double)j/(j-1) + 1/navg; if ((sumq*j) > (rtest*pow(sump, 2))) { j = j - 1; sump = sump - sortdata[j]; sumq = sumq - pow(sortdata[j],2); cont = 0; } } j = j + 1; } double lnoise = sump / j; Py_DECREF(data_array); return Py_BuildValue("d", lnoise); }