5
5
#include " serviceFuns.cpp"
6
6
#include " ThreadControl.h"
7
7
8
- BAMoutput::BAMoutput (int iChunk, string tmpDir, Parameters * Pin) {// allocate bam array
8
+ BAMoutput::BAMoutput (int iChunk, string tmpDir, Parameters & Pin) {// allocate bam array
9
9
10
10
P=Pin;
11
11
12
- nBins=P-> outBAMcoordNbins ;
13
- binSize=P-> chunkOutBAMsizeBytes /nBins;
12
+ nBins=P. outBAMcoordNbins ;
13
+ binSize=P. chunkOutBAMsizeBytes /nBins;
14
14
bamArraySize=binSize*nBins;
15
15
bamArray = new char [bamArraySize];
16
16
17
17
bamDir=tmpDir+to_string ((uint ) iChunk);// local directory for this thread (iChunk)
18
18
19
- mkdir (bamDir.c_str (),P-> runDirPerm );
19
+ mkdir (bamDir.c_str (),P. runDirPerm );
20
20
binStart=new char * [nBins];
21
21
binBytes=new uint64 [nBins];
22
22
binStream=new ofstream* [nBins];
@@ -34,11 +34,11 @@ BAMoutput::BAMoutput (int iChunk, string tmpDir, Parameters *Pin) {//allocate ba
34
34
nBins=1 ;// start with one bin to estimate genomic bin sizes
35
35
};
36
36
37
- BAMoutput::BAMoutput (BGZF *bgzfBAMin, Parameters * Pin) {// allocate BAM array with one bin, streamed directly into bgzf file
37
+ BAMoutput::BAMoutput (BGZF *bgzfBAMin, Parameters & Pin) {// allocate BAM array with one bin, streamed directly into bgzf file
38
38
39
39
P=Pin;
40
40
41
- bamArraySize=P-> chunkOutBAMsizeBytes ;
41
+ bamArraySize=P. chunkOutBAMsizeBytes ;
42
42
bamArray = new char [bamArraySize];
43
43
binBytes1=0 ;
44
44
bgzfBAM=bgzfBAMin;
@@ -90,9 +90,9 @@ void BAMoutput::coordOneAlign (char *bamIn, uint bamSize, uint iRead) {
90
90
bamIn32=(uint32*) bamIn;
91
91
alignG=( ((uint ) bamIn32[1 ]) << 32 ) | ( (uint )bamIn32[2 ] );
92
92
if (bamIn32[1 ] == ((uint32) -1 ) ) {// unmapped
93
- iBin=P-> outBAMcoordNbins -1 ;
93
+ iBin=P. outBAMcoordNbins -1 ;
94
94
} else if (nBins>1 ) {// bin starts have already been determined
95
- iBin=binarySearch1a <uint64> (alignG, P-> outBAMsortingBinStart , (int32) (nBins-1 ));
95
+ iBin=binarySearch1a <uint64> (alignG, P. outBAMsortingBinStart , (int32) (nBins-1 ));
96
96
};
97
97
};
98
98
@@ -104,7 +104,7 @@ void BAMoutput::coordOneAlign (char *bamIn, uint bamSize, uint iRead) {
104
104
105
105
// write buffer is filled
106
106
if (binBytes[iBin]+bamSize+sizeof (uint ) > ( (iBin>0 || nBins>1 ) ? binSize : binSize1) ) {// write out this buffer
107
- if ( nBins>1 || iBin==(P-> outBAMcoordNbins -1 ) ) {// normal writing, bins have already been determined
107
+ if ( nBins>1 || iBin==(P. outBAMcoordNbins -1 ) ) {// normal writing, bins have already been determined
108
108
binStream[iBin]->write (binStart[iBin],binBytes[iBin]);
109
109
binBytes[iBin]=0 ;// rewind the buffer
110
110
} else {// the first chunk of reads was written in one bin, need to determine bin sizes, and re-distribute reads into bins
@@ -125,11 +125,11 @@ void BAMoutput::coordOneAlign (char *bamIn, uint bamSize, uint iRead) {
125
125
};
126
126
127
127
void BAMoutput::coordBins () {// define genomic starts for bins
128
- nBins=P-> outBAMcoordNbins ;// this is the true number of bins
128
+ nBins=P. outBAMcoordNbins ;// this is the true number of bins
129
129
130
130
// mutex here
131
- if (P-> runThreadN >1 ) pthread_mutex_lock (&g_threadChunks.mutexBAMsortBins );
132
- if (P-> outBAMsortingBinStart [0 ]!=0 ) {// it's set to 0 only after the bin sizes are determined
131
+ if (P. runThreadN >1 ) pthread_mutex_lock (&g_threadChunks.mutexBAMsortBins );
132
+ if (P. outBAMsortingBinStart [0 ]!=0 ) {// it's set to 0 only after the bin sizes are determined
133
133
// extract coordinates and sort
134
134
uint *startPos = new uint [binTotalN[0 ]];// array of aligns start positions
135
135
for (uint ib=0 ,ia=0 ;ia<binTotalN[0 ];ia++) {
@@ -140,19 +140,19 @@ void BAMoutput::coordBins() {//define genomic starts for bins
140
140
qsort ((void *) startPos, binTotalN[0 ], sizeof (uint ), funCompareUint1);
141
141
142
142
// determine genomic starts of the bins
143
- P-> inOut ->logMain << " BAM sorting: " <<binTotalN[0 ]<< " mapped reads\n " ;
144
- P-> inOut ->logMain << " BAM sorting bins genomic start loci:\n " ;
143
+ P. inOut ->logMain << " BAM sorting: " <<binTotalN[0 ]<< " mapped reads\n " ;
144
+ P. inOut ->logMain << " BAM sorting bins genomic start loci:\n " ;
145
145
146
- P-> outBAMsortingBinStart [0 ]=0 ;
146
+ P. outBAMsortingBinStart [0 ]=0 ;
147
147
for (uint32 ib=1 ; ib<(nBins-1 ); ib++) {
148
- P-> outBAMsortingBinStart [ib]=startPos[binTotalN[0 ]/(nBins-1 )*ib];
149
- P-> inOut ->logMain << ib <<" \t " << (P-> outBAMsortingBinStart [ib]>>32 ) << " \t " << ((P-> outBAMsortingBinStart [ib]<<32 )>>32 ) <<endl;
148
+ P. outBAMsortingBinStart [ib]=startPos[binTotalN[0 ]/(nBins-1 )*ib];
149
+ P. inOut ->logMain << ib <<" \t " << (P. outBAMsortingBinStart [ib]>>32 ) << " \t " << ((P. outBAMsortingBinStart [ib]<<32 )>>32 ) <<endl;
150
150
// how to deal with equal boundaries???
151
151
};
152
152
delete [] startPos;
153
153
};
154
154
// mutex here
155
- if (P-> runThreadN >1 ) pthread_mutex_unlock (&g_threadChunks.mutexBAMsortBins );
155
+ if (P. runThreadN >1 ) pthread_mutex_unlock (&g_threadChunks.mutexBAMsortBins );
156
156
157
157
// re-allocate binStart
158
158
uint binTotalNold=binTotalN[0 ];
@@ -186,7 +186,7 @@ void BAMoutput::coordFlush () {//flush all alignments
186
186
};
187
187
188
188
void BAMoutput::coordUnmappedPrepareBySJout () {// flush all alignments
189
- uint iBin=P-> outBAMcoordNbins -1 ;
189
+ uint iBin=P. outBAMcoordNbins -1 ;
190
190
binStream[iBin]->write (binStart[iBin],binBytes[iBin]);
191
191
binStream[iBin]->flush ();
192
192
binBytes[iBin]=0 ;// rewind the buffer
0 commit comments