annotate mrsfast-2.3.0.2/MrsFAST.c @ 0:ec628ba33878 default tip

Uploaded source code for mrsFAST
author calkan
date Tue, 21 Feb 2012 10:39:28 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1 /*
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
2 * Copyright (c) <2008 - 2009>, University of Washington, Simon Fraser University
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
3 * All rights reserved.
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
4 *
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without modification,
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
6 * are permitted provided that the following conditions are met:
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
7 *
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
8 * Redistributions of source code must retain the above copyright notice, this list
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
9 * of conditions and the following disclaimer.
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
10 * - Redistributions in binary form must reproduce the above copyright notice, this
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
11 * list of conditions and the following disclaimer in the documentation and/or other
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
12 * materials provided with the distribution.
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
13 * - Neither the name of the <ORGANIZATION> nor the names of its contributors may be
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
14 * used to endorse or promote products derived from this software without specific
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
15 * prior written permission.
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
16 *
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
21 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
28 */
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
29
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
30 /*
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
31 * Author : Faraz Hach
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
32 * Email : fhach AT cs DOT sfu
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
33 * Last Update : 2009-01-29
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
34 */
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
35
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
36 #include <stdio.h>
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
37 #include <stdlib.h>
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
38 #include <string.h>
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
39 #include <math.h>
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
40 #include "Common.h"
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
41 #include "Reads.h"
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
42 #include "HashTable.h"
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
43 #include "Output.h"
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
44 #include "MrsFAST.h"
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
45 #include "RefGenome.h"
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
46
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
47 float calculateScore(int index, char *seq, char *qual, int *err);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
48 unsigned char mrFAST = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
49 char *versionNumberF="0.2";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
50
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
51 long long verificationCnt = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
52 long long mappingCnt = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
53 long long mappedSeqCnt = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
54 long long completedSeqCnt = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
55 char *mappingOutput;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
56 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
57 char *_msf_refGen = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
58 int _msf_refGenLength = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
59 int _msf_refGenOffset = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
60 char *_msf_refGenName = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
61
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
62 int _msf_refGenBeg;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
63 int _msf_refGenEnd;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
64
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
65 IHashTable *_msf_hashTable = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
66
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
67 int *_msf_samplingLocs;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
68 int *_msf_samplingLocsEnds;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
69 int _msf_samplingLocsSize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
70
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
71 Read *_msf_seqList;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
72 int _msf_seqListSize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
73
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
74 ReadIndexTable *_msf_rIndex = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
75 int _msf_rIndexSize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
76 int _msf_rIndexMax;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
77
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
78 SAM _msf_output;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
79
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
80 OPT_FIELDS *_msf_optionalFields;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
81
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
82 char *_msf_op;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
83
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
84 char _msf_numbers[200][3];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
85 char _msf_cigar[5];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
86
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
87 MappingInfo *_msf_mappingInfo;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
88
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
89 int *_msf_seqHits;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
90 int _msf_openFiles = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
91 int _msf_maxLSize=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
92 int _msf_maxRSize=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
93 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
94 int compare (const void *a, const void *b)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
95 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
96 return ((Pair *)a)->hv - ((Pair *)b)->hv;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
97 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
98 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
99 void preProcessReads()
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
100 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
101 int i=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
102 int j=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
103 int pos = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
104
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
105 _msf_rIndexMax = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
106
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
107 int tmpSize = _msf_seqListSize*_msf_samplingLocsSize*2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
108 Pair *tmp = getMem(sizeof(Pair)*tmpSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
109
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
110 for (i=0; i<_msf_seqListSize; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
111 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
112 for (j=0; j< _msf_samplingLocsSize; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
113 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
114
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
115 tmp[pos].hv = hashVal(_msf_seqList[i].seq+_msf_samplingLocs[j]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
116 tmp[pos].seqInfo = pos;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
117 pos++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
118 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
119 for (j=0; j<_msf_samplingLocsSize; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
120 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
121 tmp[pos].hv = hashVal(_msf_seqList[i].rseq+_msf_samplingLocs[j]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
122 tmp[pos].seqInfo = pos;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
123 pos++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
124 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
125 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
126
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
127 qsort(tmp, tmpSize, sizeof(Pair), compare);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
128
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
129
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
130 int uniq = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
131 int prev = -2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
132 int beg = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
133 int end = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
134
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
135 for (i=0; i<tmpSize; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
136 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
137 if (prev != tmp[i].hv)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
138 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
139 uniq ++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
140 prev = tmp[i].hv;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
141 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
142 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
143
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
144 _msf_rIndexSize = uniq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
145 _msf_rIndex = getMem(sizeof(ReadIndexTable)*_msf_rIndexSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
146 prev = -2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
147
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
148 j=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
149 beg =0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
150 while (beg < tmpSize)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
151 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
152 end = beg;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
153 while (end+1<tmpSize && tmp[end+1].hv==tmp[beg].hv)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
154 end++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
155
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
156 _msf_rIndex[j].hv = tmp[beg].hv;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
157 _msf_rIndex[j].seqInfo = getMem(sizeof(int)*(end-beg+2));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
158 _msf_rIndex[j].seqInfo[0] = end-beg+1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
159 if ((end-beg+1) > _msf_rIndexMax)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
160 _msf_rIndexMax = end-beg+1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
161
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
162 for (i=1; i<=_msf_rIndex[j].seqInfo[0]; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
163 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
164 _msf_rIndex[j].seqInfo[i]=tmp[beg+i-1].seqInfo;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
165 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
166 j++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
167 beg = end+1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
168 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
169 freeMem(tmp, sizeof(Pair)*tmpSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
170 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
171 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
172 void initFAST(Read *seqList, int seqListSize, int *samplingLocs, int samplingLocsSize, char *genFileName)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
173 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
174 if (_msf_optionalFields == NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
175 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
176 _msf_op = getMem(SEQ_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
177 if (pairedEndMode)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
178 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
179 _msf_optionalFields = getMem(4*sizeof(OPT_FIELDS));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
180 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
181 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
182 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
183 _msf_optionalFields = getMem(2*sizeof(OPT_FIELDS));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
184 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
185
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
186 int i;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
187 for (i=0; i<200;i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
188 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
189 sprintf(_msf_numbers[i],"%d%c",i, '\0');
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
190 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
191 sprintf(_msf_cigar, "%dM", SEQ_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
192 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
193
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
194 if (_msf_samplingLocsEnds == NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
195 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
196 int i;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
197 _msf_samplingLocs = samplingLocs;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
198 _msf_samplingLocsSize = samplingLocsSize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
199
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
200 _msf_samplingLocsEnds = malloc(sizeof(int)*_msf_samplingLocsSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
201 for (i=0; i<_msf_samplingLocsSize; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
202 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
203 _msf_samplingLocsEnds[i]=_msf_samplingLocs[i]+WINDOW_SIZE-1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
204 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
205
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
206 _msf_seqList = seqList;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
207 _msf_seqListSize = seqListSize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
208
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
209 preProcessReads();
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
210 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
211 if (_msf_refGenName == NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
212 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
213 _msf_refGenName = getMem(SEQ_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
214 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
215 _msf_refGen = getRefGenome();
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
216 _msf_refGenLength = strlen(_msf_refGen);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
217 _msf_refGenOffset = getRefGenomeOffset();
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
218 sprintf(_msf_refGenName,"%s%c", getRefGenomeName(), '\0');
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
219
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
220 if (pairedEndMode && _msf_seqHits == NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
221 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
222 _msf_mappingInfo = getMem(seqListSize * sizeof (MappingInfo));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
223
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
224 int i=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
225 for (i=0; i<seqListSize; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
226 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
227 //_msf_mappingInfo[i].next = getMem(sizeof(MappingLocations));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
228 _msf_mappingInfo[i].next = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
229 _msf_mappingInfo[i].size = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
230 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
231
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
232 _msf_seqHits = getMem((_msf_seqListSize/2) * sizeof(int));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
233
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
234
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
235 for (i=0; i<_msf_seqListSize/2; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
236 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
237 _msf_seqHits[i] = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
238 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
239
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
240 initLoadingRefGenome(genFileName);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
241 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
242
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
243 if (_msf_refGenOffset == 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
244 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
245 _msf_refGenBeg = 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
246 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
247 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
248 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
249 _msf_refGenBeg = CONTIG_OVERLAP - SEQ_LENGTH + 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
250 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
251 _msf_refGenEnd = _msf_refGenLength - SEQ_LENGTH + 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
252
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
253
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
254 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
255 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
256 void finalizeFAST()
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
257 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
258 freeMem(_msf_seqHits, (_msf_seqListSize/2) * sizeof(int));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
259 freeMem(_msf_refGenName, SEQ_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
260 int i;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
261 for (i=0; i<_msf_rIndexSize; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
262 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
263 freeMem(_msf_rIndex[i].seqInfo, _msf_rIndex[i].seqInfo[0]+1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
264 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
265 freeMem(_msf_rIndex, _msf_rIndexSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
266 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
267
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
268 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
269 int verifySingleEnd(int index, char* seq, int offset)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
270 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
271 int curOff = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
272 int i;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
273
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
274 char *ref;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
275
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
276 int err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
277 int errCnt =0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
278 int errCntOff = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
279 int NCntOff = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
280
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
281 int matchCnt = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
282 int pp = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
283
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
284 ref = _msf_refGen + index - 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
285
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
286 verificationCnt++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
287
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
288 for (i = 0; i < SEQ_LENGTH; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
289 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
290 err = *ref != *seq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
291
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
292 errCnt += err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
293 if (errCnt > errThreshold)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
294 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
295
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
296 return -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
297 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
298
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
299 if (i >= _msf_samplingLocs[curOff] && i <= _msf_samplingLocsEnds[curOff])
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
300 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
301 errCntOff += err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
302 NCntOff += (*seq == 'N');
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
303 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
304 else if (curOff < _msf_samplingLocsSize && i>=_msf_samplingLocs[curOff+1])
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
305 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
306
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
307 if (errCntOff == 0 && NCntOff == 0 && offset > curOff)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
308 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
309 return -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
310 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
311
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
312 errCntOff = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
313 NCntOff = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
314 curOff++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
315
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
316 if ( i >= _msf_samplingLocs[curOff])
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
317 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
318 errCntOff += err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
319 NCntOff += (*seq == 'N');
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
320 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
321 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
322
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
323 ref++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
324 seq++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
325 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
326 return errCnt;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
327 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
328
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
329 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
330 int calculateMD(int index, char *seq, int err, char **opSeq)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
331 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
332 int i;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
333 char *ref;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
334 char *ver;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
335 short matchCnt = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
336 char *op = *opSeq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
337 int pp = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
338
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
339 ref = _msf_refGen + index-1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
340 ver = seq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
341
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
342 if (err>0 || err == -1 )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
343 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
344
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
345 err = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
346 for (i=0; i < SEQ_LENGTH; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
347 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
348 if (* ref != *ver)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
349 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
350 err++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
351 if (matchCnt)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
352 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
353 if (matchCnt < 10)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
354 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
355 op[pp++]=_msf_numbers[matchCnt][0];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
356 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
357 else if (matchCnt < 100)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
358 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
359 op[pp++]=_msf_numbers[matchCnt][0];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
360 op[pp++]=_msf_numbers[matchCnt][1];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
361 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
362 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
363 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
364 op[pp++]=_msf_numbers[matchCnt][0];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
365 op[pp++]=_msf_numbers[matchCnt][1];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
366 op[pp++]=_msf_numbers[matchCnt][2];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
367 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
368
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
369 matchCnt = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
370 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
371 op[pp++]=*ref;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
372 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
373 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
374 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
375 matchCnt++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
376 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
377 ref++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
378 ver++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
379 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
380
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
381 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
382 if (err == 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
383 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
384 matchCnt = SEQ_LENGTH;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
385 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
386
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
387 if (matchCnt>0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
388 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
389 if (matchCnt < 10)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
390 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
391 op[pp++]=_msf_numbers[matchCnt][0];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
392 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
393 else if (matchCnt < 100)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
394 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
395 op[pp++]=_msf_numbers[matchCnt][0];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
396 op[pp++]=_msf_numbers[matchCnt][1];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
397 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
398 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
399 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
400 op[pp++]=_msf_numbers[matchCnt][0];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
401 op[pp++]=_msf_numbers[matchCnt][1];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
402 op[pp++]=_msf_numbers[matchCnt][2];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
403 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
404 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
405 op[pp]='\0';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
406
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
407 return err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
408 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
409
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
410 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
411 void mapSingleEndSeqListBal(unsigned int *l1, int s1, unsigned int *l2, int s2, int dir)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
412 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
413
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
414 if (s1 == 0 || s2 == 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
415 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
416 return;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
417 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
418 else if (s1 == s2 && s1 <= 50)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
419 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
420
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
421 int j = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
422 int z = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
423 int *locs;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
424 int *seqInfo;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
425 char *_tmpSeq, *_tmpQual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
426 char rqual[QUAL_LENGTH+1];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
427 rqual[QUAL_LENGTH]='\0';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
428
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
429 if (dir > 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
430 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
431 locs = (int *) l1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
432 seqInfo = (int *) l2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
433 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
434 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
435 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
436 locs = (int *) l2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
437 seqInfo = (int *) l1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
438 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
439
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
440
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
441 for (j=0; j<s2; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
442 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
443 int re = _msf_samplingLocsSize * 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
444 int r = seqInfo[j]/re;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
445 if (maxHits!=0 && _msf_seqList[r].hits[0] == maxHits)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
446 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
447 continue;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
448 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
449
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
450 int x = seqInfo[j] % re;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
451 int o = x % _msf_samplingLocsSize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
452 char d = (x/_msf_samplingLocsSize)?1:0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
453
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
454
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
455 if (d)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
456 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
457 reverse(_msf_seqList[r].qual, rqual, QUAL_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
458 _tmpQual = rqual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
459 _tmpSeq = _msf_seqList[r].rseq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
460 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
461 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
462 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
463 _tmpQual = _msf_seqList[r].qual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
464 _tmpSeq = _msf_seqList[r].seq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
465 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
466
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
467
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
468 for (z=0; z<s1; z++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
469 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
470 int genLoc = locs[z]-_msf_samplingLocs[o];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
471
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
472
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
473 if ( genLoc < _msf_refGenBeg || genLoc > _msf_refGenEnd )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
474 continue;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
475
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
476 int err = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
477
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
478
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
479
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
480 err = verifySingleEnd(genLoc, _tmpSeq, o);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
481
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
482
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
483
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
484 if (err != -1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
485 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
486 calculateMD(genLoc, _tmpSeq, err, &_msf_op);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
487 mappingCnt++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
488 _msf_seqList[r].hits[0]++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
489
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
490 _msf_output.QNAME = _msf_seqList[r].name;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
491 _msf_output.FLAG = 16 * d;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
492 _msf_output.RNAME = _msf_refGenName;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
493 _msf_output.POS = genLoc + _msf_refGenOffset;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
494 _msf_output.MAPQ = 255;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
495 _msf_output.CIGAR = _msf_cigar;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
496 _msf_output.MRNAME = "*";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
497 _msf_output.MPOS = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
498 _msf_output.ISIZE = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
499 _msf_output.SEQ = _tmpSeq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
500 _msf_output.QUAL = _tmpQual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
501
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
502 _msf_output.optSize = 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
503 _msf_output.optFields = _msf_optionalFields;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
504
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
505 _msf_optionalFields[0].tag = "NM";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
506 _msf_optionalFields[0].type = 'i';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
507 _msf_optionalFields[0].iVal = err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
508
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
509 _msf_optionalFields[1].tag = "MD";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
510 _msf_optionalFields[1].type = 'Z';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
511 _msf_optionalFields[1].sVal = _msf_op;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
512
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
513 output(_msf_output);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
514
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
515
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
516 if (_msf_seqList[r].hits[0] == 1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
517 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
518 mappedSeqCnt++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
519 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
520
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
521 if ( maxHits == 0 )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
522 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
523 _msf_seqList[r].hits[0] = 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
524 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
525
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
526
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
527 if ( maxHits!=0 && _msf_seqList[r].hits[0] == maxHits)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
528 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
529 completedSeqCnt++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
530 break;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
531 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
532 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
533
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
534 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
535 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
536 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
537 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
538 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
539 int tmp1=s1/2, tmp2= s2/2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
540 if (tmp1 != 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
541 mapSingleEndSeqListBal(l1, tmp1, l2+tmp2, s2-tmp2, dir);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
542 mapSingleEndSeqListBal(l2+tmp2, s2-tmp2, l1+tmp1, s1-tmp1, -dir);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
543 if (tmp2 !=0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
544 mapSingleEndSeqListBal(l1+tmp1, s1-tmp1, l2, tmp2, dir);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
545 if (tmp1 + tmp2 != 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
546 mapSingleEndSeqListBal(l2, tmp2, l1, tmp1, -dir);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
547 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
548 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
549
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
550
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
551 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
552 void mapSingleEndSeqListTOP(unsigned int *l1, int s1, unsigned int *l2, int s2)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
553 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
554 if (s1 < s2)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
555 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
556 mapSingleEndSeqListBal(l1, s1, l2, s1,1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
557 mapSingleEndSeqListTOP(l1, s1, l2+s1, s2-s1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
558 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
559 else if (s1 > s2)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
560 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
561 mapSingleEndSeqListBal(l1, s2, l2, s2,1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
562 mapSingleEndSeqListTOP(l1+s2, s1-s2, l2, s2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
563 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
564 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
565 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
566 mapSingleEndSeqListBal(l1, s1, l2, s2,1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
567 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
568 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
569
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
570
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
571 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
572 void mapSingleEndSeqList(unsigned int *l1, int s1, unsigned int *l2, int s2)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
573 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
574 if ( s2/s1 <= 2)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
575 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
576 int j = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
577 int z = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
578 int *locs = (int *) l1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
579 int *seqInfo = (int *) l2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
580 char *_tmpSeq, *_tmpQual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
581 char rqual[QUAL_LENGTH+1];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
582 rqual[QUAL_LENGTH]='\0';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
583
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
584 for (j=0; j<s2; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
585 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
586 int re = _msf_samplingLocsSize * 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
587 int r = seqInfo[j]/re;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
588 if (maxHits!=0 && _msf_seqList[r].hits[0] == maxHits)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
589 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
590 continue;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
591 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
592
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
593 int x = seqInfo[j] % re;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
594 int o = x % _msf_samplingLocsSize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
595 char d = (x/_msf_samplingLocsSize)?1:0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
596
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
597
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
598 if (d)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
599 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
600 reverse(_msf_seqList[r].qual, rqual, QUAL_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
601 _tmpQual = rqual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
602 _tmpSeq = _msf_seqList[r].rseq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
603 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
604 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
605 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
606 _tmpQual = _msf_seqList[r].qual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
607 _tmpSeq = _msf_seqList[r].seq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
608 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
609
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
610
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
611 for (z=0; z<s1; z++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
612 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
613 int genLoc = locs[z]-_msf_samplingLocs[o];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
614
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
615
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
616 if ( genLoc < _msf_refGenBeg || genLoc > _msf_refGenEnd )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
617 continue;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
618
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
619 int err = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
620
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
621
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
622
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
623 err = verifySingleEnd(genLoc, _tmpSeq, o);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
624
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
625
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
626
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
627 if (err != -1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
628 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
629 calculateMD(genLoc, _tmpSeq, err, &_msf_op);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
630 mappingCnt++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
631 _msf_seqList[r].hits[0]++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
632
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
633 _msf_output.QNAME = _msf_seqList[r].name;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
634 _msf_output.FLAG = 16 * d;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
635 _msf_output.RNAME = _msf_refGenName;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
636 _msf_output.POS = genLoc + _msf_refGenOffset;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
637 _msf_output.MAPQ = 255;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
638 _msf_output.CIGAR = _msf_cigar;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
639 _msf_output.MRNAME = "*";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
640 _msf_output.MPOS = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
641 _msf_output.ISIZE = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
642 _msf_output.SEQ = _tmpSeq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
643 _msf_output.QUAL = _tmpQual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
644
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
645 _msf_output.optSize = 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
646 _msf_output.optFields = _msf_optionalFields;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
647
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
648 _msf_optionalFields[0].tag = "NM";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
649 _msf_optionalFields[0].type = 'i';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
650 _msf_optionalFields[0].iVal = err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
651
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
652 _msf_optionalFields[1].tag = "MD";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
653 _msf_optionalFields[1].type = 'Z';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
654 _msf_optionalFields[1].sVal = _msf_op;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
655
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
656 output(_msf_output);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
657
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
658
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
659 if (_msf_seqList[r].hits[0] == 1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
660 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
661 mappedSeqCnt++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
662 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
663
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
664 if ( maxHits == 0 )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
665 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
666 _msf_seqList[r].hits[0] = 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
667 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
668
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
669
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
670 if ( maxHits!=0 && _msf_seqList[r].hits[0] == maxHits)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
671 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
672 completedSeqCnt++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
673 break;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
674 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
675 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
676
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
677 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
678 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
679 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
680 else if (s1 == 1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
681 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
682 // fprintf(stderr, "1");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
683 int tmp = s2/2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
684 mapSingleEndSeqList(l1, s1, l2, tmp);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
685 mapSingleEndSeqList(l1, s1, l2+tmp, s2-tmp);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
686 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
687 else if (s2 == 1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
688 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
689 // fprintf(stderr, "2");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
690 int tmp = s1/2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
691 mapSingleEndSeqList(l1, tmp, l2, s2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
692 mapSingleEndSeqList(l1+tmp, s1-tmp, l2, s2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
693 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
694 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
695 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
696 // fprintf(stderr, "3");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
697 int tmp1=s1/2, tmp2= s2/2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
698 mapSingleEndSeqList(l1, tmp1, l2, tmp2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
699 mapSingleEndSeqList(l1+tmp1, s1-tmp1, l2, tmp2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
700 mapSingleEndSeqList(l1+tmp1, s1-tmp1, l2+tmp2, s2-tmp2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
701 mapSingleEndSeqList(l1, tmp1, l2+tmp2, s2-tmp2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
702 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
703 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
704 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
705 int mapSingleEndSeq()
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
706 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
707 int i = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
708 unsigned int *locs = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
709 unsigned int *seqInfo = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
710 while ( i < _msf_rIndexSize )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
711 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
712
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
713 locs = getCandidates (_msf_rIndex[i].hv);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
714 if ( locs != NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
715 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
716 seqInfo = _msf_rIndex[i].seqInfo;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
717 mapSingleEndSeqListTOP (locs+1, locs[0], seqInfo+1, seqInfo[0]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
718 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
719 i++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
720 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
721 return 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
722 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
723
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
724
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
725 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
726 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
727 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
728 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
729 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
730 int compareOut (const void *a, const void *b)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
731 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
732 FullMappingInfo *aInfo = (FullMappingInfo *)a;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
733 FullMappingInfo *bInfo = (FullMappingInfo *)b;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
734 return aInfo->loc - bInfo->loc;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
735 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
736
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
737 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
738 void mapPairedEndSeqList(unsigned int *l1, int s1, unsigned int *l2, int s2)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
739 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
740 if ( s2/s1 <= 2)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
741 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
742 int j = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
743 int z = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
744 int *locs = (int *) l1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
745 int *seqInfo = (int *) l2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
746 char *_tmpSeq, *_tmpQual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
747 char rqual[QUAL_LENGTH+1];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
748 rqual[QUAL_LENGTH]='\0';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
749
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
750 for (j=0; j<s2; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
751 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
752 int re = _msf_samplingLocsSize * 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
753 int r = seqInfo[j]/re;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
754
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
755 if (pairedEndDiscordantMode && (_msf_seqList[r].hits[0] == 1 || (_msf_seqHits[r/2] > DISCORDANT_CUT_OFF) ))
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
756 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
757 continue;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
758 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
759
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
760 int x = seqInfo[j] % re;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
761 int o = x % _msf_samplingLocsSize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
762 char d = (x/_msf_samplingLocsSize)?-1:1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
763
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
764
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
765 if (d==-1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
766 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
767 _tmpSeq = _msf_seqList[r].rseq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
768 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
769 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
770 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
771 _tmpSeq = _msf_seqList[r].seq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
772 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
773
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
774
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
775 for (z=0; z<s1; z++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
776 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
777 int genLoc = locs[z]-_msf_samplingLocs[o];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
778
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
779
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
780 if ( genLoc < _msf_refGenBeg || genLoc > _msf_refGenEnd )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
781 continue;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
782
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
783 int err = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
784
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
785
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
786
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
787 err = verifySingleEnd(genLoc, _tmpSeq, o);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
788
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
789
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
790 if (err != -1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
791 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
792 MappingLocations *parent = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
793 MappingLocations *child = _msf_mappingInfo[r].next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
794
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
795 genLoc+= _msf_refGenOffset;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
796
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
797 int i = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
798 for (i=0; i<(_msf_mappingInfo[r].size/MAP_CHUNKS); i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
799 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
800 parent = child;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
801 child = child->next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
802 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
803
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
804 if (child==NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
805 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
806 MappingLocations *tmp = getMem(sizeof(MappingLocations));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
807 tmp->next = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
808 tmp->loc[0]=genLoc * d;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
809 if (parent == NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
810 _msf_mappingInfo[r].next = tmp;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
811 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
812 parent->next = tmp;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
813 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
814 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
815 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
816 child->loc[_msf_mappingInfo[r].size % MAP_CHUNKS] = genLoc * d;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
817 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
818
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
819
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
820
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
821 _msf_mappingInfo[r].size++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
822
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
823 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
824
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
825 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
826 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
827 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
828 else if (s1 == 1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
829 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
830 int tmp = s2/2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
831 mapPairedEndSeqList(l1, s1, l2, tmp);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
832 mapPairedEndSeqList(l1, s1, l2+tmp, s2-tmp);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
833 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
834 else if (s2 == 1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
835 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
836 int tmp = s1/2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
837 mapPairedEndSeqList(l1, tmp, l2, s2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
838 mapPairedEndSeqList(l1+tmp, s1-tmp, l2, s2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
839 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
840 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
841 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
842 int tmp1=s1/2, tmp2= s2/2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
843 mapPairedEndSeqList(l1, tmp1, l2, tmp2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
844 mapPairedEndSeqList(l1+tmp1, s1-tmp1, l2, tmp2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
845 mapPairedEndSeqList(l1+tmp1, s1-tmp1, l2+tmp2, s2-tmp2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
846 mapPairedEndSeqList(l1, tmp1, l2+tmp2, s2-tmp2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
847 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
848 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
849
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
850 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
851 int mapPairedEndSeq()
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
852 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
853 int i = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
854 unsigned int *locs = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
855 unsigned int *seqInfo = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
856 while ( i < _msf_rIndexSize )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
857 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
858 locs = getCandidates (_msf_rIndex[i].hv);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
859 if ( locs != NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
860 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
861 seqInfo = _msf_rIndex[i].seqInfo;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
862 mapPairedEndSeqList(locs+1, locs[0], seqInfo+1, seqInfo[0]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
863
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
864 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
865 i++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
866 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
867
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
868
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
869 char fname1[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
870 char fname2[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
871 MappingLocations *cur, *tmp;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
872 int tmpOut;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
873 int j;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
874 int lmax=0, rmax=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
875
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
876 sprintf(fname1, "%s__%s__%d__1",mappingOutputPath, mappingOutput, _msf_openFiles);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
877 sprintf(fname2, "%s__%s__%d__2",mappingOutputPath, mappingOutput, _msf_openFiles);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
878
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
879 FILE* out;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
880 FILE* out1 = fileOpen(fname1, "w");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
881 FILE* out2 = fileOpen(fname2, "w");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
882
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
883 _msf_openFiles++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
884
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
885 for (i=0; i<_msf_seqListSize; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
886 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
887
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
888 if (i%2==0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
889 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
890 out = out1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
891
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
892 if (lmax < _msf_mappingInfo[i].size)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
893 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
894 lmax = _msf_mappingInfo[i].size;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
895 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
896 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
897 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
898 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
899 out = out2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
900 if (rmax < _msf_mappingInfo[i].size)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
901 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
902 rmax = _msf_mappingInfo[i].size;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
903 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
904 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
905
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
906 tmpOut = fwrite(&(_msf_mappingInfo[i].size), sizeof(int), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
907 if (_msf_mappingInfo[i].size > 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
908 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
909 cur = _msf_mappingInfo[i].next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
910 for (j=0; j < _msf_mappingInfo[i].size; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
911 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
912 if ( j>0 && j%MAP_CHUNKS==0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
913 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
914 cur = cur->next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
915 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
916 tmpOut = fwrite(&(cur->loc[j % MAP_CHUNKS]), sizeof(int), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
917 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
918 _msf_mappingInfo[i].size = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
919 // _msf_mappingInfo[i].next = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
920 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
921 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
922
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
923 _msf_maxLSize += lmax;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
924 _msf_maxRSize += rmax;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
925
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
926 fclose(out1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
927 fclose(out2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
928
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
929 //fprintf(stdout, "%d %d\n", _msf_maxLSize, _msf_maxRSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
930
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
931 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
932
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
933 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
934 void outputPairedEnd()
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
935 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
936
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
937 char *curGen;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
938 char *curGenName;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
939 int tmpOut;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
940
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
941 loadRefGenome(&_msf_refGen, &_msf_refGenName, &tmpOut);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
942
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
943 FILE* in1[_msf_openFiles];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
944 FILE* in2[_msf_openFiles];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
945
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
946 char fname1[_msf_openFiles][FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
947 char fname2[_msf_openFiles][FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
948
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
949 // discordant
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
950 FILE *out, *out1, *out2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
951
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
952 char fname3[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
953 char fname4[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
954 char fname5[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
955
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
956 if (pairedEndDiscordantMode)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
957 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
958 sprintf(fname3, "%s__%s__disc", mappingOutputPath, mappingOutput);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
959 sprintf(fname4, "%s__%s__oea1", mappingOutputPath, mappingOutput);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
960 sprintf(fname5, "%s__%s__oea2", mappingOutputPath, mappingOutput);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
961 out = fileOpen(fname3, "a");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
962 out1 = fileOpen(fname4, "a");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
963 out2 = fileOpen(fname5, "a");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
964 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
965
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
966
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
967
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
968 int i;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
969
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
970 FullMappingInfo *mi1 = getMem(sizeof(FullMappingInfo) * _msf_maxLSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
971 FullMappingInfo *mi2 = getMem(sizeof(FullMappingInfo) * _msf_maxRSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
972
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
973
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
974 for (i=0; i<_msf_openFiles; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
975 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
976 sprintf(fname1[i], "%s__%s__%d__1", mappingOutputPath, mappingOutput, i);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
977 sprintf(fname2[i], "%s__%s__%d__2", mappingOutputPath, mappingOutput, i);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
978 in1[i] = fileOpen(fname1[i], "r");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
979 in2[i] = fileOpen(fname2[i], "r");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
980 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
981
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
982
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
983 int size;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
984 int j, k;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
985 int size1, size2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
986
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
987 for (i=0; i<_msf_seqListSize/2; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
988 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
989 size1 = size2 = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
990 for (j=0; j<_msf_openFiles; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
991 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
992 tmpOut = fread(&size, sizeof(int), 1, in1[j]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
993 if ( size > 0 )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
994 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
995 for (k=0; k<size; k++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
996 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
997
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
998 mi1[size1+k].dir = 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
999 tmpOut = fread (&(mi1[size1+k].loc), sizeof(int), 1, in1[j]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1000 if (mi1[size1+k].loc<1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1001 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1002 mi1[size1+k].loc *= -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1003 mi1[size1+k].dir = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1004 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1005 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1006 qsort(mi1+size1, size, sizeof(FullMappingInfo), compareOut);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1007 size1+=size;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1008 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1009 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1010
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1011 for (j=0; j<_msf_openFiles; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1012 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1013 tmpOut = fread(&size, sizeof(int), 1, in2[j]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1014 if ( size > 0 )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1015 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1016 for (k=0; k<size; k++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1017 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1018
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1019 mi2[size2+k].dir = 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1020 tmpOut = fread (&(mi2[size2+k].loc), sizeof(int), 1, in2[j]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1021
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1022 if (mi2[size2+k].loc<1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1023 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1024 mi2[size2+k].loc *= -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1025 mi2[size2+k].dir = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1026 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1027 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1028 qsort(mi2+size2, size, sizeof(FullMappingInfo), compareOut);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1029 size2+=size;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1030 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1031 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1032
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1033 //if (i == 6615)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1034 // fprintf(stdout, "%d: %s %d %d ",i, _msf_seqList[i*2].name, size1, size2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1035
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1036 int lm, ll, rl, rm;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1037 int pos = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1038
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1039 if (pairedEndDiscordantMode)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1040 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1041
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1042 for (j=0; j<size1; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1043 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1044 lm = mi1[j].loc - maxPairEndedDiscordantDistance + 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1045 ll = mi1[j].loc - minPairEndedDiscordantDistance + 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1046 rl = mi1[j].loc + minPairEndedDiscordantDistance - 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1047 rm = mi1[j].loc + maxPairEndedDiscordantDistance - 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1048
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1049 while (pos<size2 && mi2[pos].loc < lm)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1050 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1051 pos++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1052 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1053
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1054 k = pos;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1055 while (k<size2 && mi2[k].loc<=rm)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1056 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1057 if ( mi2[k].loc <= ll || mi2[k].loc >= rl)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1058 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1059 if ( (mi1[j].loc < mi2[k].loc && mi1[j].dir==1 && mi2[k].dir == -1) ||
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1060 (mi1[j].loc > mi2[k].loc && mi1[j].dir==-1 && mi2[k].dir == 1) )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1061 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1062 _msf_seqList[i*2].hits[0]=1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1063 _msf_seqList[i*2+1].hits[0]=1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1064 size1=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1065 size2=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1066 break;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1067 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1068 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1069 k++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1070 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1071 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1072
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1073 _msf_seqHits[i]+= size1*size2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1074 if (_msf_seqHits[i]> DISCORDANT_CUT_OFF)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1075 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1076 _msf_seqList[i*2].hits[0]=1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1077 _msf_seqList[i*2+1].hits[0]=1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1078 size1=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1079 size2=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1080 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1081 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1082 //if (i == 6615)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1083 // fprintf(stdout, "%d %d\n", size1, size2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1084
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1085 char *seq1, *seq2, *rseq1, *rseq2, *qual1, *qual2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1086 char rqual1[QUAL_LENGTH+1], rqual2[QUAL_LENGTH+1];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1087 rqual1[QUAL_LENGTH] = rqual2[QUAL_LENGTH] = '\0';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1088 seq1 = _msf_seqList[i*2].seq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1089 rseq1 = _msf_seqList[i*2].rseq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1090 qual1 = _msf_seqList[i*2].qual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1091 reverse(_msf_seqList[i*2].qual, rqual1, QUAL_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1092
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1093 seq2 = _msf_seqList[i*2+1].seq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1094 rseq2 = _msf_seqList[i*2+1].rseq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1095 qual2 = _msf_seqList[i*2+1].qual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1096 reverse(_msf_seqList[i*2+1].qual, rqual2, QUAL_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1097
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1098
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1099 if (pairedEndDiscordantMode)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1100 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1101 for (k=0; k<size1; k++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1102 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1103 int tm = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1104 mi1[k].score = calculateScore(mi1[k].loc, (mi1[k].dir==-1)?rseq1:seq1, (mi1[k].dir==-1)?rqual1:qual1, &tm);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1105 mi1[k].err = tm;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1106 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1107
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1108 for (k=0; k<size2; k++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1109 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1110 int tm = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1111 mi2[k].score = calculateScore(mi2[k].loc, (mi2[k].dir==-1)?rseq2:seq2, (mi2[k].dir==-1)?rqual2:qual2, &tm);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1112 mi2[k].err = tm;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1113 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1114
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1115 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1116 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1117 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1118 for (k=0; k<size1; k++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1119 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1120 mi1[k].err = calculateMD(mi1[k].loc, (mi1[k].dir==-1)?rseq1:seq1, -1, &_msf_op);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1121 sprintf(mi1[k].md, "%s", _msf_op);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1122 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1123
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1124 for (k=0; k<size2; k++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1125 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1126 mi2[k].err = calculateMD(mi2[k].loc, (mi2[k].dir==-1)?rseq2:seq2, -1, &_msf_op);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1127 sprintf(mi2[k].md, "%s", _msf_op);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1128 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1129 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1130 pos = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1131
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1132 for (j=0; j<size1; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1133 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1134 lm = mi1[j].loc - maxPairEndedDistance + 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1135 ll = mi1[j].loc - minPairEndedDistance + 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1136 rl = mi1[j].loc + minPairEndedDistance - 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1137 rm = mi1[j].loc + maxPairEndedDistance - 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1138
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1139 //fprintf(stdout, "%d %d %d %d %d\n",lm, ll,mi1[j].loc ,rl, rm);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1140
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1141 while (pos<size2 && mi2[pos].loc < lm)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1142 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1143 pos++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1144 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1145
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1146 //fprintf(stdout, "POS: %d %d \n", pos, mi2[pos].loc);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1147
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1148 k = pos;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1149 while (k<size2 && mi2[k].loc <= rm)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1150 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1151 if (mi2[k].loc <= ll || mi2[k].loc >= rl)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1152 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1153 if (pairedEndDiscordantMode)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1154 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1155 int tmp;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1156 int rNo = i;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1157 int loc = mi1[j].loc*mi1[j].dir;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1158 int err = mi1[j].err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1159 float sc = mi1[j].score;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1160
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1161 char l = strlen(_msf_refGenName);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1162
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1163 tmp = fwrite(&rNo, sizeof(int), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1164
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1165 tmp = fwrite(&l, sizeof(char), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1166 tmp = fwrite(_msf_refGenName, sizeof(char), l, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1167
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1168 tmp = fwrite(&loc, sizeof(int), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1169 tmp = fwrite(&err, sizeof(char), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1170 tmp = fwrite(&sc, sizeof(float), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1171
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1172
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1173 loc = mi2[k].loc*mi2[k].dir;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1174 err = mi2[k].err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1175 sc = mi2[k].score;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1176
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1177 tmp = fwrite(&loc, sizeof(int), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1178 tmp = fwrite(&err, sizeof(char), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1179 tmp = fwrite(&sc, sizeof(float), 1, out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1180 } // end discordant
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1181 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1182 { //start sampe
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1183 char *seq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1184 char *qual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1185 char d1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1186 char d2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1187 int isize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1188 int proper=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1189 // ISIZE CALCULATION
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1190 // The distance between outer edges
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1191 isize = abs(mi1[j].loc - mi2[k].loc)+SEQ_LENGTH-1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1192 if (mi1[j].loc - mi2[k].loc > 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1193 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1194 isize *= -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1195 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1196
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1197 d1 = (mi1[j].dir == -1)?1:0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1198 d2 = (mi2[k].dir == -1)?1:0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1199
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1200 if ( d1 )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1201 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1202 seq = rseq1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1203 qual = rqual1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1204 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1205 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1206 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1207 seq = seq1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1208 qual = qual1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1209 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1210
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1211 if ( (mi1[j].loc < mi2[k].loc && !d1 && d2) ||
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1212 (mi1[j].loc > mi2[k].loc && d1 && !d2) )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1213 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1214 proper = 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1215 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1216 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1217 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1218 proper = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1219 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1220
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1221
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1222 _msf_output.POS = mi1[j].loc;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1223 _msf_output.MPOS = mi2[k].loc;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1224 _msf_output.FLAG = 1+proper+16*d1+32*d2+64;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1225 _msf_output.ISIZE = isize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1226 _msf_output.SEQ = seq,
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1227 _msf_output.QUAL = qual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1228 _msf_output.QNAME = _msf_seqList[i*2].name;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1229 _msf_output.RNAME = _msf_refGenName;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1230 _msf_output.MAPQ = 255;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1231 _msf_output.CIGAR = _msf_cigar;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1232 _msf_output.MRNAME = "=";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1233
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1234 _msf_output.optSize = 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1235 _msf_output.optFields = _msf_optionalFields;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1236
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1237 _msf_optionalFields[0].tag = "NM";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1238 _msf_optionalFields[0].type = 'i';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1239 _msf_optionalFields[0].iVal = mi1[j].err;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1240
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1241 _msf_optionalFields[1].tag = "MD";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1242 _msf_optionalFields[1].type = 'Z';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1243 _msf_optionalFields[1].sVal = mi1[j].md;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1244
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1245
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1246 output(_msf_output);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1247
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1248 if ( d2 )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1249 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1250 seq = rseq2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1251 qual = rqual2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1252 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1253 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1254 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1255 seq = seq2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1256 qual = qual2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1257 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1258
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1259 _msf_output.POS = mi2[k].loc;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1260 _msf_output.MPOS = mi1[j].loc;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1261 _msf_output.FLAG = 1+proper+16*d2+32*d1+128;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1262 _msf_output.ISIZE = -isize;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1263 _msf_output.SEQ = seq,
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1264 _msf_output.QUAL = qual;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1265 _msf_output.QNAME = _msf_seqList[i*2].name;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1266 _msf_output.RNAME = _msf_refGenName;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1267 _msf_output.MAPQ = 255;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1268 _msf_output.CIGAR = _msf_cigar;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1269 _msf_output.MRNAME = "=";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1270
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1271 _msf_output.optSize = 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1272 _msf_output.optFields = _msf_optionalFields;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1273
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1274 _msf_optionalFields[0].tag = "NM";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1275 _msf_optionalFields[0].type = 'i';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1276 _msf_optionalFields[0].iVal = mi2[k].err;;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1277
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1278 _msf_optionalFields[1].tag = "MD";
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1279 _msf_optionalFields[1].type = 'Z';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1280 _msf_optionalFields[1].sVal = mi2[k].md;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1281
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1282 output(_msf_output);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1283 } //end sampe
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1284 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1285 k++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1286 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1287 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1288 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1289
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1290 if (pairedEndDiscordantMode)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1291 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1292 fclose(out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1293 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1294
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1295
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1296 freeMem(mi1, sizeof(FullMappingInfo)*_msf_maxLSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1297 freeMem(mi2, sizeof(FullMappingInfo)*_msf_maxRSize);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1298
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1299 for (i=0; i<_msf_openFiles; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1300 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1301 fclose(in1[i]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1302 fclose(in2[i]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1303 //fprintf(stdout, "%s %s \n", fname1[i], fname2[i]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1304 unlink(fname1[i]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1305 unlink(fname2[i]);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1306 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1307 _msf_openFiles = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1308
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1309 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1310
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1311 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1312 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1313 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1314 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1315 float calculateScore(int index, char *seq, char *qual, int *err)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1316 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1317 int i;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1318 char *ref;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1319 char *ver;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1320
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1321 ref = _msf_refGen + index-1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1322 ver = seq;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1323 float score = 1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1324
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1325 if (*err > 0 || *err == -1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1326 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1327 *err = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1328
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1329 for (i=0; i < SEQ_LENGTH; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1330 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1331 if (*ref != *ver)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1332 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1333 //fprintf(stdout, "%c %c %d", *ref, *ver, *err);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1334 (*err)++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1335 score *= 0.001 + 1/pow( 10, ((qual[i]-33)/10.0) );
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1336 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1337 ref++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1338 ver++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1339 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1340
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1341 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1342 return score;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1343 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1344
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1345 /**********************************************/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1346 void outputPairedEndDiscPP()
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1347 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1348 char genName[SEQ_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1349 char fname1[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1350 char fname2[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1351 char fname3[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1352 char fname4[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1353 char fname5[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1354 char fname6[FILE_NAME_LENGTH];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1355 char l;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1356 int loc1, loc2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1357 char err1, err2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1358 char dir1, dir2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1359 float sc1, sc2, lsc=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1360 int flag = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1361 int rNo,lrNo = -1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1362 int tmp;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1363 FILE *in, *in1, *in2, *out, *out1, *out2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1364
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1365 sprintf(fname1, "%s__%s__disc", mappingOutputPath, mappingOutput);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1366 sprintf(fname2, "%s__%s__oea1", mappingOutputPath, mappingOutput);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1367 sprintf(fname3, "%s__%s__oea2", mappingOutputPath, mappingOutput);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1368 sprintf(fname4, "%s%s_DIVET.vh", mappingOutputPath, mappingOutput);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1369 sprintf(fname5, "%s%s_OEA1.vh", mappingOutputPath, mappingOutput);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1370 sprintf(fname6, "%s%s_OEA2.vh", mappingOutputPath, mappingOutput);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1371
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1372 in = fileOpen(fname1, "r");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1373 in1 = fileOpen(fname2, "r");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1374 in2 = fileOpen(fname3, "r");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1375 out = fileOpen(fname4, "w");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1376 out1 = fileOpen(fname5, "w");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1377 out2 = fileOpen(fname6, "w");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1378 if (in != NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1379 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1380 flag = fread(&rNo, sizeof(int), 1, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1381 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1382 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1383 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1384 flag = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1385 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1386
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1387
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1388 while (flag)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1389 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1390
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1391 tmp = fread(&l, sizeof(char), 1, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1392 tmp = fread(genName, sizeof(char), l, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1393 genName[l]='\0';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1394 tmp = fread(&loc1, sizeof(int), 1, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1395 tmp = fread(&err1, sizeof(char), 1, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1396 tmp = fread(&sc1, sizeof(float), 1, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1397 tmp = fread(&loc2, sizeof(int), 1, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1398 tmp = fread(&err2, sizeof(char), 1, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1399 tmp = fread(&sc2, sizeof(float), 1, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1400
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1401 //if (rNo ==6615)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1402 // fprintf(stdout, "%s %d: %d %0.20f %d %d %0.20f\n", genName, loc1, err1, sc1, loc2, err2, sc2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1403
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1404 if (_msf_seqList[rNo*2].hits[0] % 2 == 0 && _msf_seqHits[rNo] < DISCORDANT_CUT_OFF)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1405 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1406 dir1 = dir2 = 'F';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1407
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1408 if (loc1 < 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1409 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1410 dir1 = 'R';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1411 loc1 = -loc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1412 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1413
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1414 if (loc2 < 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1415 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1416 dir2 = 'R';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1417 loc2 = -loc2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1418 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1419
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1420 if (rNo != lrNo)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1421 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1422 int j;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1423 for (j=0; j<SEQ_LENGTH; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1424 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1425 lsc += _msf_seqList[rNo*2].qual[j]+_msf_seqList[rNo*2+1].qual[j];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1426 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1427 lsc /= 2*SEQ_LENGTH;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1428 lsc -= 33;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1429 lrNo = rNo;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1430 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1431
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1432 int inv = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1433 int eve = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1434 int dist = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1435 char event;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1436
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1437 //fprintf(stdout, "%c %c ", dir1, dir2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1438
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1439 if ( dir1 == dir2 )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1440 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1441 event = 'V';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1442 //fprintf(stdout, "Inverstion \n");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1443 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1444 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1445 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1446 if (loc1 < loc2)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1447 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1448
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1449 //fprintf(stdout, "< %d ", loc2-loc1-SEQ_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1450
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1451 if (dir1 == 'R' && dir2 == 'F')
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1452 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1453 event = 'E';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1454
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1455 //fprintf(stdout, "Everted \n");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1456 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1457 else if ( loc2 - loc1 >= maxPairEndedDiscordantDistance )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1458 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1459 event = 'D';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1460 //fprintf(stdout, "Deletion \n");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1461 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1462 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1463 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1464 event = 'I';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1465 //fprintf(stdout, "Insertion \n");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1466 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1467 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1468 else if (loc2 < loc1)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1469 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1470 //fprintf(stdout, "> %d ", loc1-loc2-SEQ_LENGTH);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1471 if (dir2 == 'R' && dir1 == 'F')
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1472 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1473 event = 'E';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1474 //fprintf(stdout, "Everted \n");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1475 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1476 else if ( loc1 - loc2 >= maxPairEndedDiscordantDistance )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1477 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1478 event = 'D';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1479 //fprintf(stdout, "Deletion \n");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1480 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1481 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1482 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1483 event = 'I';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1484 //fprintf(stdout, "Insertion \n");
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1485 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1486 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1487 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1488 _msf_seqList[rNo*2].hits[0] = 2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1489 fprintf(out, "%s\t%s\t%d\t%d\t%c\t%s\t%d\t%d\t%c\t%c\t%d\t%0.0f\t%0.20f\n",
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1490 _msf_seqList[rNo*2].name, genName, loc1, (loc1+SEQ_LENGTH-1), dir1, genName, loc2, (loc2+SEQ_LENGTH-1), dir2, event, (err1+err2), lsc, sc1*sc2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1491 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1492 flag = fread(&rNo, sizeof(int), 1, in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1493
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1494 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1495
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1496 /*
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1497 MappingInfoNode *lr[_msf_seqListSize/2];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1498 MappingInfoNode *rr[_msf_seqListSize/2];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1499 MappingInfoNode *cur, *tmpDel, *cur2;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1500
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1501
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1502 int ls[_msf_seqListSize/2];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1503 int rs[_msf_seqListSize/2];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1504
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1505
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1506 int i=0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1507
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1508 for (i = 0; i<_msf_seqListSize/2; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1509 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1510 lr[i] = rr[i] = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1511 ls[i] = rs[i] = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1512 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1513
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1514
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1515
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1516 if (in1 != NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1517 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1518 flag = fread(&rNo, sizeof(int), 1, in1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1519 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1520 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1521 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1522 flag = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1523 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1524
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1525
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1526 while (flag)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1527 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1528 tmp = fread(&loc1, sizeof(int), 1, in1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1529 tmp = fread(&err1, sizeof(char), 1, in1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1530 tmp = fread(&sc1, sizeof(float), 1, in1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1531 tmp = fread(&l, sizeof(char), 1, in1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1532 tmp = fread(genName, sizeof(char), l, in1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1533 genName[l]='\0';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1534
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1535 if (_msf_seqList[rNo*2].hits[0] == 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1536 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1537
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1538 if ( ls[rNo] < DISCORDANT_CUT_OFF )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1539 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1540 ls[rNo]++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1541
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1542 cur = lr[rNo];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1543
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1544 if (cur !=NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1545 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1546 if (err1 == cur->err)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1547 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1548 MappingInfoNode *nr = getMem(sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1549
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1550 nr->loc = loc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1551 nr->err = err1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1552 nr->score = sc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1553 nr->next = lr[rNo];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1554 sprintf(nr->chr,"%s", genName);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1555 lr[rNo] = nr;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1556 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1557 else if (err1 < cur->err)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1558 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1559 MappingInfoNode *nr = getMem(sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1560
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1561 nr->loc = loc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1562 nr->err = err1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1563 nr->score = sc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1564 sprintf(nr->chr,"%s", genName);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1565 nr->next = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1566 lr[rNo] = nr;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1567 while (cur!=NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1568 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1569 tmpDel = cur;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1570 cur = cur->next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1571 freeMem(tmpDel, sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1572 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1573 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1574 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1575 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1576 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1577
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1578 MappingInfoNode *nr = getMem(sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1579
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1580 nr->loc = loc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1581 nr->err = err1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1582 nr->score = sc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1583 sprintf(nr->chr,"%s", genName);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1584 nr->next = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1585 lr[rNo] = nr;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1586 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1587
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1588 if (ls[rNo] > DISCORDANT_CUT_OFF)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1589 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1590 cur = lr[rNo];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1591 while (cur!=NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1592 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1593 tmpDel = cur;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1594 cur = cur->next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1595 freeMem(tmpDel, sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1596 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1597 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1598 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1599
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1600 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1601 flag = fread(&rNo, sizeof(int), 1, in1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1602
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1603 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1604
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1605
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1606 if (in2 != NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1607 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1608 flag = fread(&rNo, sizeof(int), 1, in2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1609 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1610 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1611 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1612 flag = 0;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1613 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1614
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1615
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1616 while (flag)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1617 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1618 tmp = fread(&loc1, sizeof(int), 1, in2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1619 tmp = fread(&err1, sizeof(char), 1, in2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1620 tmp = fread(&sc1, sizeof(float), 1, in2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1621 tmp = fread(&l, sizeof(char), 1, in2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1622 tmp = fread(genName, sizeof(char), l, in2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1623 genName[l]='\0';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1624
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1625 if (_msf_seqList[rNo*2].hits[0] == 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1626 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1627
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1628 if ( rs[rNo] < DISCORDANT_CUT_OFF )
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1629 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1630 rs[rNo]++;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1631
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1632 cur = rr[rNo];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1633
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1634 if (cur !=NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1635 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1636 if (err1 == cur->err)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1637 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1638 MappingInfoNode *nr = getMem(sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1639
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1640 nr->loc = loc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1641 nr->err = err1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1642 nr->score = sc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1643 nr->next = rr[rNo];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1644 sprintf(nr->chr,"%s", genName);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1645 rr[rNo] = nr;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1646 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1647 else if (err1 < cur->err)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1648 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1649 MappingInfoNode *nr = getMem(sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1650
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1651 nr->loc = loc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1652 nr->err = err1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1653 nr->score = sc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1654 sprintf(nr->chr,"%s", genName);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1655 nr->next = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1656 rr[rNo] = nr;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1657 while (cur!=NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1658 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1659 tmpDel = cur;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1660 cur = cur->next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1661 freeMem(tmpDel, sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1662 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1663 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1664 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1665 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1666 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1667
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1668 MappingInfoNode *nr = getMem(sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1669
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1670 nr->loc = loc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1671 nr->err = err1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1672 nr->score = sc1;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1673 sprintf(nr->chr,"%s", genName);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1674 nr->next = NULL;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1675 rr[rNo] = nr;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1676 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1677
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1678 if (rs[rNo] > DISCORDANT_CUT_OFF)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1679 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1680 cur = rr[rNo];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1681 while (cur!=NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1682 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1683 tmpDel = cur;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1684 cur = cur->next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1685 freeMem(tmpDel, sizeof(MappingInfoNode));
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1686 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1687 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1688 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1689 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1690 flag = fread(&rNo, sizeof(int), 1, in2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1691
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1692 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1693
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1694
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1695 for (i=0; i<_msf_seqListSize/2; i++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1696 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1697 int j;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1698 for (j=0; j<SEQ_LENGTH; j++)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1699 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1700 lsc += _msf_seqList[i*2].qual[j]+_msf_seqList[i*2+1].qual[j];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1701 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1702 lsc /= 2*SEQ_LENGTH;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1703 lsc -= 33;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1704 if (ls[i] * rs[i] < DISCORDANT_CUT_OFF && ls[i] & rs[i] > 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1705 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1706 cur = lr[i];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1707 while (cur != NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1708 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1709 cur2 = rr[i];
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1710 if (cur->loc < 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1711 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1712 dir1 = 'R';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1713 loc1 = -cur->loc;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1714 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1715 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1716 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1717 dir1 = 'F';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1718 loc1 = cur->loc;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1719 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1720 while (cur2 != NULL)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1721 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1722
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1723 if (cur2->loc < 0)
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1724 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1725 dir2 = 'R';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1726 loc2 = -cur2->loc;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1727 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1728 else
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1729 {
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1730 dir2 = 'F';
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1731 loc2 = cur2->loc;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1732 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1733
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1734 fprintf(out, "%s\t%s\t%d\t%d\t%c\t%s\t%d\t%d\t%c\t%c\t%d\t%0.0f\t%0.20f\n",
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1735 _msf_seqList[i*2].name, cur->chr, loc1, (loc1+SEQ_LENGTH-1), dir1, cur2->chr, loc2, (loc2+SEQ_LENGTH-1), dir2, 'T', (cur->err+cur2->err), lsc, cur->score*cur2->score);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1736 cur2 = cur2->next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1737 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1738 cur = cur->next;
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1739 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1740 }
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1741
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1742 }*/
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1743
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1744
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1745 fclose(in);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1746 fclose(in1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1747 fclose(in2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1748 fclose(out);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1749 fclose(out1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1750 fclose(out2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1751
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1752 unlink(fname1);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1753 unlink(fname2);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1754 unlink(fname3);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1755 unlink(fname5);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1756 unlink(fname6);
ec628ba33878 Uploaded source code for mrsFAST
calkan
parents:
diff changeset
1757 }