/** * Cross-match positionnel (effectué en local) * * @param p1 * @param p2 * @param seuils * @param method * @param aladin */ public void posXMatch( Plan p1, Plan p2, String label, int[] coordTab1, int[] coordTab2, double[] seuils, int method, Aladin aladin, boolean fromScript) { double begin = System.currentTimeMillis(); if (coordTab1 == null) { coordTab1 = findCoord(p1); if (coordTab1 == null) { Aladin.warning(Aladin.chaine.getString("NOCOOR") + " " + p1.label); return; } } if (coordTab2 == null) { coordTab2 = findCoord(p2); if (coordTab2 == null) { Aladin.warning(Aladin.chaine.getString("NOCOOR") + " " + p2.label); return; } } // création dès le début du calcul du plan résultat PlanCatalog pc = initPlaneCreation(p1, label); double[][] array1 = new double[p1.getCounts()][2]; boolean[] ignoreFlag1 = new boolean[p1.getCounts()]; fillXMatchArray(p1.pcat, array1, coordTab1, ignoreFlag1); double[][] array2 = new double[p2.getCounts()][2]; boolean[] ignoreFlag2 = new boolean[p2.getCounts()]; fillXMatchArray(p2.pcat, array2, coordTab2, ignoreFlag2); if (!fromScript) aladin.console.printCommand( "xmatch " + Tok.quote(p1.label) + " " + Tok.quote(p2.label) + " " + seuils[1]); double beginXmatch = System.currentTimeMillis(); Aladin.trace(3, "Total time for extracting coordinates : " + (beginXmatch - begin)); // TODO : ajouter la possibilité d'interrompre un xmatch en cours en effaçant le plan résultat XMatchResult[] result = LocalXMatch.xMatch(array1, array2, ignoreFlag1, ignoreFlag2, seuils, method); double end = System.currentTimeMillis(); Aladin.trace(3, "Total time for xmatch : " + (end - beginXmatch)); fillResultPlane(pc, result, p1, p2, coordTab1, array1, POSXMATCH); Aladin.trace(3, "Total time for creation of the plane : " + (System.currentTimeMillis() - end)); // log aladin.log("xmatch", "positional"); }
/** * Merge rows on a given field * * @param p1 * @param p2 * @param index1 column index in p1 * @param index2 column index in p2 * @param aladin reference to Aladin */ public void xID(Plan p1, Plan p2, String label, int index1, int index2, Aladin aladin) { double begin = System.currentTimeMillis(); // création dès le début du calcul du plan résultat PlanCatalog pc = initPlaneCreation(p1, label); String[] array1 = new String[p1.getCounts()]; fillXIDArray(p1.pcat, array1, index1); String[] array2 = new String[p2.getCounts()]; fillXIDArray(p2.pcat, array2, index2); double beginXmatch = System.currentTimeMillis(); Aladin.trace(3, "Total time for extracting fields : " + (beginXmatch - begin)); XMatchResult[] result = LocalXMatch.xID(array1, array2); double end = System.currentTimeMillis(); Aladin.trace(3, "Total time for xid : " + (end - beginXmatch)); fillResultPlane(pc, result, p1, p2, null, null, JOIN); // log aladin.log("xmatch", "xid"); }
/** * Cross-match positionnel avec ellipses * * @param p1 * @param p2 * @param seuils * @param method * @param aladin */ public void posXMatchEllipses( Plan p1, Plan p2, String label, int[] coordTab1, int[] coordTab2, int[] paramEllipses1, int[] paramEllipses2, double nbSigmaMin, double nbSigmaMax, int method, Aladin aladin) { double begin = System.currentTimeMillis(); if (coordTab1 == null) { coordTab1 = findCoord(p1); if (coordTab1 == null) { Aladin.warning("Coordinates columns not found for plane " + p1.label); return; } } if (coordTab2 == null) { coordTab2 = findCoord(p2); if (coordTab2 == null) { Aladin.warning("Coordinates columns not found for plane " + p2.label); return; } } // création dès le début du calcul du plan résultat PlanCatalog pc = initPlaneCreation(p1, label); double[][] array1 = new double[p1.getCounts()][2]; boolean[] ignoreFlag1 = new boolean[p1.getCounts()]; fillXMatchArray(p1.pcat, array1, coordTab1, ignoreFlag1); double[][] array2 = new double[p2.getCounts()][2]; boolean[] ignoreFlag2 = new boolean[p2.getCounts()]; fillXMatchArray(p2.pcat, array2, coordTab2, ignoreFlag2); double[] maj1 = new double[p1.getCounts()]; double[] min1 = new double[p1.getCounts()]; double[] pa1 = new double[p1.getCounts()]; fillEllipsesParamArray(p1.pcat, maj1, min1, pa1, paramEllipses1, ignoreFlag1); double[] maj2 = new double[p2.getCounts()]; double[] min2 = new double[p2.getCounts()]; double[] pa2 = new double[p2.getCounts()]; fillEllipsesParamArray(p2.pcat, maj2, min2, pa2, paramEllipses2, ignoreFlag2); // TODO : faire la commande script correspondante !! // if( !fromScript ) aladin.pad.setCmd("xmatch "+Tok.quote(p1.label)+" // "+Tok.quote(p2.label)+" "+seuils[1]); double beginXmatch = System.currentTimeMillis(); Aladin.trace(3, "Total time for extracting coordinates : " + (beginXmatch - begin)); // TODO : faut il permettre de passer le minimum pour nbSigma ? XMatchResult[] result = LocalXMatch.xMatchEllipse( array1, array2, maj1, min1, pa1, maj2, min2, pa2, ignoreFlag1, ignoreFlag2, new double[] {nbSigmaMin, nbSigmaMax}, method); double end = System.currentTimeMillis(); Aladin.trace(3, "Total time for ellipses xmatch : " + (end - beginXmatch)); fillResultPlane(pc, result, p1, p2, coordTab1, array1, POSXMATCH_ELLIPSES); // log aladin.log("xmatch", "ellipses"); }