public static IEnumerable <IHashableFeature> GetInPropertySubSeqEnumeration(IHashableFeature regionFeature, bool fromLeft, IEnumerable <IHashableFeature> epitopeSubSeqEnumeration, Pair <NEC, Hla> entity, int littleLength) { foreach (IHashableFeature epitopeSubSeq in epitopeSubSeqEnumeration) { string aaSeqFull = (string)((Feature)epitopeSubSeq).Evaluate(entity); foreach (string aaSeqLittle in SpecialFunctions.SubstringEnumeration(aaSeqFull, littleLength)) { foreach (List <string> propertyCombination in KmerProperties.EveryPropertyCombination(aaSeqLittle)) { string propertySeq = SpecialFunctions.Join(",", propertyCombination); InProperty feature = InProperty.GetInstance(propertySeq, epitopeSubSeq); Debug.Assert((bool)feature.Evaluate(entity)); // real assert - must only generate true features yield return(feature); } } } }
public static IEnumerable <IHashableFeature> GetPropertySeqInRegionInstance(int k, Pair <NEC, Hla> necAndHla, IHashableFeature regionFeature) { NEC nec = necAndHla.First; string region = (string)((Feature)regionFeature).Evaluate(necAndHla); Set <string> aaSeqSet = Set <string> .GetInstance(SpecialFunctions.SubstringEnumeration(region, k)); foreach (string aaSeq in aaSeqSet) { foreach (List <string> propertyCombination in KmerProperties.EveryPropertyCombination(aaSeq)) { string propertySeq = SpecialFunctions.Join(",", propertyCombination); InProperty feature = InProperty.GetInstance(propertySeq, regionFeature); Debug.Assert((bool)feature.Evaluate(necAndHla)); // real assert - must only generate true features yield return(feature); } } }
//static private Dictionary<Pair<NEC, Hla>, bool> CloseHuman = null; //GeneratorType.Hla | GeneratorType.Position | GeneratorType.Property | GeneratorType.AndHla | GeneratorType.Zero6Supertype | GeneratorType.AndZero6Supertype private static Set <IHashableFeature> GenerateFeatureSet( object entity, string supertypeTableSource, int?flankSizeOrNull, bool includeFlankNECFeatures, bool includeChemicalProperties, bool includeAAFeatures, bool addEiFeatures ) { bool includeAndHlaAndSTWithEpitopeAdjFeatures = false; bool subtractSupertypeFeatures = false; bool subtractHlaFeatures = false; bool substractChemAACrissCrossFeatures = false; SpecialFunctions.CheckCondition(!includeAndHlaAndSTWithEpitopeAdjFeatures || includeFlankNECFeatures); Pair <NEC, Hla> necAndHlaX = (Pair <NEC, Hla>)entity; NEC nec = (null == flankSizeOrNull) ? necAndHlaX.First : NEC.GetInstance(necAndHlaX.First, (int)flankSizeOrNull); Hla hla = necAndHlaX.Second; Debug.Assert(nec.N.Length == nec.C.Length); // real assert Pair <NEC, Hla> necAndHla = new Pair <NEC, Hla>(nec, hla); Set <IHashableFeature> hlaishFeatureSet = new Set <IHashableFeature>(); CreateAndAddHlaFeature(subtractHlaFeatures, hla, necAndHla, ref hlaishFeatureSet); CreateAndAddFeatureSupertype(supertypeTableSource, subtractSupertypeFeatures, hla, necAndHla, ref hlaishFeatureSet, Assembly.GetExecutingAssembly(), Predictor.ResourceString); Set <IHashableFeature> featureSet = Set <IHashableFeature> .GetInstance(hlaishFeatureSet); if (addEiFeatures) { AddEiFeatures(includeChemicalProperties, includeAAFeatures, substractChemAACrissCrossFeatures, nec, necAndHla, hlaishFeatureSet, featureSet); } if (includeFlankNECFeatures) { List <IHashableFeature> aaInNFlankFeatureList = new List <IHashableFeature>(In.GetAASeqInRegionInstance(1, necAndHla, NFlank.GetInstance())); DebugCheckThatEvaluatesToTrue(necAndHla, aaInNFlankFeatureList); if (includeAAFeatures) { featureSet.AddNewRange(aaInNFlankFeatureList); //AA in N flank featureSet.AddNewRange(In.GetAASeqInRegionInstance(2, necAndHla, NFlank.GetInstance())); //AA1-AA2 in Nflank featureSet.AddNewRange(SubSeq.GetInSubSeqEnumeration(NFlank.GetInstance(), false, 1, necAndHla)); //AA@x in N flank (numbering is 5 4 3 2 1) featureSet.AddNewRange(SubSeq.GetInSubSeqEnumeration(NFlank.GetInstance(), false, 2, necAndHla)); //AA1-AA2@x in Nflank (x is position of AA2, i.e., the smaller number) featureSet.AddNewRange(In.GetAASeqInRegionInstance(1, necAndHla, CFlank.GetInstance())); //AA in Cflank featureSet.AddNewRange(In.GetAASeqInRegionInstance(2, necAndHla, CFlank.GetInstance())); //AA1-AA2 in Cflank featureSet.AddNewRange(SubSeq.GetInSubSeqEnumeration(CFlank.GetInstance(), true, 1, necAndHla)); //AA@x in C flank (numbering is 1 2 3 4 5) featureSet.AddNewRange(SubSeq.GetInSubSeqEnumeration(CFlank.GetInstance(), true, 2, necAndHla)); //AA1-AA2@x in Cflank (x is position of AA1, i.e., the smaller number) } if (includeChemicalProperties) { featureSet.AddNewOrOldRange(InProperty.GetPropertySeqInRegionInstance(1, necAndHla, NFlank.GetInstance())); featureSet.AddNewOrOldRange(SubSeq.GetInPropertySubSeqEnumeration(NFlank.GetInstance(), false, 1, necAndHla)); featureSet.AddNewOrOldRange(InProperty.GetPropertySeqInRegionInstance(1, necAndHla, CFlank.GetInstance())); featureSet.AddNewOrOldRange(SubSeq.GetInPropertySubSeqEnumeration(CFlank.GetInstance(), true, 1, necAndHla)); featureSet.AddNewOrOldRange(InProperty.GetPropertySeqInRegionInstance(2, necAndHla, NFlank.GetInstance())); featureSet.AddNewOrOldRange(SubSeq.GetInPropertySubSeqEnumeration(NFlank.GetInstance(), false, 2, necAndHla)); featureSet.AddNewOrOldRange(InProperty.GetPropertySeqInRegionInstance(2, necAndHla, CFlank.GetInstance())); featureSet.AddNewOrOldRange(SubSeq.GetInPropertySubSeqEnumeration(CFlank.GetInstance(), true, 2, necAndHla)); } } if (includeFlankNECFeatures) { if (includeAAFeatures) { //EV in Epitope AddFeatureWithOptionalAndHlaAndST(In.GetAASeqInRegionInstance(2, necAndHla, Epitope.GetInstance()), includeAndHlaAndSTWithEpitopeAdjFeatures, hlaishFeatureSet, false, ref featureSet);//AA1-AA2 in Epitope //RR in Epitope[@1-2] AddFeatureWithOptionalAndHlaAndST(SubSeq.GetInSubSeqEnumeration(Epitope.GetInstance(), true, 2, necAndHla), includeAndHlaAndSTWithEpitopeAdjFeatures, hlaishFeatureSet, false, ref featureSet);//AA1-AA2@x in Epitope (x is position of AA1, i.e., the smaller number) } if (includeChemicalProperties) { //polar,cyclic in Epitope AddFeatureWithOptionalAndHlaAndST(InProperty.GetPropertySeqInRegionInstance(2, necAndHla, Epitope.GetInstance()), includeAndHlaAndSTWithEpitopeAdjFeatures, hlaishFeatureSet, false, ref featureSet); //polar,large in Epitope[@8-9] AddFeatureWithOptionalAndHlaAndST(SubSeq.GetInPropertySubSeqEnumeration(Epitope.GetInstance(), true, 2, necAndHla), includeAndHlaAndSTWithEpitopeAdjFeatures, hlaishFeatureSet, false, ref featureSet); } //AA1-AA2 in Nflank,Epitope, etc if (null != flankSizeOrNull && (int)flankSizeOrNull > 0) { string epitope = (string)Epitope.GetInstance().Evaluate(entity); SubSeq lastNAAFeature = SubSeq.GetInstance(1, 1, false, NFlank.GetInstance()); string lastNAA = (string)lastNAAFeature.Evaluate(entity); In inLastNAA = In.GetInstance(lastNAA, lastNAAFeature); SubSeq firstEAAFeature = SubSeq.GetInstance(1, 1, true, Epitope.GetInstance()); string firstEAA = (string)firstEAAFeature.Evaluate(entity); Debug.Assert(firstEAA == epitope.Substring(0, 1));// real assert In inFirstEAA = In.GetInstance(firstEAA, firstEAAFeature); SubSeq lastEAAFeature = SubSeq.GetInstance(epitope.Length, epitope.Length, true, Epitope.GetInstance()); string lastEAA = (string)lastEAAFeature.Evaluate(entity); In inLastEAA = In.GetInstance(lastEAA, lastEAAFeature); SubSeq firstCAAFeature = SubSeq.GetInstance(1, 1, true, CFlank.GetInstance()); string firstCAA = (string)firstCAAFeature.Evaluate(entity); In inFirstCAA = In.GetInstance(firstCAA, firstCAAFeature); if (includeAAFeatures) { And andLastNNAAFirstEAA = And.GetInstance(inLastNAA, inFirstEAA); AddFeatureWithOptionalAndHlaAndST(andLastNNAAFirstEAA, includeAndHlaAndSTWithEpitopeAdjFeatures, hlaishFeatureSet, /*checkThatNew*/ true, ref featureSet); And andLastEAAFirstCAA = And.GetInstance(inLastEAA, inFirstCAA); AddFeatureWithOptionalAndHlaAndST(andLastEAAFirstCAA, includeAndHlaAndSTWithEpitopeAdjFeatures, hlaishFeatureSet, /*checkThatNew*/ true, ref featureSet); } if (includeChemicalProperties) { foreach (string lastNProperty in KmerProperties.AaToPropList[Biology.GetInstance().OneLetterAminoAcidAbbrevTo3Letter[lastNAA[0]]]) { InProperty inLastNProperty = InProperty.GetInstance(lastNProperty, lastNAAFeature); foreach (string firstEProperty in KmerProperties.AaToPropList[Biology.GetInstance().OneLetterAminoAcidAbbrevTo3Letter[firstEAA[0]]]) { InProperty inFirstEProperty = InProperty.GetInstance(firstEProperty, firstEAAFeature); //!!!get this out of the loop? And andLastNPropertyFirstEProperty = And.GetInstance(inLastNProperty, inFirstEProperty); AddFeatureWithOptionalAndHlaAndST(andLastNPropertyFirstEProperty, includeAndHlaAndSTWithEpitopeAdjFeatures, hlaishFeatureSet, /*checkThatNew*/ false, ref featureSet); Debug.Assert((bool)andLastNPropertyFirstEProperty.Evaluate(necAndHla)); } } foreach (string lastEProperty in KmerProperties.AaToPropList[Biology.GetInstance().OneLetterAminoAcidAbbrevTo3Letter[lastEAA[0]]]) { InProperty inlastEProperty = InProperty.GetInstance(lastEProperty, lastEAAFeature); foreach (string firstCProperty in KmerProperties.AaToPropList[Biology.GetInstance().OneLetterAminoAcidAbbrevTo3Letter[firstCAA[0]]]) { InProperty infirstCProperty = InProperty.GetInstance(firstCProperty, firstCAAFeature); //!!!get this out of the loop? And andlastEPropertyfirstCProperty = And.GetInstance(inlastEProperty, infirstCProperty); AddFeatureWithOptionalAndHlaAndST(andlastEPropertyfirstCProperty, includeAndHlaAndSTWithEpitopeAdjFeatures, hlaishFeatureSet, /*checkThatNew*/ false, ref featureSet); Debug.Assert((bool)andlastEPropertyfirstCProperty.Evaluate(necAndHla)); } } } } } return(featureSet); }