Advertisement
Guest User

Untitled

a guest
Sep 29th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. import numpy
  2. import argparse
  3.  
  4. parser = argparse.ArgumentParser(
  5. description='Shift particle centers in a TRF file',
  6. epilog='Written by Dustin R. Morado 28.09.2016')
  7. parser.add_argument('input', help='Input trf file', metavar='IN.trf')
  8. parser.add_argument('output', help='Output trf file', metavar='OUT.trf')
  9.  
  10. parser.add_argument(
  11. '--shiftX', '-x',
  12. type=float,
  13. help='Shift in X',
  14. default=0.0)
  15.  
  16. parser.add_argument(
  17. '--shiftY', '-y',
  18. type=float,
  19. help='Shift in Y',
  20. default=0.0)
  21.  
  22. parser.add_argument(
  23. '--shiftZ', '-z',
  24. type=float,
  25. help='Shift in Z',
  26. default=0.0)
  27.  
  28. args = parser.parse_args()
  29.  
  30. # We take in the shift relative to the reference structure
  31. referenceShift = numpy.array(
  32. [[args.shiftX],
  33. [args.shiftY],
  34. [args.shiftZ]],
  35. numpy.float_)
  36.  
  37. with open(args.input) as inputTRF, open(args.output, 'w') as outputTRF:
  38. for initialTransformLine in inputTRF:
  39. initialTransform = initialTransformLine.split()
  40. # Initialize new transform line by copying subset
  41. finalTransformLine = initialTransform[0]
  42.  
  43. initialCoordinates = numpy.array(
  44. [[initialTransform[1]],
  45. [initialTransform[2]],
  46. [initialTransform[3]]],
  47. numpy.int_)
  48.  
  49. initialDisplacement = numpy.array(
  50. [[initialTransform[4]],
  51. [initialTransform[5]],
  52. [initialTransform[6]]],
  53. numpy.float_)
  54.  
  55. # The transform matrix describes the rotation of the particle coordinate
  56. # system to the reference system
  57. initialRotationMatrix = numpy.array(
  58. [[initialTransform[7], initialTransform[8], initialTransform[9]],
  59. [initialTransform[10], initialTransform[11], initialTransform[12]],
  60. [initialTransform[13], initialTransform[14], initialTransform[15]]],
  61. numpy.float_)
  62.  
  63. # We are interested in the inverse transform above, which for rotation
  64. # matrices is just the transform
  65. inverseRotationMatrix = initialRotationMatrix.T
  66.  
  67. initialParticleCenter = initialCoordinates + initialDisplacement
  68.  
  69. # We apply the inverse rotation transform to our shift vector to describe
  70. # the requested shift in the particle's coordinate system
  71. particleShift = inverseRotationMatrix.dot(referenceShift)
  72.  
  73. finalParticleCenter = initialParticleCenter + particleShift
  74. finalDisplacement, finalCoordinates = numpy.modf(finalParticleCenter)
  75. finalCoordinates = finalCoordinates.astype(numpy.int_)
  76.  
  77. finalTransformLine += " {:d} {:d} {:d} ".format(
  78. finalCoordinates[0,0], finalCoordinates[1,0], finalCoordinates[2,0])
  79. finalTransformLine += "{: 14.10f} {: 14.10f} {: 14.10f} ".format(
  80. finalDisplacement[0,0], finalDisplacement[1,0], finalDisplacement[2,0])
  81. finalTransformLine += "{:s} {:s} {:s} ".format(
  82. initialTransform[7], initialTransform[8], initialTransform[9])
  83. finalTransformLine += "{:s} {:s} {:s} ".format(
  84. initialTransform[10], initialTransform[11], initialTransform[12])
  85. finalTransformLine += "{:s} {:s} {:s}\n".format(
  86. initialTransform[13], initialTransform[14], initialTransform[15])
  87. outputTRF.write(finalTransformLine)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement