예제 #1
0
        public void ParseBlastValidation()
        {
            var blastFilePath           = @"TestUtils\BlastRecords.xml";
            var expectedGapCost         = "11";
            var expectedParameterMatrix = "BLOSUM62";
            var expectedResultCount     = "9";
            var expectedDatabselength   = "2974038";
            var expectedHitsCount       = "1";
            var expectedAccession       = "NP_010143";
            var expectedAlignmentLength = "142";
            var expectedBitScore        = "33.113";
            var expectedHitSequence     = "KKIRKRCLAFPISQQIEMKTNIKNAGKLDNNNSPIVQDDS-----HNIIDVDGFLENQIQSNDHMIAADKGSGSLVNIIDTAPLTSTEFKPVEHPPVNY---------------VDLGNGLGLNTYNRGPPSIISDSTDEFY";

            // Parse a Blast xml file.
            BlastXmlParser      parser       = new BlastXmlParser();
            IList <BlastResult> blastResults = parser.Parse(blastFilePath);

            // Validate Meta data
            BlastXmlMetadata meta = blastResults[0].Metadata;

            Assert.AreEqual(meta.ParameterGapOpen.ToString((IFormatProvider)null),
                            expectedGapCost);
            Assert.AreEqual(meta.ParameterMatrix.ToString((IFormatProvider)null),
                            expectedParameterMatrix);

            // Validate blast records.
            BlastSearchRecord record = blastResults[4].Records[0];

            Assert.AreEqual(expectedResultCount, blastResults.Count.ToString((IFormatProvider)null));
            Assert.AreEqual(expectedDatabselength,
                            record.Statistics.DatabaseLength.ToString((IFormatProvider)null));
            Assert.AreEqual(expectedHitsCount, record.Hits.Count.ToString((IFormatProvider)null));
            Assert.AreEqual(expectedAccession, record.Hits[0].Accession.ToString((IFormatProvider)null));
            Assert.AreEqual(expectedHitsCount, record.Hits[0].Hsps.Count.ToString((IFormatProvider)null));

            // Validate bit score.
            Hsp highScoreSgment = record.Hits[0].Hsps[0];

            Assert.AreEqual(expectedAlignmentLength, highScoreSgment.AlignmentLength.ToString(
                                (IFormatProvider)null));
            Assert.AreEqual(expectedBitScore, highScoreSgment.BitScore.ToString((
                                                                                    IFormatProvider)null));
            Assert.AreEqual(expectedHitSequence, highScoreSgment.HitSequence.ToString(
                                (IFormatProvider)null));
        }
예제 #2
0
        public void InValidateBlastSearchRecordMetadataGetObjectData()
        {
            SerializationInfo info    = null;
            StreamingContext  context = new StreamingContext(StreamingContextStates.All);

            BlastSearchRecord bsrObj = new BlastSearchRecord();

            try
            {
                bsrObj.GetObjectData(info, context);
                Assert.Fail();
            }
            catch (ArgumentNullException)
            {
                Console.WriteLine("Ncbi Blast P2 : InValidated the GetObjectData() method of BlastSearchRecord successfully.");
                ApplicationLog.WriteLine("Ncbi Blast P2 : InValidated the GetObjectData() method of BlastSearchRecord successfully.");
            }
        }
예제 #3
0
        public static Facet CreateFacet(string fName, string fType, BlastSearchRecord rec, Item item, int rank)
        {
            switch (fName)
            {
            case "QueryName":
                return(new Facet(fName, fType, item.Name));

            case "QueryLen":
                return(new Facet(fName, fType, rec.IterationQueryLength));

            case "Rank":
                return(new Facet(fName, fType, rank));

            default:
                if (fType == "Number")
                {
                    return(new Facet(fName, fType, 0));
                }
                else
                {
                    if (fType == "Link")
                    {
                        return(new Facet(fName, fType, "N/A", "about:none."));
                    }
                    else
                    {
                        if (fType == "DateTime")
                        {
                            Facet f = new Facet(fName, fType);
                            //Facet f = new Facet(fName, fType, dt.ToUniversalTime().ToString("o"));
                            //DateTime dt = new DateTime(1900, 1, 1);
                            return(f);
                        }
                        else
                        {
                            return(new Facet(fName, fType, "No Hit"));
                        }
                    }
                }
                //throw (new Exception("Facet category with name = " + fName + " does not exist."));
            }
        }
예제 #4
0
        /// <summary>
        /// Validates general Add method test cases with the xml node name specified.
        /// </summary>
        /// <param name="nodeName">xml node name.</param>
        /// <param name="isSyncFetch">True for Synchronous fetch</param>
        void GeneralMethodToValidateResults(string nodeName, bool isSyncFetch)
        {
            // Gets the search query parameter and their values.
            string alphabet = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.AlphabetNameNode);
            string querySequence = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.QuerySequency);
            string queryDatabaseValue = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseValue);
            string queryProgramValue = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.ProgramValue);
            string queryDatabaseParameter = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseParameter);
            string queryProgramParameter = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.ProgramParameter);
            string expectedHitId = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.HitID);
            string expectedAccession = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.HitAccession);
            string expectedResultCount = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.ResultsCount);
            string expectedHitsCount = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.HitsCount);
            string expectedEntropyStatistics = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.EntropyStatistics);
            string expectedKappaStatistics = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.KappaStatistics);
            string expectedLambdaStatistics = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.LambdaStatistics);
            string expectedHspHitsCount = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.HspHitsCount);

            string expectedSleepTime = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.SleepTime);
            string reqId           = string.Empty;
            object responseResults = null;
            int    maxAttempts     = 20;
            int    attempt         = 1;

            Sequence seq = new Sequence(Utility.GetAlphabet(alphabet), querySequence);

            // Set Service confiruration parameters true.
            IBlastServiceHandler service = new AzureBlastHandler();

            ConfigParameters configParams = new ConfigParameters();

            configParams.UseBrowserProxy = true;
            configParams.DefaultTimeout  = 5;
            configParams.Connection      = new Uri(Constants.AzureUri);
            service.Configuration        = configParams;

            // Create search parameters object.
            BlastParameters searchParams = new BlastParameters();

            // Add mandatory parameter values to search query parameters.
            searchParams.Add(queryProgramParameter, queryProgramValue);
            searchParams.Add(queryDatabaseParameter, queryDatabaseValue);

            // Get Request identifier from web service.
            reqId = service.SubmitRequest(seq, searchParams);

            // Get request information for first time.
            ServiceRequestInformation info = service.GetRequestStatus(reqId);

            // Ping service until request staus is ready.
            while (attempt <= maxAttempts && info.Status != ServiceRequestStatus.Ready &&
                   info.Status != ServiceRequestStatus.Error)
            {
                System.Threading.Thread.Sleep(Convert.ToInt32(expectedSleepTime, (IFormatProvider)null));
                ++attempt;
                info = service.GetRequestStatus(reqId);
            }

            // Get results.
            if (isSyncFetch)
            {
                responseResults = service.FetchResultsSync(reqId, searchParams);
            }
            else
            {
                responseResults = service.GetResult(reqId, searchParams);
            }

            Assert.IsNotNull(responseResults);

            if (!isSyncFetch)
            {
                //Parse and validate results
                BlastXmlParser      parser       = new BlastXmlParser();
                IList <BlastResult> blastResults =
                    parser.Parse(new StringReader(responseResults.ToString()));

                Assert.AreEqual(blastResults.Count.ToString(
                                    (IFormatProvider)null), expectedHitsCount);
                Assert.AreEqual(blastResults[0].Records.Count.ToString(
                                    (IFormatProvider)null), expectedHitsCount);
                BlastSearchRecord record = blastResults[0].Records[0];
                Assert.AreEqual(record.Statistics.Kappa.ToString(
                                    (IFormatProvider)null), expectedKappaStatistics);
                Assert.AreEqual(record.Statistics.Lambda.ToString(
                                    (IFormatProvider)null), expectedLambdaStatistics);
                Assert.AreEqual(record.Statistics.Entropy.ToString(
                                    (IFormatProvider)null), expectedEntropyStatistics);
                Assert.AreEqual(record.Hits.Count.ToString(
                                    (IFormatProvider)null), expectedResultCount);
                Hit hit = record.Hits[0];
                Assert.AreEqual(hit.Accession, expectedAccession);
                Assert.AreEqual(hit.Id.ToString((IFormatProvider)null), expectedHitId);
                Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null), expectedHspHitsCount);

                ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                       "Azure Blast BVT: Hits Count '{0}'.", hit.Hsps.Count));
                ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                       "Azure Blast BVT: Hits Count '{0}'.", hit.Hsps.Count));
                ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                       "Azure Blast BVT: Hits count '{0}'.", blastResults.Count));
                ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                       "Azure Blast BVT: Accession '{0}'.", hit.Accession));
            }
        }
예제 #5
0
        /// <summary>
        /// Validate general fetching results.by passing
        /// differnt parameters for BioHPC Blast web service.
        /// <param name="nodeName">xml node name.</param>
        /// <param name="isFetchSynchronous">Is Fetch Synchronous?</param>
        /// </summary>
        void ValidateBioHPCBlastResultsFetch(
            string nodeName,
            RequestType reqType)
        {
            // Gets the search query parameter and their values.
            string alphabetName = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.AlphabetNameNode);
            string querySequence = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.QuerySequency);
            string queryDatabaseValue = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseValue);
            string email = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.EmailAdress);
            string queryProgramValue = _utilityObj._xmlUtil.GetTextValue(
                nodeName,
                Constants.ProgramValue);
            string queryDatabaseParameter = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseParameter);
            string queryProgramParameter = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.ProgramParameter);
            string expectedHitId = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HitID);
            string expectedAccession = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HitAccession);
            string expectedResultCount = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.ResultsCount);
            string expectedHitsCount = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HitsCount);
            string expectedEntropyStatistics =
                _utilityObj._xmlUtil.GetTextValue(
                    nodeName, Constants.EntropyStatistics);
            string expectedKappaStatistics = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.KappaStatistics);
            string expectedLambdaStatistics = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.LambdaStatistics);
            string expectedLength = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.Length);
            int maxAttempts = int.Parse(_utilityObj._xmlUtil.GetTextValue(
                                            nodeName, Constants.MaxAttemptsNode), (IFormatProvider)null);
            int waitingTime = int.Parse(_utilityObj._xmlUtil.GetTextValue(
                                            nodeName, Constants.WaitTimeNode), (IFormatProvider)null);
            string expect = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.Expectparameter);
            string emailNotify = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.EmailNotifyParameterNode);
            string jobName = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.JobNameParameterNode);
            string expectValue = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.ExpectNode);
            string emailNotifyValue = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.EmailNotifyNode);
            string jobNameValue = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.JobNameNode);

            // Set Blast Parameters
            BlastParameters queryParams = new BlastParameters();

            // Add mandatory parameter values to search query parameters.
            queryParams.Add(queryDatabaseParameter, queryDatabaseValue);
            queryParams.Add(queryProgramParameter, queryProgramValue);
            queryParams.Add(expect, expectValue);
            queryParams.Add(emailNotify, emailNotifyValue);
            queryParams.Add(jobName, jobNameValue);

            Dictionary <string, object> testCaseParms = new Dictionary <string, object>();

            testCaseParms.Add(Constants.BlastParmsConst, queryParams);
            testCaseParms.Add(Constants.QuerySeqString, querySequence);
            testCaseParms.Add(Constants.AlphabetString, alphabetName);
            testCaseParms.Add(Constants.EmailString, email);
            testCaseParms.Add(Constants.MaxAttemptString, maxAttempts.ToString((IFormatProvider)null));
            testCaseParms.Add(Constants.WaitTimeString, waitingTime);

            TestCaseParameters parameters    = null;
            object             resultsObject = null;

            switch (reqType)
            {
            case RequestType.FetchSyncUsingDnaSeq:
                parameters = new TestCaseParameters(
                    Constants.BioHPCFetchResultsSyncTest,
                    null, FetchResultsSyncTest, testCaseParms);
                resultsObject = _TestCaseSimulator.Simulate(parameters).Result;
                break;

            case RequestType.FetchASyncUsingDnaSeq:
                parameters = new TestCaseParameters(
                    Constants.BioHPCFetchResultsASyncTest,
                    null, FetchResultsASyncTest, testCaseParms);
                resultsObject = _TestCaseSimulator.Simulate(parameters).Result;
                break;

            case RequestType.FetchSyncUsingProteinSeq:
                parameters = new TestCaseParameters(
                    Constants.FetchResultsSyncUsingProteinSeq,
                    null, FetchResultsSyncTest, testCaseParms);
                resultsObject = _TestCaseSimulator.Simulate(parameters).Result;
                break;

            case RequestType.FetchASyncUsingProteinSeq:
                parameters = new TestCaseParameters(
                    Constants.FetchResultsUsingProteinSeq,
                    null, FetchResultsASyncTest, testCaseParms);
                resultsObject = _TestCaseSimulator.Simulate(parameters).Result;
                break;
            }

            // Validate blast results.
            Assert.IsNotNull(resultsObject);
            List <BlastResult> bioHPCResults = resultsObject as List <BlastResult>;

            Assert.IsNotNull(bioHPCResults);
            Assert.AreEqual(bioHPCResults.Count.ToString(
                                (IFormatProvider)null), expectedResultCount);
            Assert.AreEqual(bioHPCResults[0].Records.Count.ToString((
                                                                        IFormatProvider)null), expectedResultCount);
            BlastSearchRecord record = bioHPCResults[0].Records[0];

            Assert.AreEqual(record.Statistics.Kappa.ToString(
                                (IFormatProvider)null), expectedKappaStatistics);
            Assert.AreEqual(record.Statistics.Lambda.ToString(
                                (IFormatProvider)null), expectedLambdaStatistics);
            Assert.AreEqual(record.Statistics.Entropy.ToString(
                                (IFormatProvider)null), expectedEntropyStatistics);
            Assert.AreEqual(record.Hits.Count.ToString(
                                (IFormatProvider)null), expectedHitsCount);
            Hit hit = record.Hits[0];

            Assert.AreEqual(hit.Accession, expectedAccession);
            Assert.AreEqual(hit.Length.ToString((IFormatProvider)null),
                            expectedLength);
            Assert.AreEqual(hit.Id.ToString((IFormatProvider)null),
                            expectedHitId);
            Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null),
                            expectedResultCount);
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "BioHPC Blast BVT : Hits count '{0}'.", bioHPCResults.Count));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "BioHPC Blast BVT : Accession '{0}'.", hit.Accession));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "BioHPC Blast BVT : Hit Id '{0}'.", hit.Id));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "BioHPC Blast BVT : Hits Count '{0}'.", hit.Hsps.Count));
        }
예제 #6
0
        public static Facet CreateGBErrorFacet(string fName, string fType, BlastSearchRecord rec, int hitId, int hspId, Item item, string url, int rank)
        {
            Hit hit = rec.Hits[hitId];
            Hsp hsp = hit.Hsps[hspId];

            switch (fName)
            {
            case "QueryName":
                return(new Facet(fName, fType, item.Name));

            case "QueryLen":
                return(new Facet(fName, fType, rec.IterationQueryLength));

            case "Rank":
                return(new Facet(fName, fType, rank));

            case "Score":
                return(new Facet(fName, fType, Math.Round(hsp.BitScore, 1)));

            case "Identity":
                double pi = (hsp.IdentitiesCount / (double)hsp.AlignmentLength) * 100.0;
                return(new Facet(fName, fType, Math.Round(pi, 0)));

            case "Span":
                double sp = ((hsp.QueryEnd - hsp.QueryStart + 1) / (double)rec.IterationQueryLength) * 100.0;
                return(new Facet(fName, fType, Math.Round(sp, 0)));

            case "SubjStart":
                double subjStart = hsp.HitStart;
                return(new Facet(fName, fType, Math.Round(subjStart, 0)));

            case "SubjLen":
                double subjLen = hit.Length;
                return(new Facet(fName, fType, Math.Round(subjLen, 0)));

            case "Strand":
                string strand = FrameToStrand(hsp.QueryFrame) + "/" + FrameToStrand(hsp.HitFrame);
                return(new Facet(fName, fType, strand));

            case "Species":
                return(new Facet(fName, fType, "N/A"));

            case "Lineage":
                return(new Facet(fName, fType, "N/A"));

            case "Kingdom":
                return(new Facet(fName, fType, "N/A"));

            case "Phylum":
                return(new Facet(fName, fType, "N/A"));

            case "Class":
                return(new Facet(fName, fType, "N/A"));

            case "Order":
                return(new Facet(fName, fType, "N/A"));

            case "Family":
                return(new Facet(fName, fType, "N/A"));

            case "Organism":
                return(new Facet(fName, fType, "N/A"));

            case "Genus":
                return(new Facet(fName, fType, "N/A"));

            case "Gene":
                return(new Facet(fName, fType, "N/A", null));

            case "GI":
                return(new Facet(fName, fType, "N/A", url));

            case "Accession":
                return(new Facet(fName, fType, "N/A", url));

            case "Definition":
                return(new Facet(fName, fType, "N/A"));

            case "EValue":
                return(new Facet(fName, fType, "N/A"));

            case "AlignLen":
                return(new Facet(fName, fType, hsp.AlignmentLength, @"txt\" + item.Id + ".txt"));

            case "RefCount":
                int i = 0;
                return(new Facet(fName, fType, i));

            case "References":
                return(new Facet(fName, fType));

            case "SubmissionDate":
                return(new Facet(fName, fType));

            case "Product":
                return(new Facet(fName, fType, "N/A"));

            case "Function":
                return(new Facet(fName, fType, "N/A"));

            default:
                throw (new Exception("Facet category with name = " + fName + " does not exist."));
            }
        }
예제 #7
0
        //public static Facet CreateFacet(string fName, string fType, BlastSearchRecord rec, int hitId, int hspId, ISequence gb, Item item, string NCBIurl, CodingSequence bestCds, int rank)
        public static Facet CreateFacet(string fName, string fType, BlastSearchRecord rec, int hitId, int hspId, ISequence gb, Item item, string NCBIurl, FeatureItem bestItem, int rank)
        {
            Hit             hit    = rec.Hits[hitId];
            Hsp             hsp    = hit.Hsps[hspId];
            GenBankMetadata gbMeta = (GenBankMetadata)gb.Metadata["GenBank"];

            string[] classLevels;
            switch (fName)
            {
            case "QueryName":
                return(new Facet(fName, fType, item.Name));

            case "QueryLen":
                return(new Facet(fName, fType, rec.IterationQueryLength));

            case "Rank":
                return(new Facet(fName, fType, rank));

            case "Score":
                return(new Facet(fName, fType, Math.Round(hsp.BitScore, 1)));

            case "Identity":
                double pi = (hsp.IdentitiesCount / (double)hsp.AlignmentLength) * 100.0;
                return(new Facet(fName, fType, Math.Round(pi, 0)));

            case "Span":
                double sp = ((hsp.QueryEnd - hsp.QueryStart + 1) / (double)rec.IterationQueryLength) * 100.0;
                return(new Facet(fName, fType, Math.Round(sp, 0)));

            case "SubjStart":
                double subjStart = hsp.HitStart;
                return(new Facet(fName, fType, Math.Round(subjStart, 0)));

            case "SubjLen":
                double subjLen = hit.Length;
                return(new Facet(fName, fType, Math.Round(subjLen, 0)));

            case "Strand":
                string strand = FrameToStrand(hsp.QueryFrame) + "/" + FrameToStrand(hsp.HitFrame);
                return(new Facet(fName, fType, strand));

            case "Species":
                int index = gbMeta.Source.Organism.Species.IndexOf(" ", StringComparison.Ordinal);
                if (index > 0)
                {
                    return(new Facet(fName, fType, gbMeta.Source.Organism.Genus + " " + gbMeta.Source.Organism.Species.Substring(0, index)));
                }
                else
                {
                    return(new Facet(fName, fType, gbMeta.Source.Organism.Genus + " " + gbMeta.Source.Organism.Species));
                }

            case "Kingdom":
                classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                if (classLevels.Length >= 1)
                {
                    return(new Facet(fName, fType, classLevels[0]));
                }
                else
                {
                    return(new Facet(fName, fType, "N/A"));
                }

            case "Phylum":
                classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                if (classLevels.Length >= 2)
                {
                    return(new Facet(fName, fType, classLevels[1]));
                }
                else
                {
                    return(new Facet(fName, fType, "N/A"));
                }

            case "Class":
                classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                if (classLevels.Length >= 3)
                {
                    return(new Facet(fName, fType, classLevels[2]));
                }
                else
                {
                    return(new Facet(fName, fType, "N/A"));
                }

            case "Order":
                classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                if (classLevels.Length >= 4)
                {
                    return(new Facet(fName, fType, classLevels[3]));
                }
                else
                {
                    return(new Facet(fName, fType, "N/A"));
                }

            case "Family":
                classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                if (classLevels.Length >= 5)
                {
                    return(new Facet(fName, fType, classLevels[4]));
                }
                else
                {
                    return(new Facet(fName, fType, "N/A"));
                }

            case "Lineage":
                return(new Facet(fName, fType, gbMeta.Source.Organism.ClassLevels.ToString()));

            case "Organism":
                return(new Facet(fName, fType, gbMeta.Source.CommonName));

            // return new Facet(fName, fType, gbMeta.Source.Organism.Genus + " " + gbMeta.Source.Organism.Species);
            case "Genus":
                return(new Facet(fName, fType, gbMeta.Source.Organism.ClassLevels.Split(';').Last().Trim().TrimEnd('.')));

            case "Gene":
                string name = "N/A";
                //if (bestCds != null)
                if (bestItem != null)
                {
                    //CodingSequence feature = bestCds;
                    FeatureItem feature = bestItem;
                    String      geneSym = "N/A";
                    foreach (KeyValuePair <string, List <String> > qualifier in feature.Qualifiers)
                    {
                        if (qualifier.Key == "gene")
                        {
                            geneSym = qualifier.Value[0].ToString().Trim('"');
                        }
                    }

                    if (geneSym != "")
                    {
                        name = geneSym;
                        string url2 = System.Web.HttpUtility.HtmlEncode("http://www.ncbi.nlm.nih.gov/sites/entrez?cmd=search&db=gene&term=" + name + "%5Bsym%5D");
                        return(new Facet(fName, fType, name, url2));
                    }
                }
                return(new Facet(fName, fType, name, null));

            case "GI":
                return(new Facet(fName, fType, gbMeta.Version.GINumber, NCBIurl + gbMeta.Version.GINumber));

            case "Accession":
                return(new Facet(fName, fType, gbMeta.Version.CompoundAccession, NCBIurl + gbMeta.Version.CompoundAccession));

            case "Definition":
                return(new Facet(fName, fType, gbMeta.Definition));

            case "EValue":
                return(new Facet(fName, fType, String.Format("{0:#e+00}", hsp.EValue)));

            case "AlignLen":
                return(new Facet(fName, fType, hsp.AlignmentLength, @"txt\" + item.Id + ".txt"));

            case "RefCount":
                int i = 0;
                foreach (CitationReference r in gbMeta.References)
                {
                    if ((r.Title != "Direct Submission") && (r.Journal != "Unpublished"))
                    {
                        i++;
                    }
                }
                return(new Facet(fName, fType, i));

            case "References":
                if (gbMeta.References.Count() == 0)
                {
                    return(new Facet(fName, fType));
                }

                string url = CreateReferenceURL(gbMeta.References[0]);
                Facet  f   = new Facet(fName, fType);

                if (gbMeta.References.Count() > 0)
                {
                    int j = 1;
                    foreach (CitationReference r in gbMeta.References)
                    {
                        if (r.Title != "Direct Submission" && (r.Journal != "Unpublished"))
                        {
                            url = CreateReferenceURL(r);
                            f.Add(new FacetValue(f.Type, String.Format("{0}. {1}. {2}.", j, r.Title, r.Journal), url));
                            j++;
                        }
                    }
                }
                return(f);

            case "SubmissionDate":
                DateTime dt = new DateTime(gbMeta.Locus.Date.Year, gbMeta.Locus.Date.Month, gbMeta.Locus.Date.Day);
                return(new Facet(fName, fType, dt.ToUniversalTime().ToString("o")));

            case "Product":
                Facet productFacet = new Facet(fName, fType, GetQualifierString("Protein", "product", gbMeta));

                if (productFacet[0].Value == "N/A")
                {
                    Console.WriteLine(productFacet[0].Value + "!!!!!!!!!!!!!!!!!!!!!!!!!!***********");
                    if (bestItem != null)
                    {
                        productFacet = new Facet(fName, fType, GetQualifierStringFromCDS(bestItem, "product"));
                    }
                    Console.WriteLine(productFacet[0].Value + "!!!!!!!!!!!!!!!!!!!!!!!!&&&&&&&&&&&&&");
                }
                return(productFacet);

            case "Function":
                Facet funcFacet = new Facet(fName, fType, GetQualifierString("Protein", "function", gbMeta));
                if (funcFacet[0].Value == "N/A")
                {
                    if (bestItem != null)
                    {
                        funcFacet = new Facet(fName, fType, GetQualifierStringFromCDS(bestItem, "function"));
                    }
                }
                return(funcFacet);

            default:
                throw (new Exception("Facet category with name = " + fName + " does not exist."));
            }
        }
예제 #8
0
        /// <summary>
        /// Validate general fetching results.by passing
        /// differnt parameters for Ebi web service..
        /// <param name="nodeName">xml node name.</param>
        /// <param name="isFetchSynchronous">Is Fetch Synchronous?</param>
        /// </summary>
        void ValidateEBIWuBlastResultsFetch(
            string nodeName,
            bool isFetchSynchronous)
        {
            // Gets the search query parameter and their values.
            string alphabetName = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.AlphabetNameNode);
            string querySequence = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.QuerySequency);
            string queryDatabaseValue = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseValue);
            string emailParameter = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.Emailparameter);
            string email = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.EmailAdress);
            string queryProgramValue = utilityObj.xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.ProgramValue);
            string queryDatabaseParameter = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseParameter);
            string queryProgramParameter = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.ProgramParameter);
            string expectedHitId = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.HitID);
            string expectedAccession = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.HitAccession);
            string expectedResultCount = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.ResultsCount);
            string expectedHitsCount = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.HitsCount);
            string expectedEntropyStatistics = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.EntropyStatistics);
            string expectedKappaStatistics = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.KappaStatistics);
            string expectedLambdaStatistics = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.LambdaStatistics);
            string expectedLength = utilityObj.xmlUtil.GetTextValue(
                nodeName, Constants.Length);

            object   responseResults = null;
            Sequence seq             = new Sequence(Utility.GetAlphabet(alphabetName),
                                                    querySequence);

            // create Ebi Blast service object.
            IBlastServiceHandler service      = new EbiWuBlastHandler();
            ConfigParameters     configParams = new ConfigParameters();

            configParams.UseBrowserProxy = true;
            service.Configuration        = configParams;

            BlastParameters searchParams = new BlastParameters();

            // Set Request parameters.
            searchParams.Add(queryDatabaseParameter, queryDatabaseValue);
            searchParams.Add(queryProgramParameter, queryProgramValue);
            searchParams.Add(emailParameter, email);
            searchParams.Add("SequenceType",
                             alphabetName.ToLower(CultureInfo.CurrentCulture).Replace("ambiguous", ""));

            // Create a request without passing sequence.
            string reqId = service.SubmitRequest(seq, searchParams);

            // validate request identifier.
            Assert.IsNotNull(reqId);

            // query the status
            ServiceRequestInformation info = service.GetRequestStatus(reqId);

            if (info.Status != ServiceRequestStatus.Waiting &&
                info.Status != ServiceRequestStatus.Ready)
            {
                string err =
                    ApplicationLog.WriteLine("Unexpected status: '{0}'", info.Status);
                Assert.Fail(err);
            }

            // get async results, poll until ready
            int maxAttempts = 20;
            int attempt     = 1;

            while (attempt <= maxAttempts &&
                   info.Status != ServiceRequestStatus.Error &&
                   info.Status != ServiceRequestStatus.Ready)
            {
                if (isFetchSynchronous)
                {
                    info = service.GetRequestStatus(reqId);
                    Thread.Sleep(info.Status == ServiceRequestStatus.Waiting ||
                                 info.Status == ServiceRequestStatus.Queued
                        ? 20000 * attempt : 0);
                }
                else
                {
                    Thread.Sleep(info.Status == ServiceRequestStatus.Waiting ? 20000 : 0);
                    info = service.GetRequestStatus(reqId);
                }
                ++attempt;
            }

            IBlastParser blastXmlParser = new BlastXmlParser();

            responseResults = blastXmlParser.Parse(
                new StringReader(service.GetResult(reqId, searchParams)));

            // Validate blast results.
            Assert.IsNotNull(responseResults);
            List <BlastResult> eBlastResults = responseResults as List <BlastResult>;

            Assert.IsNotNull(eBlastResults);

            Assert.AreEqual(eBlastResults.Count.ToString(
                                (IFormatProvider)null), expectedResultCount);
            Assert.AreEqual(eBlastResults[0].Records.Count.ToString((
                                                                        IFormatProvider)null), expectedResultCount);
            BlastSearchRecord record = eBlastResults[0].Records[0];

            Assert.AreEqual(record.Statistics.Kappa.ToString(
                                (IFormatProvider)null), expectedKappaStatistics);
            Assert.AreEqual(record.Statistics.Lambda.ToString(
                                (IFormatProvider)null), expectedLambdaStatistics);
            Assert.AreEqual(record.Statistics.Entropy.ToString(
                                (IFormatProvider)null), expectedEntropyStatistics);
            Assert.AreEqual(record.Hits.Count.ToString(
                                (IFormatProvider)null), expectedHitsCount);
            Hit hit = record.Hits[0];

            Assert.AreEqual(hit.Accession, expectedAccession);
            Assert.AreEqual(hit.Length.ToString((IFormatProvider)null), expectedLength);
            Assert.AreEqual(hit.Id.ToString((IFormatProvider)null), expectedHitId);
            Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null),
                            expectedResultCount);
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Ebi Blast BVT: Hits count '{0}'.", eBlastResults.Count));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Ebi Blast BVT: Accession '{0}'.", hit.Accession));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Ebi Blast BVT: Hit Id '{0}'.", hit.Id));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Ebi Blast BVT: Hits Count '{0}'.", hit.Hsps.Count));

            // Validate the results Synchronously with the results got earlier.
            if (isFetchSynchronous)
            {
                IList <BlastResult> syncBlastResults =
                    service.FetchResultsSync(reqId, searchParams) as List <BlastResult>;
                Assert.IsNotNull(syncBlastResults);
                if (null != eBlastResults[0].Records[0].Hits &&
                    0 < eBlastResults[0].Records[0].Hits.Count &&
                    null != eBlastResults[0].Records[0].Hits[0].Hsps &&
                    0 < eBlastResults[0].Records[0].Hits[0].Hsps.Count)
                {
                    Assert.AreEqual(eBlastResults[0].Records[0].Hits[0].Hsps[0].QuerySequence,
                                    syncBlastResults[0].Records[0].Hits[0].Hsps[0].QuerySequence);
                }
                else
                {
                    ApplicationLog.WriteLine(
                        "No significant hits found with the these parameters.");
                    Console.WriteLine("No significant hits found with the these parameters.");
                }
            }
        }
예제 #9
0
        public void EBIWuBlastResultsWithQueryParams()
        {
            // Gets the search query parameter and their values.
            string alphabetName = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.AlphabetNameNode);
            string querySequence = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.QuerySequency);
            string queryDatabaseValue = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.DatabaseValue);
            string emailParameter = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.Emailparameter);
            string email = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.EmailAdress);
            string queryProgramValue = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.ProgramValue);
            string queryDatabaseParameter = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.DatabaseParameter);
            string queryProgramParameter = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.ProgramParameter);
            string expectedHitId = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.HitID);
            string expectedAccession = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.HitAccession);
            string expectedResultCount = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.ResultsCount);
            string expectedHitsCount = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.HitsCount);
            string expectedEntropyStatistics = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.EntropyStatistics);
            string expectedKappaStatistics = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.KappaStatistics);
            string expectedLambdaStatistics = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.LambdaStatistics);
            string expectedLength = Utility._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.Length);

            object responseResults = null;

            Sequence seq = new Sequence(Utility.GetAlphabet(alphabetName),
                                        querySequence);

            // create Ebi Blast service object.
            IBlastServiceHandler service      = new EbiWuBlastHandler();
            ConfigParameters     configParams = new ConfigParameters();

            configParams.UseBrowserProxy = true;
            service.Configuration        = configParams;

            BlastParameters searchParams = new BlastParameters();

            // Set Request parameters.
            searchParams.Add(queryDatabaseParameter, queryDatabaseValue);
            searchParams.Add(queryProgramParameter, queryProgramValue);
            searchParams.Add(emailParameter, email);

            // Create a request without passing sequence.
            string reqId = service.SubmitRequest(seq, searchParams);

            // validate request identifier.
            Assert.IsNotNull(reqId);

            // query the status
            ServiceRequestInformation info = service.GetRequestStatus(reqId);

            if (info.Status != ServiceRequestStatus.Waiting &&
                info.Status != ServiceRequestStatus.Ready)
            {
                string err = ApplicationLog.WriteLine("Unexpected status: '{0}'", info.Status);
                Assert.Fail(err);
            }

            // get async results, poll until ready
            int maxAttempts = 15;
            int attempt     = 1;

            while (attempt <= maxAttempts &&
                   info.Status != ServiceRequestStatus.Error &&
                   info.Status != ServiceRequestStatus.Ready)
            {
                Thread.Sleep(
                    info.Status == ServiceRequestStatus.Waiting ? 20000 : 0);
                info = service.GetRequestStatus(reqId);
                ++attempt;
            }

            IBlastParser blastXmlParser = new BlastXmlParser();

            responseResults = blastXmlParser.Parse(
                new StringReader(service.GetResult(reqId, searchParams)));

            // Validate blast results.
            Assert.IsNotNull(responseResults);
            List <BlastResult> eBlastResults = responseResults as List <BlastResult>;

            Assert.IsNotNull(eBlastResults);
            Assert.AreEqual(eBlastResults.Count.ToString(
                                (IFormatProvider)null), expectedResultCount);
            Assert.AreEqual(eBlastResults[0].Records.Count.ToString((
                                                                        IFormatProvider)null), expectedResultCount);
            BlastSearchRecord record = eBlastResults[0].Records[0];

            Assert.AreEqual(record.Statistics.Kappa.ToString(
                                (IFormatProvider)null), expectedKappaStatistics);
            Assert.AreEqual(record.Statistics.Lambda.ToString(
                                (IFormatProvider)null), expectedLambdaStatistics);
            Assert.AreEqual(record.Statistics.Entropy.ToString(
                                (IFormatProvider)null), expectedEntropyStatistics);
            Assert.AreEqual(record.Hits.Count.ToString(
                                (IFormatProvider)null), expectedHitsCount);
            Hit hit = record.Hits[0];

            Assert.AreEqual(hit.Accession, expectedAccession);
            Assert.AreEqual(hit.Length.ToString(), expectedLength);
            Assert.AreEqual(hit.Id.ToString((IFormatProvider)null), expectedHitId);
            Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null), expectedResultCount);
            Console.WriteLine(string.Format(null,
                                            "Ebi Blast BVT: Hits count '{0}'.", eBlastResults.Count));
            Console.WriteLine(string.Format(null,
                                            "Ebi Blast BVT: Accession '{0}'.", hit.Accession));
            Console.WriteLine(string.Format(null,
                                            "Ebi Blast BVT: Hit Id '{0}'.", hit.Id));
            Console.WriteLine(string.Format(null,
                                            "Ebi Blast BVT: Hits Count '{0}'.", hit.Hsps.Count));
            Console.WriteLine(string.Format(null,
                                            "Ebi Blast BVT: Hits Length '{0}'.", hit.Length));
        }
예제 #10
0
        /// <summary>
        /// Validates general Add method test cases with the xml node name specified.
        /// </summary>
        /// <param name="nodeName">xml node name.</param>
        /// <param name="IsSynchFetch">True for Synchronous fetch</param>
        void GeneralMethodToValidateResults(string nodeName, RequestType reqType)
        {
            // Gets the search query parameter and their values.
            string querySequence = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.QuerySequency);
            string queryDatabaseValue = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseValue);
            string queryProgramValue = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.ProgramValue);
            string queryDatabaseParameter = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseParameter);
            string queryProgramParameter = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.ProgramParameter);
            string expectedHitId = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HitID);
            string expectedAccession = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HitAccession);
            string expectedResultCount = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.ResultsCount);
            string expectedHitsCount = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HitsCount);
            string expectedEntropyStatistics = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.EntropyStatistics);
            string expectedKappaStatistics = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.KappaStatistics);
            string expectedLambdaStatistics = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.LambdaStatistics);
            string expectedHspHitsCount = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HspHitsCount);

            // Set Blast Parameters
            BlastParameters queryParams = new BlastParameters();

            queryParams.Add(queryDatabaseParameter, queryDatabaseValue);
            queryParams.Add(queryProgramParameter, queryProgramValue);

            Dictionary <string, object> testCaseParms = new Dictionary <string, object>();

            testCaseParms.Add(Constants.BlastParmsConst, queryParams);
            testCaseParms.Add(Constants.QuerySeqString, querySequence);

            TestCaseParameters parameters    = null;
            object             resultsObject = null;

            switch (reqType)
            {
            case RequestType.FetchASyncUsingDnaSeq:
                parameters = new TestCaseParameters(
                    Constants.AzureWebServiceFetchResultsAsyncForDna, null,
                    FetchResultsAsync, testCaseParms);
                resultsObject = _TestCaseSimulator.Simulate(parameters).Result;
                break;

            case RequestType.FetchSyncUsingProteinSeq:
                parameters = new TestCaseParameters(
                    Constants.AzureWebServiceFetchResultsAsyncForProtein, null,
                    FetchResultsAsync, testCaseParms);
                resultsObject = _TestCaseSimulator.Simulate(parameters).Result;
                break;

            case RequestType.FetchSyncUsingDnaSeq:
                parameters = new TestCaseParameters(
                    Constants.AzureWebServiceFetchResultsSyncForDnaTest, null,
                    FetchResultsSync, testCaseParms);
                resultsObject = _TestCaseSimulator.Simulate(parameters).Result;
                break;
            }

            Assert.IsNotNull(resultsObject);

            // Validate blast results.
            List <BlastResult> blastResults = resultsObject as List <BlastResult>;

            Assert.IsNotNull(blastResults);
            Assert.IsNotNull(blastResults);
            Assert.AreEqual(blastResults.Count.ToString(
                                (IFormatProvider)null), expectedHitsCount);
            Assert.AreEqual(blastResults[0].Records.Count.ToString(
                                (IFormatProvider)null), expectedHitsCount);
            BlastSearchRecord record = blastResults[0].Records[0];

            Assert.AreEqual(record.Statistics.Kappa.ToString(
                                (IFormatProvider)null), expectedKappaStatistics);
            Assert.AreEqual(record.Statistics.Lambda.ToString(
                                (IFormatProvider)null), expectedLambdaStatistics);
            Assert.AreEqual(record.Statistics.Entropy.ToString(
                                (IFormatProvider)null), expectedEntropyStatistics);
            Assert.AreEqual(record.Hits.Count.ToString(
                                (IFormatProvider)null), expectedResultCount);
            Hit hit = record.Hits[0];

            Assert.AreEqual(hit.Accession, expectedAccession);
            Assert.AreEqual(hit.Id.ToString((IFormatProvider)null), expectedHitId);
            Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null), expectedHspHitsCount);

            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Azure Blast BVT: Hits count '{0}'.", blastResults.Count));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Azure Blast BVT: Accession '{0}'.", hit.Accession));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Azure Blast BVT: Hit Id '{0}'.", hit.Id));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Azure Blast BVT: Hits Count '{0}'.", hit.Hsps.Count));
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                   "Azure Blast BVT: Hits Count '{0}'.", hit.Hsps.Count));
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                   "Azure Blast BVT: Hits Count '{0}'.", hit.Hsps.Count));
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                   "Azure Blast BVT: Hits count '{0}'.", blastResults.Count));
            ApplicationLog.WriteLine(string.Format((IFormatProvider)null,
                                                   "Azure Blast BVT: Accession '{0}'.", hit.Accession));
        }
예제 #11
0
        /// <summary>
        /// Validate general fetching results.by passing
        /// differnt parameters for Ebi web service..
        /// <param name="nodeName">xml node name.</param>
        /// <param name="isFetchSynchronous">Is Fetch Synchronous?</param>
        /// </summary>
        void ValidateEBIWuBlastResultsFetch(
            string nodeName,
            bool isFetchSynchronous)
        {
            // Gets the search query parameter and their values.
            string alphabetName = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.AlphabetNameNode);
            string querySequence = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.QuerySequency);
            string queryDatabaseValue = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseValue);
            string emailParameter = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.Emailparameter);
            string email = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.EmailAdress);
            string queryProgramValue = _utilityObj._xmlUtil.GetTextValue(
                Constants.EbiAsynchronousResultsNode, Constants.ProgramValue);
            string queryDatabaseParameter = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.DatabaseParameter);
            string queryProgramParameter = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.ProgramParameter);
            string expectedHitId = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HitID);
            string expectedAccession = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HitAccession);
            string expectedResultCount = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.ResultsCount);
            string expectedHitsCount = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.HitsCount);
            string expectedEntropyStatistics = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.EntropyStatistics);
            string expectedKappaStatistics = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.KappaStatistics);
            string expectedLambdaStatistics = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.LambdaStatistics);
            string expectedLength = _utilityObj._xmlUtil.GetTextValue(
                nodeName, Constants.Length);

            // Set Blast Parameters
            BlastParameters queryParams = new BlastParameters();

            queryParams.Add(queryDatabaseParameter, queryDatabaseValue);
            queryParams.Add(queryProgramParameter, queryProgramValue);
            queryParams.Add(emailParameter, email);

            Dictionary <string, object> testCaseParms = new Dictionary <string, object>();

            testCaseParms.Add(Constants.BlastParmsConst, queryParams);
            testCaseParms.Add(Constants.QuerySeqString, querySequence);
            testCaseParms.Add(Constants.AlphabetString, alphabetName);

            TestCaseParameters parameters    = null;
            object             resultsObject = null;

            if (isFetchSynchronous)
            {
                parameters = new TestCaseParameters(Constants.EBiFetchResultSyncTestNode, null,
                                                    FetchResultsSync, testCaseParms);
                resultsObject = _TestCaseSimulator.Simulate(parameters).Result;
            }
            else
            {
                parameters = new TestCaseParameters(Constants.EBiFetchResultASyncTestNode, null,
                                                    FetchResultsASync, testCaseParms);
                resultsObject = _TestCaseSimulator.Simulate(parameters).Result;
            }

            // Validate blast results.
            Assert.IsNotNull(resultsObject);
            List <BlastResult> eBlastResults = resultsObject as List <BlastResult>;

            Assert.AreEqual(eBlastResults.Count.ToString(
                                (IFormatProvider)null), expectedResultCount);
            Assert.AreEqual(eBlastResults[0].Records.Count.ToString((
                                                                        IFormatProvider)null), expectedResultCount);
            BlastSearchRecord record = eBlastResults[0].Records[0];

            Assert.AreEqual(record.Statistics.Kappa.ToString(
                                (IFormatProvider)null), expectedKappaStatistics);
            Assert.AreEqual(record.Statistics.Lambda.ToString(
                                (IFormatProvider)null), expectedLambdaStatistics);
            Assert.AreEqual(record.Statistics.Entropy.ToString(
                                (IFormatProvider)null), expectedEntropyStatistics);
            Assert.AreEqual(record.Hits.Count.ToString(
                                (IFormatProvider)null), expectedHitsCount);
            Hit hit = record.Hits[0];

            Assert.AreEqual(hit.Accession, expectedAccession);
            Assert.AreEqual(hit.Length.ToString((IFormatProvider)null), expectedLength);
            Assert.AreEqual(hit.Id.ToString((IFormatProvider)null), expectedHitId);
            Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null),
                            expectedResultCount);
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Ebi Blast BVT: Hits count '{0}'.", eBlastResults.Count));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Ebi Blast BVT: Accession '{0}'.", hit.Accession));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Ebi Blast BVT: Hit Id '{0}'.", hit.Id));
            Console.WriteLine(string.Format((IFormatProvider)null,
                                            "Ebi Blast BVT: Hits Count '{0}'.", hit.Hsps.Count));
        }
예제 #12
0
        /// <summary>
        /// Validate general fetching results.by passing
        /// differnt parameters for BioHPC Blast web service.
        /// <param name="nodeName">xml node name.</param>
        /// <param name="isFetchSynchronous">Is Fetch Synchronous?</param>
        /// </summary>
        static void ValidateBioHPCBlastResultsFetch(
            string nodeName,
            bool isFetchSynchronous)
        {
            if (_IsWebServiceAvailable)
            {
                // Gets the search query parameter and their values.
                string alphabetName = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.AlphabetNameNode);
                string querySequence = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.QuerySequency);
                string queryDatabaseValue = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.DatabaseValue);
                string email = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.EmailAdress);
                string queryProgramValue = Utility._xmlUtil.GetTextValue(
                    nodeName,
                    Constants.ProgramValue);
                string queryDatabaseParameter = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.DatabaseParameter);
                string queryProgramParameter = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.ProgramParameter);
                string expectedHitId = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.HitID);
                string expectedAccession = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.HitAccession);
                string expectedResultCount = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.ResultsCount);
                string expectedHitsCount = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.HitsCount);
                string expectedEntropyStatistics =
                    Utility._xmlUtil.GetTextValue(
                        nodeName, Constants.EntropyStatistics);
                string expectedKappaStatistics = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.KappaStatistics);
                string expectedLambdaStatistics = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.LambdaStatistics);
                string expectedLength = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.Length);
                int maxAttempts = int.Parse(Utility._xmlUtil.GetTextValue(
                                                nodeName, Constants.MaxAttemptsNode));
                int waitingTime = int.Parse(Utility._xmlUtil.GetTextValue(
                                                nodeName, Constants.WaitingTimeNode));
                string expect = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.Expectparameter);
                string emailNotify = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.EmailNotifyParameterNode);
                string jobName = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.JobNameParameterNode);
                string expectValue = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.ExpectNode);
                string emailNotifyValue = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.EmailNotifyNode);
                string jobNameValue = Utility._xmlUtil.GetTextValue(
                    nodeName, Constants.JobNameNode);

                object   responseResults = null;
                Sequence seq             = new Sequence(
                    Utility.GetAlphabet(alphabetName),
                    querySequence);

                // create BioHPC Blast Web Service object.
                IBlastServiceHandler service    = new BioHPCBlastHandler();
                ConfigParameters     configPams = new ConfigParameters();
                configPams.EmailAddress    = email;
                configPams.Password        = String.Empty;
                configPams.UseBrowserProxy = true;
                service.Configuration      = configPams;

                BlastParameters searchParams = new BlastParameters();

                // Set Request parameters.
                searchParams.Add(queryDatabaseParameter, queryDatabaseValue);
                searchParams.Add(queryProgramParameter, queryProgramValue);
                searchParams.Add(expect, expectValue);
                searchParams.Add(emailNotify, emailNotifyValue);
                searchParams.Add(jobName, jobNameValue);

                // Create a request without passing sequence.
                string reqId = service.SubmitRequest(seq, searchParams);

                // validate request identifier.
                Assert.IsNotNull(reqId);

                ServiceRequestInformation info = service.GetRequestStatus(reqId);
                if (info.Status != ServiceRequestStatus.Waiting &&
                    info.Status != ServiceRequestStatus.Ready &&
                    info.Status != ServiceRequestStatus.Queued)
                {
                    string err =
                        ApplicationLog.WriteLine("Unexpected status: '{0}'",
                                                 info.Status);
                    Assert.Fail(err);
                }

                // get async results, poll until ready
                int attempt = 1;
                while (attempt <= maxAttempts &&
                       info.Status != ServiceRequestStatus.Error &&
                       info.Status != ServiceRequestStatus.Ready)
                {
                    ++attempt;
                    if (isFetchSynchronous)
                    {
                        info = service.GetRequestStatus(reqId);
                        Thread.Sleep(
                            info.Status == ServiceRequestStatus.Waiting ||
                            info.Status == ServiceRequestStatus.Queued
                            ? waitingTime * attempt : 0);
                    }
                    else
                    {
                        Thread.Sleep(
                            info.Status == ServiceRequestStatus.Waiting ||
                            info.Status == ServiceRequestStatus.Queued ?
                            waitingTime * attempt : 0);
                        info = service.GetRequestStatus(reqId);
                    }
                }

                IBlastParser blastXmlParser = new BlastXmlParser();
                responseResults = blastXmlParser.Parse(
                    new StringReader(service.GetResult(reqId, searchParams)));

                // Validate blast results.
                Assert.IsNotNull(responseResults);
                List <BlastResult> eBlastResults =
                    responseResults as List <BlastResult>;
                Assert.IsNotNull(eBlastResults);
                Assert.AreEqual(eBlastResults.Count.ToString(
                                    (IFormatProvider)null), expectedResultCount);
                Assert.AreEqual(eBlastResults[0].Records.Count.ToString((
                                                                            IFormatProvider)null), expectedResultCount);
                BlastSearchRecord record = eBlastResults[0].Records[0];
                Assert.AreEqual(record.Statistics.Kappa.ToString(
                                    (IFormatProvider)null), expectedKappaStatistics);
                Assert.AreEqual(record.Statistics.Lambda.ToString(
                                    (IFormatProvider)null), expectedLambdaStatistics);
                Assert.AreEqual(record.Statistics.Entropy.ToString(
                                    (IFormatProvider)null), expectedEntropyStatistics);
                Assert.AreEqual(record.Hits.Count.ToString(
                                    (IFormatProvider)null), expectedHitsCount);
                Hit hit = record.Hits[0];
                Assert.AreEqual(hit.Accession, expectedAccession);
                Assert.AreEqual(hit.Length.ToString(), expectedLength);
                Assert.AreEqual(hit.Id.ToString((IFormatProvider)null),
                                expectedHitId);
                Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null),
                                expectedResultCount);
                Console.WriteLine(string.Format(null,
                                                "BioHPC Blast BVT : Hits count '{0}'.", eBlastResults.Count));
                Console.WriteLine(string.Format(null,
                                                "BioHPC Blast BVT : Accession '{0}'.", hit.Accession));
                Console.WriteLine(string.Format(null,
                                                "BioHPC Blast BVT : Hit Id '{0}'.", hit.Id));
                Console.WriteLine(string.Format(null,
                                                "BioHPC Blast BVT : Hits Count '{0}'.", hit.Hsps.Count));

                // Validate the results Synchronously with the results got earlier.
                if (isFetchSynchronous)
                {
                    IList <BlastResult> syncBlastResults =
                        service.FetchResultsSync(reqId, searchParams) as List <BlastResult>;
                    Assert.IsNotNull(syncBlastResults);
                    if (null != eBlastResults[0].Records[0].Hits &&
                        0 < eBlastResults[0].Records[0].Hits.Count &&
                        null != eBlastResults[0].Records[0].Hits[0].Hsps &&
                        0 < eBlastResults[0].Records[0].Hits[0].Hsps.Count)
                    {
                        Assert.AreEqual(
                            eBlastResults[0].Records[0].Hits[0].Hsps[0].QuerySequence,
                            syncBlastResults[0].Records[0].Hits[0].Hsps[0].QuerySequence);
                    }
                    else
                    {
                        ApplicationLog.WriteLine(
                            "No significant hits found with the these parameters.");
                        Console.WriteLine(
                            "No significant hits found with the these parameters.");
                    }
                }
            }
            else
            {
                Assert.Ignore(
                    "The test case ignored due to connection failure");
            }
        }
예제 #13
0
파일: Pivot.cs 프로젝트: vforget/blip
 public static Facet CreateGBErrorFacet(string fName, string fType, BlastSearchRecord rec, int hitId, int hspId, Item item, string url, int rank)
     {
         Hit hit = rec.Hits[hitId];
         Hsp hsp = hit.Hsps[hspId];
         
         switch (fName)
         {
             case "QueryName":
                 return new Facet(fName, fType, item.Name);
             case "QueryLen":
                 return new Facet(fName, fType, rec.IterationQueryLength);
             case "Rank":
                 return new Facet(fName, fType, rank);
             case "Score":
                 return new Facet(fName, fType, Math.Round(hsp.BitScore, 1));
             case "Identity":
                 double pi = (hsp.IdentitiesCount / (double)hsp.AlignmentLength) * 100.0;
                 return new Facet(fName, fType, Math.Round(pi, 0));
             case "Span":
                 double sp = ((hsp.QueryEnd - hsp.QueryStart + 1) / (double)rec.IterationQueryLength) * 100.0;
                 return new Facet(fName, fType, Math.Round(sp, 0));
             case "SubjStart":
                 double subjStart = hsp.HitStart;
                 return new Facet(fName, fType, Math.Round(subjStart,0));
             case "SubjLen":
                 double subjLen = hit.Length;
                 return new Facet(fName, fType, Math.Round(subjLen, 0));
             case "Strand":
                 string strand = FrameToStrand(hsp.QueryFrame) + "/" + FrameToStrand(hsp.HitFrame);
                 return new Facet(fName, fType, strand);
             case "Species":
                 return new Facet(fName, fType, "N/A");
             case "Lineage":
                 return new Facet(fName, fType, "N/A");
             case "Kingdom":
                 return new Facet(fName, fType, "N/A");
             case "Phylum":
                 return new Facet(fName, fType, "N/A");
             case "Class":
                 return new Facet(fName, fType, "N/A");
             case "Order":
                 return new Facet(fName, fType, "N/A");
             case "Family":
                 return new Facet(fName, fType, "N/A");
             case "Organism":
                 return new Facet(fName, fType, "N/A");
             case "Genus":
                 return new Facet(fName, fType, "N/A");
             case "Gene":
                 return new Facet(fName, fType, "N/A", null);
             case "GI":
                 return new Facet(fName, fType, "N/A", url);
             case "Accession":
                 return new Facet(fName, fType, "N/A", url);
             case "Definition":
                 return new Facet(fName, fType, "N/A");
             case "EValue":
                 return new Facet(fName, fType, "N/A");
             case "AlignLen":
                 return new Facet(fName, fType, hsp.AlignmentLength, @"txt\" + item.Id + ".txt");
             case "RefCount":
                 int i = 0;
                 return new Facet(fName, fType, i);
             case "References":
                 return new Facet(fName, fType);
             case "SubmissionDate":
                 return new Facet(fName, fType);
             case "Product":
                 return new Facet(fName, fType, "N/A");
             case "Function":
                 return new Facet(fName, fType, "N/A");
             default:
                 throw (new Exception("Facet category with name = " + fName + " does not exist."));
         }
     }
예제 #14
0
파일: Pivot.cs 프로젝트: vforget/blip
        //public static Facet CreateFacet(string fName, string fType, BlastSearchRecord rec, int hitId, int hspId, ISequence gb, Item item, string NCBIurl, CodingSequence bestCds, int rank)
        public static Facet CreateFacet(string fName, string fType, BlastSearchRecord rec, int hitId, int hspId, ISequence gb, Item item, string NCBIurl, FeatureItem bestItem, int rank)
        {
            Hit hit = rec.Hits[hitId];
            Hsp hsp = hit.Hsps[hspId];
            GenBankMetadata gbMeta = (GenBankMetadata)gb.Metadata["GenBank"];
            string[] classLevels;
            switch (fName)
            {
                case "QueryName":
                    return new Facet(fName, fType, item.Name);
                case "QueryLen":
                    return new Facet(fName, fType, rec.IterationQueryLength);
                case "Rank":
                    return new Facet(fName, fType, rank);
                case "Score":
                    return new Facet(fName, fType, Math.Round(hsp.BitScore, 1));
                case "Identity":
                    double pi = (hsp.IdentitiesCount / (double)hsp.AlignmentLength) * 100.0;
                    return new Facet(fName, fType, Math.Round(pi, 0));
                case "Span":
                    double sp = ((hsp.QueryEnd - hsp.QueryStart + 1) / (double)rec.IterationQueryLength) * 100.0;
                    return new Facet(fName, fType, Math.Round(sp, 0));
                case "SubjStart":
                    double subjStart = hsp.HitStart;
                    return new Facet(fName, fType, Math.Round(subjStart,0));
                case "SubjLen":
                    double subjLen = hit.Length;
                    return new Facet(fName, fType, Math.Round(subjLen, 0));
                
                case "Strand":
                    string strand = FrameToStrand(hsp.QueryFrame) + "/" + FrameToStrand(hsp.HitFrame);
                    return new Facet(fName, fType, strand);
                case "Species":
                    int index = gbMeta.Source.Organism.Species.IndexOf(" ", StringComparison.Ordinal);
                    if (index > 0)
                    {
                        return new Facet(fName, fType, gbMeta.Source.Organism.Genus + " " + gbMeta.Source.Organism.Species.Substring(0, index));
                    }
                    else
                    {
                        return new Facet(fName, fType, gbMeta.Source.Organism.Genus + " " + gbMeta.Source.Organism.Species);
                    }
                case "Kingdom":
                    classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                    if (classLevels.Length >= 1)
                    {
                        return new Facet(fName, fType, classLevels[0]);
                    }
                    else
                    {
                        return new Facet(fName, fType, "N/A");
                    }
                case "Phylum":
                    classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                    if (classLevels.Length >= 2)
                    {
                        return new Facet(fName, fType, classLevels[1]);
                    }
                    else
                    {
                        return new Facet(fName, fType, "N/A");
                    }
                case "Class":
                    classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                    if (classLevels.Length >= 3)
                    {
                        return new Facet(fName, fType, classLevels[2]);
                    }
                    else
                    {
                        return new Facet(fName, fType, "N/A");
                    }
                case "Order":
                    classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                    if (classLevels.Length >= 4)
                    {
                        return new Facet(fName, fType, classLevels[3]);
                    }
                    else
                    {
                        return new Facet(fName, fType, "N/A");
                    }
                case "Family":
                    classLevels = gbMeta.Source.Organism.ClassLevels.Split(';');
                    if (classLevels.Length >= 5)
                    {
                        return new Facet(fName, fType, classLevels[4]);
                    }
                    else
                    {
                        return new Facet(fName, fType, "N/A");
                    }
                case "Lineage":
                    return new Facet(fName, fType, gbMeta.Source.Organism.ClassLevels.ToString());
                case "Organism":
                    return new Facet(fName, fType, gbMeta.Source.CommonName);
                    // return new Facet(fName, fType, gbMeta.Source.Organism.Genus + " " + gbMeta.Source.Organism.Species);
                case "Genus":
                    return new Facet(fName, fType, gbMeta.Source.Organism.ClassLevels.Split(';').Last().Trim().TrimEnd('.'));
                case "Gene":
                    string name = "N/A";
                    //if (bestCds != null)
                    if (bestItem != null)
                    {
                        //CodingSequence feature = bestCds;
                        FeatureItem feature = bestItem;
                        String geneSym = "N/A";
                        foreach (KeyValuePair<string,List<String>> qualifier in feature.Qualifiers){
                           if (qualifier.Key == "gene")
                            {
                            geneSym = qualifier.Value[0].ToString().Trim('"');
                            }   
                        }
                                                    
                        if (geneSym != "")
                        {
                            name = geneSym;
                            string url2 = System.Web.HttpUtility.HtmlEncode("http://www.ncbi.nlm.nih.gov/sites/entrez?cmd=search&db=gene&term=" + name + "%5Bsym%5D");
                            return new Facet(fName, fType, name, url2);
                        }
                    }
                    return new Facet(fName, fType, name, null);
                case "GI":
                    return new Facet(fName, fType, gbMeta.Version.GINumber, NCBIurl + gbMeta.Version.GINumber);
                case "Accession":
                    return new Facet(fName, fType, gbMeta.Version.CompoundAccession, NCBIurl + gbMeta.Version.CompoundAccession);
                case "Definition":
                    return new Facet(fName, fType, gbMeta.Definition);
                case "EValue":
                    return new Facet(fName, fType, String.Format("{0:#e+00}", hsp.EValue));
                case "AlignLen":
                    return new Facet(fName, fType, hsp.AlignmentLength, @"txt\" + item.Id + ".txt");
                case "RefCount":
                    int i = 0;
                    foreach (CitationReference r in gbMeta.References)
                    {
                        if ((r.Title != "Direct Submission") && (r.Journal != "Unpublished")) { i++; }
                    }
                    return new Facet(fName, fType, i);
                case "References":
                    if (gbMeta.References.Count() == 0)
                    {
                        return new Facet(fName, fType);
                    }

                    string url = CreateReferenceURL(gbMeta.References[0]);
                    Facet f = new Facet(fName, fType);

                    if (gbMeta.References.Count() > 0)
                    {
                        int j = 1;
                        foreach (CitationReference r in gbMeta.References)
                        {
                            if (r.Title != "Direct Submission" && (r.Journal != "Unpublished"))
                            {
                                url = CreateReferenceURL(r);
                                f.Add(new FacetValue(f.Type, String.Format("{0}. {1}. {2}.", j, r.Title, r.Journal), url));
                                j++;
                            }
                        }
                    }
                    return f;
                case "SubmissionDate":
                    DateTime dt = new DateTime(gbMeta.Locus.Date.Year, gbMeta.Locus.Date.Month, gbMeta.Locus.Date.Day);
                    return new Facet(fName, fType, dt.ToUniversalTime().ToString("o"));

                case "Product":
                    Facet productFacet = new Facet(fName, fType, GetQualifierString("Protein", "product", gbMeta));
                    
                    if (productFacet[0].Value == "N/A")
                    {
                        Console.WriteLine(productFacet[0].Value + "!!!!!!!!!!!!!!!!!!!!!!!!!!***********");
                        if (bestItem != null) { productFacet = new Facet(fName, fType, GetQualifierStringFromCDS(bestItem, "product")); }
                        Console.WriteLine(productFacet[0].Value + "!!!!!!!!!!!!!!!!!!!!!!!!&&&&&&&&&&&&&");
                    }
                    return productFacet;

                case "Function":
                    Facet funcFacet = new Facet(fName, fType, GetQualifierString("Protein", "function", gbMeta));
                    if (funcFacet[0].Value == "N/A")
                    {
                        if (bestItem != null) { funcFacet = new Facet(fName, fType, GetQualifierStringFromCDS(bestItem, "function")); }
                    }
                    return funcFacet;

                default:
                    throw (new Exception("Facet category with name = " + fName + " does not exist."));
            }
        }
예제 #15
0
파일: Pivot.cs 프로젝트: vforget/blip
        public static Facet CreateFacet(string fName, string fType, BlastSearchRecord rec, Item item, int rank)
        {
            switch (fName)
            {
                case "QueryName":
                    return new Facet(fName, fType, item.Name);
                case "QueryLen":
                    return new Facet(fName, fType, rec.IterationQueryLength);
                case "Rank":
                    return new Facet(fName, fType, rank);
                default:
                    if (fType == "Number")
                    {
                        return new Facet(fName, fType, 0);
                    }
                    else
                    {
                        if (fType == "Link")
                        {

                            return new Facet(fName, fType, "N/A", "about:none.");
                        }
                        else
                        {
                            if (fType == "DateTime")
                            {
                                Facet f = new Facet(fName, fType);
                                //Facet f = new Facet(fName, fType, dt.ToUniversalTime().ToString("o"));
                                //DateTime dt = new DateTime(1900, 1, 1);
                                return f;
                            }
                            else
                            {
                                return new Facet(fName, fType, "No Hit");
                            }
                        }
                    }
                //throw (new Exception("Facet category with name = " + fName + " does not exist."));
            }
        }