Skip to content
Snippets Groups Projects
OpenBISScreeningML.java 48 KiB
Newer Older
  • Learn to ignore specific revisions
  •                 featureVectors.get(featureVectors.size() - 1).getFeatureNames();
            final Object[][][] result = new Object[3][][];
            if (featureVectors.isEmpty())
            {
                return result;
            }
            int numberOfRows = 0;
            for (FeatureVectorDataset fvds : featureVectors)
            {
                numberOfRows += fvds.getFeatureVectors().size();
            }
            result[0] = new Object[numberOfRows][featureNameList.size()];
            result[1] = new Object[numberOfRows][13];
            int resultIdx = 0;
            for (FeatureVectorDataset fvds : featureVectors)
            {
                final FeatureVectorDatasetReference datasetRef = fvds.getDataset();
                for (FeatureVector f : fvds.getFeatureVectors())
                {
                    arraycopy(f.getValues(), result[0][resultIdx]);
                    final Object[] annotations =
                            new Object[]
                                { createPlateWellDescription(datasetRef.getPlate(), f),
                                        datasetRef.getPlate().getAugmentedCode(),
                                        datasetRef.getPlate().getPermId(),
                                        datasetRef.getPlate().tryGetSpaceCode(),
                                        datasetRef.getPlate().getPlateCode(),
                                        f.getWellPosition().getWellRow(),
                                        f.getWellPosition().getWellColumn(),
                                        datasetRef.getExperimentIdentifier().getAugmentedCode(),
                                        datasetRef.getExperimentIdentifier().getPermId(),
                                        datasetRef.getExperimentIdentifier().getSpaceCode(),
                                        datasetRef.getExperimentIdentifier().getProjectCode(),
                                        datasetRef.getExperimentIdentifier().getExperimentCode(),
                                        datasetRef.getDatasetCode(), };
                    System.arraycopy(annotations, 0, result[1][resultIdx], 0, annotations.length);
                    resultIdx++;
                }
            }
            result[2] = new Object[featureNameList.size()][1];
            for (int i = 0; i < featureNameList.size(); ++i)
            {
                result[2][i][0] = featureNameList.get(i);
            }
            return result;
        }
    
    
        //
        // Helper methods
        //
    
        private static void arraycopy(double[] src, Object[] dest)
        {
            for (int i = 0; i < dest.length; ++i)
            {
                dest[i] = src[i];
            }
        }
    
        private static String createPlateWellDescription(FeatureVectorWithDescription f)
        {
            return createPlateWellDescription(f.getDatasetWellReference().getPlate(), f
                    .getWellPosition().getWellRow(), f.getWellPosition().getWellColumn());
        }
    
    
        private static String createPlateWellDescription(PlateIdentifier p, FeatureVector f)
        {
            return createPlateWellDescription(p, f.getWellPosition().getWellRow(), f.getWellPosition()
                    .getWellColumn());
        }
    
    
        private static String createPlateWellDescription(PlateIdentifier p, int row, int col)
        {
            return p.getPlateCode() + ":" + translateRowNumberIntoLetterCode(row) + col;
        }
    
        /**
         * Translates a row number into letter code. Thus, 1 -> A, 2 -> B, 26 -> Z, 27 -> AA, 28 -> AB,
         * etc.
         */
        private static String translateRowNumberIntoLetterCode(int rowNumber)
        {
            int rowIndex = rowNumber - 1;
            String code = "";
            while (rowIndex >= 0)
            {
                code = (char) (rowIndex % 26 + 'A') + code;
                rowIndex = rowIndex / 26 - 1;
            }
            return code;
        }
    
        private static void checkLoggedIn()
        {
            if (openbis == null)
            {
    
                if (Login.OPENBIS_TOKEN_FILE.exists())
                {
                    BufferedReader br = null;
                    try
                    {
                        br = new BufferedReader(new FileReader(Login.OPENBIS_TOKEN_FILE));
                        final String token = br.readLine();
                        br.close();
                        br = new BufferedReader(new FileReader(Login.OPENBIS_SERVER_URL_FILE));
                        final String serverUrl = br.readLine();
                        br.close();
                        br = null;
                        openbis = ScreeningOpenbisServiceFacadeFactory.tryCreate(token, serverUrl);
                        if (openbis == null)
                        {
                            throw new RuntimeException("Login failed.");
                        }
                        init();
                    } catch (IOException ex)
                    {
                        if (openbis == null)
                        {
                            throw new RuntimeException("Login failed.", ex);
                        }
                    } finally
                    {
                        if (br != null)
                        {
                            try
                            {
                                br.close();
                            } catch (IOException ex)
                            {
                                // Silence this.
                            }
                        }
                    }
                }
                if (openbis == null)
                {
                    throw new RuntimeException("Not logged in.");
                }