Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ext/bifrost/src/DataStorage.tcc
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ DataStorage<U>::DataStorage(const DataStorage& o) : color_sets(nullptr), shared_

unitig_cs_link = new std::atomic<uint64_t>[sz_link];

for (size_t i = 0; i != sz_link; ++i) unitig_cs_link[i] = o.sz_link[i].load();
for (size_t i = 0; i != sz_link; ++i) unitig_cs_link[i] = o.unitig_cs_link[i].load();
}

if ((o.data != nullptr) && (o.sz_cs != 0)){
Expand Down
26 changes: 19 additions & 7 deletions src/KmerIndex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -381,14 +381,21 @@ void KmerIndex::BuildTranscripts(const ProgramOptions& opt, std::ofstream& out)
target_names_.push_back(name);

// Begin Shading
if (!shadeToColorTranscriptMap.empty()) {
shadeToColorTranscriptMap.push_back(-1);
}
auto shade_info = shadedTargetName(name);
if (shade_info.first != "") {
std::string tname = shade_info.first;
std::string variant = shade_info.second;
auto it = std::find(target_names_.begin(), target_names_.end(), tname);
if (it != target_names_.end()) {
shadeToColorTranscriptMap[target_names_.size() - 1] =
if (shadeToColorTranscriptMap.empty()) {
shadeToColorTranscriptMap.resize(target_names_.size(), -1);
}
shadeToColorTranscriptMap.back() =
std::distance(target_names_.begin(), it);
num_shades++;
}
}
// End Shading
Expand Down Expand Up @@ -1134,8 +1141,7 @@ void KmerIndex::BuildEquivalenceClasses(const ProgramOptions& opt, const std::st

trinfos[n->id].push_back(tr);
// Begin Shading
auto it = shadeToColorTranscriptMap.find(tr.trid);
if (it != shadeToColorTranscriptMap.end()) {
if (tr.trid < shadeToColorTranscriptMap.size() && shadeToColorTranscriptMap[tr.trid] != -1) {
tr.trid = shadeToColorTranscriptMap[tr.trid];
trinfos[n->id].push_back(tr); // Add the color of the original transcript as well
}
Expand Down Expand Up @@ -1168,8 +1174,8 @@ void KmerIndex::BuildEquivalenceClasses(const ProgramOptions& opt, const std::st
std::cerr << "[build] target de Bruijn graph has " << dbg.size() << " contigs and contains "
<< dbg.nbKmers() << " k-mers " << std::endl;
// Begin Shading
if (shadeToColorTranscriptMap.size() != 0) {
std::cerr << "[build] number of shades: " << std::to_string(shadeToColorTranscriptMap.size())
if (num_shades != 0) {
std::cerr << "[build] number of shades: " << std::to_string(num_shades)
<< std::endl;
}
// End Shading
Expand Down Expand Up @@ -1550,6 +1556,8 @@ void KmerIndex::load(ProgramOptions& opt, bool loadKmerTable, bool loadDlist) {
// 6. read in target ids
target_names_.clear();
target_names_.reserve(num_trans);
shadeToColorTranscriptMap.clear();
num_shades = 0;

size_t bufsz = 1024;
buffer = new char[bufsz];
Expand All @@ -1576,7 +1584,11 @@ void KmerIndex::load(ProgramOptions& opt, bool loadKmerTable, bool loadDlist) {
std::string variant = shade_info.second;
auto it = std::find(target_names_.begin(), target_names_.end(), tname);
if (it != target_names_.end()) {
if (shadeToColorTranscriptMap.empty()) {
shadeToColorTranscriptMap.resize(num_trans, -1);
}
shadeToColorTranscriptMap[i] = std::distance(target_names_.begin(), it);
num_shades++;
}
use_shade = true;
shade_sequences.add(i);
Expand Down Expand Up @@ -1606,8 +1618,8 @@ void KmerIndex::load(ProgramOptions& opt, bool loadKmerTable, bool loadDlist) {
<< std::endl;
}
// Begin Shading
if (shadeToColorTranscriptMap.size() != 0) {
std::cerr << "[build] number of shades: " << std::to_string(shadeToColorTranscriptMap.size())
if (num_shades != 0) {
std::cerr << "[build] number of shades: " << std::to_string(num_shades)
<< std::endl;
}
// End Shading
Expand Down
4 changes: 3 additions & 1 deletion src/KmerIndex.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ struct KmerIndex {
no_jump = opt.no_jump;
// Begin Shading
use_shade = false;
num_shades = 0;
// End Shading
}

Expand Down Expand Up @@ -155,7 +156,8 @@ struct KmerIndex {

// Begin Shading
// Here, we use the concepts of "shades" as proposed by in Ornaments by Adduri & Kim, 2024 for bias-corrected allele-specific expression estimation
std::unordered_map<int, int> shadeToColorTranscriptMap;
std::vector<int> shadeToColorTranscriptMap;
int num_shades;
Roaring shade_sequences;
bool use_shade;
// End Shading
Expand Down
6 changes: 3 additions & 3 deletions src/MinCollector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ Roaring MinCollector::modeECs(std::vector<std::pair<const_UnitigMap<Node>, int32
sort(v.begin(), v.end(), [&](const std::pair<const_UnitigMap<Node>, int>& a, const std::pair<const_UnitigMap<Node>, int>& b)
{
if (a.first.isSameReferenceUnitig(b.first) &&
a.first.getData()->ec[a.first.dist] == b.first.getData()->ec[b.first.dist]) {
a.first.getData()->get_mc_contig(a.first.dist).first == b.first.getData()->get_mc_contig(b.first.dist).first) {
return a.second < b.second;
} else {
return a.first.getData()->id < b.first.getData()->id;
Expand Down Expand Up @@ -368,7 +368,7 @@ Roaring MinCollector::intersectECs_long(std::vector<std::pair<const_UnitigMap<No
sort(v.begin(), v.end(), [&](const std::pair<const_UnitigMap<Node>, int>& a, const std::pair<const_UnitigMap<Node>, int>& b)
{
if (a.first.isSameReferenceUnitig(b.first) &&
a.first.getData()->ec[a.first.dist] == b.first.getData()->ec[b.first.dist]) {
a.first.getData()->get_mc_contig(a.first.dist).first == b.first.getData()->get_mc_contig(b.first.dist).first) {
return a.second < b.second;
} else {
return a.first.getData()->id < b.first.getData()->id;
Expand Down Expand Up @@ -436,7 +436,7 @@ Roaring MinCollector::intersectECs(std::vector<std::pair<const_UnitigMap<Node>,
sort(v.begin(), v.end(), [&](const std::pair<const_UnitigMap<Node>, int>& a, const std::pair<const_UnitigMap<Node>, int>& b)
{
if (a.first.isSameReferenceUnitig(b.first) &&
a.first.getData()->ec[a.first.dist] == b.first.getData()->ec[b.first.dist]) {
a.first.getData()->get_mc_contig(a.first.dist).first == b.first.getData()->get_mc_contig(b.first.dist).first) {
return a.second < b.second;
} else {
return a.first.getData()->id < b.first.getData()->id;
Expand Down