/// <summary>
 /// The callable genes will be the source gene and all of the source gene's 
 /// children and their children's children, etc.
 /// </summary>
 /// <param name="sourceGene"></param>
 /// <returns></returns>
 public override IList<IGEPGene> GetCallableGenes(IGEPGene sourceGene)
 {
     var callableGenes = new List<IGEPGene>() { sourceGene };
     foreach (IGEPGene childGene in sourceGene.GetChildGenes())
         callableGenes.AddRange(this.GetCallableGenes(childGene));
     return callableGenes;
 }
 /// <summary>
 /// The callable genes will be the source gene and all of the source gene's immediate children.
 /// </summary>
 /// <param name="sourceGene"></param>
 /// <returns></returns>
 public override IList<IGEPGene> GetCallableGenes(IGEPGene sourceGene)
 {
     var callableGenes = new List<IGEPGene>() { sourceGene };
     callableGenes.AddRange(sourceGene.GetChildGenes().Cast<IGEPGene>());
     return callableGenes;
 }
 /// <summary>
 /// The callable genes will be all of the source gene's immediate children.
 /// </summary>
 /// <param name="sourceGene"></param>
 /// <returns></returns>
 public override IList<IGEPGene> GetCallableGenes(IGEPGene sourceGene)
 {
     return sourceGene.GetChildGenes().Cast<IGEPGene>().ToList();
 }