예제 #1
0
 public static GORecord[] FromDataTable(DataTable dt)
 {
     GORecord[] array = new GORecord[dt.Rows.Count];
     for (int i = 0; i < array.Length; i++)
     {
         array[i] = GORecord.FromDataRow(dt.Rows[i]);
     }
     return(array);
 }
예제 #2
0
        public GORecord[] GetGORecordsFromECNumber(string ecNumber)
        {
            DataTable tableGO   = GetGOFromECNumber(ecNumber);
            ArrayList listTerms = new ArrayList();

            foreach (DataRow rowGO in tableGO.Rows)
            {
                listTerms.Add(GORecord.FromDataRow(rowGO));
            }
            return((GORecord[])listTerms.ToArray(typeof(GORecord)));
        }
예제 #3
0
//		public void AddMetaRecord(string key, string val)
//		{
//			_meta.Add(new string[]{key, val});
//		}
//
//		public string[][] GetMetaRecords()
//		{
//			return (string[][])_meta.ToArray(typeof(string[]));
//		}
//
//		public void AddMetaRecords(string[][] records)
//		{
//			foreach(string[] pair in records)
//				AddMetaRecord(pair[0], pair[1]);
//		}

        public static GORecord FromDataRow(DataRow dr)
        {
            GORecord rec = new GORecord();

            if (dr.Table.Columns.Contains("GOID"))
            {
                rec._id = (string)dr["GOID"];
                if (rec._id.StartsWith("GO:"))
                {
                    rec._id = rec._id.Substring("GO:".Length);
                }
            }
            if (dr.Table.Columns.Contains("GOName"))
            {
                rec._name = (string)dr["GOName"];
            }

            //put the rest of the DataRow information into the meta dictionary
//			int colID = dr.Table.Columns["GOID"].Ordinal;
//			int colName = dr.Table.Columns["GOName"].Ordinal;
//			for(int i=0; i<dr.Table.Columns.Count; i++)
//			{
//				if( i == colID || i == colName) continue;
//				string key = dr.Table.Columns[i].ColumnName;
//				string val = dr[i].ToString();
//				rec.AddMetaRecord(key, val);
//			}

            if (dr.Table.Columns.Contains("SwissProID"))
            {
                rec._notes = "linked through Protein: " + (string)dr["protein_name"];
            }

            if (dr.Table.Columns.Contains("ECNumber"))
            {
                string ec = (string)dr["ECNumber"];
                rec._notes    = "linked through EC: " + ec;
                rec._ecNumber = ec;
            }
            if (dr.Table.Columns.Contains("process_ID") && !dr.IsNull("process_ID"))
            {
                rec._processID = (Guid)dr["process_ID"];
            }
            if (dr.Table.Columns.Contains("process_name") && !dr.IsNull("process_name"))
            {
                rec._processName = (string)dr["process_name"];
            }
            if (dr.Table.Columns.Contains("TermLevel") && !dr.IsNull("TermLevel"))
            {
                rec._treeLevel = (int)dr["TermLevel"];
            }
            return(rec);
        }
예제 #4
0
        public override bool Equals(object obj)
        {
            if (obj.GetType() != typeof(GORecord))
            {
                return(base.Equals(obj));
            }
            GORecord rec = obj as GORecord;

            return
                (this.ID == rec.ID &&
                 this.ECNumber == rec.ECNumber &&
                 this.Name == rec.Name &&
                 this.Notes == rec.Notes &&
                 this.ProcessID == rec.ProcessID &&
                 this.ProcessName == rec.ProcessName);
        }
예제 #5
0
        public GORecord[] GetGORecordsFromProcessID_EC(Guid processID)
        {
            //find the GO Terms through EC Numbers
            //			PathwaysLib.ServerObjects.ServerProcess sp = PathwaysLib.ServerObjects.ServerProcess.Load(processID);
            //			Guid gProcessID = sp.GenericProcessID;
            DataTable dtGO_EC = GetGOFromProcessID_ECNumber(processID);

            ArrayList goRecords = new ArrayList();

            foreach (DataRow dr in dtGO_EC.Rows)
            {
                GORecord rec = GORecord.FromDataRow(dr);
                rec.TreeLevel = GetMaxMaxTreeLevelOfGOTerm(rec.ID);
                goRecords.Add(rec);
            }
            return((GORecord[])goRecords.ToArray(typeof(GORecord)));
        }
예제 #6
0
        public GORecord[] TransposeGOTermUpToLevel(GORecord record, int treeLevel)
        {
            if (GetMinTreeLevelOfGOTerm_UnderCatalyticActivity(record.ID) <= treeLevel)
            {
                return new GORecord[] { record }
            }
            ;

            //a queue to aid in BFS
            Queue goTerms = new Queue(new GORecord[] { record });

            ArrayList listLevelXAnnotations = new ArrayList();

            //keep track of all categories so we don't go up a path multiple times
            ArrayList listTouchedCategories = new ArrayList();

            while (goTerms.Count > 0)
            {
                GORecord rec = (GORecord)goTerms.Dequeue();

                //if this is at the correct level or above, add it to the annotation list
                int minLevel = GetMaxMaxTreeLevelOfGOTerm(rec.ID);
                if (minLevel <= treeLevel)
                {
                    rec.TreeLevel = minLevel;
                    listLevelXAnnotations.Add(rec);
                }
                else
                {
                    //find it's parents who are under Catalytic Activity and add those to the Queue
                    SqlConnection con = new SqlConnection(CONNECTION_STRING);
                    try
                    {
                        con.Open();

                        string command =
                            "select ParentName = terms.[Name], tt.* from " +
                            "	(select * from Pubmed.dbo.GOTermsTree where ChildID=@childID and OnPathUnderCatalyticActivity=1) tt "+
                            "	inner join "+
                            "	Pubmed.dbo.GOTerms terms "+
                            "	on tt.ParentID = terms.[ID] ";

                        SqlCommand com = new SqlCommand(command, con);
                        com.Parameters.Add("@childID", rec.ID);
                        SqlDataReader dr = com.ExecuteReader();
                        while (dr.Read())
                        {
                            //add a modified version of this same record to the queue
                            string   GOID      = (string)dr["ParentID"];
                            string   GOName    = (string)dr["ParentName"];
                            int      nextLevel = (int)dr["TermLevel"];
                            GORecord newRec    = new GORecord();
                            newRec.ECNumber    = rec.ECNumber;
                            newRec.Notes       = rec.Notes;
                            newRec.ProcessID   = rec.ProcessID;
                            newRec.ProcessName = rec.ProcessName;
                            newRec.TreeLevel   = nextLevel;
                            newRec.ID          = GOID;
                            newRec.Name        = GOName;

                            //only add this category if we haven't been up this path
                            if (!listTouchedCategories.Contains(newRec.ID))
                            {
                                goTerms.Enqueue(newRec);
                                listTouchedCategories.Add(newRec.ID);
                            }
                        }
                        dr.Close();
                    }
                    catch (Exception se) { throw se; }
                    finally{ con.Close(); }
                }
            }

            return((GORecord[])listLevelXAnnotations.ToArray(typeof(GORecord)));
        }