Loading data-discovery/src/main/java/search/DbObstap.java +90 −29 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ public class DbObstap Double em_min, em_max, em_res_power; Long em_xel; boolean em_valid; String o_ucd; Loading Loading @@ -208,6 +207,7 @@ public class DbObstap String dbRegion = toRegionColumnName(pos.system); String theQuery ="SELECT *," + inputRegion + " && " + dbRegion + " AS inputOverlapsDb, " + inputRegion + " <@ " + dbRegion + " AS inputInsideDb, " + inputRegion + " @> " + dbRegion + " AS dbInsideInput FROM obscore WHERE (obs_publisher_did IN (\'" +commaSepPubdids+"\'))"; Loading Loading @@ -257,9 +257,8 @@ public class DbObstap obstap.t_resolution = this.getDouble(res,"t_resolution"); obstap.t_xel = this.getLong(res,"t_xel"); obstap.em_min = this.getDouble(res,"em_min"); boolean em_min_valid = !res.wasNull(); obstap.em_max = this.getDouble(res,"em_max"); boolean em_max_valid = !res.wasNull(); obstap.em_valid = em_min_valid && em_max_valid;; obstap.em_min = this.getDouble(res,"em_min"); obstap.em_max = this.getDouble(res,"em_max"); obstap.em_res_power = this.getDouble(res,"em_res_power"); obstap.em_xel = this.getLong(res,"em_xel"); Loading @@ -274,14 +273,20 @@ public class DbObstap // VLKB extension obstap.s_region_galactic = this.getString(res,"s_region_galactic"); obstap.vel_min = this.getDouble(res,"vel_min"); //boolean em_min_valid = !res.wasNull(); obstap.vel_max = this.getDouble(res,"vel_max"); //boolean em_max_valid = !res.wasNull(); obstap.vel_min = this.getDouble(res,"vel_min"); obstap.vel_max = this.getDouble(res,"vel_max"); boolean inputOverlapsDb = res.getBoolean("inputOverlapsDb"); boolean inputInsideDb = res.getBoolean("inputInsideDb"); boolean dbInsideInput = res.getBoolean("dbInsideInput"); obstap.overlapCodeSky = convertToOverlapCodeSky(inputInsideDb, dbInsideInput); LOGGER.finest("inpOverlapsDb, inpInsideDb, dbInsideInp : " + inputOverlapsDb + " " + inputInsideDb + " " + dbInsideInput); obstap.overlapCodeVel = convertToOverlapCodeVel(band,obstap.em_valid,obstap.em_min,obstap.em_max); obstap.overlapCodeSky = convertToOverlapCodeSky(inputOverlapsDb, inputInsideDb, dbInsideInput); obstap.overlapCodeVel = convertToOverlapCodeVel(band, obstap.em_min,obstap.em_max, obstap.vel_min,obstap.vel_max ); obstap.overlapCode = convertToOverlapCode(obstap.overlapCodeSky, obstap.overlapCodeVel); Loading @@ -303,24 +308,56 @@ public class DbObstap return cubes; } /* convert overlap codes */ /* convert overlap codes (AST definition): "0 - The check could not be performed because the second Region could not be mapped into the coordinate system of the first Region.", "1 - There is no overlap between the two Regions.", "2 - The first Region is completely inside the second Region.", "3 - The second Region is completely inside the first Region.", "4 - There is partial overlap between the two Regions.", "5 - The Regions are identical to within their uncertainties.", "6 - The second Region is the exact negation of the first Region to within their uncertainties." */ private Integer convertToOverlapCodeSky(boolean inpOverlapsDb, boolean inpInDb, boolean dbInInp) { if(inpOverlapsDb) { if(!inpInDb && !dbInInp) return 4; else if( inpInDb && !dbInInp) return 3; else if(!inpInDb && dbInInp) return 2; else return 5; } else { return 1; } } private Integer convertToOverlapCodeSky(boolean inpInDb, boolean dbInInp) private boolean intervalOverlap(double amin, double amax, double bmin, double bmax) { if(!inpInDb && !dbInInp) return 4; // parial overlap else if( inpInDb && !dbInInp) return 3; // input region completely inside fits-datacube else if(!inpInDb && dbInInp) return 2; // datacube completely inside input-region else return 5; // exact match: both inpInDb dbInInp are true boolean AoverB = (amin <= bmin) && (bmin <= amax) || (amin <= bmax) && (bmax <= amax); boolean BoverA = (bmin <= amin) && (amin <= bmax) || (bmin <= amax) && (amax <= bmax); return AoverB || BoverA; } private Integer convertToOverlapCodeVel(Band band, boolean v_valid, double v_min, double v_max) private Integer convertToOverlapCodeVel(Band band, Double w_min, Double w_max, // WAVE Double v_min, Double v_max) // VELO { if((band != null) && v_valid) if(band != null) { if(band.system == Band.System.VELO_LSRK) boolean v_valid = (v_min != null) && (v_max != null); boolean w_valid = (w_min != null) && (w_max != null); if( v_valid && (band.system == Band.System.VELO_LSRK) ) { // FIXME assert qArgs: vel_min <= vel_max // FIXME assert cube: v_min <= v_max boolean overlap = intervalOverlap(band.min, band.max, v_min, v_max);; boolean dbInInp = (band.min <= v_min) && (v_min <= band.max) && (band.min <= v_max) && (v_max <= band.max); Loading @@ -328,20 +365,44 @@ public class DbObstap boolean inpInDb = (v_min <= band.min) && (band.min <= v_max) && (v_min <= band.max ) && (band.max <= v_max); return convertToOverlapCodeSky(inpInDb, dbInInp); // do as in Sky-overlap return convertToOverlapCodeSky(overlap, inpInDb, dbInInp); } else if( w_valid && (band.system == Band.System.WAVE_Barycentric) ) { boolean overlap = intervalOverlap(band.min, band.max, w_min, w_max);; boolean dbInInp = (band.min <= w_min) && (w_min <= band.max) && (band.min <= w_max) && (w_max <= band.max); boolean inpInDb = (w_min <= band.min) && (band.min <= w_max) && (w_min <= band.max ) && (band.max <= w_max); // do as in Sky-overlap return convertToOverlapCodeSky(overlap, inpInDb, dbInInp); } else return null;// FIXME other v_type NotImplemented yet else { return null; } } else { return null; } } private Integer convertToOverlapCode(Integer ovcSky, Integer ovcVel) { if(ovcVel == null) return ovcSky; // 2D images if(ovcSky == null) return ovcVel; // spectral images or both null else if(ovcVel == null) return ovcSky; // 2D sky images or both null else if((ovcSky != null) && (ovcVel != null)) { if((ovcSky == 1) || (ovcVel == 1) ) return 1; // no overlap else if(ovcSky == ovcVel) return ovcSky; else return 4;// partial overlap else return 4; } else return null; // both null } Loading Loading
data-discovery/src/main/java/search/DbObstap.java +90 −29 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ public class DbObstap Double em_min, em_max, em_res_power; Long em_xel; boolean em_valid; String o_ucd; Loading Loading @@ -208,6 +207,7 @@ public class DbObstap String dbRegion = toRegionColumnName(pos.system); String theQuery ="SELECT *," + inputRegion + " && " + dbRegion + " AS inputOverlapsDb, " + inputRegion + " <@ " + dbRegion + " AS inputInsideDb, " + inputRegion + " @> " + dbRegion + " AS dbInsideInput FROM obscore WHERE (obs_publisher_did IN (\'" +commaSepPubdids+"\'))"; Loading Loading @@ -257,9 +257,8 @@ public class DbObstap obstap.t_resolution = this.getDouble(res,"t_resolution"); obstap.t_xel = this.getLong(res,"t_xel"); obstap.em_min = this.getDouble(res,"em_min"); boolean em_min_valid = !res.wasNull(); obstap.em_max = this.getDouble(res,"em_max"); boolean em_max_valid = !res.wasNull(); obstap.em_valid = em_min_valid && em_max_valid;; obstap.em_min = this.getDouble(res,"em_min"); obstap.em_max = this.getDouble(res,"em_max"); obstap.em_res_power = this.getDouble(res,"em_res_power"); obstap.em_xel = this.getLong(res,"em_xel"); Loading @@ -274,14 +273,20 @@ public class DbObstap // VLKB extension obstap.s_region_galactic = this.getString(res,"s_region_galactic"); obstap.vel_min = this.getDouble(res,"vel_min"); //boolean em_min_valid = !res.wasNull(); obstap.vel_max = this.getDouble(res,"vel_max"); //boolean em_max_valid = !res.wasNull(); obstap.vel_min = this.getDouble(res,"vel_min"); obstap.vel_max = this.getDouble(res,"vel_max"); boolean inputOverlapsDb = res.getBoolean("inputOverlapsDb"); boolean inputInsideDb = res.getBoolean("inputInsideDb"); boolean dbInsideInput = res.getBoolean("dbInsideInput"); obstap.overlapCodeSky = convertToOverlapCodeSky(inputInsideDb, dbInsideInput); LOGGER.finest("inpOverlapsDb, inpInsideDb, dbInsideInp : " + inputOverlapsDb + " " + inputInsideDb + " " + dbInsideInput); obstap.overlapCodeVel = convertToOverlapCodeVel(band,obstap.em_valid,obstap.em_min,obstap.em_max); obstap.overlapCodeSky = convertToOverlapCodeSky(inputOverlapsDb, inputInsideDb, dbInsideInput); obstap.overlapCodeVel = convertToOverlapCodeVel(band, obstap.em_min,obstap.em_max, obstap.vel_min,obstap.vel_max ); obstap.overlapCode = convertToOverlapCode(obstap.overlapCodeSky, obstap.overlapCodeVel); Loading @@ -303,24 +308,56 @@ public class DbObstap return cubes; } /* convert overlap codes */ /* convert overlap codes (AST definition): "0 - The check could not be performed because the second Region could not be mapped into the coordinate system of the first Region.", "1 - There is no overlap between the two Regions.", "2 - The first Region is completely inside the second Region.", "3 - The second Region is completely inside the first Region.", "4 - There is partial overlap between the two Regions.", "5 - The Regions are identical to within their uncertainties.", "6 - The second Region is the exact negation of the first Region to within their uncertainties." */ private Integer convertToOverlapCodeSky(boolean inpOverlapsDb, boolean inpInDb, boolean dbInInp) { if(inpOverlapsDb) { if(!inpInDb && !dbInInp) return 4; else if( inpInDb && !dbInInp) return 3; else if(!inpInDb && dbInInp) return 2; else return 5; } else { return 1; } } private Integer convertToOverlapCodeSky(boolean inpInDb, boolean dbInInp) private boolean intervalOverlap(double amin, double amax, double bmin, double bmax) { if(!inpInDb && !dbInInp) return 4; // parial overlap else if( inpInDb && !dbInInp) return 3; // input region completely inside fits-datacube else if(!inpInDb && dbInInp) return 2; // datacube completely inside input-region else return 5; // exact match: both inpInDb dbInInp are true boolean AoverB = (amin <= bmin) && (bmin <= amax) || (amin <= bmax) && (bmax <= amax); boolean BoverA = (bmin <= amin) && (amin <= bmax) || (bmin <= amax) && (amax <= bmax); return AoverB || BoverA; } private Integer convertToOverlapCodeVel(Band band, boolean v_valid, double v_min, double v_max) private Integer convertToOverlapCodeVel(Band band, Double w_min, Double w_max, // WAVE Double v_min, Double v_max) // VELO { if((band != null) && v_valid) if(band != null) { if(band.system == Band.System.VELO_LSRK) boolean v_valid = (v_min != null) && (v_max != null); boolean w_valid = (w_min != null) && (w_max != null); if( v_valid && (band.system == Band.System.VELO_LSRK) ) { // FIXME assert qArgs: vel_min <= vel_max // FIXME assert cube: v_min <= v_max boolean overlap = intervalOverlap(band.min, band.max, v_min, v_max);; boolean dbInInp = (band.min <= v_min) && (v_min <= band.max) && (band.min <= v_max) && (v_max <= band.max); Loading @@ -328,20 +365,44 @@ public class DbObstap boolean inpInDb = (v_min <= band.min) && (band.min <= v_max) && (v_min <= band.max ) && (band.max <= v_max); return convertToOverlapCodeSky(inpInDb, dbInInp); // do as in Sky-overlap return convertToOverlapCodeSky(overlap, inpInDb, dbInInp); } else if( w_valid && (band.system == Band.System.WAVE_Barycentric) ) { boolean overlap = intervalOverlap(band.min, band.max, w_min, w_max);; boolean dbInInp = (band.min <= w_min) && (w_min <= band.max) && (band.min <= w_max) && (w_max <= band.max); boolean inpInDb = (w_min <= band.min) && (band.min <= w_max) && (w_min <= band.max ) && (band.max <= w_max); // do as in Sky-overlap return convertToOverlapCodeSky(overlap, inpInDb, dbInInp); } else return null;// FIXME other v_type NotImplemented yet else { return null; } } else { return null; } } private Integer convertToOverlapCode(Integer ovcSky, Integer ovcVel) { if(ovcVel == null) return ovcSky; // 2D images if(ovcSky == null) return ovcVel; // spectral images or both null else if(ovcVel == null) return ovcSky; // 2D sky images or both null else if((ovcSky != null) && (ovcVel != null)) { if((ovcSky == 1) || (ovcVel == 1) ) return 1; // no overlap else if(ovcSky == ovcVel) return ovcSky; else return 4;// partial overlap else return 4; } else return null; // both null } Loading