class Roi(object): | |
""" Object that represents a Project X-ray ROI. | |
Can be used to iterate over tiles and sites within an ROI. | |
""" | |
def __init__(self, db, x1, x2, y1, y2): | |
self.grid = db.grid() | |
self.x1 = x1 | |
self.x2 = x2 | |
self.y1 = y1 | |
self.y2 = y2 | |
def tile_in_roi(self, grid_loc): | |
""" Returns true if grid_loc (GridLoc tuple) is within the ROI. """ | |
x = grid_loc.grid_x | |
y = grid_loc.grid_y | |
return self.x1 <= x and x <= self.x2 and self.y1 <= y and y <= self.y2 | |
def gen_tiles(self, tile_types=None): | |
''' Yield tile names within ROI. | |
tile_types: list of tile types to keep, or None for all | |
''' | |
for tile_name in self.grid.tiles(): | |
loc = self.grid.loc_of_tilename(tile_name) | |
if not self.tile_in_roi(loc): | |
continue | |
gridinfo = self.grid.gridinfo_at_loc(loc) | |
if tile_types is not None and gridinfo.tile_type not in tile_types: | |
continue | |
yield tile_name | |
def gen_sites(self, site_types=None): | |
''' Yield (tile_name, site_name, site_type) within ROI. | |
site_types: list of site types to keep, or None for all | |
''' | |
for tile_name in self.grid.tiles(): | |
loc = self.grid.loc_of_tilename(tile_name) | |
if not self.tile_in_roi(loc): | |
continue | |
gridinfo = self.grid.gridinfo_at_loc(loc) | |
for site_name, site_type in gridinfo.sites.items(): | |
if site_types is not None and site_type not in site_types: | |
continue | |
yield (tile_name, site_name, site_type) |