Python wrapper for running instances of trisurf-ng
Samo Penic
2018-05-06 a2f05726379d1440f8709eb9b81913e1ca72f771
trisurf/wrapper.py
@@ -199,9 +199,88 @@
ts_cluster._fields_=[('nvtx',c_uint),('idx',c_uint),('vtx', POINTER(POINTER(ts_vertex)))]
class ts_cluster_list(Structure):
   _fields_=[('n',c_uint),('poly',POINTER(POINTER(ts_cluster)))]
   _fields_=[('n',c_uint),('cluster',POINTER(POINTER(ts_cluster)))]
ts=CDLL('libtrisurf.so')
#function call wrappers
def create_vesicle_from_tape(tape):
   """Using pointer for tape, it creates a vesicle, returning pointer to it."""
   ts.create_vesicle_from_tape.argtype=POINTER(ts_tape)
   ts.create_vesicle_from_tape.restype=POINTER(ts_vesicle)
   return ts.create_vesicle_from_tape(tape)
def parsetape(filename='tape'):
   """Loads tape with  filename (if not given it defaults to 'tape'). It returns a pointer to structure for tape"""
   ts.parsetape.restype=POINTER(ts_tape)
   ts.parsetape.argtype=[c_char_p]
   return ts.parsetape(filename.encode('ascii'))
def parseDump(filename):
   """Loads a vtu file with 'filename' and creates a vesicle returning pointer to it"""
   ts.parseDump.argtype=[c_char_p]
   ts.parseDump.restype=POINTER(ts_vesicle)
   vesicle=ts.parseDump(filename.encode('ascii'))
   return vesicle
def single_timestep(vesicle):
   """Makes a single timestep in simulations. Returns a tuple of vmsrt and bfrt (vertex move success rate and bond flip success rate)"""
   ts.single_timestep.argtype=[POINTER(ts_vesicle),POINTER(c_double),POINTER(c_double)]
   vmsrt=c_double(0.0)
   bfsrt=c_double(0.0)
   ts.single_timestep(vesicle,byref(vmsrt),byref(bfsrt))
   return (vmsrt.value, bfsrt.value)
def write_vertex_xml_file(vesicle,timestep_no=0):
   """Writes a vesicle into file with filename 'timestep_XXXXXX.vtu', where XXXXXX is a leading zeroed number given with timestep_no parameter (defaults to 0 if not given"""
   ts.write_vertex_xml_file.argtypes=[POINTER(ts_vesicle),c_int]
   ts.write_vertex_xml_file(vesicle,c_int(timestep_no))
def vesicle_free(vesicle):
   """Free memory of the whole vesicle"""
   ts.vesicle_free.argtype=[POINTER(ts_vesicle)]
   ts.vesicle_free(vesicle)
def vesicle_volume(vesicle):
   ts.vesicle_volume.argtype=[POINTER(ts_vesicle)]
   ts.vesicle_volume(vesicle)
def vesicle_area(vesicle):
   ts.vesicle_area.argtype=[POINTER(ts_vesicle)]
   ts.vesicle_area(vesicle)
def gyration_eigen(vesicle):
   ts.gyration_eigen.argtype=[POINTER(ts_vesicle), POINTER(c_double), POINTER(c_double), POINTER(c_double)]
   l1=c_double(0.0)
   l2=c_double(0.0)
   l3=c_double(0.0)
   ts.gyration_eigen(vesicle , byref(l1), byref(l2), byref(l3))
   return (l1.value, l2.value, l3.value)
def vesicle_meancurvature(vesicle):
   ts.vesicle_meancurvature.argtype=[POINTER(ts_vesicle)]
   ts.vesicle_meancurvature.restype=c_double
   return ts.vesicle_meancurvature(vesicle)
def init_cluster_list():
   ts.init_cluster_list.restype=POINTER(ts_cluster_list)
   ret=ts.init_cluster_list()
   return ret
def clusterize_vesicle(vesicle, cluster_list):
   ts.clusterize_vesicle.argtype=[POINTER(ts_vesicle), POINTER(ts_cluster_list)]
   ts.clusterize_vesicle(vesicle, cluster_list)
def cluster_list_free(cluster_list):
   """Free memory of cluster list"""
   ts.cluster_list_free.argtype=[POINTER(ts_cluster_list)]
   ts.cluster_list_free(cluster_list)