From 44a42907405bc9a06f2c0b041b1c9b2e1696b5b0 Mon Sep 17 00:00:00 2001 From: Andy Magee Date: Sat, 9 Sep 2023 19:37:28 -0700 Subject: [PATCH] Make fewer objects, crash less --- ...bstitutionModelRandomEffectClassifier.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/dr/evomodel/substmodel/SubstitutionModelRandomEffectClassifier.java b/src/dr/evomodel/substmodel/SubstitutionModelRandomEffectClassifier.java index ff583ec15f..99a8db95ac 100644 --- a/src/dr/evomodel/substmodel/SubstitutionModelRandomEffectClassifier.java +++ b/src/dr/evomodel/substmodel/SubstitutionModelRandomEffectClassifier.java @@ -27,6 +27,10 @@ public class SubstitutionModelRandomEffectClassifier extends TreeStatistic imple private GammaSiteRateModel siteModel; private BranchRateModel branchRates; + private Parameter proxyRates; + private ComplexSubstitutionModel proxy; + private MarkovJumpsSubstitutionModel markovJumps; + private final boolean usingRateVariation; private final boolean usingEpochs; private boolean[] epochUsesTargetModel; @@ -93,6 +97,11 @@ public SubstitutionModelRandomEffectClassifier(String name, idx++; } } + + this.proxyRates = new Parameter.Default(dim); + this.proxy = new ComplexSubstitutionModel("internalGlmProxyForSubstitutionModelRandomEffectClassifier", + glmSubstitutionModel.getDataType(),glmSubstitutionModel.getFrequencyModel(),proxyRates); + this.markovJumps = new MarkovJumpsSubstitutionModel(proxy, MarkovJumpsType.COUNTS); } @Override @@ -110,7 +119,7 @@ public int getDimension() { return dim; } - private ComplexSubstitutionModel makeProxyModel(int index, boolean includeRandomEffect) { + private void makeProxyModel(int index, boolean includeRandomEffect) { double[] relativeRates = new double[dim]; glmSubstitutionModel.setupRelativeRates(relativeRates); @@ -120,13 +129,12 @@ private ComplexSubstitutionModel makeProxyModel(int index, boolean includeRandom relativeRates[index] /= Math.exp(copiedParameterValues[index]); } - Parameter relativeRateDummyParameter = new Parameter.Default(dim); for (int i = 0; i < dim; i++) { - relativeRateDummyParameter.setParameterValueQuietly(i,relativeRates[i]); + proxyRates.setParameterValue(i,relativeRates[i]); } - return new ComplexSubstitutionModel("internalGlmProxyForSubstitutionModelRandomEffectClassifier", - glmSubstitutionModel.getDataType(),glmSubstitutionModel.getFrequencyModel(),relativeRateDummyParameter); +// return new ComplexSubstitutionModel("internalGlmProxyForSubstitutionModelRandomEffectClassifier", +// glmSubstitutionModel.getDataType(),glmSubstitutionModel.getFrequencyModel(),relativeRateDummyParameter); } @@ -190,8 +198,7 @@ private double getDoubleResult(double countDiff) { // } private double getCountForRateCategory(int index, double time, boolean includeRandomEffect, boolean countAll) { - ComplexSubstitutionModel proxy = makeProxyModel(index, includeRandomEffect); - MarkovJumpsSubstitutionModel markovJumps = new MarkovJumpsSubstitutionModel(proxy, MarkovJumpsType.COUNTS); + makeProxyModel(index, includeRandomEffect); double[] register = new double[nStates * nStates]; double[] jointCounts = new double[nStates * nStates];