@Override protected Void doInBackground() throws Exception { int count = 0; String sep = "\t"; try { PrintWriter writer = new PrintWriter(file); writer.write("Feature_Number" + sep); writer.write("Location" + sep); writer.write("Gene_name" + sep); writer.write("Gene_accession" + sep); writer.write("Gene_Location" + sep); writer.write("distance_to_tss" + "\n"); for (Region r : feature.getRegions()) { Peak peak = (Peak) r; String chrom = peak.chrom; if (geneData.hasKey(chrom)) { int index = geneData.getNCList(chrom).getOverlapIndex(peak); Vector<Region> preGenes = new Vector<Region>(); Vector<Region> nearGenes; Vector<Region> postGenes = new Vector<Region>(); if (index > 0) { preGenes = geneData.getNCList(chrom).getRegionsAt(index - 1); } nearGenes = geneData.getNCList(chrom).getRegionsAt(index); if (index + 1 < geneData.getNCList(chrom).size()) { postGenes = geneData.getNCList(chrom).getRegionsAt(index + 1); } nearGenes.addAll(preGenes); nearGenes.addAll(postGenes); Gene nearestGene = null; long min_dist = Long.MAX_VALUE; for (Region testPeak : nearGenes) { // print(testPeak.getClass().toString()); Gene g = (Gene) testPeak; long dist = getDistToTss(peak, g); if (dist < min_dist) { min_dist = dist; nearestGene = (Gene) testPeak; } } // end for, each close gene. writer.write(count + sep); writer.write(peak.getLocationString() + sep); writer.write(nearestGene.getName() + sep); writer.write(nearestGene.getAccession() + sep); writer.write(nearestGene.getLocationString() + sep); writer.write(min_dist + "\n"); } // end if, has same chromosome key ++count; } // end for, each peak region writer.close(); } catch (Exception ex) { ex.printStackTrace(); } return null; }