Esempio n. 1
0
  /* (non-Javadoc)
   * @see java.lang.Runnable#run()
   */
  @Override
  public void run() {

    ICluster cluster = ClusterManager.getCluster();

    while (true) {

      try {
        Thread.sleep(3000); // wait 3 sec.
      } catch (InterruptedException e) {
      }

      try {
        ITestClusterService service =
            (ITestClusterService) cluster.getClusterService(ITestClusterService.SERVICE_NAME);
        if (service == null) {
          System.err.println("ERROR: service is null");
        } else {

          long nextNumber = service.takeNextNumber();
          // System.out.println("Next Number is: " + nextNumber);

          cluster.sendEvent(
              new ClusterEvent("TestNumberSequence", "NumberToken", new Long(nextNumber)), true);
          StartTestInstance.addNumber(nextNumber);
        }

      } catch (Throwable t) {
        t.printStackTrace();
      }
    }
  }
  /**
   * this is what a Mapper does
   *
   * @param valuein @return iterator over mapped key values
   */
  @Override
  public Iterable<KeyValueObject<PeakMZKey, ICluster>> mapValues(final ICluster valuein) {
    double precursorMZ = valuein.getPrecursorMz();

    List<KeyValueObject<PeakMZKey, ICluster>> ret =
        new ArrayList<KeyValueObject<PeakMZKey, ICluster>>();
    List<ISpectrum> clusteredSpectra = valuein.getClusteredSpectra();
    if (!clusteredSpectra.isEmpty() && precursorMZ < MZIntensityUtilities.HIGHEST_USABLE_MZ) {
      for (ISpectrum match : clusteredSpectra) {
        ICluster cluster = ClusterUtilities.asCluster(match);
        for (int peakMz : match.asMajorPeakMZs(Defaults.getMajorPeakCount())) {
          PeakMZKey mzKey = new PeakMZKey(peakMz, precursorMZ);
          ret.add(new KeyValueObject<PeakMZKey, ICluster>(mzKey, cluster));
        }
      }
    }
    return ret;
  }
  private ICluster mergeCluster(ProximityMatrix m, ICluster c1, ICluster c2) {
    // la matrice di prossimità si aggiorna sostituendo i due cluster con un nuovo cluster

    // stores distances between the given clusters and each other clusters

    Map<ICluster, Float> c1Distances = new HashMap<ICluster, Float>();
    Map<ICluster, Float> c2Distances = new HashMap<ICluster, Float>();

    for (ICluster cluster : m.getClusters()) {
      // does not consider removed clusters
      if (!cluster.equals(c1) && !cluster.equals(c2)) {
        c1Distances.put(cluster, m.getClustersDistance(c1, cluster));
        c2Distances.put(cluster, m.getClustersDistance(c2, cluster));
      }
    }

    // removes the clusters from the matrix
    m.removeClusters(c1, c2);

    // generates the merged cluster and adds it to the matrix
    ICluster mergedCluster = this.getMergedCluster(c1, c2);
    m.addCluster(mergedCluster);

    // le distanze da tutti gli altri cluster sono date dalla minima delle distanze relative ai
    // cluster precedenti

    // updates new cluster's distances
    for (ICluster cluster : c1Distances.keySet()) {
      float c1Distance = c1Distances.get(cluster);
      float c2Distance = c2Distances.get(cluster);
      float distance = c1Distance < c2Distance ? c1Distance : c2Distance;

      m.setClustersDistance(mergedCluster, cluster, distance);
    }

    return mergedCluster;
  }