Пример #1
0
def task(filename, task_params):
    ''' Return a hot pixel in the defined region.
    @author
    @param task_params -
    @return
    '''

    # Assume the arguments are passed in this format:
    # [region_of_interest, N(the threshold value)]
    # if ROI is 'all', then by default it will find all the hot pixels in the image.
    # NOTE: for test purpose we ignore [region file] for now.

    # CMD: hot_pixel ffview max rect 200 200 400 400
    # Example JSON:
    # {"filename":"default", "threshold":"max", "region":{"rect":[0,0,100,100]}}
    hdulist = fits.open(filename)
    threshold, roi = task_params['threshold'], task_params['region']
    region_type, value = roi['type'], roi['value']
    # Region
    region = hdulist[0].data

    try:
        if (region_type=='rect'):
            region_slice = parseRegion_rect(value)
        elif (region_type=='all'):
            region_slice = slice(None)
        else:
            return ['Input region type not supported.']
    except Exception as e:
        return ["Error reading the input region."]

    # print(region_slice)
    region = region[region_slice]
    # os.system("echo %d %d %d %d > /www/algorithm/debug_file" % (x_start, x_end, y_start, y_end))
    # Threshold
    if (threshold == 'max'):
        threshold = float(np.max(region))
    else:
        try:
            threshold = float(threshold)
        except Exception as e:
            return ["Error reading the input threshold."]

    cols, rows = np.where(region>=threshold)

    num_points = 500  # Set to 500 so that at most it will return 1000 points
    num_points = rows.size if num_points>rows.size else num_points

    rows = rows[::rows.size//num_points]
    cols = cols[::cols.size//num_points]
    l = np.zeros((rows.size, 2))
    l[:,0] = cols + region_slice[0].start
    l[:,1] = rows + region_slice[1].start

    hdulist.close()
    return l.tolist(), None
def task(filename, task_params):
    ''' Simple task calculating average value in a region. Boundary assumes the expected format being sent in.
    @author Wei Ren
    @param filename - file name of the FITS image
    @param task_params - Region to calculate mean value on. Currently support `rect` and `circle` regions.
    @return Mean value of the results or Error info.
    '''

    hdulist = fits.open(filename)
    region = hdulist[0].data
    region_type, value = task_params['type'], task_params['value']

    if (region_type=='rect'):
        region_slice = parseRegion_rect(value)
        ROI = region[region_slice]
        avg = str(np.mean(ROI))
    elif (region_type=='circle'):
        mask = circle_mask(region, value)
        avg = str(gf(region, np.mean, footprint=mask))
    else:
        avg = "Region type is not recognized."

    hdulist.close()
    return {"result":avg},None