source: branches/stable/PROBE_SET/ps_arb2asciipaths.cxx

Last change on this file was 16763, checked in by westram, 6 years ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.1 KB
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : ps_arb2asciipaths.cxx                             //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Coded by Wolfram Foerster in October 2002                     //
7//   Institute of Microbiology (Technical University Munich)       //
8//   http://www.arb-home.de/                                       //
9//                                                                 //
10// =============================================================== //
11
12#include "ps_filebuffer.hxx"
13#include "ps_pg_tree_functions.hxx"
14
15static IDVector *__PATH = new IDVector;
16
17static void PS_print_paths(GBDATA *_pb_node) {
18    //  recursively print the paths to the leafs
19
20    // number and species name
21    GBDATA     *data   = GB_entry(_pb_node, "num");
22    const char *buffer = GB_read_char_pntr(data);
23    SpeciesID   id     = atoi(buffer);
24
25    // probe(s)
26    GBDATA *pb_group = GB_entry(_pb_node, "group");
27    if (!pb_group) {
28        id = -id;
29    }
30
31    // path
32    __PATH->push_back(id);
33
34    // child(ren)
35    GBDATA *pb_child = PS_get_first_node(_pb_node);
36    if (pb_child) {
37        while (pb_child) {
38            PS_print_paths(pb_child);
39            pb_child = PS_get_next_node(pb_child);
40        }
41    }
42    else {
43        // print path in leaf nodes
44        printf("[%6zu] ", __PATH->size());
45        for (IDVectorCIter i=__PATH->begin(); i != __PATH->end(); ++i) {
46            printf("%6i ", *i);
47        }
48        printf("\n");
49    }
50
51    // path
52    __PATH->pop_back();
53}
54
55
56int main(int argc, char *argv[]) {
57    GB_ERROR error = NULp;
58    if (argc < 2) {
59        error = GBS_global_string("Missing arguments\n Usage %s <input database name>", argv[0]);
60    }
61    else {
62        const char *input_DB_name = argv[1];
63        printf("Loading probe-group-database '%s'..\n", input_DB_name);
64
65        GBDATA *pb_main     = GB_open(input_DB_name, "rwcN"); // open probe-group-database
66        if (!pb_main) error = GB_await_error();
67        else {
68            GB_transaction  ta(pb_main);
69            GBDATA         *group_tree = GB_entry(pb_main, "group_tree");
70            if (!group_tree) error     = "no 'group_tree' in database";
71            else {
72                GBDATA *first_level_node     = PS_get_first_node(group_tree);
73                if (!first_level_node) error = "no 'node' found in group_tree";
74                else {
75                    printf("dumping probes... (starting with first toplevel nodes)\n");
76                    // print 1st level nodes (and its subtrees)
77                    do {
78                        PS_print_paths(first_level_node);
79                        first_level_node = PS_get_next_node(first_level_node);
80                    }
81                    while (first_level_node);
82                }
83            }
84        }
85    }
86
87    if (error) {
88        fprintf(stderr, "Error in %s: %s\n", argv[0], error);
89        return EXIT_FAILURE;
90    }
91    return EXIT_SUCCESS;
92}
93
94
Note: See TracBrowser for help on using the repository browser.