private void start() throws FileNotFoundException, IOException, InterruptedException, ExecutionException {
        BufferedReader brWatson = new BufferedReader(new FileReader(new File(this.inputWatson)));
        String bufferedHeader = brWatson.readLine().substring(1);
        for (int i = 0;;) {
            List<SequenceEntry> list = new LinkedList<>();
            try {
                for (int j = 0; j < Globals.STEPS; j++) {
                    i++;
                    SequenceEntry seqEntry = parseFastaEntry(brWatson);
                    String tmp = seqEntry.header;
                    seqEntry.header = bufferedHeader;
                    bufferedHeader = tmp;
                    String parseFastaEntry = seqEntry.sequence;
                    if (parseFastaEntry.length() > 2 * Globals.CUT) {
                        parseFastaEntry = parseFastaEntry.substring(Globals.CUT, parseFastaEntry.length() - Globals.CUT);
                        seqEntry.sequence = parseFastaEntry;
                        if (seqEntry.sequence.length() >= Globals.MIN_LENGTH) {
                            list.add(seqEntry);
//                            list.addAll(Utils.splitRead(watsonS));
                        } else {
                            StatusUpdate.processLength();
                        }
                    } else {
                        StatusUpdate.processLength();
                    }
                    if (i % 10000 == 0) {
                        this.processResults();
                    }
                }
                synchronized (results) {
                    results.add(executor.submit(new FutureSequence(list)));
                }
            } catch (IllegalAccessError e) {
                if (!list.isEmpty()) {
                    synchronized (results) {
                        results.add(executor.submit(new FutureSequence(list)));
                    }
                }
                // used to halt in case of EOF
                break;
            }
        }
        this.processResults();
        this.saveConsensus();
        executor.shutdown();
        this.processResults();
        this.resultsExecutor.shutdown();
    }