/// <summary>Computations that do not depend on observed values</summary>
 private void Constant()
 {
     if (this.Constant_isDone)
     {
         return;
     }
     this.firstCoin_marginal_F  = Bernoulli.Uniform();
     this.secondCoin_marginal_F = Bernoulli.Uniform();
     // Message to 'bothHeads' from And factor
     this.bothHeads_F     = BooleanAndOp.AndAverageLogarithm(this.firstCoin_marginal_F, this.secondCoin_marginal_F);
     this.Constant_isDone = true;
 }
 /// <summary>Computations that depend on the observed value of firstCoin</summary>
 private void Changed_firstCoin()
 {
     if (this.Changed_firstCoin_isDone)
     {
         return;
     }
     this.firstCoin_marginal    = Bernoulli.Uniform();
     this.firstCoin_marginal    = Distribution.SetPoint <Bernoulli, bool>(this.firstCoin_marginal, this.FirstCoin);
     this.secondCoin_marginal_F = Bernoulli.Uniform();
     // Message to 'bothHeads' from And factor
     this.bothHeads_F = BooleanAndOp.AndAverageLogarithm(this.FirstCoin, this.secondCoin_marginal_F);
     this.Changed_firstCoin_isDone = true;
 }