Example #1
0
  @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;
  }