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