Imports
from libcpp.vector cimport vector from libcpp cimport bool from libc.time cimport time_t, ctime from libcpp.string cimport string cimport numpy as np import numpy as np
Useful ctypedefs
cdef extern from "<stdint.h>" nogil: ctypedef signed char int8_t ctypedef signed short int16_t ctypedef signed int int32_t ctypedef signed long int64_t ctypedef unsigned char uint8_t ctypedef unsigned short uint16_t ctypedef unsigned int uint32_t ctypedef unsigned long uint64_t ctypedef unsigned shape_t ctypedef uint16_t mask_t ctypedef uint16_t extrim_t ctypedef uint16_t pixstatus_t ctypedef uint32_t conmap_t #------------------------------ ctypedef fused nptype2d : np.ndarray[np.float64_t, ndim=2, mode="c"] np.ndarray[np.float32_t, ndim=2, mode="c"] np.ndarray[np.int16_t, ndim=2, mode="c"] np.ndarray[np.int32_t, ndim=2, mode="c"] np.ndarray[np.int64_t, ndim=2, mode="c"] np.ndarray[np.uint16_t, ndim=2, mode="c"] np.ndarray[np.uint32_t, ndim=2, mode="c"] np.ndarray[np.uint64_t, ndim=2, mode="c"]
Cython class attribute declaration and usage
cdef class image_algo : cdef uint16_t rows, cols def image_shape(self) : shape = (self.rows, self.cols)
C++ wrapper for python
Example of regular C++ class wrapper
cdef extern from "psalgos/PeakFinderAlgos.h" namespace "psalgos": cdef cppclass PeakFinderAlgos: #float m_r0 #float m_dr #size_t m_rank #size_t m_pixgrp_max_size #size_t m_img_size #float m_nsigm PeakFinderAlgos(const size_t& seg, const unsigned& pbits) except + void setPeakSelectionPars(const float& npix_min ,const float& npix_max ,const float& amax_thr ,const float& atot_thr ,const float& son_min) void peakFinderV3r3[T](const T *data ,const mask_t *mask ,const size_t& rows ,const size_t& cols ,const size_t& rank ,const double& r0 ,const double& dr ,const double& nsigm) void printParameters(); #------------------------------ cdef class peak_finder_algos : """ Python wrapper for C++ class. """ cdef PeakFinderAlgos* cptr # holds a C++ pointer to instance cdef uint16_t rows, cols def __cinit__(self, seg=0, pbits=0): #print "In peak_finder_algos.__cinit__" self.cptr = new PeakFinderAlgos(seg, pbits) def __dealloc__(self): #print "In peak_finder_algos.__dealloc__" del self.cptr def set_peak_selection_parameters(self\ ,const float& npix_min\ ,const float& npix_max\ ,const float& amax_thr\ ,const float& atot_thr\ ,const float& son_min) : self.cptr.setPeakSelectionPars(npix_min, npix_max, amax_thr, atot_thr, son_min) def print_attributes(self) : self.cptr.printParameters() def peak_finder_v3r3_d2(self\ ,nptype2d data\ ,np.ndarray[mask_t, ndim=2, mode="c"] mask\ ,const size_t& rank\ ,const double& r0\ ,const double& dr\ ,const double& nsigm) : self.cptr.peakFinderV3r3(&data[0,0], &mask[0,0], data.shape[0], data.shape[1], rank, r0, dr, nsigm) self.rows = data.shape[0] self.cols = data.shape[1] return self.list_of_peaks_selected() def list_of_peaks_selected(self) : cdef vector[Peak] peaks = self.cptr.vectorOfPeaksSelected() return [py_peak.factory(p) for p in peaks] def list_of_peaks(self) : cdef vector[Peak] peaks = self.cptr.vectorOfPeaks() return [py_peak.factory(p) for p in peaks]
Overview
Content Tools