]> git.donarmstrong.com Git - mothur.git/blob - uchime_src/out.h
changes while testing
[mothur.git] / uchime_src / out.h
1 #ifndef out_h\r
2 #define out_h\r
3 \r
4 #include "seq.h"\r
5 #include "hsp.h"\r
6 #include "orf.h"\r
7 #include "path.h"\r
8 #include <float.h>\r
9 \r
10 struct AlnData\r
11         {\r
12 /***\r
13 SA.Seq and SB.Seq align.\r
14 Reverse strand stuff for nucleotides is handled like this:\r
15         SA.RevComp must be false.\r
16         If SB.RevComp is true, then SA.Seq is r.c.'d relative to the sequence in\r
17         the input file (query or db). If so, coordinates in HSP refer to SB.Seq\r
18         so are also r.c.'d relative to the original sequence.\r
19 ***/\r
20         SeqData SA;\r
21         SeqData SB;\r
22         HSPData HSP;\r
23         const char *Path;\r
24         char IdDesc[256];\r
25 \r
26         float FractId;\r
27         float RawScore;\r
28         float BitScore;\r
29         float Evalue;\r
30 \r
31         void LogMe() const\r
32                 {\r
33                 Log("AD: ");\r
34                 HSP.LogMe();\r
35                 Log(" %s,%s\n", SA.Label, SB.Label);\r
36                 }\r
37         };\r
38 \r
39 bool OnDerepHit(const SeqData &SA, const SeqData &SB);\r
40 \r
41 bool OnLocalUngappedHit(const SeqData &SA, const SeqData &SB,\r
42   const HSPData &HSP, float &Evalue, float &FractId);\r
43 \r
44 bool OnLocalGappedHit(const SeqData &SA, const SeqData &SB,\r
45   const HSPData &HSP, const PathData &PD, float &Evalue, float &FractId);\r
46 \r
47 bool OnGlobalHit(const SeqData &SA, const SeqData &SB, const PathData &PD,\r
48   float &FractId);\r
49 \r
50 void OnReject(const SeqData &SA, const SeqData &SB, double FractId,\r
51   const char *Path);\r
52 \r
53 void OnNotMatched(const char *Label, unsigned L);\r
54 void OnNewCluster(unsigned ClusterIndex, const char *Label, unsigned L);\r
55 void OnNewLibCluster(unsigned ClusterIndex, const char *Label, unsigned L);\r
56 void OnLibCluster(unsigned ClusterIndex, unsigned Size, double AvgId,\r
57   const char *Label);\r
58 void OnNewCluster(unsigned ClusterIndex, unsigned Size, double AvgId,\r
59   const char *Label);\r
60 void OnChainCov(const SeqData &NucleoSD, const SeqData &TargetSD,\r
61   float Score, float ChainCov);\r
62 \r
63 void SetUserFieldIndexes(const string &s);\r
64 \r
65 void BlastOut(FILE *f, const AlnData &AD);\r
66 void Blast6Out(FILE *f, const AlnData &AD);\r
67 void FastaPairOut(FILE *f, const AlnData &AD);\r
68 void UserOut(FILE *f, const AlnData &AD);\r
69 \r
70 void BlastOutORF(FILE *f, const AlnData &AD);\r
71 \r
72 void OpenOutputFiles();\r
73 void CloseOutputFiles();\r
74 void SetLibSeedCount(unsigned DBSeqCount);\r
75 const char *UserFieldIndexToStr(unsigned i);\r
76 \r
77 extern float **g_SubstMx;\r
78 \r
79 static char g_IdChar = '|';\r
80 static char g_DiffChar = ' ';\r
81 \r
82 static inline char GetSymN(byte Letter1, byte Letter2)\r
83         {\r
84         Letter1 = toupper(Letter1);\r
85         Letter2 = toupper(Letter2);\r
86         if (Letter1 == Letter2)\r
87                 return g_IdChar;\r
88         return g_DiffChar;\r
89         }\r
90 \r
91 static inline char GetSymA(byte Letter1, byte Letter2)\r
92         {\r
93         Letter1 = toupper(Letter1);\r
94         Letter2 = toupper(Letter2);\r
95         if (Letter1 == Letter2)\r
96                 return '|';\r
97 \r
98         float Score = g_SubstMx[Letter1][Letter2];\r
99         if (Score >= 2.0f)\r
100                 return ':';\r
101         if (Score > 0.0f)\r
102                 return '.';\r
103         return ' ';\r
104         }\r
105 \r
106 static inline char GetSym(byte Letter1, byte Letter2, bool Nucleo)\r
107         {\r
108         if (Nucleo)\r
109                 return GetSymN(Letter1, Letter2);\r
110         else\r
111                 return GetSymA(Letter1, Letter2);\r
112         }\r
113 \r
114 static unsigned GetNDig(unsigned n)\r
115         {\r
116         if (n < 10)\r
117                 return 1;\r
118         if (n < 100)\r
119                 return 2;\r
120         if (n < 1000)\r
121                 return 3;\r
122         if (n < 10000)\r
123                 return 4;\r
124         if (n < 100000)\r
125                 return 5;\r
126         if (n < 1000000)\r
127                 return 6;\r
128         return 10;\r
129         }\r
130 \r
131 extern unsigned *g_UserFieldIndexes;\r
132 extern unsigned g_UserFieldCount;\r
133 \r
134 #endif // out_h\r