5151
5252public class ThorneyTreeLikelihood extends AbstractModelLikelihood implements Reportable {
5353
54- public ThorneyTreeLikelihood (String name , TreeModel treeModel , BranchLengthProvider branchLengthProvider , ThorneyBranchLengthLikelihoodDelegate thorneyBranchLengthLikelihoodDelegate , BranchRateModel branchRateModel ) {
54+ public ThorneyTreeLikelihood (String name , TreeModel treeModel , BranchLengthProvider branchLengthProvider , ThorneyBranchLengthLikelihoodDelegate thorneyBranchLengthLikelihoodDelegate ) {
5555
5656 super (name );
5757
5858 this .treeModel = treeModel ;
5959 addModel (treeModel );
6060 this .thorneyBranchLengthLikelihoodDelegate = thorneyBranchLengthLikelihoodDelegate ;
6161 this .branchLengthProvider = branchLengthProvider ;
62- this .branchRateModel = branchRateModel ;
62+ assert thorneyBranchLengthLikelihoodDelegate instanceof Model ;
63+ addModel ((Model ) thorneyBranchLengthLikelihoodDelegate );
6364
64- if (this .thorneyBranchLengthLikelihoodDelegate instanceof Model & this .branchRateModel !=null ){
65- throw new IllegalArgumentException ("Can't use a branch rate likelihood with a rate parameter in combination with a branch rate model. Please remove either the parameter or the model" );
66- }
67- if (this .branchRateModel !=null ){
68- this .likelihoodDelegate =new branchRateModelLikelihood ();
69- addModel (this .branchRateModel );
70- }else {
71- this .likelihoodDelegate =new additiveRateLikelihood ();
72- assert thorneyBranchLengthLikelihoodDelegate instanceof Model ;
73- addModel ((Model ) thorneyBranchLengthLikelihoodDelegate );
7465
75- }
7666
7767 updateNode = new boolean [treeModel .getNodeCount ()];
7868 Arrays .fill (updateNode , true );
@@ -85,9 +75,7 @@ public ThorneyTreeLikelihood(String name, TreeModel treeModel, BranchLengthProvi
8575 cachedRootChild1 = treeModel .getChild (treeModel .getRoot (), 0 ).getNumber ();
8676 cachedRootChild2 = treeModel .getChild (treeModel .getRoot (), 1 ).getNumber ();
8777 }
88- public ThorneyTreeLikelihood (String name , TreeModel treeModel , BranchLengthProvider branchLengthProvider , ThorneyBranchLengthLikelihoodDelegate thorneyBranchLengthLikelihoodDelegate ) {
89- this (name , treeModel , branchLengthProvider , thorneyBranchLengthLikelihoodDelegate , null );
90- }
78+
9179
9280
9381 /**
@@ -201,13 +189,9 @@ protected void handleModelChangedEvent(Model model, Object object, int index) {
201189 } else if (model == thorneyBranchLengthLikelihoodDelegate ) {
202190 if (index == -1 ) {
203191 updateAllNodes ();
204- }
205- } else if (model == branchRateModel ) {
206- if (index == -1 ) {
207- updateAllNodes ();
208- } else {
209- updateNode (treeModel .getNode (index ));
210- }
192+ } else {
193+ updateNode (treeModel .getNode (index ));
194+ }
211195 }
212196 else {
213197 throw new RuntimeException ("Unknown componentChangedEvent" );
@@ -250,41 +234,36 @@ protected void acceptState() {
250234 // **************************************************************
251235 // Likelihood IMPLEMENTATION
252236 // **************************************************************
253- // private double calculateLogLikelihood(NodeRef node, int root, int rootChild1, int rootChild2) {
254- // int nodeIndex = node.getNumber();
255- //
256- // if (updateNode[nodeIndex]) {
257- // double logL;
258- // if(nodeIndex==root || nodeIndex==rootChild2){
259- // logL=0;
260- // }else{
261- // double time = treeModel.getBranchLength(node);
262- // double mutations = branchLengthProvider.getBranchLength(treeModel, node);
263- //
264- // if (nodeIndex == rootChild1) {
265- // // sum the branches on both sides of the root
266- // NodeRef node2 = treeModel.getNode(rootChild2);
267- // time += treeModel.getBranchLength(node2);
268- // mutations += branchLengthProvider.getBranchLength(treeModel, node2);
269- // }
270- //// gamma.setScale(1.0);
271- //// branchLogL[i] = gamma.logPdf(x);
272- // if(this.branchRateModel!=null) {
273- // logL = thorneyBranchLengthLikelihoodDelegate.getLogLikelihood(mutations, time); //SaddlePointExpansion.logBinomialProbability((int)x, sequenceLength, expected, 1.0D - expected);
274- // }else{
275- // logL = thorneyBranchLengthLikelihoodDelegate.getLogLikelihood(mutations, time); //SaddlePointExpansion.logBinomialProbability((int)x, sequenceLength, expected, 1.0D - expected);
276- //
277- // }
278- // }
279- //
280- // for (int i = 0; i < treeModel.getChildCount(node); i++) {
281- // logL += calculateLogLikelihood(treeModel.getChild(node, i),root,rootChild1,rootChild2);
282- // }
283- // branchLogL[nodeIndex] = logL;
284- // updateNode[nodeIndex] = false;
285- // }
286- // return branchLogL[nodeIndex];
287- // }
237+ public double calculateLogLikelihood (NodeRef node , int root , int rootChild1 , int rootChild2 ) {
238+ int nodeIndex = node .getNumber ();
239+
240+ if (updateNode [nodeIndex ]) {
241+ double logL ;
242+ if (nodeIndex ==root ){
243+ logL =0 ;
244+ }else {
245+ double time = treeModel .getBranchLength (node );
246+ double mutations = branchLengthProvider .getBranchLength (treeModel , node );
247+
248+ // if (nodeIndex == rootChild1) {
249+ // // sum the branches on both sides of the root
250+ // NodeRef node2 = treeModel.getNode(rootChild2);
251+ // time += treeModel.getBranchLength(node2);
252+ // mutations += branchLengthProvider.getBranchLength(treeModel, node2);
253+ // }
254+ // gamma.setScale(1.0);
255+ // branchLogL[i] = gamma.logPdf(x);
256+ logL = thorneyBranchLengthLikelihoodDelegate .getLogLikelihood (mutations , time ,treeModel ,node ); //SaddlePointExpansion.logBinomialProbability((int)x, sequenceLength, expected, 1.0D - expected);
257+
258+ }
259+ for (int i = 0 ; i < treeModel .getChildCount (node ); i ++) {
260+ logL += this .calculateLogLikelihood (treeModel .getChild (node , i ),root ,rootChild1 ,rootChild2 );
261+ }
262+ branchLogL [nodeIndex ] = logL ;
263+ updateNode [nodeIndex ] = false ;
264+ }
265+ return branchLogL [nodeIndex ];
266+ }
288267 private double calculateLogLikelihoodLinear () {
289268
290269// makeDirty();
@@ -301,25 +280,25 @@ private double calculateLogLikelihoodLinear() {
301280
302281 double logL = 0.0 ;
303282 for (int i = 0 ; i < treeModel .getNodeCount (); i ++) {
304- if (updateNode [i ] && i != root && i != rootChild2 ) {
283+ if (updateNode [i ] && i != root ) {
305284 NodeRef node = treeModel .getNode (i );
306285 // skip the root and the second child of the root (this is added to the first child)
307286
308287 double time = treeModel .getBranchLength (node );
309288 double mutations = branchLengthProvider .getBranchLength (treeModel , node );
310289
311- if (i == rootChild1 ) {
312- // sum the branches on both sides of the root
313- NodeRef node2 = treeModel .getNode (rootChild2 );
314- time += treeModel .getBranchLength (node2 );
315- mutations += branchLengthProvider .getBranchLength (treeModel , node2 );
316- }
317- // double mean = expected * sequenceLength;
318-
319- // gamma.setScale(1.0);
320- // branchLogL[i] = gamma.logPdf(x);
290+ // if (i == rootChild1) {
291+ // // sum the branches on both sides of the root
292+ // NodeRef node2 = treeModel.getNode(rootChild2);
293+ // time += treeModel.getBranchLength(node2);
294+ // mutations += branchLengthProvider.getBranchLength(treeModel, node2);
295+ // }
296+ //// double mean = expected * sequenceLength;
297+ //
298+ //// gamma.setScale(1.0);
299+ //// branchLogL[i] = gamma.logPdf(x);
321300
322- branchLogL [i ] = thorneyBranchLengthLikelihoodDelegate .getLogLikelihood (mutations ,time );
301+ branchLogL [i ] = thorneyBranchLengthLikelihoodDelegate .getLogLikelihood (mutations ,time , treeModel , node );
323302 //SaddlePointExpansion.logPoissonProbability(mean,(int)x); //SaddlePointExpansion.logBinomialProbability((int)x, sequenceLength, expected, 1.0D - expected);
324303 }
325304 updateNode [i ] = false ;
@@ -337,7 +316,7 @@ private double calculateLogLikelihood() {
337316 updateNode [rootChild1 ] = updateNode [rootChild1 ] || updateNode [rootChild2 ] ;
338317 assert updateNode [root ];
339318
340- return likelihoodDelegate . calculateLogLikelihood (treeModel .getRoot (), root , rootChild1 , rootChild2 );
319+ return calculateLogLikelihood (treeModel .getRoot (), root , rootChild1 , rootChild2 );
341320
342321 }
343322 public final Model getModel () {
@@ -375,57 +354,23 @@ public double calculateLogLikelihood(NodeRef node, int root, int rootChild1, int
375354
376355 if (updateNode [nodeIndex ]) {
377356 double logL ;
378- if (nodeIndex ==root || nodeIndex == rootChild2 ){
357+ if (nodeIndex ==root ){
379358 logL =0 ;
380359 }else {
381360 double time = treeModel .getBranchLength (node );
382361 double mutations = branchLengthProvider .getBranchLength (treeModel , node );
383362
384- if (nodeIndex == rootChild1 ) {
385- // sum the branches on both sides of the root
386- NodeRef node2 = treeModel .getNode (rootChild2 );
387- time += treeModel .getBranchLength (node2 );
388- mutations += branchLengthProvider .getBranchLength (treeModel , node2 );
389- }
363+ // if (nodeIndex == rootChild1) {
364+ // // sum the branches on both sides of the root
365+ // NodeRef node2 = treeModel.getNode(rootChild2);
366+ // time += treeModel.getBranchLength(node2);
367+ // mutations += branchLengthProvider.getBranchLength(treeModel, node2);
368+ // }
390369// gamma.setScale(1.0);
391370// branchLogL[i] = gamma.logPdf(x);
392- logL = thorneyBranchLengthLikelihoodDelegate .getLogLikelihood (mutations , time ); //SaddlePointExpansion.logBinomialProbability((int)x, sequenceLength, expected, 1.0D - expected);
393-
394- }
395-
396- for (int i = 0 ; i < treeModel .getChildCount (node ); i ++) {
397- logL += this .calculateLogLikelihood (treeModel .getChild (node , i ),root ,rootChild1 ,rootChild2 );
398- }
399- branchLogL [nodeIndex ] = logL ;
400- updateNode [nodeIndex ] = false ;
401- }
402- return branchLogL [nodeIndex ];
403- }
404- }
405- private class branchRateModelLikelihood implements LikelihoodDelegate {
406-
407- public double calculateLogLikelihood (NodeRef node , int root , int rootChild1 , int rootChild2 ) {
408- int nodeIndex = node .getNumber ();
409-
410- if (updateNode [nodeIndex ]) {
411- double logL ;
412- if (nodeIndex ==root || nodeIndex ==rootChild2 ){
413- logL =0 ;
414- }else {
415- double expectation = treeModel .getBranchLength (node ) * branchRateModel .getBranchRate (treeModel , node );
416- double mutations = branchLengthProvider .getBranchLength (treeModel , node );
371+ logL = thorneyBranchLengthLikelihoodDelegate .getLogLikelihood (mutations , time ,treeModel ,node ); //SaddlePointExpansion.logBinomialProbability((int)x, sequenceLength, expected, 1.0D - expected);
417372
418- if (nodeIndex == rootChild1 ) {
419- // sum the branches on both sides of the root
420- NodeRef node2 = treeModel .getNode (rootChild2 );
421- expectation += treeModel .getBranchLength (node2 )*branchRateModel .getBranchRate (treeModel , node2 );
422- mutations += branchLengthProvider .getBranchLength (treeModel , node2 );
423- }
424- // gamma.setScale(1.0);
425- // branchLogL[i] = gamma.logPdf(x);
426- logL = thorneyBranchLengthLikelihoodDelegate .getLogLikelihood (mutations , expectation ); //SaddlePointExpansion.logBinomialProbability((int)x, sequenceLength, expected, 1.0D - expected);
427373 }
428-
429374 for (int i = 0 ; i < treeModel .getChildCount (node ); i ++) {
430375 logL += this .calculateLogLikelihood (treeModel .getChild (node , i ),root ,rootChild1 ,rootChild2 );
431376 }
@@ -447,7 +392,7 @@ public double calculateLogLikelihood(NodeRef node, int root, int rootChild1, int
447392
448393 private final ThorneyBranchLengthLikelihoodDelegate thorneyBranchLengthLikelihoodDelegate ;
449394 private final BranchLengthProvider branchLengthProvider ;
450- private final BranchRateModel branchRateModel ;
395+
451396
452397 //private final double[][] distanceMatrix;
453398
0 commit comments