public IEnumerable <CalculationMethodCombination> MapFrom(ParameterIdentification parameterIdentification) { var treeRoot = new TreeItem <CalculationMethodWithCompoundName>(); var categorialParameterIdentificationRunMode = parameterIdentification.Configuration.RunMode.DowncastTo <CategorialParameterIdentificationRunMode>(); parameterIdentification.DistinctCompoundNames().Each(compoundName => { buildCalculationMethodCombinationTree(compoundName, categorialParameterIdentificationRunMode.CalculationMethodCacheFor(compoundName), treeRoot); }); return(allCombinations(treeRoot).Where(x => !categorialParameterIdentificationRunMode.AllTheSame || x.AllCompoundsUseSameCalculationMethod())); }