package beast.evolution.branchratemodel;

import beast.core.Description;
import beast.core.Function;
import beast.core.parameter.RealParameter;
import beast.evolution.tree.Node;

/**
 * @author Alexei Drummond
 */

@Description("Defines a mean rate for each branch in the beast.tree.")
public class StrictClockModel extends BranchRateModel.Base {

	// public Input<RealParameter> muParameterInput = new Input<>("clock.rate", "the
	// clock rate (defaults to 1.0)");

	protected Function muSource;
	private double mu = 1.0;

	@Override
	public void initAndValidate() {
		if (meanRateInput.get() != null) {
			muSource = meanRateInput.get();
			try {
				RealParameter muParameter = (RealParameter) muSource;
				muParameter.setBounds(Math.max(0.0, muParameter.getLower()), muParameter.getUpper());
			} catch (ClassCastException t) {
				// Nothing
			}
			mu = muSource.getArrayValue();
		}
	}

	@Override
	public double getRateForBranch(final Node node) {
		return mu;
	}

	@Override
	public boolean requiresRecalculation() {
		mu = muSource.getArrayValue();
		return true;
	}

	@Override
	protected void restore() {
		mu = muSource.getArrayValue();
		super.restore();
	}

	@Override
	protected void store() {
		mu = muSource.getArrayValue();
		super.store();
	}

}

@@ -341,17 +341,20 @@
 Base %7B%0A%0A
-%09
+    
 // publi
@@ -426,17 +426,20 @@
 %22, %22the%0A
-%09
+    
 // clock
@@ -466,17 +466,20 @@
 .0)%22);%0A%0A
-%09
+    
 protecte
@@ -499,17 +499,20 @@
 Source;%0A
-%09
+    
 private 
@@ -529,17 +529,20 @@
 = 1.0;%0A%0A
-%09
+    
 @Overrid
@@ -539,25 +539,28 @@
   @Override%0A
-%09
+    
 public void 
@@ -579,18 +579,24 @@
 ate() %7B%0A
-%09%09
+        
 if (mean
@@ -622,19 +622,28 @@
 null) %7B%0A
-%09%09%09
+            
 muSource
@@ -670,21 +670,77 @@
 ();%0A
-%09%09%09try %7B%0A%09%09%09%09
+            if (muSource instanceof RealParameter) %7B%0A                
 Real
@@ -789,20 +789,32 @@
 Source;%0A
-%09%09%09%09
+                
 muParame
@@ -895,67 +895,34 @@
 ));%0A
-%09%09%09%7D catch (ClassCastException t) %7B%0A%09%09%09%09// Nothing%0A%09%09%09%7D%0A%09%09%09
+            %7D%0A            
 mu =
@@ -952,17 +952,29 @@
 ();%0A
-%09%09%7D%0A%09%7D%0A%0A%09
+        %7D%0A    %7D%0A%0A    
 @Ove
@@ -975,25 +975,28 @@
   @Override%0A
-%09
+    
 public doubl
@@ -1033,18 +1033,24 @@
 node) %7B%0A
-%09%09
+        
 return m
@@ -1052,21 +1052,27 @@
 urn mu;%0A
-%09%7D%0A%0A%09
+    %7D%0A%0A    
 @Overrid
@@ -1073,17 +1073,20 @@
 verride%0A
-%09
+    
 public b
@@ -1114,26 +1114,32 @@
 ulation() %7B%0A
-%09%09
+        
 mu = muSourc
@@ -1157,18 +1157,24 @@
 alue();%0A
-%09%09
+        
 return t
@@ -1178,21 +1178,27 @@
 n true;%0A
-%09%7D%0A%0A%09
+    %7D%0A%0A    
 @Overrid
@@ -1191,33 +1191,36 @@
 %0A%0A    @Override%0A
-%09
+    
 protected void r
@@ -1222,34 +1222,40 @@
 oid restore() %7B%0A
-%09%09
+        
 mu = muSource.ge
@@ -1265,26 +1265,32 @@
 rayValue();%0A
-%09%09
+        
 super.restor
@@ -1298,13 +1298,19 @@
 ();%0A
-%09%7D%0A%0A%09
+    %7D%0A%0A    
 @Ove
@@ -1315,17 +1315,20 @@
 verride%0A
-%09
+    
 protecte
@@ -1344,18 +1344,24 @@
 ore() %7B%0A
-%09%09
+        
 mu = muS
@@ -1387,10 +1387,16 @@
 ();%0A
-%09%09
+        
 supe
@@ -1410,9 +1410,12 @@
 ();%0A
-%09
+    
 %7D%0A%0A%7D

Use instanceof instead of try clause