1 /** @source ontogetdown
2 **
3 ** Find ontology terms by parent identifier
4 **
5 ** @author Copyright (C) 2010 Jon Ison / EMBOSS
6 ** @version 1  First version</replaceable>
7 ** @modified July 2010  Jon Ison First version</replaceable>
8 ** @@
9 **
10 ** This program is free software; you can redistribute it and/or
11 ** modify it under the terms of the GNU General Public License
12 ** as published by the Free Software Foundation; either version 2
13 ** of the License, or (at your option) any later version.
14 **
15 ** This program is distributed in the hope that it will be useful,
16 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 ** GNU General Public License for more details.
19 **
20 ** You should have received a copy of the GNU General Public License
21 ** along with this program; if not, write to the Free Software
22 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23 ********************************************************************/
24 
25 
26 /* ==================================================================== */
27 /* ========================== include files =========================== */
28 /* ==================================================================== */
29 
30 #include "emboss.h"
31 
32 /* Inclusion of system and local header files goes here */
33 
34 
35 
36 /* ==================================================================== */
37 /* ============================ constants ============================= */
38 /* ==================================================================== */
39 
40 /* #define and enum statements go here */
41 
42 
43 
44 /* ==================================================================== */
45 /* ======================== global variables ========================== */
46 /* ==================================================================== */
47 
48 /* Global variables definitions go here */
49 
50 
51 
52 /* ==================================================================== */
53 /* ============================== data ================================ */
54 /* ==================================================================== */
55 
56 /* Definition of datatypes go here */
57 
58 
59 
60 /* ==================================================================== */
61 /* ==================== function prototypes =========================== */
62 /* ==================================================================== */
63 
64 /* Function prototypes for public (external) functions go here */
65 
66 
67 
68 
69 /* @prog ontogetdown **********************************************************
70 **
71 ** Find EDAM ontology 'data' (identifier) terms by keyword
72 **
73 ******************************************************************************/
74 
main(int argc,char ** argv)75 int main(int argc, char **argv)
76 {
77     /* Variable declarations */
78     AjPOboall   oboall = NULL;
79     AjPOutfile  outfile = NULL;
80     AjBool obsolete = ajFalse;
81 
82     AjPObo obo = NULL;
83     AjPObo obochild = NULL;
84     AjPOboin obochildin = NULL;
85     AjPStr obochildqry = NULL;
86     AjPTable obotable = NULL;
87 
88     ajuint ifound = 0;
89     ajuint ichild = 0;
90     ajuint ikeep = 0;
91 
92     AjPList obolist = NULL;
93 
94     /* ACD processing */
95     embInit("ontogetdown", argc, argv);
96 
97     oboall    = ajAcdGetOboall("oboterms");
98     outfile   = ajAcdGetOutobo("outfile");
99     obsolete = ajAcdGetBoolean("obsolete");
100 
101     /* Application logic */
102     /* Check EDAM ontology (edam.obo) is installed indexed.
103        Loop through queryable fields
104         :Return list of EDAM ids with fields matching keyword(s)
105        Merge lists of matching entries
106        Write output file */
107 
108     obochildin = ajOboinNew();
109 
110     obochild = ajOboNew();
111 
112     obolist = ajListNew();
113 
114     obotable = ajTablestrNew(600);
115 
116     while(ajOboallNext(oboall, &obo))
117     {
118         if(!obsolete && ajOboIsObsolete(obo))
119             continue;
120 
121         ifound++;
122 
123         ajFmtPrintS(&obochildqry, "%S-isa:%S", ajOboGetDb(obo), obo->Id);
124         ajOboinQryS(obochildin, obochildqry);
125         while(ajOboinRead(obochildin, obochild))
126         {
127             ichild++;
128             if(!ajTableMatchS(obotable, obochild->Id))
129             {
130                 ajObooutWrite(outfile, obochild);
131                 ajTablePut(obotable, ajStrNewS(obochild->Id),
132                            (void *) 1);
133                 ikeep++;
134             }
135         }
136     }
137 
138     if(!ifound)
139         ajErr("No matching terms");
140     else if(!ichild)
141         ajErr("No child terms");
142 
143     /* Memory clean-up and exit */
144 
145     ajStrDel(&obochildqry);
146     ajTablestrFreeKey(&obotable);
147 
148     ajOboallDel(&oboall);
149     ajOboinDel(&obochildin);
150 
151     ajOboDel(&obo);
152     ajOboDel(&obochild);
153 
154     ajListFree(&obolist);
155 
156     ajOutfileClose(&outfile);
157 
158     embExit();
159 
160     return 0;
161 }
162 
163 
164 /* ==================================================================== */
165 /* ============================ functions ============================= */
166 /* ==================================================================== */
167 
168