public CachedProbe(AffyProbe ap, Vector<AffyExperiment> expts) {
   probe = ap;
   min = max = 0.0;
   color = Color.lightGray;
   stroke = new BasicStroke((float) 2.0);
   values = new Vector<Double>();
   for (AffyExperiment e : expts) {
     AffyMeasurement am = e.getMeasurement(probe);
     if (am != null) {
       values.add(am.getValue());
       min = Math.min(am.getValue(), min);
       max = Math.max(am.getValue(), max);
     } else {
       values.add(null);
     }
   }
 }
  public void paintProbe(Graphics2D g2, int x1, int y1, int x2, int y2, double tmin, double tmax) {
    g2.setStroke(stroke);
    g2.setColor(color);

    int ppx = -1, ppy = -1;
    for (int i = 0; i < values.size(); i++) {
      Double v = values.get(i);
      if (v != null && tmax - tmin > 0.0) {
        double frac = (v - tmin) / (tmax - tmin);
        int pixY = y2 - (int) Math.round(frac * (y2 - y1));
        int pixX = x1 + (int) Math.floor((double) (i + 1) / (double) (values.size() + 2));

        if (ppx != -1) {
          g2.drawLine(ppx, ppy, pixX, pixY);
        }

        ppx = pixX;
        ppy = pixY;

      } else {
        ppx = ppy = -1;
      }
    }
  }
 public WeightMatrix getRepresentative(Cluster<WeightMatrix> cluster) {
   Set<WeightMatrix> matrices = cluster.getElements();
   WeightMatrix bestwm = null;
   double bestdist = Double.MAX_VALUE;
   for (WeightMatrix i : matrices) {
     double sum = 0;
     for (WeightMatrix j : matrices) {
       sum += Math.pow(comp.compare(i, j), 2);
     }
     //            System.err.println("  " + i + " : " + sum + " <? " + bestdist);
     sum = sum / matrices.size();
     if (sum < bestdist) {
       bestwm = i;
       bestdist = sum;
     }
   }
   if (bestwm == null) {
     System.err.println("OOPS!" + bestdist);
     System.err.println(matrices.toString());
   }
   return bestwm;
 }