Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import sys
  3. import os
  4.  
  5. from region import *
  6. import pycrates as pyc
  7.  
  8.  
  9. def find_distance( oldreg, xx, yy ):
  10. from numpy.linalg import norm
  11. import numpy as np
  12.  
  13. poly = oldreg.shapes[0]
  14.  
  15. xpoints = poly.xpoints
  16. ypoints = poly.ypoints
  17.  
  18. nn = len(xpoints)
  19. mindist = 1000000.
  20.  
  21. p3 = np.array( (xx,yy) )
  22. for ii in range(1,nn):
  23. p1 = np.array((xpoints[ii-1],ypoints[ii-1]))
  24. p2 = np.array((xpoints[ii],ypoints[ii]))
  25. d = np.abs(norm(np.cross(p2-p1,p1-p3))/norm(p2-p1))
  26. if d < mindist:
  27. mindist = d
  28.  
  29. return mindist
  30.  
  31.  
  32. def check_evt_not_in_region( reg, xx, yy, tag,tol ):
  33. from math import isfinite
  34. retval = 0
  35.  
  36. for x,y in zip(xx,yy):
  37. if not isfinite(x) or not isfinite(y):
  38. continue
  39.  
  40. if not reg.is_inside(x,y):
  41. d = find_distance(reg, x,y)
  42. if d > tol:
  43. msg = " {tt} : event outside fov {xx},{yy} by {d}"
  44. print(msg.format(tt=tag,xx=x,yy=y,d=d))
  45. retval = retval+1
  46. return retval
  47.  
  48. def doit():
  49.  
  50. evt=sys.argv[1]
  51. new_fov = sys.argv[2]
  52.  
  53. _e = pyc.read_file(evt)
  54. ex = _e.get_column("x").values.copy()
  55. ey = _e.get_column("y").values.copy()
  56. ec = _e.get_column("ccd_id").values.copy()
  57. del _e
  58.  
  59. tab = pyc.read_file( new_fov+"[shape=Polygon]" )
  60. new_ccds = list(set( tab.get_column("ccd_id").values))
  61. new_ccds.sort()
  62.  
  63. for ccd in new_ccds:
  64. newreg = CXCRegion( "{}[ccd_id={}]".format( new_fov, ccd))
  65. n = check_evt_not_in_region( newreg, ex[ec==ccd], ey[ec==ccd], "new", 0.0)
  66.  
  67. doit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement