Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import sys
- import os
- from region import *
- import pycrates as pyc
- def find_distance( oldreg, xx, yy ):
- from numpy.linalg import norm
- import numpy as np
- poly = oldreg.shapes[0]
- xpoints = poly.xpoints
- ypoints = poly.ypoints
- nn = len(xpoints)
- mindist = 1000000.
- p3 = np.array( (xx,yy) )
- for ii in range(1,nn):
- p1 = np.array((xpoints[ii-1],ypoints[ii-1]))
- p2 = np.array((xpoints[ii],ypoints[ii]))
- d = np.abs(norm(np.cross(p2-p1,p1-p3))/norm(p2-p1))
- if d < mindist:
- mindist = d
- return mindist
- def check_evt_not_in_region( reg, xx, yy, tag,tol ):
- from math import isfinite
- retval = 0
- for x,y in zip(xx,yy):
- if not isfinite(x) or not isfinite(y):
- continue
- if not reg.is_inside(x,y):
- d = find_distance(reg, x,y)
- if d > tol:
- msg = " {tt} : event outside fov {xx},{yy} by {d}"
- print(msg.format(tt=tag,xx=x,yy=y,d=d))
- retval = retval+1
- return retval
- def doit():
- evt=sys.argv[1]
- new_fov = sys.argv[2]
- _e = pyc.read_file(evt)
- ex = _e.get_column("x").values.copy()
- ey = _e.get_column("y").values.copy()
- ec = _e.get_column("ccd_id").values.copy()
- del _e
- tab = pyc.read_file( new_fov+"[shape=Polygon]" )
- new_ccds = list(set( tab.get_column("ccd_id").values))
- new_ccds.sort()
- for ccd in new_ccds:
- newreg = CXCRegion( "{}[ccd_id={}]".format( new_fov, ccd))
- n = check_evt_not_in_region( newreg, ex[ec==ccd], ey[ec==ccd], "new", 0.0)
- doit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement