1 /** @source ontocount
2 **
3 ** Get number of ontology term(s) matching a query
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 ontocount ************************************************************
70 **
71 ** Count ontology term(s) matching a query
72 **
73 ******************************************************************************/
74 
main(int argc,char ** argv)75 int main(int argc, char **argv)
76 {
77     /* Variable declarations */
78     AjPOboall oboall = NULL;
79     AjBool subclasses = ajFalse;
80     AjBool obsolete = ajFalse;
81     AjPFile outf = NULL;
82 
83     AjPObo obo     = NULL;
84     AjPObo obotest = NULL;
85 
86     AjPList obolist = ajListNew();
87 
88     AjPTable foundtable = NULL;
89     ajuint ifound = 0;
90     ajuint ikeep = 0;
91 
92     /* ACD processing */
93     embInit("ontocount", argc, argv);
94 
95     oboall     = ajAcdGetOboall("oboterms");
96     outf       = ajAcdGetOutfile("outfile");
97     subclasses = ajAcdGetBoolean("subclasses");
98     obsolete   = ajAcdGetBoolean("obsolete");
99 
100     foundtable = ajTablestrNew(600);
101 
102     while(ajOboallNext(oboall, &obo))
103     {
104         ajListPushAppend(obolist, ajOboNewObo(obo));
105 
106         if(subclasses)
107             ajOboGetTree(obo, obolist);
108 
109         while(ajListGetLength(obolist))
110         {
111             ajListPop(obolist, (void**) &obotest);
112             if(!obsolete && ajOboIsObsolete(obotest))
113             {
114                 ajOboDel(&obotest);
115                 continue;
116             }
117 
118             ifound++;
119             if(!ajTableMatchS(foundtable, obotest->Id))
120             {
121                 ajTablePut(foundtable, ajStrNewS(obotest->Id),
122                            (void *) 1);
123                 ikeep++;
124             }
125             ajOboDel(&obotest);
126         }
127     }
128 
129     ajFmtPrintF(outf, "%u\n", ikeep);
130 
131     /* Memory clean-up and exit */
132 
133     ajListFree(&obolist);
134 
135     ajOboallDel(&oboall);
136     ajOboDel(&obo);
137     ajFileClose(&outf);
138     ajTablestrFreeKey(&foundtable);
139 
140     embExit();
141 
142     return 0;
143 }
144 
145 
146 /* ==================================================================== */
147 /* ============================ functions ============================= */
148 /* ==================================================================== */
149 
150