public void TestMiddleAuthor()
        {
            string MedlineData = @"PMID- 14332364
OWN - NLM
STAT- OLDMEDLINE
DA  - 19651101
DCOM- 19961201
LR  - 20051116
PUBM- Print
IS  - 0002-922X (Print)
VI  - 110
DP  - 1965 Sep
TI  - CONGENITAL SCALP DEFECTS IN TWIN SISTERS.
PG  - 293-5
FAU - HODGMAN, J E
AU  - HODGMAN JE
FAU - MATHIES, A W Jr
AU  - MATHIES AW Jr
FAU - LEVAN, N E
AU  - LEVAN NE
LA  - eng
PT  - Journal Article
PL  - UNITED STATES
TA  - Am J Dis Child
JT  - American journal of diseases of children (1960)
JID - 0370471
SB  - OM
MH  - *Abnormalities
MH  - *Diseases in Twins
MH  - *Infant, Newborn
MH  - *Scalp
OTO - NLM
OT  - *ABNORMALITIES
OT  - *DISEASES IN TWINS
OT  - *INFANT, NEWBORN
OT  - *SCALP
EDAT- 1965/09/01
MHDA- 1965/09/01 00:01
PST - ppublish
SO  - Am J Dis Child. 1965 Sep;110:293-5.";

            // Add a person to the database
            Database DB      = new Database("Publication Harvester Unit Test");
            Person   Mathies = new Person("A5703161", "Allan", "W", "MATHIES", false,
                                          new String[] { "MATHIES AW Jr" }, "MATHIES AW Jr[au]");

            // Create the publication
            PublicationTypes ptc = new PublicationTypes(
                AppDomain.CurrentDomain.BaseDirectory + "\\Unit Tests\\TestPublicationTypes",
                "PublicationTypes.csv"
                );
            Publications Pubs = new Publications(MedlineData, ptc);

            Assert.IsTrue(Pubs.PublicationList.Length == 1);
            Publication Pub = Pubs.PublicationList[0];

            Assert.IsTrue(Pub.Authors[1] == "MATHIES AW Jr");

            // Clear the database
            Harvester harvester = new Harvester(DB);

            harvester.CreateTables();

            // Write the person and publication to the database
            // NOTE: The author position is determined in WritePeoplePublicationsToDB()
            PublicationTypes PubTypes = new PublicationTypes(
                AppDomain.CurrentDomain.BaseDirectory + "\\Unit Tests\\TestPublicationTypes",
                "PublicationTypes.csv"
                );

            Mathies.WriteToDB(DB);
            Publications.WriteToDB(Pub, DB, PubTypes, new string[] { "eng" });
            Publications.WritePeoplePublicationsToDB(DB, Mathies, Pub);

            // Verify that Mathies is the middle author, not the second author
            Publications PubsFromDB = new Publications(DB, Mathies, false);

            Assert.IsTrue(PubsFromDB.PublicationList.Length == 1);
            Assert.IsTrue(PubsFromDB.PublicationList[0].PMID == 14332364);
            Harvester.AuthorPositions PositionType;
            Assert.IsTrue(Publications.GetAuthorPosition(DB, 14332364, Mathies, out PositionType, "PeoplePublications") == 2);
            Assert.IsTrue(PositionType == Harvester.AuthorPositions.Middle);
        }
Example #2
0
        public void GetPublications()
        {
            // Set up the database
            TestHarvester.GetPublicationsFromInput1XLS_Using_MockNCBI(false, new string[] { "eng" }, 22);

            Database         DB  = new Database("Publication Harvester Unit Test");
            PublicationTypes ptc = new PublicationTypes(
                AppDomain.CurrentDomain.BaseDirectory + "\\Unit Tests\\TestPublicationTypes",
                "PublicationTypes.csv"
                );

            // Verify the correct publications were written (including publication type and author position)
            People people = new People(DB);

            Assert.IsTrue(people.PersonList.Count == 4);
            int FoundPublications = 0;

            foreach (Person person in people.PersonList)
            {
                Publications pubs = new Publications(DB, person, false);
                switch (person.Setnb)
                {
                case "A6009400":     // Van Eys
                    Assert.IsTrue(pubs.PublicationList.Length == 8);
                    if (pubs.PublicationList != null)
                    {
                        foreach (Publication pub in pubs.PublicationList)
                        {
                            switch (pub.PMID)
                            {
                            case 9876482:
                                FoundPublications++;
                                Assert.IsTrue(pub.Title == "Benefits of nutritional intervention on nutritional status, quality of life and survival.");
                                Assert.IsTrue(pub.Pages == "66-8");
                                Assert.IsTrue(pub.Year == 1998);
                                Assert.IsTrue(pub.Month == null);
                                Assert.IsTrue(pub.Day == null);
                                Assert.IsTrue(pub.Journal == "Int J Cancer Suppl");
                                Assert.IsTrue(pub.Volume == "11");
                                Assert.IsTrue(pub.Issue == null);

                                Assert.IsTrue(pub.Authors.Length == 1);
                                Assert.IsTrue(pub.Authors[0] == "Van Eys J");

                                // Verify publication type
                                Assert.IsTrue(pub.PubType == "Journal Article");
                                Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 3);

                                // Verify MeSH headings
                                Assert.IsTrue(pub.MeSHHeadings.Count == 8);
                                Assert.IsTrue(pub.MeSHHeadings.Contains("Child"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("Nutrition Disorders/*complications/*therapy"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("Survival Rate"));

                                // Verify position type
                                Harvester.AuthorPositions PositionType;
                                int AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications");
                                Assert.IsTrue(AuthorPosition == 1);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.First);
                                AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType);
                                Assert.IsTrue(AuthorPosition == 1);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.First);
                                break;



                            case 8403744:
                                FoundPublications++;
                                Assert.IsTrue(pub.Title == "Early hospital discharge and the timing of newborn metabolic screening.");
                                Assert.IsTrue(pub.Pages == "463-6");
                                Assert.IsTrue(pub.Year == 1993);
                                Assert.IsTrue(pub.Month == "Aug");
                                Assert.IsTrue(pub.Day == null);
                                Assert.IsTrue(pub.Journal == "Clin Pediatr (Phila)");
                                Assert.IsTrue(pub.Volume == "32");
                                Assert.IsTrue(pub.Issue == "8");

                                Assert.IsTrue(pub.Authors.Length == 4);
                                Assert.IsTrue(pub.Authors[0] == "Coody D");
                                Assert.IsTrue(pub.Authors[1] == "Yetman RJ");
                                Assert.IsTrue(pub.Authors[2] == "Montgomery D");
                                Assert.IsTrue(pub.Authors[3] == "van Eys J");

                                // Verify publication type
                                Assert.IsTrue(pub.PubType == "Consensus Development Conference, NIH");
                                Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 1);

                                // Verify MeSH headings
                                Assert.IsTrue(pub.MeSHHeadings.Count == 15);
                                Assert.IsTrue(pub.MeSHHeadings.Contains("Cesarean Section"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("Hospitals, Private"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("*Insurance, Health"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("United States"));

                                // Verify position type
                                AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications");
                                Assert.IsTrue(AuthorPosition == 4);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.Last);
                                AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType);
                                Assert.IsTrue(AuthorPosition == 4);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.Last);
                                break;
                            }
                        }
                    }
                    break;

                case "A5401532":     // Tobian
                    Assert.IsTrue(pubs.PublicationList.Length == 5);
                    if (pubs.PublicationList != null)
                    {
                        foreach (Publication pub in pubs.PublicationList)
                        {
                            switch (pub.PMID)
                            {
                            case 9931073:
                                FoundPublications++;
                                Assert.IsTrue(pub.Title == "Story of the birth of the journal called Hypertension.");
                                Assert.IsTrue(pub.Pages == "7");
                                Assert.IsTrue(pub.Year == 1999);
                                Assert.IsTrue(pub.Month == "Jan");
                                Assert.IsTrue(pub.Day == null);
                                Assert.IsTrue(pub.Volume == "33");
                                Assert.IsTrue(pub.Issue == "1");

                                Assert.IsTrue(pub.Authors.Length == 1);
                                Assert.IsTrue(pub.Authors[0] == "Tobian L");

                                // Verify publication type
                                Assert.IsTrue(pub.PubType == "Historical Article");
                                Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 0);

                                // Verify MeSH headings
                                Assert.IsTrue(pub.MeSHHeadings.Count == 5);
                                Assert.IsTrue(pub.MeSHHeadings.Contains("American Heart Association/*history"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("*Hypertension"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("United States"));

                                // Verify position type
                                Harvester.AuthorPositions PositionType;
                                int AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications");
                                Assert.IsTrue(AuthorPosition == 1);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.First);
                                AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType);
                                Assert.IsTrue(AuthorPosition == 1);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.First);
                                break;
                            }
                        }
                    }
                    break;

                case "A5501586":     // Reemtsma
                    Assert.IsTrue(pubs.PublicationList.Length == 3);
                    if (pubs.PublicationList != null)
                    {
                        foreach (Publication pub in pubs.PublicationList)
                        {
                            switch (pub.PMID)
                            {
                            case 11528018:
                                FoundPublications++;
                                Assert.IsTrue(pub.Title == "Xenotransplantation: A Historical Perspective.");
                                Assert.IsTrue(pub.Pages == "9-12");
                                Assert.IsTrue(pub.Year == 1995);
                                Assert.IsTrue(pub.Month == null);
                                Assert.IsTrue(pub.Day == null);
                                Assert.IsTrue(pub.Volume == "37");
                                Assert.IsTrue(pub.Issue == "1");

                                Assert.IsTrue(pub.Authors.Length == 1);
                                Assert.IsTrue(pub.Authors[0] == "Reemtsma K");

                                // Verify publication type
                                Assert.IsTrue(pub.PubType == "JOURNAL ARTICLE");
                                Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 3);

                                // Verify MeSH headings
                                Assert.IsTrue(pub.MeSHHeadings == null);

                                // Verify position type
                                Harvester.AuthorPositions PositionType;
                                int AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications");
                                Assert.IsTrue(AuthorPosition == 1);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.First);
                                AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType);
                                Assert.IsTrue(AuthorPosition == 1);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.First);
                                break;
                            }
                        }
                    }
                    break;



                case "A5702471":     // Guillemin
                    Assert.IsTrue(pubs.PublicationList.Length == 6);
                    if (pubs.PublicationList != null)
                    {
                        foreach (Publication pub in pubs.PublicationList)
                        {
                            switch (pub.PMID)
                            {
                            case 15642779:
                                // For this publication, we're just concerned that
                                // the publication type is "Review" -- even though
                                // it's the second publication type in the citation,
                                // it's flagged as an "override first pubtype"
                                // in PublicationTypes.csv
                                Assert.IsTrue(pub.PubType == "Review");
                                break;


                            // NOTE: The title has a quote (laureates') that gets stripped off
                            case 12462241:
                                FoundPublications++;
                                Assert.IsTrue(pub.Title == "Nobel laureates letter to President Bush.");
                                Assert.IsTrue(pub.Pages == "A02");
                                Assert.IsTrue(pub.Year == 2001);
                                Assert.IsTrue(pub.Month == "Feb");
                                Assert.IsTrue(pub.Day == "22");
                                Assert.IsTrue(pub.Journal == "Washington Post");
                                Assert.IsTrue(pub.Volume == null);
                                Assert.IsTrue(pub.Issue == null);

                                Assert.IsTrue(pub.Authors.Length == 82);
                                Assert.IsTrue(pub.Authors[0] == "Arrow KJ");
                                Assert.IsTrue(pub.Authors[26] == "Guillemin R");
                                Assert.IsTrue(pub.Authors[81] == "Wilson RW");

                                // Verify publication type
                                Assert.IsTrue(pub.PubType == "Newspaper Article");
                                Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 0);

                                // Verify MeSH headings
                                Assert.IsTrue(pub.MeSHHeadings.Count == 9);
                                Assert.IsTrue(pub.MeSHHeadings.Contains("Embryo Disposition"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("National Institutes of Health (U.S.)"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("United States"));

                                // Verify position type
                                Harvester.AuthorPositions PositionType;
                                int AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications");
                                Assert.IsTrue(AuthorPosition == 27);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.Middle);
                                AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType);
                                Assert.IsTrue(AuthorPosition == 27);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.Middle);
                                break;


                            case 3086749:
                                // This publication was altered to contain six GrantIDs in order to
                                // test the GrantID column length in the database
                                FoundPublications++;
                                Assert.IsTrue(pub.Title == "Pituitary FSH is released by a heterodimer of the beta-subunits from the two forms of inhibin.");
                                Assert.IsTrue(pub.Pages == "779-82");
                                Assert.IsTrue(pub.Year == 1986);
                                Assert.IsTrue(pub.Month == "Jun");
                                Assert.IsTrue(pub.Day == "19-25");
                                Assert.IsTrue(pub.Journal == "Nature");
                                Assert.IsTrue(pub.Volume == "321");
                                Assert.IsTrue(pub.Issue == "6072");

                                Assert.IsTrue(pub.Authors.Length == 7);
                                Assert.IsTrue(pub.Authors[0] == "Ling N");
                                Assert.IsTrue(pub.Authors[4] == "Esch F");
                                Assert.IsTrue(pub.Authors[6] == "Guillemin R");

                                // Verify publication type
                                Assert.IsTrue(pub.PubType == "Journal Article");
                                Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 3);

                                // Verify MeSH headings
                                Assert.IsTrue(pub.MeSHHeadings.Count == 14);
                                Assert.IsTrue(pub.MeSHHeadings.Contains("Amino Acid Sequence"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("Follicle Stimulating Hormone/*secretion"));
                                Assert.IsTrue(pub.MeSHHeadings.Contains("Swine"));

                                // Verify position type
                                AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications");
                                Assert.IsTrue(AuthorPosition == 7);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.Last);
                                AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType);
                                Assert.IsTrue(AuthorPosition == 7);
                                Assert.IsTrue(PositionType == Harvester.AuthorPositions.Last);
                                break;
                            }
                        }
                    }
                    break;
                }
            }
            Assert.IsTrue(FoundPublications == 6);

            // Verify that People.Harvested has been updated for each person
            DataTable Results = DB.ExecuteQuery("SELECT Setnb, Harvested FROM People");

            Assert.IsTrue(Results.Rows.Count == 4);
            foreach (DataRow Row in Results.Rows)
            {
                Assert.IsTrue((bool)Row["Harvested"] == true);
            }
        }