Пример #1
0
  @Override
  public void initAndValidate() {
    meanRate = meanRateInput.get();
    speciesTreeRatesX = speciesTreeRatesInput.get();
    geneTree = geneTreeInput.get();

    geneNodeCount = geneTree.getNodeCount();
    branchRates = new double[geneNodeCount];
    storedBranchRates = new double[geneNodeCount];
    needsUpdate = true;
  }
Пример #2
0
  private void update() {
    final double geneTreeRate = meanRate.getValue();
    final double[] speciesTreeRates = speciesTreeRatesX.getRatesArray();
    final double[] speciesOccupancy = geneTree.getSpeciesOccupancy();

    final int speciesNodeCount = speciesTreeRates.length;
    for (int i = 0; i < geneNodeCount - 1; i++) {
      double weightedSum = 0.0;
      double branchLength = 0.0;
      for (int j = 0; j < speciesNodeCount; j++) {
        // System.out.println(String.format("%d, %d: %f, %f", i, j, speciesTreeRates[j],
        // speciesOccupancy[i * speciesNodeCount + j]));
        weightedSum += speciesTreeRates[j] * speciesOccupancy[i * speciesNodeCount + j];
        branchLength += speciesOccupancy[i * speciesNodeCount + j];
      }

      branchRates[i] = geneTreeRate * weightedSum / branchLength;
    }
    // set the rate for the root branch of this gene to equal the input mean rate
    branchRates[geneNodeCount - 1] = geneTreeRate;

    needsUpdate = false;
  }