code: def get_intrusion_data(self, Pc=None):
          r
          net = self.project.network
          if Pc is None:
              # Infer list of applied capillary pressures
              points = np.unique(self['throat.invasion_pressure'])
              # Add a low pressure point to the list to improve graph
              points = np.concatenate(([0], points))
              if points[-1] == np.inf:  # Remove infinity from points if present
                  points = points[:-1]
          else:
              points = np.array(Pc)
          # Get pore and throat volumes
          Pvol = net[self.settings['pore_volume']]
          Tvol = net[self.settings['throat_volume']]
          Total_vol = np.sum(Pvol) + np.sum(Tvol)
          # Find cumulative filled volume at each applied capillary pressure
          Vnwp_t = []
          Vnwp_p = []
          Vnwp_all = []
          for p in points:
              # Calculate filled pore volumes
              p_inv, t_inv = self.results(p).values()
              Vp = np.sum(Pvol*p_inv)
              Vt = np.sum(Tvol*t_inv)
              Vnwp_p.append(Vp)
              Vnwp_t.append(Vt)
              Vnwp_all.append(Vp + Vt)
          # Convert volumes to saturations by normalizing with total pore volume
          Snwp_all = [V/Total_vol for V in Vnwp_all]
          pc_curve = namedtuple('pc_curve', ('Pcap', 'Snwp'))
          data = pc_curve(points, Snwp_all)
          return data
docs: r"""
          Obtain the numerical values of the calculated intrusion curve
  
          Returns
          -------
          A named-tuple containing arrays of applied capillary pressures and
          invading phase saturation.