public override int GetHashCode() { int hashCode = Property.GetHashCode(); hashCode = GetCallStack().Skip(1).Aggregate(hashCode, (code, owner) => code ^ owner.GetHashCode()); if (PropertyParameters != null) { hashCode = PropertyParameters.Aggregate(hashCode, (hash, param) => hash ^ param.GetHashCode()); } return(hashCode); }
public Property(PropertyParameters parameters) { RawType = parameters.RawType; RawPropertyInfo = parameters.RawPropertyInfo; Name = parameters.Name; Type = parameters.Type; PropertyAccessModifier = parameters.PropertyAccessModifier; HasSetter = parameters.HasSetter; SetterAccessModifier = parameters.SetterAccessModifier; RawSetMethod = parameters.RawSetMethod; SetMethod = parameters.SetMethod; HasGetter = parameters.HasGetter; GetterAccessModifier = parameters.GetterAccessModifier; RawGetMethod = parameters.RawGetMethod; GetMethod = parameters.GetMethod; }
/// <summary> /// Validates the Cluster Builder Matches for the input provided. /// </summary> /// <param name="matches">Max Unique Match list</param> /// <param name="nodeName">Node name to be read from xml</param> /// <param name="propParam">Property parameters</param> /// <returns>True, if successfully validated</returns> private bool ValidateClusterBuilderMatches(IEnumerable<Match> matches, string nodeName, PropertyParameters propParam) { // Validates the Cluster builder MUMs string firstSeqOrderExpected = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.ClustFirstSequenceMumOrderNode); string lengthExpected = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.ClustLengthNode); string secondSeqOrderExpected = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.ClustSecondSequenceMumOrderNode); var firstSeqOrderActual = new StringBuilder(); var lengthActual = new StringBuilder(); var secondSeqOrderActual = new StringBuilder(); var cbObj = new ClusterBuilder {MinimumScore = 0}; switch (propParam) { case PropertyParameters.MinimumScore: cbObj.MinimumScore = int.Parse(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MinimumScoreNode), null); break; case PropertyParameters.MaximumSeparation: cbObj.MaximumSeparation = int.Parse(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MaximumSeparationNode), null); break; case PropertyParameters.FixedSeparation: cbObj.FixedSeparation = int.Parse(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FixedSeparationNode), null); break; case PropertyParameters.SeparationFactor: cbObj.SeparationFactor = int.Parse(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SeparationFactorNode), null); break; case PropertyParameters.FixedSeparationAndSeparationFactor: cbObj.SeparationFactor = int.Parse(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SeparationFactorNode), null); cbObj.FixedSeparation = int.Parse(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FixedSeparationNode), null); break; case PropertyParameters.MaximumFixedAndSeparationFactor: cbObj.MaximumSeparation = int.Parse(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MaximumSeparationNode), null); cbObj.SeparationFactor = int.Parse(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SeparationFactorNode), null); cbObj.FixedSeparation = int.Parse(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FixedSeparationNode), null); break; default: break; } var meObj = matches.Select(m => new MatchExtension(m)).ToList(); IEnumerable<Cluster> clusts = cbObj.BuildClusters(meObj); foreach (MatchExtension maxMatchExtension in clusts.SelectMany(clust => clust.Matches)) { firstSeqOrderActual.Append(maxMatchExtension.ReferenceSequenceOffset); secondSeqOrderActual.Append(maxMatchExtension.QuerySequenceOffset); lengthActual.Append(maxMatchExtension.Length); } if ((0 != string.Compare(firstSeqOrderExpected.Replace(",", ""), firstSeqOrderActual.ToString(), true, CultureInfo.CurrentCulture)) || (0 != string.Compare(lengthExpected.Replace(",", ""), lengthActual.ToString(), true, CultureInfo.CurrentCulture)) || (0 != string.Compare(secondSeqOrderExpected.Replace(",", ""), secondSeqOrderActual.ToString(), true, CultureInfo.CurrentCulture))) { ApplicationLog.WriteLine("NUCmer P1 : Cluster builder match not matching"); return false; } return true; }
private void ValidateNUCmerAlignGeneralTestCases(string nodeName, bool isFilePath, bool isAlignList, AdditionalParameters addParam, PropertyParameters propParam, bool isAmbiguous) { IList<ISequence> refSeqList = new List<ISequence>(); IList<ISequence> searchSeqList = new List<ISequence>(); if (isFilePath) { // Gets the reference sequence from the FastA file string filePath = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FilePathNode); Assert.IsNotNull(filePath); ApplicationLog.WriteLine(string.Format(null, "NUCmer P1 : Successfully validated the File Path '{0}'.", filePath)); var fastaparserobj = new FastAParser(); IEnumerable<ISequence> referenceSeqList = fastaparserobj.Parse(filePath); foreach (ISequence seq in referenceSeqList) { refSeqList.Add(seq); } // Gets the query sequence from the FastA file string queryFilePath = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SearchSequenceFilePathNode); Assert.IsNotNull(queryFilePath); ApplicationLog.WriteLine(string.Format(null, "NUCmer P1 : Successfully validated the File Path '{0}'.", queryFilePath)); var queryParserobj = new FastAParser(); IEnumerable<ISequence> serSeqList = queryParserobj.Parse(queryFilePath); foreach (ISequence seq in serSeqList) { searchSeqList.Add(seq); } } else { // Gets the reference & search sequences from the configuration file string[] referenceSequences = this.utilityObj.xmlUtil.GetTextValues(nodeName, Constants.ReferenceSequencesNode); string[] searchSequences = this.utilityObj.xmlUtil.GetTextValues(nodeName, Constants.SearchSequencesNode); IAlphabet seqAlphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.AlphabetNameNode)); IAlphabet ambAlphabet = null; if (isAmbiguous) { switch (seqAlphabet.Name.ToLower(CultureInfo.CurrentCulture)) { case "dna": case "ambiguousdna": ambAlphabet = AmbiguousDnaAlphabet.Instance; break; case "rna": case "ambiguousrna": ambAlphabet = AmbiguousRnaAlphabet.Instance; break; case "protein": case "ambiguousprotein": ambAlphabet = AmbiguousProteinAlphabet.Instance; break; default: break; } } else { ambAlphabet = seqAlphabet; } for (int i = 0; i < referenceSequences.Length; i++) { ISequence referSeq = new Sequence(ambAlphabet, Encoding.ASCII.GetBytes(referenceSequences[i])); referSeq.ID = "ref " + i; refSeqList.Add(referSeq); } for (int i = 0; i < searchSequences.Length; i++) { ISequence searchSeq = new Sequence(ambAlphabet, Encoding.ASCII.GetBytes(searchSequences[i])); searchSeq.ID = "qry " + i; searchSeqList.Add(searchSeq); } } // Gets the mum length from the xml string mumLength = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MUMAlignLengthNode); var nucmerObj = new NucmerPairwiseAligner(); // Check for additional parameters and update the object accordingly switch (addParam) { case AdditionalParameters.AlignSimilarityMatrix: nucmerObj.SimilarityMatrix = new SimilarityMatrix(SimilarityMatrix.StandardSimilarityMatrix.Blosum50); break; default: break; } // Update other values for NUCmer object nucmerObj.MaximumSeparation = 0; nucmerObj.MinimumScore = 2; nucmerObj.SeparationFactor = 0.12f; nucmerObj.BreakLength = 2; nucmerObj.LengthOfMUM = long.Parse(mumLength, null); switch (propParam) { case PropertyParameters.MinimumScore: nucmerObj.MinimumScore = int.Parse( this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MinimumScoreNode), null); break; case PropertyParameters.MaximumSeparation: nucmerObj.MaximumSeparation = int.Parse( this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MaximumSeparationNode), null); break; case PropertyParameters.FixedSeparation: nucmerObj.FixedSeparation = int.Parse( this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FixedSeparationNode), null); break; case PropertyParameters.SeparationFactor: nucmerObj.SeparationFactor = int.Parse( this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SeparationFactorNode), null); break; case PropertyParameters.FixedSeparationAndSeparationFactor: nucmerObj.SeparationFactor = int.Parse( this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SeparationFactorNode), null); nucmerObj.FixedSeparation = int.Parse( this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FixedSeparationNode), null); break; case PropertyParameters.MaximumFixedAndSeparationFactor: nucmerObj.MaximumSeparation = int.Parse( this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MaximumSeparationNode), null); nucmerObj.SeparationFactor = int.Parse( this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SeparationFactorNode), null); nucmerObj.FixedSeparation = int.Parse( this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FixedSeparationNode), null); break; default: break; } IList<ISequenceAlignment> align = null; if (isAlignList) { var listOfSeq = new List<ISequence> {refSeqList.ElementAt(0), searchSeqList.ElementAt(0)}; align = nucmerObj.Align(listOfSeq); } else { align = nucmerObj.Align(refSeqList, searchSeqList); } string expectedSequences = isFilePath ? this.utilityObj.xmlUtil.GetFileTextValue(nodeName, Constants.ExpectedSequencesNode) : this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.ExpectedSequencesNode); string[] expSeqArray = expectedSequences.Split(','); // Gets all the aligned sequences in comma separated format foreach (IPairwiseSequenceAlignment seqAlignment in align) { foreach (PairwiseAlignedSequence alignedSeq in seqAlignment) { var actualStr = alignedSeq.FirstSequence.ConvertToString(); Assert.IsTrue(expSeqArray.Contains(actualStr)); actualStr = alignedSeq.SecondSequence.ConvertToString(); Assert.IsTrue(expSeqArray.Contains(actualStr)); } } ApplicationLog.WriteLine("NUCmer P1 : Successfully validated all the aligned sequences."); }
private void ValidateFindMatchSuffixGeneralTestCases(string nodeName, bool isFilePath, AdditionalParameters additionalParam, PropertyParameters propParam) { ISequence referenceSeq; var searchSeqList = new List<ISequence>(); if (isFilePath) { // Gets the reference sequence from the FastA file string filePath = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FilePathNode); Assert.IsNotNull(filePath); ApplicationLog.WriteLine(string.Format(null, "NUCmer P1 : Successfully validated the File Path '{0}'.", filePath)); var parser = new FastAParser(); IEnumerable<ISequence> referenceSeqList = parser.Parse(filePath); var byteList = new List<Byte>(); foreach (ISequence seq in referenceSeqList) { byteList.AddRange(seq); byteList.Add((byte) '+'); } referenceSeq = new Sequence(referenceSeqList.First().Alphabet.GetMummerAlphabet(), byteList.ToArray()); // Gets the query sequence from the FastA file string queryFilePath = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.SearchSequenceFilePathNode); Assert.IsNotNull(queryFilePath); ApplicationLog.WriteLine(string.Format(null, "NUCmer P1 : Successfully validated the File Path '{0}'.", queryFilePath)); var queryParserObj = new FastAParser(); IEnumerable<ISequence> querySeqList = queryParserObj.Parse(queryFilePath); searchSeqList.AddRange(querySeqList); } else { // Gets the reference & search sequences from the configuration file string[] referenceSequences = this.utilityObj.xmlUtil.GetTextValues(nodeName, Constants.ReferenceSequencesNode); string[] searchSequences = this.utilityObj.xmlUtil.GetTextValues(nodeName, Constants.SearchSequencesNode); IAlphabet seqAlphabet = Utility.GetAlphabet(this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.AlphabetNameNode)); var refSeqList = referenceSequences.Select(t => new Sequence(seqAlphabet, Encoding.ASCII.GetBytes(t))).Cast<ISequence>().ToList(); var byteList = new List<Byte>(); foreach (ISequence seq in refSeqList) { byteList.AddRange(seq); byteList.Add((byte) '+'); } referenceSeq = new Sequence(refSeqList.First().Alphabet.GetMummerAlphabet(), byteList.ToArray()); searchSeqList.AddRange(searchSequences.Select(t => new Sequence(seqAlphabet, Encoding.ASCII.GetBytes(t)))); } string mumLength = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.MUMLengthNode); // Builds the suffix for the reference sequence passed. var suffixTreeBuilder = new MultiWaySuffixTree(referenceSeq as Sequence) { MinLengthOfMatch = long.Parse(mumLength, null) }; var matches = searchSeqList.ToDictionary(t => t, suffixTreeBuilder.SearchMatchesUniqueInReference); var mums = new List<Match>(); foreach (var a in matches.Values) { mums.AddRange(a); } switch (additionalParam) { case AdditionalParameters.FindUniqueMatches: // Validates the Unique Matches. ApplicationLog.WriteLine("NUCmer P1 : Validating the Unique Matches"); Assert.IsTrue(this.ValidateUniqueMatches(mums, nodeName, isFilePath)); ApplicationLog.WriteLine("NUCmer P1 : Successfully validated the all the unique matches for the sequences."); break; case AdditionalParameters.PerformClusterBuilder: // Validates the Unique Matches. ApplicationLog.WriteLine( "NUCmer P1 : Validating the Unique Matches using Cluster Builder"); Assert.IsTrue(this.ValidateClusterBuilderMatches(mums, nodeName, propParam)); ApplicationLog.WriteLine("NUCmer P1 : Successfully validated the all the cluster builder matches for the sequences."); break; default: break; } ApplicationLog.WriteLine("NUCmer P1 : Successfully validated the all the unique matches for the sequences."); }
public IPropertyGroup Create() { var properties = PropertyParameters.Select(p => _propertyFactory(p[0], (uint)p[1])).ToList(); return(new MonopolyPropertyGroup(Indices, _rentStrategy, properties)); }