66 lines
1.3 KiB
Cython
66 lines
1.3 KiB
Cython
from libcpp cimport bool
|
|
import numpy as np
|
|
cimport numpy as np
|
|
|
|
|
|
cdef extern from "loadSimu.hpp" namespace "CosmoTool":
|
|
|
|
cdef cppclass SimuData:
|
|
np.float_t BoxSize
|
|
np.float_t time
|
|
np.float_t Hubble
|
|
|
|
np.float_t Omega_M
|
|
np.float_t Omega_Lambda
|
|
np.int64_t TotalNumParticles
|
|
np.int64_t NumParticles
|
|
np.int64_t *Id
|
|
np.float_t *Pos[3]
|
|
np.float_t *Vel[3]
|
|
int *type
|
|
|
|
cdef const int NEED_GADGET_ID
|
|
cdef const int NEED_POSITION
|
|
cdef const int NEED_VELOCITY
|
|
cdef const int NEED_TYPE
|
|
|
|
cdef extern from "loadGadget.hpp" namespace "CosmoTool":
|
|
|
|
SimuData *loadGadgetMulti(const char *fname, int id, int flags) except +
|
|
|
|
|
|
|
|
cdef class Simulation:
|
|
|
|
cdef float BoxSize
|
|
cdef float Hubble
|
|
cdef list Position
|
|
cdef list Velocities
|
|
|
|
cdef SimuData *data
|
|
|
|
def __cinit__(Simulation self):
|
|
self.data = <SimuData *>0
|
|
|
|
def __dealloc__(Simulation self):
|
|
if self.data != <SimuData *>0:
|
|
del self.data
|
|
|
|
def loadGadget(str filename, int snapshot_id, bool loadPosition = True, bool loadVelocity = True):
|
|
|
|
cdef int flags
|
|
cdef SimuData *data
|
|
cdef Simulation simu
|
|
|
|
flags = 0
|
|
if loadPosition:
|
|
flags |= NEED_POSITION
|
|
if loadVelocity:
|
|
flags |= NEED_VELOCITY
|
|
|
|
data = loadGadgetMulti(filename, snapshot_id, flags)
|
|
|
|
simu = Simulation()
|
|
simu.data = data
|
|
return simu
|