As a follow up, Eleni and I worked through the data and found a transformation that appears to be correct. For reference here’s the script that works for us, but it’s probably a one-off solution specific to the way this particular matlab program generates the data (x and y coordinates in pixel space, but z coordinate scaled by slice spacing).

```
fp = open('/Users/pieper/Dropbox/data/MRRobot/Accuracy Phantom/Matlab/x-coordinate.txt', "r")
data = fp.read()
xcoords = map(float, data.strip().replace('\r\n', '\t').split('\t'))
fp.close()
fp = open('/Users/pieper/Dropbox/data/MRRobot/Accuracy Phantom/Matlab/y-coordinate.txt', "r")
data = fp.read()
ycoords = map(float, data.strip().replace('\r\n', '\t').split('\t'))
fp.close()
volumeNode = slicer.util.getNode('901*')
ijkToRAS = vtk.vtkMatrix4x4()
volumeNode.GetIJKToRASMatrix(ijkToRAS)
markupNode = slicer.mrmlScene.AddNode(slicer.vtkMRMLMarkupsFiducialNode())
for index in range(64):
out = [0,]*4
ijkToRAS.MultiplyPoint([ xcoords[index], ycoords[index], 21 , 1], out) # 21 = 52.5 zcoord / 2.5 slice spacing
markupNode.AddFiducial(*out[:3])
```