source: tags/arb_5.0/SEQ_QUALITY/SQ_physical_layout.h

Last change on this file was 5675, checked in by westram, 15 years ago
  • removed automatic timestamps (the best they were good for, were vc-conflicts)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.4 KB
Line 
1//  ==================================================================== //
2//                                                                       //
3//    File      : SQ_physical_layout.h                                   //
4//    Purpose   : Class used for calculation of the phys. layout of seq. //
5//                                                                       //
6//                                                                       //
7//  Coded by Juergen Huber in July 2003 - February 2004                  //
8//  Coded by Kai Bader (baderk@in.tum.de) in 2007 - 2008                 //
9//  Copyright Department of Microbiology (Technical University Munich)   //
10//                                                                       //
11//  Visit our web site at: http://www.arb-home.de/                       //
12//                                                                       //
13//  ==================================================================== //
14
15
16#ifndef ARB_ASSERT_H
17#include <arb_assert.h>
18#endif
19#define seq_assert(bed) arb_assert(bed)
20
21class SQ_physical_layout {
22public:
23    SQ_physical_layout();
24    void SQ_calc_physical_layout(const char *sequence, int size,
25            GBDATA * gb_quality_ali);
26    int SQ_get_number_of_bases() const;
27    double SQ_get_gc_proportion() const;
28private:
29    int roundme(double value);
30    double temp;
31    double count_bases;
32    double count_scores;
33    double count_dots;
34    double GC;
35    double GC_proportion;
36    int percent_bases;
37    int count_bases2;
38};
39
40SQ_physical_layout::SQ_physical_layout() {
41    temp = 0;
42    count_bases = 0;
43    count_scores = 0;
44    count_dots = 0;
45    percent_bases = 0;
46    GC = 0;
47    GC_proportion = 0;
48    count_bases2 = 0;
49}
50
51int SQ_physical_layout::roundme(double value) {
52    int x;
53    value += 0.5;
54    x = (int) floor(value);
55    return x;
56}
57
58void SQ_physical_layout::SQ_calc_physical_layout(const char *sequence,
59        int size, GBDATA * gb_quality_ali) {
60    count_bases = size;
61
62    for (int i = 0; i < size; i++) {
63        switch (sequence[i]) {
64        case '-': /*calculate number of dots and spaces */
65            count_bases--;
66            count_scores++;
67            break;
68        case '.':
69            count_bases--;
70            count_dots++;
71            break;
72        case 'G': /*calculate GC layout of sequence */
73        case 'g':
74            GC++;
75            break;
76        case 'C':
77        case 'c':
78            GC++;
79            break;
80        }
81    }
82
83    /*calculate layout in percent */
84    if (GC != 0) {
85        GC_proportion = GC / count_bases;
86    }
87    temp = 100 - (100 * ((count_scores + count_dots) / size));
88    percent_bases = roundme(temp);
89    count_bases2 = roundme(count_bases);
90
91    GBDATA *gb_result1 = GB_search(gb_quality_ali, "number_of_bases", GB_INT);
92    seq_assert(gb_result1);
93    GB_write_int(gb_result1, count_bases2);
94
95    GBDATA *gb_result2 = GB_search(gb_quality_ali, "percent_of_bases", GB_INT);
96    seq_assert(gb_result2);
97    GB_write_int(gb_result2, percent_bases);
98
99    GBDATA *gb_result3 = GB_search(gb_quality_ali, "GC_proportion", GB_FLOAT);
100    seq_assert(gb_result3);
101    GB_write_float(gb_result3, GC_proportion);
102}
103
104inline int SQ_physical_layout::SQ_get_number_of_bases() const {
105    int i;
106    i = count_bases2;
107    return i;
108}
109
110inline double SQ_physical_layout::SQ_get_gc_proportion() const {
111    double i;
112    i = GC_proportion;
113    return i;
114}
Note: See TracBrowser for help on using the repository browser.