create or replace PACKAGE BODY rich700_par_query AS -- Last update: 06-JUl-2017 by JAM (j.adamczewski@gsi.de) /*********************************************************************************/ /* Interface used by the Hydra2 analysis interface for parameter containers of */ /* rich700 (ora/hrichparora2io.pc) */ /*********************************************************************************/ ---------------------------------------------------------------------------------------------------- -- private: /******************************************************************/ /* Evaluates for a specified pixel column and row number */ /* parameters pmt_id and pmt_pixel */ /******************************************************************/ PROCEDURE evaluate_pmt_pixel ( p_pixel_col in NUMBER, p_pixel_row in NUMBER, p_pmt_id out NUMBER, p_pmt_pixel out NUMBER) IS pmt RICH700_PIXEL.PMT_ID%TYPE; pix RICH700_PIXEL.PMT_PIXEL%TYPE; BEGIN SELECT a.pmt_id, a.pmt_pixel INTO pmt, pix FROM RICH700_PIXEL a, RICH700_PIXEL_GRID b WHERE p_pixel_col = b.pixel_x AND p_pixel_row = b.pixel_y AND b.pixel_id = a.pixel_id; p_pmt_id := pmt; p_pmt_pixel := pix; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20101,'pixel col='||p_pixel_col||' pixel_row='||p_pixel_row ||' evaluate_pmt_pixel did not find pmt and pixel'); END evaluate_pmt_pixel; ---------------------------------------------------------------------------------------------------- -- public: FUNCTION get_pmt_id ( p_pixel_col in NUMBER, p_pixel_row in NUMBER) RETURN NUMBER is id RICH700_PIXEL.pixel_id%TYPE; pmt RICH700_PIXEL.PMT_ID%TYPE; pix RICH700_PIXEL.PMT_PIXEL%TYPE; BEGIN evaluate_pmt_pixel(p_pixel_col, p_pixel_row, pmt, pix); RETURN pmt; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20101,'pixel col='||p_pixel_col||' pixel_row='||p_pixel_row ||' pmt_id not found'); END get_pmt_id; --converts pixel x and y location on detector plain to corresponding pixel index on the pmt FUNCTION get_pmt_pixel ( p_pixel_col in NUMBER, p_pixel_row in NUMBER) RETURN NUMBER is id RICH700_PIXEL.pixel_id%TYPE; pmt RICH700_PIXEL.PMT_ID%TYPE; pix RICH700_PIXEL.PMT_PIXEL%TYPE; BEGIN evaluate_pmt_pixel(p_pixel_col, p_pixel_row, pmt, pix); RETURN pix; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20101,'pixel col='||p_pixel_col||' pixel_row='||p_pixel_row ||' pmt_pixel_id not found'); END get_pmt_pixel; END rich700_par_query;