def ReadLmkTr(): #{
  sv = []
  tv = []
  try: #{
    if args.input == '-': #{
      f = sys.stdin
    else: #}{
      f = open(args.input, 'r')
    #}
    doc = et.parse(f)
    idx = 0
    for lm in doc.findall('Landmark'): #{
      s = lm.find('Source')
      t = lm.find('Target')
      sv.append(GetLmkVertex(s))
      tv.append(GetLmkVertex(t))
      VerbMsg('{:d} {:g} {:g} {:g} {:g} {:g} {:g}'. \
              format( \
                idx, \
                sv[idx].vtX, sv[idx].vtY, sv[idx].vtZ, \
                tv[idx].vtX, tv[idx].vtY, tv[idx].vtZ))
      idx = idx + 1
    #}
    if not args.input == '-': #{
      f.close()
    #}
    if ((not len(sv) == len(tv)) or (len(sv) < 3)): #{
      raise IOError()
    #}
  except IOError: #}{
    ErrorMsg('Failed to read ITK affine transform from file ' + args.input)
  #}
  try: #{
    n = len(sv)
    svtx = (w.WlzDVertex3 * n)()
    tvtx = (w.WlzDVertex3 * n)()
    errNum = w.enum__WlzErrorNum(w.WLZ_ERR_NONE)
    for i in range(0, n): #{
      svtx[i] = sv[i]
      tvtx[i] = tv[i]
    #}
    tr = w.WlzAffineTransformLSq3D(n, tvtx, n, svtx, 0, None, \
                         w.enum__WlzTransformType(w.WLZ_TRANSFORM_3D_AFFINE), \
                         c.byref(errNum))
    if bool(errNum) or \
       (not int(tr.contents.type) == int(w.WLZ_TRANSFORM_3D_AFFINE)): #{
      raise WlzError()
    #}
  except WlzError: #}{
    ErrorMsg('Failed to compute LSq affine transform from landmarks (' +
             w.WlzStringFromErrorNum(errNum, None) + ')')
  #}
  mat = WlzTrToMat(tr)
  return(mat)