I have been following the “Deep Learning with Pytorch” book to learn pytorch, in Chapter 10 of part 2, there is dsets.py file and it contains the following code:
    def __init__(self, series_uid):
        mhd_path = glob.glob(
            'data-unversioned/part2/luna/subset*/{}.mhd'.format(series_uid)
        )[0]

        ct_mhd = sitk.ReadImage(mhd_path)
        ct_a = np.array(sitk.GetArrayFromImage(ct_mhd), dtype=np.float32)

        ct_a.clip(-1000, 1000, ct_a)

        self.series_uid = series_uid
        self.hu_a = ct_a

        self.origin_xyz = XyzTuple(*ct_mhd.GetOrigin())
        self.vxSize_xyz = XyzTuple(*ct_mhd.GetSpacing())
        self.direction_a = np.array(ct_mhd.GetDirection()).reshape(3, 3)

I understood all but the last 3 lines where self.origin_xyz, self.vxSize_xyz and self.direction_a got assigned. XyzTuple is XyzTuple = collections.namedtuple('XyzTuple', ['x', 'y', 'z']) (in util.py)
I am having a difficulty to understand what those GetOrigin(), GetSpacing() and GetDirection() mean. Also what is the role of * in front of ct_mhd?
Hope one can explain or refer to some other resources.