All Downloads are FREE. Search and download functionalities are using the official Maven repository.

umcg.genetica.io.concurrent.DoubleParseTask Maven / Gradle / Ivy

There is a newer version: 1.0.7
Show newest version
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package umcg.genetica.io.concurrent;

import java.util.Set;
import java.util.concurrent.Callable;
import java.util.regex.Pattern;
import umcg.genetica.containers.Triple;
import umcg.genetica.text.Strings;

/**
 *
 * @author harmjan
 */
public class DoubleParseTask implements Callable> {

    String stringData;
    int offset = 0;
    int row = 0;
    private final int[] columnIndex;
    private final Set hashRowsToInclude;
    private int nrColumnsToInclude;
    private Pattern separator;

    public DoubleParseTask(String d, int offset, int row, int[] columnIndex, Set hashProbesToInclude) {
        this.stringData = d;
        this.offset = offset;
        this.row = row;
        this.columnIndex = columnIndex; // converts column position in output to column position 
        this.hashRowsToInclude = hashProbesToInclude;
        if (columnIndex == null) {
            this.nrColumnsToInclude = -1;
        } else {
            this.nrColumnsToInclude = columnIndex.length;
        }
    }
    
    public DoubleParseTask(String d, int offset, int row, int[] columnIndex, Set hashProbesToInclude, Pattern separator) {
        this.stringData = d;
        this.offset = offset;
        this.row = row;
        this.columnIndex = columnIndex; // converts column position in output to column position 
        this.hashRowsToInclude = hashProbesToInclude;
        if (columnIndex == null) {
            this.nrColumnsToInclude = -1;
        } else {
            this.nrColumnsToInclude = columnIndex.length;
        }
        this.separator = separator;
    }

    @Override
    public Triple call() throws Exception {
        if (stringData == null) {
            return new Triple(-1, null, null);
        }

        if(separator == null){
            separator = Strings.tab;
        }
        
        String[] splitData = separator.split(stringData);
        String rowname = new String(splitData[0].getBytes());

        if (this.nrColumnsToInclude == -1) {
            this.nrColumnsToInclude = splitData.length - 1;
        }

//        if(columnIndex == null){
//            System.out.println("Column index == null");
//        } else {
//            System.out.println("Column index == set");
//        }
        
        if (hashRowsToInclude == null || hashRowsToInclude.contains(rowname)) {
            double[] output = new double[nrColumnsToInclude];
            for (int s = 0; s < nrColumnsToInclude; s++) {
                int columnPositionInFile = s + offset;
                if (columnIndex != null) {
                    columnPositionInFile = columnIndex[s];
                }

                try {
                    output[s] = Double.parseDouble(splitData[columnPositionInFile]);
                } catch (NumberFormatException e) {
                    System.err.println("ERROR! Value is not a double: " + splitData[columnPositionInFile] + "\trow: " + row + "\tcol:" + columnPositionInFile +"\toffset: "+offset);
                    output[s] = Double.NaN;
////                    e.printStackTrace();
//                    System.exit(0);
                }
            }
            this.stringData = null;
            return new Triple(row, rowname, output);
        } else {
            this.stringData = null;
            return new Triple(-1, null, null);
        }

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy