public Void doInBackground() {
           
            setProgress(0);

            ArrayList<Point2D> ser = new ArrayList<Point2D>();
            int count = 0;
            int total = seqs.size()*(seqs.size()-1)/2;
            int step = total/10+1;
            int[] hist = new int[seqs.getMaxSeqLength()];
            for (int i=0; i<seqs.size(); i++) {

            	for(int j=i+1; j<seqs.size(); j++) {
            		int difs = numDifs(seqs.get(i), seqs.get(j));
            		hist[difs]++;
            		count++;
            	}
            	setProgress( (int)Math.round(100*(double)count/(double)total));
            }

            int lowerCutoff = 0;
            while(lowerCutoff< hist.length && hist[lowerCutoff]==0)
            	lowerCutoff++;

            int upperCutoff = hist.length-1;
            while(upperCutoff>lowerCutoff && hist[upperCutoff]==0)
            	upperCutoff--;


            for(int i=lowerCutoff; i<=upperCutoff; i++) {
            	ser.add(new Point2D.Double(i, hist[i]));
            }

            setProgress(Math.min(100, 100*count/total));

            difCounts = new XYSeries(ser);

            return null;
        }