def METHOD_NAME(self, after_aspirate=None, after_dispense=None):
    vol = self.get_volume()
    if after_aspirate is not None:
        vol -= after_aspirate
    if after_dispense is not None:
        vol += after_dispense
    c_type = type(self._calc_type).__name__.lower()
    if 'cube' in c_type:
        cube_max_vol = self._calc_type.w * self._calc_type.l * self._calc_type.h
        assert vol >= 0, f'{vol} uL is less than 0 uL'
        assert vol <= cube_max_vol,\
            f'{vol} uL is greater than {cube_max_vol} uL'
        return (vol / cube_max_vol) * self._calc_type.h
    elif 'cylinder' in c_type:
        cylinder_max_vol = math.pi * pow(self._calc_type.d / 2, 2) * self._calc_type.h
        assert vol >= 0, f'{vol} uL is less than 0 uL'
        assert vol <= cylinder_max_vol,\
            f'{vol} uL is greater than {cylinder_max_vol} uL'
        return (vol / cylinder_max_vol) * self._calc_type.h
    elif 'lookup' in c_type:
        assert vol >= 0, f'{vol} uL is less than 0 uL'
        for i, (lv, lh) in enumerate(self._calc_type.lookup[1:]):
            plv, plh = self._calc_type.lookup[i - 1]
            if plv <= vol <= lv:
                v_perc = (vol - plv) / (lv - plv)
                return plh + ((lh - plh) * v_perc)
        raise ValueError(f'Unable to find updated volume ({vol}) in lookup table')
    else:
        raise ValueError(f'Unexpected c_type: {self._calc_type}')