source: tags/ms_r16q2/PRIMER_DESIGN/PRD_Pair.cxx

Last change on this file was 6381, checked in by westram, 14 years ago
  • fixed includes
  • added MBI headers
  • removed unused files
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : PRD_Pair.cxx                                      //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Coded by Wolfram Foerster in February 2001                    //
7//   Institute of Microbiology (Technical University Munich)       //
8//   http://www.arb-home.de/                                       //
9//                                                                 //
10// =============================================================== //
11
12#include "PRD_Pair.hxx"
13#include <cstdlib>
14
15using namespace std;
16
17//
18// Constructors
19//
20Pair::Pair (Item *one_, Item *two_, double rating_)
21{
22  one    = one_;
23  two    = two_;
24  rating = rating_;
25}
26
27Pair::Pair ()
28{
29  one    = NULL;
30  two    = NULL;
31  rating = -1.0;
32}
33
34const char * Pair::get_primers (const char *sequence_)
35{
36  if (!one || !two) return 0;
37
38  static char *result     = 0;
39  static int   result_len = 0;
40
41  int max_result = (one ? one->length : 6) + (two ? two->length : 6) + 2;
42  if (max_result > result_len) {
43    free(result);
44    result = 0;
45  }
46
47  if (!result) {
48    result     = (char*)malloc(max_result+1);
49    result_len = max_result;
50  }
51
52  char *pone = one->getPrimerSequence(sequence_);
53  char *ptwo = two->getPrimerSequence(sequence_);
54
55  sprintf(result, "%s\n%s", pone, ptwo);
56
57  free(ptwo);
58  free(pone);
59
60  return result;
61}
62
63
64const char * Pair::get_result (const char *sequence_,   int max_primer_length, int max_position_length, int max_length_length)
65{
66  static char *result     = 0;
67  static int   result_len = 0;
68  char        *primer;
69
70  int max_result = (one ? one->length : 6) + (two ? two->length : 6) + 200;
71  if (max_result>result_len) {
72    free(result);
73    result = 0;
74  }
75
76  if (!result) {
77    result     = (char*)malloc(max_result+1);
78    result_len = max_result;
79  }
80
81  char *r = result;
82
83  r += sprintf(r,   "%7.3f ", rating);
84
85  if (one) {
86    primer  = one->getPrimerSequence(sequence_);
87    r      += one->sprint(r,   primer, " ", max_primer_length, max_position_length, max_length_length);
88    free(primer);
89  }
90  else {
91    r += sprintf(r, "(error),");
92  }
93
94  if (two) {
95    primer  = two->getPrimerSequence(sequence_);
96    r      += two->sprint(r, primer, "", max_primer_length, max_position_length,   max_length_length);
97    free(primer);
98  }
99  else {
100    r += sprintf(r, "(error)");
101  }
102
103  return result;
104}
105
106
107//
108// print pair with the values of the items
109//
110void Pair::print (const char *prefix_, const char *suffix_, const char *sequence_)
111{
112    const char *result = get_result(sequence_, 0, 0, 0);
113    printf("%s[%s]%s", prefix_, result, suffix_);
114}
Note: See TracBrowser for help on using the repository browser.