# bundle_of_tubes#

Create a 3D image of a bundle of tubes, in the form of a rectangular plate with randomly sized holes through it.

import matplotlib.pyplot as plt
import numpy as np
import porespy as ps
import inspect
inspect.signature(ps.generators.bundle_of_tubes)

<Signature (shape: List[int], spacing: int, distribution=None, smooth=True)>


## spacing#

Controls how far apart each pore is. Note that this limits the maximum size of each pore since they are prevented from overlapping.

fig, ax = plt.subplots(1, 2, figsize=[8, 4])
np.random.seed(10)

shape = [300, 300]
spacing = 10
im = ps.generators.bundle_of_tubes(shape=shape, spacing=spacing)
ax[0].imshow(im, origin='lower', interpolation='none')
ax[0].axis(False)

spacing = 15
im = ps.generators.bundle_of_tubes(shape=shape, spacing=spacing)
ax[1].imshow(im, origin='lower', interpolation='none')
ax[1].axis(False);


## distribution#

The default size distribution is uniform (i.e. random) with sizes ranging between 3 and spacing - 1. To use a different distribution it can specify using a predefined scipy.stats object. If care is not taken to ensure the distribution only returns values between 3 and spacing - 1 then the value are clipped accordingly.

import scipy.stats as spst
fig, ax = plt.subplots(1, 2, figsize=[8, 4])

dst = spst.norm(loc=8, scale=1)
im = ps.generators.bundle_of_tubes(shape=shape, spacing=spacing, distribution=dst)
ax[0].imshow(im, origin='lower', interpolation='none')
ax[0].axis(False)

dst = spst.norm(loc=10, scale=4)
im = ps.generators.bundle_of_tubes(shape=shape, spacing=spacing, distribution=dst)
ax[1].imshow(im, origin='lower', interpolation='none')
ax[1].axis(False);