public int[] generateExonBreak(boolean keepFirstHalf, boolean cdsExonsOnly) {
        List<int []> exonList = cdsExonsOnly ? this.codingExons : this.exons;
        
        if(exonList.size() == 0) {
            throw new RuntimeException("Missing exons: \n"+this.toString());
        }
        
        Random r = new Random();
        int breakIndex = r.nextInt(exonList.size());
        
        int start = 0;
        int end = breakIndex;
        
        if(!keepFirstHalf) {
            start = breakIndex;
            end = exonList.size()-1;
        }
        
        int[] exonIndicies = new int[(end-start)+1];
        
        int j = 0;
        for(int i = start; i <= end; i++) {
            exonIndicies[j++] = Strand.REVERSE.equals(strand) ? ((exonList.size()-1)-i) : i;
        }
        
        if(Strand.REVERSE.equals(strand)) ArrayUtils.reverse(exonIndicies);
        
        return exonIndicies;
    }