Repository navigation
Redesign EITForward(mesh, protocol) API #46
Description
Activity
Great job,
that way the api can be really more clear.
I think using dataclass can definetly bring improvement and we could do some tests on the data directly which and remove the method like check* in the dataclass directly
about the protocol I think only ex_mat and meas_mat (so that multiple type of meas_patttern can be used in future) that way we do not need the meas_pattern method in EITforward () (which shoul only compute fwd results, jac. bp)
I will try to implement both dataclass with corresponding wrapper!
@dataclass class PyEITMesh node element perm el_pos ref_el ... @dataclass class PyEITProtocol ex_mat meas_mat ...
In this way, we may need a wrapper to convert
ex_mat,step, andparserto generate ameas_mat, (which isvoltage_meter(), orbuild_meas_pattern()).About dataset over dictionary. We generate a mesh object from distmesh or using some exist meshes and write a wrapper to generate the
mesh_obj. In order to use this mesh dataclass, do we need to redefine these dataclass in fem.py or base.py?- pinned this issue
on May 8, 2022 see PR #47
see PR #47
Done, merge to master.
Drop
init=Trueflag #51#88 Inhomogeneous measurement protocol, redefined
meas_matPreviously,
meas_matis a 3-dimensional ndarray which represents the excitation id and the differential pairs[n, m]. What if we want to combine the differential pairs ofadjacent(16 elctrodes, 13 measurements per exc) andopposite(16 electrodes, 12 measurements per exc) excitations?This PR implements a vstacked version os
meas_mat. Nowmeas_matis a 2-dimensional array, of sizen_meas x 3. Each column represents[n, m, exc_id].The benefit of using this type of measurement matrix is that:
- it allows inhomogeneous excitation patterns of different number of measurements. Moreover, you could write your own customized measurement [n, m, exc_ids] easily.
- it allows fast implementation of
subtract_row_vectorizedandsmear_ndand a much cleaner implementation of calculatingjac, see the code accordingly.
The latest dev branch is working on a redesign (not backward compatible) version of
EITForwardclass. This new design isolate,mesh(includingpts: coordinates of nodes,tri: the connection of simplices,perm: permittivity,el_pos: electrode positions,ref: reference node),protocol(ex_mat: excitation matrix (Neumann BC only, yet),step: voltage difference electrode,parser: measurement order).For example,
The mesh and protocol can be a dict, or a dataset(#44), if the code block for building these two data structures (mesh, protocol) are intuitive to use, i.e., see the construction code of mesh and protocol in
examples.This new version (maybe 2.0) of
pyeitwill be release based on these two milestones: