The coordination module contains functions related to extracting pore coordination numbers.
.. autofunction:: pore2chip.coordination.coordination_nums_3D
Functionality:
- Check for OpenPNM network:
- If pn is not None (i.e., an OpenPNM network is provided), the function extracts the coordination numbers directly from the network using op.models.network.coordination_number(pn).
- This bypasses the image processing step and leverages the existing information in the network.
- Image processing (if no network provided):
- If pn is None, the function assumes img_list contains 3D image data as NumPy arrays.
- It utilizes the porespy library to process the images:
- ps.networks.snow2(img_list, voxel_size=1): This function likely performs segmentation and network extraction from the images.
- voxel_size=1 is assumed to be a unit voxel size (adjust if needed).
- The processed network is then converted to an OpenPNM network using op.io.network_from_porespy(snow_output.network).
- Coordination number calculation:
- Regardless of the input (image or network), the function calculates the coordination number of each pore using:
- op.models.network.coordination_number(pn2): This function calculates the coordination number for each pore in the OpenPNM network pn2.
- Return coordination numbers:
- The function returns the calculated coordination numbers (coordination_nums) as a list.
- This function assumes the porespy and openpnm libraries are installed and imported.
- The specific implementation of ps.networks.snow2 might require further investigation depending on the exact functionality of the PoresPy library.
.. autofunction:: pore2chip.coordination.coordination_nums_2D
Functionality:
- Iterate through image slices:
- The function loops through each image in img_list using a for loop.
- Process individual image:
- Inside the loop, for each image slice (img_list[k]), it extracts a 2D portion using slicing (img_list[k, :, :]).
- ps.networks.snow2(img_slice, voxel_size=1) likely performs segmentation and network extraction specifically for the 2D slice.
- voxel_size=1 is assumed to be a unit voxel size (adjust if needed).
- The processed network information is stored in snow_output.network.
- An OpenPNM network object (pn) is created by converting the PoresPy network using op.io.network_from_porespy(snow_output.network).
- Coordination number calculation:
- The coordination number for each pore in the current image slice's network (pn) is calculated using op.models.network.coordination_number(pn).
- This function from OpenPNM provides the coordination numbers as a list.
- Accumulate coordination numbers:
- The calculated coordination numbers for the current slice (temp_coordination) are appended to the coordination_nums_2D list using np.concatenate.
- This accumulates coordination numbers from all processed slices into a single list.
- Return results:
- After iterating through all images, the function returns the final coordination_nums_2D list containing coordination numbers for all pores across the entire 2D image series.
- This function assumes the porespy and openpnm libraries are installed and imported.
- The specific implementation of ps.networks.snow2 might require further investigation depending on the exact functionality of the PoresPy library.
Note
This project is under active development.