Set<SignalKey> getExpressedSignals(final boolean external) { // calculate the signal concentrations final HashSet<SignalKey> allSignals = new HashSet<SignalKey>(); for (AbstractWaveletGene waveletGene : this.sequencedGenes) { // if the current gene doesnt express a signal then skip it. if (!(waveletGene instanceof SignalGene)) continue; // convert the gene's type final SignalGene gene = (SignalGene) waveletGene; // check if the gene's signal is internal or external. continue if // it doesnt match if (external) { // if its not an outward pointing external gene then just skip it if (!(gene instanceof ExternalSignalGene)) continue; else if (!((ExternalSignalGene) gene).isOutward()) continue; } else { // if its an outward pointing external than just skip it. if ((gene instanceof ExternalSignalGene) && (((ExternalSignalGene) gene).isOutward())) continue; } allSignals.add(gene.getOutputSignal()); } return Collections.unmodifiableSet(allSignals); }