Пример #1
0
        public void TestColleaguesSetUp()
        {
            // Create the AAMC roster object
            roster = new Roster(AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestRoster\\testroster.csv");


            // Stuff for GetPublications()

            // Make an anonymous callback function that keeps track of the callback data
            Harvester.GetPublicationsStatus StatusCallback = delegate(int number, int total, int averageTime)
            {
                //
            };
            // Make an anonymous callback function to do nothing for GetPublicationsMessage
            Harvester.GetPublicationsMessage MessageCallback = delegate(string Message, bool StatusBarOnly)
            {
                //
            };
            // Make an anonymous callback function to return false for CheckForInterrupt
            Harvester.CheckForInterrupt InterruptCallback = delegate()
            {
                return(false);
            };
            double AverageMilliseconds;



            // Read the people file
            People PeopleFromFile = new People(
                AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestColleagues",
                "PeopleFile.xls");

            // Drop all tables from the test database
            DB = new Database("Colleague Generator Unit Test");
            foreach (string Table in new string[]
            {
                "colleaguepublications", "colleagues", "meshheadings",
                "people", "peoplepublications", "publicationauthors",
                "publicationgrants", "publicationmeshheadings", "publications",
                "pubtypecategories", "starcolleagues"
            }
                     )
            {
                DB.ExecuteNonQuery("DROP TABLE IF EXISTS " + Table + ";");
            }

            // Create the test database
            harvester = new Harvester(DB);
            harvester.CreateTables();
            ColleagueFinder.CreateTables(DB);

            // Populate it using the Mock NCBI object
            ncbi     = new MockNCBI("Medline");
            PubTypes = new PublicationTypes(
                AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestColleagues",
                "PublicationTypes.csv"
                );

            // Write each person and his publications to the database
            foreach (Person person in PeopleFromFile.PersonList)
            {
                person.WriteToDB(DB);
                harvester.GetPublications(ncbi, PubTypes, person, StatusCallback, MessageCallback, InterruptCallback, out AverageMilliseconds);
            }
        }
        /// <summary>
        /// Use the tests from TestColleagues to set up the database,
        /// then find the colleagues, get their publications and
        /// remove false colleagues.
        ///
        /// This is a static void so that it can be called by other tests.
        /// </summary>
        public static void DoSetUp(out Database DB, out Harvester harvester, out PublicationTypes PubTypes, out NCBI ncbi, string[] Languages)
        {
            // First recreate the database
            DB = new Database("Colleague Generator Unit Test");
            ColleagueFinder.CreateTables(DB);

            // Then use the test fixture setup in TestColleagues to populate it
            TestColleagues testColleagues = new TestColleagues();

            testColleagues.TestColleaguesSetUp();

            // Write the publication types to the database
            PubTypes = new PublicationTypes(
                AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestColleagues",
                "PublicationTypes.csv"
                );
            PubTypes.WriteToDB(DB);

            // Create the other objects from the database
            harvester = new Harvester(DB);
            Roster roster = new Roster(AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestRoster\\testroster.csv");

            ncbi = new MockNCBI("Medline");

            // Find the colleagues and publications
            ColleagueFinder finder = new ColleagueFinder(DB, roster, ncbi, null);
            People          people = new People(DB);

            foreach (Person person in people.PersonList)
            {
                Person[] found = finder.FindPotentialColleagues(person);
                if (found != null)
                {
                    finder.GetColleaguePublications(found, new string[] { "eng" }, new List <int> {
                        1, 2, 3
                    });
                }
            }

            // Remove false colleagues
            ColleagueFinder.RemoveFalseColleagues(DB, null, "PeoplePublications");


            // Create the extra articles for Bunn and Tobian.
            // Verify that Bunn and Tobian have five articles in common, with years
            // ranging from 1993 to 2001.
            CreateExtraArticlesForTobianAndBunn(DB, PubTypes, Languages);
            DataTable Result = DB.ExecuteQuery(
                @"SELECT p.Year, p.PMID, pp.PositionType AS StarPositionType, 
                       cp.PositionType AS ColleaguePositionType, p.Journal
                  FROM Publications p, ColleaguePublications cp, PeoplePublications pp
                 WHERE pp.Setnb = 'A5401532'
                   AND cp.Setnb = 'A4800524'
                   AND p.PMID = pp.PMID
                   AND p.PMID = cp.PMID
                 ORDER BY p.Year ASC");

            Assert.AreEqual(Result.Rows.Count, 5);
            Assert.AreEqual(Result.Rows[0]["Year"], 1993);
            Assert.AreEqual(Result.Rows[4]["Year"], 2001);
        }
Пример #3
0
        public void GetColleaguesForTobian()
        {
            // We've seeded Tobian.dat with colleagues:
            // Paul A. Bunn is in PMID 8931843. He has two articles in OtherPeople.dat, including
            // article 8931843. (Also, PMID 15451956)
            ColleagueFinder finder = new ColleagueFinder(DB, roster, ncbi, null);
            People          people = new People(DB);

            Person[] found;
            foreach (Person person in people.PersonList)
            {
                // Only look for a star's colleagues we've seeded that star's colleagues in the DAT files
                switch (person.Last)
                {
                case "Tobian":
                    // Tobian has two apparent colleagues. Paul Bunn is a true colleague
                    // who has publications in common with Tobian. Sharon J. Bintliff
                    // is a false colleague with no common publications.
                    found = finder.FindPotentialColleagues(person);
                    Assert.AreEqual(found.Length, 2);
                    Person PaulBunn = found[0];
                    Assert.AreEqual(PaulBunn.Setnb, "A4800524");
                    Assert.AreEqual(PaulBunn.Last, "BUNN");
                    Assert.AreEqual(PaulBunn.First, "PAUL");
                    Assert.AreEqual(PaulBunn.Middle, "A.");
                    Assert.AreEqual(PaulBunn.Names.Length, 4);
                    Assert.AreEqual(PaulBunn.Names[0], "bunn p jr");
                    Assert.AreEqual(PaulBunn.Names[1], "bunn pa jr");
                    Assert.AreEqual(PaulBunn.Names[2], "bunn pa");
                    Assert.AreEqual(PaulBunn.Names[3], "bunn p");
                    Assert.AreEqual(PaulBunn.MedlineSearch, "((\"bunn pa jr\"[au] or \"bunn p jr\"[au]) or ((\"bunn p\"[au] or \"bunn pa\"[au]) and (lymphoma or cancer)) and 1970:2005[dp])");
                    Person SharonBintliff = found[1];
                    Assert.AreEqual(SharonBintliff.Setnb, "A2700156");
                    Assert.AreEqual(SharonBintliff.Last, "BINTLIFF");
                    Assert.AreEqual(SharonBintliff.First, "SHARON");
                    Assert.AreEqual(SharonBintliff.Middle, "J");
                    Assert.AreEqual(SharonBintliff.Names.Length, 1);
                    Assert.AreEqual(SharonBintliff.Names[0], "bintliff sj");
                    Assert.AreEqual(SharonBintliff.MedlineSearch, "\"bintliff sj\"[au]");

                    // Make sure that Paul and Sharon were really added as a colleague
                    DataTable result = DB.ExecuteQuery("SELECT StarSetnb, Setnb FROM StarColleagues ORDER BY Setnb DESC");
                    Assert.AreEqual(result.Rows.Count, 2);
                    DataRow row = result.Rows[0];
                    Assert.AreEqual(row[0].ToString(), "A5401532");
                    Assert.AreEqual(row[1].ToString(), "A4800524");
                    row = result.Rows[1];
                    Assert.AreEqual(row[0].ToString(), "A5401532");
                    Assert.AreEqual(row[1].ToString(), "A2700156");

                    // Get the colleague's publications, make sure they're written to the database
                    finder.GetColleaguePublications(found, new string[] { "eng" }, new List <int> {
                        0, 1, 2, 3, 4, 5, 6
                    });
                    Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM Colleagues"), 2);
                    Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM StarColleagues"), 2);
                    Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM ColleaguePublications"), 2);
                    Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM ColleaguePublications WHERE PMID = 8931843"), 1);
                    Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM ColleaguePublications WHERE PMID = 15451956"), 1);

                    // Remove false colleagues, make sure Sharon was deleted
                    ColleagueFinder.RemoveFalseColleagues(DB, null, "PeoplePublications");
                    result = DB.ExecuteQuery("SELECT StarSetnb, Setnb FROM StarColleagues ORDER BY Setnb DESC");
                    Assert.AreEqual(result.Rows.Count, 1);
                    row = result.Rows[0];
                    Assert.AreEqual(row[0].ToString(), "A5401532");
                    Assert.AreEqual(row[1].ToString(), "A4800524");

                    break;
                }
            }
        }
        /// <summary>
        /// Add five extra articles to the database for Tobian and Bunn
        /// </summary>
        public static void CreateExtraArticlesForTobianAndBunn(Database DB, PublicationTypes PubTypes, string[] Languages)
        {
            // Create people objects for Tobian and Bunn
            Person Tobian = new Person("A5401532", "Louis", "", "Tobian", true,
                                       new String[] { "tobian l", "tobian l jr", "tobian lj" },
                                       "(\"tobian l\"[au] OR \"tobian l jr\"[au] OR \"tobian lj\"[au])");

            Person Bunn = new Person("A4800524", "PAUL", "A.", "BUNN", true,
                                     new String[] { "bunn p jr", "bunn pa jr", "bunn pa", "bunn p" },
                                     "((\"bunn pa jr\"[au] or \"bunn p jr\"[au]) or ((\"bunn p\"[au] or \"bunn pa\"[au]) and (lymphoma or cancer)) and 1970:2005[dp])");

            // First, add a few more publications to the colleague.
            Publication pub = new Publication();

            string[] Authors = new String[] { "TOBIAN L", "BUNN P" };
            pub.Year     = 1993;
            pub.Journal  = "Fake Journal";
            pub.Authors  = Authors;
            pub.PMID     = 22222222;
            pub.Title    = "Fake article #1";
            pub.Language = "eng";
            pub.PubType  = "Journal Article";
            Publications.WriteToDB(pub, DB, PubTypes, Languages);
            Publications.WritePeoplePublicationsToDB(DB, Tobian, pub);
            ColleagueFinder.WriteColleaguePublicationsToDB(DB, Bunn, pub, PubTypes, new string[] { "eng" });

            pub          = new Publication();
            Authors      = new String[] { "BUNN P", "TOBIAN L" };
            pub.Year     = 1996;
            pub.Journal  = "Xenotransplantation";
            pub.Authors  = Authors;
            pub.PMID     = 12345678;
            pub.Title    = "Fake article #2";
            pub.Language = "eng";
            pub.PubType  = "Journal Article";
            Publications.WriteToDB(pub, DB, PubTypes, Languages);
            Publications.WritePeoplePublicationsToDB(DB, Tobian, pub);
            ColleagueFinder.WriteColleaguePublicationsToDB(DB, Bunn, pub, PubTypes, new string[] { "eng" });

            pub          = new Publication();
            Authors      = new String[] { "TOBIAN L", "BUNN P" };
            pub.Year     = 1996;
            pub.Journal  = "Fake Journal";
            pub.Authors  = Authors;
            pub.PMID     = 98765432;
            pub.Title    = "Fake article #3";
            pub.Language = "eng";
            pub.PubType  = "Journal Article";
            Publications.WriteToDB(pub, DB, PubTypes, Languages);
            Publications.WritePeoplePublicationsToDB(DB, Tobian, pub);
            ColleagueFinder.WriteColleaguePublicationsToDB(DB, Bunn, pub, PubTypes, new string[] { "eng" });

            pub          = new Publication();
            Authors      = new String[] { "TOBIAN L", "BUNN P", "SCHMOE J" };
            pub.Year     = 2001;
            pub.Journal  = "Nature";
            pub.Authors  = Authors;
            pub.PMID     = 55555555;
            pub.Title    = "Fake article #4";
            pub.Language = "eng";
            pub.PubType  = "Journal Article";
            Publications.WriteToDB(pub, DB, PubTypes, Languages);
            Publications.WritePeoplePublicationsToDB(DB, Tobian, pub);
            ColleagueFinder.WriteColleaguePublicationsToDB(DB, Bunn, pub, PubTypes, new string[] { "eng" });
        }