Skip to content

Commit a803f9e

Browse files
committed
Version 1.1:
- BAM output support, - standart output support, - RG tag added, - lots of bugs fixed.
1 parent 5c36e92 commit a803f9e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+2795
-880
lines changed

src/common/defs.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// Authors: Sebastian Deorowicz, Agnieszka Debudaj-Grabysz, Adam Gudys
66
//
7-
// Version : 1.0
8-
// Date : 2017-12-24
7+
// Version : 1.1
8+
// Date : 2018-07-10
99
// License : GNU GPL 3
1010
// *******************************************************************************************
1111

@@ -34,7 +34,7 @@
3434
#include <string>
3535
using namespace std;
3636

37-
#define MAPPER_VERSION "1.0 (2017-12-24)"
37+
#define MAPPER_VERSION "1.1 (2018-07-10)"
3838
#define MAPPER_ID "Whisper"
3939
#define MAPPER_NAME "Whisper"
4040

src/common/fastq_reader.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// Authors: Sebastian Deorowicz, Agnieszka Debudaj-Grabysz, Adam Gudys
66
//
7-
// Version : 1.0
8-
// Date : 2017-12-24
7+
// Version : 1.1
8+
// Date : 2018-07-10
99
// License : GNU GPL 3
1010
// *******************************************************************************************
1111

@@ -656,7 +656,7 @@ void CPrePostBaseFastqReader::load_single_file(file_name_no_t file_name_no)
656656

657657
mem_pool->Reserve(part);
658658
if(verbosity_level >= 3)
659-
cout << "FastqReader: " << file_name_no.file_name1 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
659+
cerr << "FastqReader: " << file_name_no.file_name1 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
660660

661661
uint32_t no_reads;
662662

@@ -668,7 +668,7 @@ void CPrePostBaseFastqReader::load_single_file(file_name_no_t file_name_no)
668668

669669
mem_pool->Reserve(part);
670670
if(verbosity_level >= 3)
671-
cout << "FastqReader: " << file_name_no.file_name1 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
671+
cerr << "FastqReader: " << file_name_no.file_name1 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
672672

673673
++part_no;
674674
}
@@ -696,7 +696,7 @@ void CPrePostBaseFastqReader::load_pair_files_thr(file_name_no_t file_name_no)
696696
uint32_t no_reads1, no_reads2;
697697

698698
if(verbosity_level >= 3)
699-
cout << "FastqReader: " << file_name_no.file_name1 << " : " << file_name_no.file_name2 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
699+
cerr << "FastqReader: " << file_name_no.file_name1 << " : " << file_name_no.file_name2 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
700700

701701
while (true)
702702
{
@@ -716,7 +716,7 @@ void CPrePostBaseFastqReader::load_pair_files_thr(file_name_no_t file_name_no)
716716

717717
if ((p1_status ^ p2_status) || (no_reads1 != no_reads2 && no_reads == 0))
718718
{
719-
cout << "Error: Different number of reads in paired files!\n";
719+
cerr << "Error: Different number of reads in paired files!\n";
720720
exit(1);
721721
}
722722

@@ -730,7 +730,7 @@ void CPrePostBaseFastqReader::load_pair_files_thr(file_name_no_t file_name_no)
730730
process_pair_blocks(file_name_no, part_no, id1, part1, part_filled1, id2, part2, part_filled2);
731731

732732
if (verbosity_level >= 3)
733-
cout << "FastqReader: " << file_name_no.file_name1 << " : " << file_name_no.file_name2 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
733+
cerr << "FastqReader: " << file_name_no.file_name1 << " : " << file_name_no.file_name2 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
734734

735735
++part_no;
736736
}
@@ -754,7 +754,7 @@ void CPrePostBaseFastqReader::load_pair_files(file_name_no_t file_name_no)
754754
mem_pool->Reserve(part1, part2);
755755

756756
if(verbosity_level >= 3)
757-
cout << "FastqReader: " << file_name_no.file_name1 << " : " << file_name_no.file_name2 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
757+
cerr << "FastqReader: " << file_name_no.file_name1 << " : " << file_name_no.file_name2 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
758758

759759
while(fqr1->GetPartInfo(part1, part_filled1, no_reads1) && fqr2->GetPartInfo(part2, part_filled2, no_reads2))
760760
{
@@ -766,7 +766,7 @@ void CPrePostBaseFastqReader::load_pair_files(file_name_no_t file_name_no)
766766
mem_pool->Reserve(part1, part2);
767767

768768
if(verbosity_level >= 3)
769-
cout << "FastqReader: " << file_name_no.file_name1 << " : " << file_name_no.file_name2 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
769+
cerr << "FastqReader: " << file_name_no.file_name1 << " : " << file_name_no.file_name2 << " (free blocks: " << mem_pool->GetAvailableParts() << ")\n";
770770

771771
++part_no;
772772
}
@@ -878,7 +878,7 @@ bool CPostFastqReader::is_new_group(read_id_t prev_id, read_id_t new_id)
878878
void CPostFastqReader::end_of_thread()
879879
{
880880
if(verbosity_level >= 2)
881-
cout << "PostFastqReader end_of_thread\n";
881+
cerr << "PostFastqReader end_of_thread\n";
882882
q_res_ids->MarkCompleted();
883883
joiner_mgr->MarkFastqReaderCompleted();
884884
}

src/common/fastq_reader.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// Authors: Sebastian Deorowicz, Agnieszka Debudaj-Grabysz, Adam Gudys
66
//
7-
// Version : 1.0
8-
// Date : 2017-12-24
7+
// Version : 1.1
8+
// Date : 2018-07-10
99
// License : GNU GPL 3
1010
// *******************************************************************************************
1111

src/common/idstore.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// Authors: Sebastian Deorowicz, Agnieszka Debudaj-Grabysz, Adam Gudys
66
//
7-
// Version : 1.0
8-
// Date : 2017-12-24
7+
// Version : 1.1
8+
// Date : 2018-07-10
99
// License : GNU GPL 3
1010
// *******************************************************************************************
1111

@@ -119,7 +119,7 @@ read_id_t CIDStore::RegisterBlock(uint32_t file_no, string file_name, uint32_t f
119119
}
120120

121121
if(verbosity_level > 2)
122-
cout << "IDStore:-register " << hex << id << "\n";
122+
cerr << "IDStore:-register " << hex << id << "\n";
123123

124124
return id;
125125
}
@@ -140,7 +140,7 @@ read_id_t CIDStore::GetBlockID(uint32_t file_no, string file_name, uint32_t file
140140
id += ((read_id_t) file_part & sub_block_mask) << in_block_bits;
141141

142142
if(verbosity_level > 2)
143-
cout << "IDStore-get: " << hex << id << "\n";
143+
cerr << "IDStore-get: " << hex << id << "\n";
144144

145145
return id;
146146
}

src/common/idstore.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// Authors: Sebastian Deorowicz, Agnieszka Debudaj-Grabysz, Adam Gudys
66
//
7-
// Version : 1.0
8-
// Date : 2017-12-24
7+
// Version : 1.1
8+
// Date : 2018-07-10
99
// License : GNU GPL 3
1010
// *******************************************************************************************
1111

src/common/joiner_mgr.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// Authors: Sebastian Deorowicz, Agnieszka Debudaj-Grabysz, Adam Gudys
66
//
7-
// Version : 1.0
8-
// Date : 2017-12-24
7+
// Version : 1.1
8+
// Date : 2018-07-10
99
// License : GNU GPL 3
1010
// *******************************************************************************************
1111

@@ -114,7 +114,7 @@ void CJoinerMgr::MarkFastqReaderCompleted()
114114
void CJoinerMgr::send_bin_for_processing(uint32_t bin_id)
115115
{
116116
if(verbosity_level >= 3)
117-
cout << "JoinerMgr: sending result group for converting into SAM: " << bin_id << " size of data: " << data.size() << "\n";
117+
cerr << "JoinerMgr: sending result group for converting into SAM: " << bin_id << " size of data: " << data.size() << "\n";
118118

119119
q_map_reads->Push(data[bin_id]);
120120

@@ -129,7 +129,7 @@ void CJoinerMgr::send_bin_for_processing(uint32_t bin_id)
129129
void CJoinerMgr::complete()
130130
{
131131
if(verbosity_level >= 3)
132-
cout << "JoinerMgr: mapping results reading finished\n";
132+
cerr << "JoinerMgr: mapping results reading finished\n";
133133

134134
q_map_reads->MarkCompleted();
135135
}

src/common/joiner_mgr.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// Authors: Sebastian Deorowicz, Agnieszka Debudaj-Grabysz, Adam Gudys
66
//
7-
// Version : 1.0
8-
// Date : 2017-12-24
7+
// Version : 1.1
8+
// Date : 2018-07-10
99
// License : GNU GPL 3
1010
// *******************************************************************************************
1111

src/common/mmgr.h

Lines changed: 123 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// Authors: Sebastian Deorowicz, Agnieszka Debudaj-Grabysz, Adam Gudys
66
//
7-
// Version : 1.0
8-
// Date : 2017-12-24
7+
// Version : 1.1
8+
// Date : 2018-07-10
99
// License : GNU GPL 3
1010
// *******************************************************************************************
1111

@@ -18,11 +18,128 @@
1818
#include <condition_variable>
1919
#include <mutex>
2020
#include <iostream>
21+
#include <algorithm>
2122

2223
//#define DISABLE_MEMORY_MONITOR
2324

2425
using namespace std;
2526

27+
// ************************************************************************************
28+
// CPtrPool
29+
// ************************************************************************************
30+
class CPtrPool
31+
{
32+
typedef struct {
33+
uchar_t *ptr;
34+
uint64_t size;
35+
bool reserved;
36+
} pool_item_t;
37+
38+
pool_item_t *pool;
39+
int pool_size;
40+
int no_reserved;
41+
42+
int64_t alloc_mem;
43+
44+
mutable mutex mtx; // The mutex to synchronise on
45+
condition_variable cv; // The condition to wait for
46+
47+
public:
48+
CPtrPool(int _pool_size)
49+
{
50+
alloc_mem = 0;
51+
52+
pool_size = _pool_size;
53+
pool = new pool_item_t[pool_size];
54+
no_reserved = 0;
55+
56+
for (int i = 0; i < pool_size; ++i)
57+
{
58+
pool[i].size = 1;
59+
pool[i].ptr = new uchar_t[pool[i].size];
60+
pool[i].reserved = false;
61+
62+
alloc_mem += 1;
63+
}
64+
}
65+
66+
~CPtrPool()
67+
{
68+
for (int i = 0; i < pool_size; ++i)
69+
{
70+
delete[] pool[i].ptr;
71+
72+
alloc_mem -= pool[i].size;
73+
// cerr << "Ptr_pool destructor: " + to_string(alloc_mem >> 20) + "MB\n";
74+
}
75+
76+
delete[] pool;
77+
}
78+
79+
uchar_t* Allocate(uint64_t requested_size)
80+
{
81+
unique_lock<mutex> lck(mtx);
82+
cv.wait(lck, [this] {return no_reserved < pool_size; });
83+
84+
// Try to find matching block
85+
for (int i = 0; i < pool_size; ++i)
86+
if (!pool[i].reserved && pool[i].size >= requested_size)
87+
{
88+
pool[i].reserved = true;
89+
++no_reserved;
90+
return pool[i].ptr;
91+
}
92+
93+
for (int i = pool_size - 1; i >= 0; --i)
94+
if (!pool[i].reserved)
95+
{
96+
delete[] pool[i].ptr;
97+
98+
alloc_mem -= pool[i].size;
99+
// cerr << "Ptr_pool alloc- : " + to_string(alloc_mem >> 20) + "MB\n";
100+
101+
// 10% overhead to avoid too many reallocations
102+
pool[i].size = (uint64_t)(requested_size * 1.1);
103+
104+
pool[i].ptr = new uchar_t[pool[i].size];
105+
pool[i].reserved = true;
106+
++no_reserved;
107+
alloc_mem += pool[i].size;
108+
// cerr << "Ptr_pool alloc+ : " + to_string(alloc_mem >> 20) + "MB\n";
109+
110+
auto p = pool[i].ptr;
111+
112+
sort(pool, pool + pool_size, [](pool_item_t &x, pool_item_t &y) {return x.size < y.size; });
113+
114+
return p;
115+
}
116+
117+
// cerr << "Cannot allocate in ptr pool: " + to_string(no_reserved) + " : " + to_string(pool_size) + "\n";
118+
// exit(1);
119+
120+
return nullptr;
121+
}
122+
123+
void Release(uchar_t *p)
124+
{
125+
lock_guard<mutex> lck(mtx);
126+
127+
for (int i = 0; i < pool_size; ++i)
128+
if (pool[i].ptr == p)
129+
{
130+
pool[i].reserved = false;
131+
132+
if (no_reserved-- == pool_size)
133+
cv.notify_one();
134+
return;
135+
}
136+
137+
// cerr << "Cannot find pointer\n";
138+
// exit(1);
139+
}
140+
};
141+
142+
26143
// ************************************************************************************
27144
// CMemoryPool
28145
// ************************************************************************************
@@ -112,7 +229,7 @@ template<typename T> class CMemoryPool
112229
unique_lock<mutex> lck(mtx);
113230
cv.wait(lck, [this]{return n_parts_free > 0;});
114231

115-
part = buffer + stack[--n_parts_free]*part_size;
232+
part = reinterpret_cast<T*>(buffer + stack[--n_parts_free]*part_size);
116233
}
117234

118235
// ************************************************************************************
@@ -121,8 +238,8 @@ template<typename T> class CMemoryPool
121238
unique_lock<mutex> lck(mtx);
122239
cv.wait(lck, [this]{return n_parts_free > 1;});
123240

124-
part1 = buffer + stack[--n_parts_free]*part_size;
125-
part2 = buffer + stack[--n_parts_free]*part_size;
241+
part1 = reinterpret_cast<T*>(buffer + stack[--n_parts_free]*part_size);
242+
part2 = reinterpret_cast<T*>(buffer + stack[--n_parts_free]*part_size);
126243
}
127244

128245
// ************************************************************************************
@@ -171,7 +288,7 @@ class CMemoryMonitor
171288

172289
void show_status(int64_t n)
173290
{
174-
cout << "Memory monitor: " << max_memory << " " << memory_in_use << " : " << n << "\n";
291+
cerr << "Memory monitor: " << max_memory << " " << memory_in_use << " : " << n << "\n";
175292
}
176293

177294
public:

src/common/params.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// Authors: Sebastian Deorowicz, Agnieszka Debudaj-Grabysz, Adam Gudys
66
//
7-
// Version : 1.0
8-
// Date : 2017-12-24
7+
// Version : 1.1
8+
// Date : 2018-07-10
99
// License : GNU GPL 3
1010
// *******************************************************************************************
1111

@@ -55,7 +55,7 @@ ostream& operator<<(ostream &out, const CParams &p)
5555
out << "max_bin_part_size : " << p.max_bin_part_size << endl;
5656
out << "max_cigar_len : " << p.max_cigar_len << endl;
5757
out << "max_fastq_rec_length : " << p.max_fastq_rec_length << endl;
58-
out << "max_frac_errors : " << p.max_frac_errors << endl;
58+
out << "max_no_errors : " << p.max_no_errors << endl;
5959
out << "max_group_part_size : " << p.max_group_part_size << endl;
6060
out << "max_mapping_memory : " << p.max_mapping_memory << endl;
6161
out << "max_mate_distance : " << p.max_mate_distance << endl;
@@ -85,6 +85,7 @@ ostream& operator<<(ostream &out, const CParams &p)
8585
out << "project_name : " << p.project_name << endl;
8686
out << "read_len : " << p.read_len << endl;
8787
out << "res_group_size : " << p.res_group_size << endl;
88+
out << "read_group_line : " << p.read_group_line << endl;
8889
out << "sa_in_ram : " << p.sa_in_ram << endl;
8990
out << "sa_prefix_overhead : " << p.sa_prefix_overhead << endl;
9091
out << "sam_buffer_memory : " << p.sam_buffer_memory << endl;

0 commit comments

Comments
 (0)