40 #include <klib/text.h>
41 #include <klib/sra-release-version.h>
42 #include <kfg/config.h>
44 #include <vfs/manager.h>
45 #include <kns/manager.h>
48 #include <align/bam.h>
49 #include <align/align-access.h>
62 #ifndef NCBI_THROW2_FMT
63 # define NCBI_THROW2_FMT(exception_class, err_code, message, extra) \
64 throw NCBI_EXCEPTION2(exception_class, err_code, FORMAT(message), extra)
102 const string& message,
107 this->x_Init(
info, message, prev_exc, severity);
115 const string& message,
121 this->x_Init(
info, message, prev_exc, severity);
129 const string& message,
137 this->x_Init(
info, message, prev_exc, severity);
145 m_Param(other.m_Param)
164 return "CBamException";
183 case eNoData:
return "eNoData";
307 if ( acc.size() != 9 && acc.size() != 12 ) {
311 "SRZ accession must be 9 or 12 chars long: "+acc);
316 string prefix = acc.substr(0, 3);
322 "SRZ accession must start with SRZ, DRZ, or ERZ: "+acc);
335 "SRZ accesion is improperly formatted: "+acc);
340 unsigned level1 = num/1000;
342 snprintf(sub_dir,
sizeof(sub_dir),
"%s/%06u/%s%s/provisional",
344 sub_dir[
sizeof(sub_dir)-1] =
'\0';
357 "SRZ accession not found: "+acc);
447 if ( !
id &&
str.find(
'|') !=
NPOS ) {
451 if ( !ids.empty() ) {
469 if ( external ||
str.find(
'|') !=
NPOS ) {
499 SraReleaseVersion release_version;
500 SraReleaseVersionGet(&release_version);
501 s << (release_version.version>>24) <<
'.'
502 << ((release_version.version>>16)&0xff) <<
'.'
503 << (release_version.version&0xffff);
504 if ( release_version.revision != 0 ||
505 release_version.type != SraReleaseVersion::eSraReleaseVersionTypeFinal ) {
506 const char*
type =
"";
507 switch ( release_version.type ) {
508 case SraReleaseVersion::eSraReleaseVersionTypeDev:
type =
"dev";
break;
509 case SraReleaseVersion::eSraReleaseVersionTypeAlpha:
type =
"a";
break;
510 case SraReleaseVersion::eSraReleaseVersionTypeBeta:
type =
"b";
break;
511 case SraReleaseVersion::eSraReleaseVersionTypeRC:
type =
"RC";
break;
512 default:
type =
"";
break;
514 s <<
'-' <<
type << release_version.revision;
543 if ( !token.
empty() && token[token.
size()-1] ==
':' ) {
545 if ( token ==
tag.tag ) {
554 static thread::id s_DiagCheckThreadID;
560 s_DiagCheckThreadID = this_thread::get_id();
567 return s_DiagCheckThreadID == this_thread::get_id();
581 for (
SIZE_TYPE token_pos = 0, token_end; token_pos < msg.
size(); token_pos = token_end + 1 ) {
582 token_end = msg.
find(
' ', token_pos);
583 if ( token_end ==
NPOS ) {
584 token_end = msg.
size();
587 sev_manip =
tag->manip;
591 if ( sev_manip ==
Trace ) {
610 string host = app->GetConfig().GetString(
"CONN",
"HTTP_PROXY_HOST",
kEmptyStr);
611 int port = app->GetConfig().GetInt(
"CONN",
"HTTP_PROXY_PORT", 0);
612 if ( !host.empty() && port != 0 ) {
615 "Cannot create KConfig singleton", rc);
619 "/http/proxy/path", path.c_str()) ) {
621 "Cannot set KConfig proxy path", rc);
624 "/http/proxy/enabled",
true) ) {
626 "Cannot set KConfig proxy enabled", rc);
641 if ( &req_ctx == s_LastRequestContext && req_ctx_version == s_LastRequestContextVersion ) {
644 _TRACE(
"CVDBMgr: Updating request context with version: "<<req_ctx_version);
645 s_LastRequestContext = &req_ctx;
646 s_LastRequestContextVersion = req_ctx_version;
650 "Cannot create KNSManager singleton", rc);
654 KNSManagerSetSessionID(kns_mgr, req_ctx.
GetSessionID().c_str());
658 KNSManagerSetClientIP(kns_mgr, req_ctx.
GetClientIP().c_str());
662 KNSManagerSetPageHitID(kns_mgr, req_ctx.
GetHitID().c_str());
671 if (
rc_t rc = KNSManagerSetAllowAllCerts(kns_mgr,
true) ) {
673 "Cannot enable all HTTPS certificates in KNSManager", rc);
686 #ifdef NCBI_PRODUCTION_VER
687 str << NCBI_PRODUCTION_VER <<
"/";
689 #ifdef NCBI_DEVELOPMENT_VER
693 KNSManagerSetUserAgent(kns_mgr,
"%s; VDB %s",
728 static bool initialized =
false;
729 if ( !initialized ) {
736 ask_level = klogDebug;
738 ask_level = klogInfo;
741 KLogLevelSet(ask_level);
745 const char* msg =
"info: VDB initialized";
754 "Cannot create KNSManager singleton", rc);
772 "cannot get VFSManager", rc);
774 VFSManagerLogNamesServiceErrors(*
this,
false);
776 if (
rc_t rc = VFSManagerGetKNSMgr(*
this, kns_mgr.
x_InitPtr()) ) {
778 "Cannot get KNSManager", rc);
789 "Cannot create AlignAccessMgr", rc);
799 return s.length() >= 2 &&
isalpha(
Uchar(s[0])) && s[1] ==
':';
809 if ( s.find_first_of(
"/\\") ==
NPOS ) {
847 string fixed_path = path;
855 replace(fixed_path.begin(), fixed_path.end(),
'\\',
'/');
863 const char* c_path = fixed_path.c_str();
865 const char* c_path = path.c_str();
869 if (
rc_t rc = VFSManagerMakePath(mgr, &kpath, c_path) ) {
871 "Cannot create VPath object", rc);
879 { VPathRelease(kpath); }
884 const string& db_name)
893 "Cannot open BAM DB", rc, db_name);
899 const string& base_name,
904 dst.push_back(base_name.substr(0, base_name.size()-old_ext.
size())+new_ext);
910 const string& db_name,
915 vector<string> index_name_candidates;
916 if ( idx_name.empty() || idx_name == db_name ) {
917 index_name_candidates.push_back(db_name+
kBaiExt);
921 index_name_candidates.push_back(idx_name);
923 for (
size_t i = 0;
i < index_name_candidates.size(); ++
i ) {
925 index_name_candidates[
i]));
930 if (
i < index_name_candidates.size()-1 &&
931 GetRCTarget(rc) == rcFile &&
932 GetRCState(rc) == rcNotFound ) {
937 *m_DB.x_InitPtr() = 0;
939 "Cannot open BAM DB", rc, db_name);
943 idx_name = index_name_candidates[
i];
951 const string& db_name,
966 const string& db_name,
967 const string& idx_name,
970 m_IndexName(idx_name)
991 string label = it.GetRefSeqId();
1021 len = it.GetLength();
1026 (*lengths)[it.GetRefSeqId()] =
len;
1045 if (
rc_t rc = AlignAccessDBExportBAMFile(
m_AADB->m_DB,
file.x_InitPtr()) ) {
1047 "Cannot get BAMFile pointer", rc);
1051 if (
rc_t rc = BAMFileGetHeaderText(
file, &header, &
size) ) {
1053 "Cannot get BAM header text", rc);
1060 #ifdef HAVE_NEW_PILEUP_COLLECTOR
1072 EIntronMode intron_mode)
1074 initialize(ref_range, intron_mode);
1079 EIntronMode intron_mode)
1081 m_RefToOpen = m_RefFrom = ref_range.
GetFrom();
1083 m_IntronMode = intron_mode;
1085 for (
auto& c : max_count ) c = 0;
1087 cc_acgt.resize(
len);
1089 cc_match.resize(
len);
1094 if ( count_introns() ) {
1095 cc_intron.resize(
len);
1104 _ASSERT(accumulate(&cc_gap[0], &cc_gap[m_RefToOpen-m_RefFrom+1], 0) == 0);
1111 _ASSERT(accumulate(&cc_gap[
len], &cc_gap[m_RefToOpen-m_RefFrom+1], 0) == 0);
1118 _ASSERT(accumulate(&cc_intron[0], &cc_intron[m_RefToOpen-m_RefFrom+1], 0) == 0);
1125 _ASSERT(accumulate(&cc_intron[
len], &cc_intron[m_RefToOpen-m_RefFrom+1], 0) == 0);
1161 const char* src = read.
data()+read_pos;
1162 SPileupValues::SCountACGT* dst = cc_acgt.data()+pos;
1163 SPileupValues::SCountACGT* dst_end = cc_acgt.data()+
end;
1164 TCount* dst_match = cc_match.data()+pos;
1170 for ( ; dst < dst_end; ++src, ++dst, ++dst_match ) {
1173 unsigned b = *src & 0x1f;
1174 dst_match[0] +=
b == (
'=' & 0x1f);
1176 add_bases_acgt(dst,
b, bits,
mask);
1178 add_bases_acgt(dst,
b);
1184 static inline unsigned get_raw_base0(
unsigned bb)
1190 static inline unsigned get_raw_base1(
unsigned bb)
1204 return (
size + 0xf) & ~0xf;
1215 const char* src = read.
data()+read_pos/2;
1216 SPileupValues::SCountACGT* dst = cc_acgt.data()+pos;
1217 SPileupValues::SCountACGT* dst_end = cc_acgt.data()+
end-1;
1218 TCount* dst_match = cc_match.data()+pos;
1221 unsigned b = get_raw_base1(
bb);
1222 dst_match[0] +=
b == 0;
1224 add_bases_acgt(dst,
b, bits,
mask);
1226 add_bases_acgt_raw(dst,
b);
1233 for ( ; dst < dst_end; ++src, dst += 2, dst_match += 2 ) {
1235 unsigned b0 = get_raw_base0(
bb);
1236 unsigned b1 = get_raw_base1(
bb);
1237 dst_match[0] += b0 == 0;
1238 dst_match[1] += b1 == 0;
1240 add_bases_acgt(dst+0, b0, bits,
mask);
1241 add_bases_acgt(dst+1, b1, bits,
mask);
1243 add_bases_acgt_raw(dst+0, b0);
1244 add_bases_acgt_raw(dst+1, b1);
1247 if ( dst <= dst_end ) {
1249 unsigned b = get_raw_base0(
bb);
1250 dst_match[0] +=
b == 0;
1252 add_bases_acgt(dst,
b, bits,
mask);
1254 add_bases_acgt_raw(dst,
b);
1262 if ( ref_pos > m_RefToOpen ) {
1264 if ( ref_pos > m_RefToOpen+FLUSH_SIZE ) {
1266 if ( m_RefToOpen != m_RefFrom ) {
1268 advance_current_beg(m_RefToOpen, callback);
1270 _ASSERT(m_RefToOpen == m_RefFrom);
1271 TSeqPos add_zeros = ref_pos-m_RefToOpen;
1272 TSeqPos flush_zeros = align_to_16_down(add_zeros);
1274 callback->AddZerosBy16(flush_zeros);
1275 m_RefToOpen = m_RefFrom += flush_zeros;
1276 if ( ref_pos > m_RefToOpen ) {
1277 advance_current_end(ref_pos);
1281 advance_current_end(ref_pos);
1283 TSeqPos flush = ref_pos-m_RefFrom;
1284 if ( ref_pos != m_RefStop ) {
1285 flush = align_to_16_down(flush);
1289 if ( count_introns() ) {
1290 decode_intron(flush);
1292 TSeqPos total = m_RefToOpen-m_RefFrom;
1293 if ( flush >= 16 ) {
1295 update_max_counts(flush);
1296 callback->AddValuesBy16(flush, *
this);
1304 TCount gap_save = cc_gap[total];
1308 cc_gap[
copy] = gap_save;
1310 if ( count_introns() ) {
1311 TCount intron_save = cc_intron[total];
1315 cc_intron[
copy] = intron_save;
1318 _ASSERT(accumulate(&cc_gap[0], &cc_gap[m_RefToOpen-m_RefFrom+1], 0) == 0);
1320 accumulate(&cc_intron[0], &cc_intron[m_RefToOpen-m_RefFrom+1], 0) == 0);
1323 _ASSERT(ref_pos == m_RefStop);
1324 _ASSERT(ref_pos == m_RefToOpen);
1325 update_max_counts(flush);
1326 callback->AddValuesTail(flush, *
this);
1327 m_RefFrom = m_RefStop;
1335 _ASSERT(ref_end > m_RefToOpen);
1336 _ASSERT(ref_end <= m_RefStop);
1337 TSeqPos cur_pos = m_RefToOpen-m_RefFrom;
1338 TSeqPos new_pos = (
min(m_RefStop + 15, ref_end + FLUSH_SIZE) - m_RefFrom) & ~15;
1343 TCount gap_save = cc_gap[cur_pos];
1345 cc_gap[cur_pos] = gap_save;
1346 cc_gap[new_pos] = 0;
1348 if ( count_introns() ) {
1349 TCount intron_save = cc_intron[cur_pos];
1351 cc_intron[cur_pos] = intron_save;
1352 cc_intron[new_pos] = 0;
1354 m_RefToOpen =
min(m_RefStop, m_RefFrom + new_pos);
1360 if ( m_RefToOpen < m_RefStop ) {
1361 advance_current_end(m_RefStop);
1363 _ASSERT(m_RefToOpen == m_RefStop);
1364 decode_gap(m_RefStop - m_RefFrom);
1366 if (
TSeqPos flush = m_RefToOpen-m_RefFrom ) {
1368 update_max_counts(flush);
1369 callback->AddValuesTail(flush, *
this);
1374 update_max_counts(m_RefStop - m_RefFrom);
1381 _ASSERT(m_RefFrom+length <= m_RefToOpen);
1382 _ASSERT(length % 16 == 0 || m_RefToOpen == m_RefStop);
1383 length = align_to_16_up(length);
1387 if ( count_introns() ) {
1391 max_count[kStat_Intron] = 0;
1399 if ( m_SplitACGTLen <
len ) {
1401 for (
int k = 0; k < kNumStat_ACGT; ++k ) {
1402 cc_split_acgt[k].clear();
1403 cc_split_acgt[k].resize(len16);
1406 cc_split_acgt[0].data(),
1407 cc_split_acgt[1].data(),
1408 cc_split_acgt[2].data(),
1409 cc_split_acgt[3].data());
1410 m_SplitACGTLen =
len;
1416 const string& ref_id,
1419 ICollectPileupCallback* callback,
1421 TSeqPos gap_to_intron_threshold)
const
1423 values.initialize(graph_range, intron_mode);
1429 for( ; *rit; ++*rit ){
1430 if ( min_quality > 0 && rit->GetMapQuality() < min_quality ) {
1435 TSeqPos ref_pos = rit->GetRefSeqPos();
1436 values.update_current_ref_start(ref_pos, callback);
1437 TSeqPos read_len = rit->GetShortSequenceLength();
1438 CTempString read_raw = rit->GetShortSequenceRaw();
1440 for (
Uint2 i = 0, count = rit->GetCIGAROpsCount();
i < count; ++
i ) {
1441 if ( ref_pos >= graph_range.
GetToOpen() ) {
1445 Uint4 op = rit->GetCIGAROp(
i);
1446 Uint4 seglen = op >> 4;
1449 TSeqPos ref_end = ref_pos + seglen;
1453 values.add_match_ref_range(ref_pos, ref_end);
1461 if ( read_pos+ref_end > read_len+ref_pos ) {
1463 values.add_match_ref_range(ref_pos, ref_end);
1466 values.add_bases_ref_range_raw(ref_pos, ref_end, read_raw, read_pos);
1477 values.add_intron_ref_range(ref_pos, ref_end);
1482 if ( seglen > gap_to_intron_threshold ) {
1483 values.add_intron_ref_range(ref_pos, ref_end);
1486 values.add_gap_ref_range(ref_pos, ref_end);
1497 for( ; ait; ++ait ){
1498 if ( min_quality > 0 && ait.GetMapQuality() < min_quality ) {
1503 TSeqPos ref_pos = ait.GetRefSeqPos();
1504 values.update_current_ref_start(ref_pos, callback);
1506 _ASSERT((values.m_RefToOpen-values.m_RefFrom)%16 == 0 || values.m_RefToOpen == values.m_RefStop);
1507 TSeqPos read_len = ait.GetShortSequenceLength();
1509 TSeqPos read_pos = ait.GetCIGARPos();
1511 const char* ptr = cigar.
data();
1512 const char*
end = ptr + cigar.
size();
1513 while ( ptr != end ) {
1514 if ( ref_pos >= graph_range.
GetToOpen() ) {
1520 for ( ; ++ptr !=
end; ) {
1522 if ( c >=
'0' && c <=
'9' ) {
1523 seglen = seglen*10+(c-
'0');
1529 if ( seglen == 0 ) {
1534 TSeqPos ref_end = ref_pos + seglen;
1535 if (
type ==
'=' ) {
1537 values.add_match_ref_range(ref_pos, ref_end);
1541 else if (
type ==
'M' ||
type ==
'X' ) {
1544 if ( read_pos+ref_end > read_len+ref_pos ) {
1546 values.add_match_ref_range(ref_pos, ref_end);
1549 values.add_bases_ref_range(ref_pos, ref_end, read, read_pos);
1554 else if (
type ==
'S' ) {
1557 else if (
type ==
'I' ) {
1560 else if (
type ==
'N' ) {
1562 values.add_intron_ref_range(ref_pos, ref_end);
1565 else if (
type ==
'D' ) {
1567 if ( seglen > gap_to_intron_threshold ) {
1568 values.add_intron_ref_range(ref_pos, ref_end);
1571 values.add_gap_ref_range(ref_pos, ref_end);
1575 else if (
type !=
'P' ) {
1580 _ASSERT((values.m_RefToOpen-values.m_RefFrom)%16 == 0 || values.m_RefToOpen == values.m_RefStop);
1586 if ( callback && graph_range.
GetToOpen() != values.m_RefFrom ) {
1588 TSeqPos flush16 = align_to_16_down(flush);
1589 TSeqPos flush_tail = flush - flush16;
1591 values.advance_current_beg(values.m_RefFrom+flush16, callback);
1594 values.advance_current_beg(values.m_RefFrom+flush_tail, callback);
1598 values.finalize(callback);
1606 if (
tag.size() != 2 ) {
1624 if (
tag.size() != 2 ) {
1657 AlignAccessRefSeqEnumerator* ptr = 0;
1658 if (
rc_t rc = AlignAccessDBEnumerateRefSequences(bam_db.
m_AADB->m_DB, &ptr) ) {
1659 if ( !(GetRCObject(rc) == rcRow &&
1660 GetRCState(rc) == rcNotFound) ) {
1669 m_AADBImpl->m_Iter.SetReferencedPointer(ptr);
1696 if (
this != &iter ) {
1720 if (
rc_t rc = AlignAccessRefSeqEnumeratorNext(
m_AADBImpl->m_Iter) ) {
1722 if ( !(GetRCObject(rc) == rcRow &&
1723 GetRCState(rc) == rcNotFound) ) {
1726 "Cannot find next refseq", rc);
1745 const char* msg)
const
1762 else if ( GetRCState(rc) == rcInsufficient &&
size >
buf.capacity() ) {
1770 "Cannot get value", rc, msg);
1776 const char* msg, TGetString func)
const
1779 while (
buf.empty() ) {
1793 AlignAccessRefSeqEnumeratorGetID);
1815 if (
rc_t rc = AlignAccessRefSeqEnumeratorGetLength(
m_AADBImpl->m_Iter, &length) ) {
1817 "CBamRefSeqIterator::GetLength() cannot get length", rc);
1821 "CBamRefSeqIterator::GetLength() length is too big");
1841 const string& ref_label,
1854 const string& ref_label,
1870 m_ShortSequence.clear();
1876 AlignAccessAlignmentEnumerator* ptr)
1893 m_ShortSeqId.clear();
1894 m_ShortSeqAcc.clear();
1895 m_ShortSequence.clear();
1903 for (
size_t i = 0;
i < m_CIGAR.size(); ++
i ) {
1904 if ( m_CIGAR[
i] ==
'M' ) {
1915 if (
rc_t rc = AlignAccessAlignmentEnumeratorGetRefSeqPos(m_Iter, &pos) ) {
1916 if ( GetRCObject(rc) == RCObject(rcData) &&
1917 GetRCState(rc) == rcNotFound ) {
1921 "Cannot get RefSeqPos", rc);
1941 m_BamFlagsAvailability(eBamFlags_NotTried)
1952 AlignAccessAlignmentEnumerator* ptr = 0;
1953 if (
rc_t rc = AlignAccessDBEnumerateAlignments(bam_db.
m_AADB->m_DB, &ptr) ) {
1954 if ( !AlignAccessAlignmentEnumeratorIsEOF(rc) ) {
1969 const string& ref_id,
1974 m_BamFlagsAvailability(eBamFlags_NotTried)
1985 AlignAccessAlignmentEnumerator* ptr = 0;
1986 if (
rc_t rc = AlignAccessDBWindowedAlignments(bam_db.
m_AADB->m_DB, &ptr,
1987 ref_id.c_str(), ref_pos, window) ) {
1989 AlignAccessAlignmentEnumeratorRelease(ptr);
1992 if ( !AlignAccessAlignmentEnumeratorIsEOF(rc) ) {
2003 while (
m_AADBImpl->GetRefSeqPos() < ref_pos ) {
2004 if (
rc_t rc = AlignAccessAlignmentEnumeratorNext(ptr) ) {
2006 if ( !AlignAccessAlignmentEnumeratorIsEOF(rc) ) {
2022 const string& ref_id,
2029 m_BamFlagsAvailability(eBamFlags_NotTried)
2052 if (
this != &iter ) {
2078 if (
rc_t rc = AlignAccessAlignmentEnumeratorNext(
m_AADBImpl->m_Iter) ) {
2080 if ( !(GetRCObject(rc) == rcRow &&
2081 GetRCState(rc) == rcNotFound) ) {
2107 const char* msg)
const
2124 else if ( GetRCState(rc) == rcInsufficient &&
size >
buf.capacity() ) {
2132 "Cannot get value", rc, msg);
2138 const char* msg, TGetString func)
const
2141 while (
buf.empty() ) {
2152 const char* msg, TGetString2 func)
const
2155 while (
buf.empty() ) {
2168 return m_RawImpl->m_RawDB->GetData().GetHeader().GetRefName(
m_RawImpl->m_Iter.GetRefSeqIndex());
2172 AlignAccessAlignmentEnumeratorGetRefSeqID);
2181 return m_RawImpl->m_Iter.GetRefSeqPos();
2192 return m_RawImpl->m_Iter.GetNextRefSeqIndex();
2204 Int4 next_ref_index =
m_RawImpl->m_Iter.GetNextRefSeqIndex();
2205 if ( next_ref_index == -1 ) {
2210 return m_RawImpl->m_RawDB->GetData().GetHeader().GetRefName(next_ref_index);
2223 return m_RawImpl->m_Iter.GetNextRefSeqPos();
2235 return m_RawImpl->m_Iter.GetShortSeqId();
2239 AlignAccessAlignmentEnumeratorGetShortSeqID);
2248 return m_RawImpl->m_Iter.GetShortSeqAcc();
2252 AlignAccessAlignmentEnumeratorGetShortSeqAccessionID);
2261 if (
m_RawImpl->m_ShortSequence.empty() ) {
2269 AlignAccessAlignmentEnumeratorGetShortSequence);
2279 return m_RawImpl->m_Iter.GetShortSequenceLength();
2290 AlignAccessAlignmentEnumeratorGetCIGAR);
2297 return m_RawImpl->m_Iter.HasAmbiguousMatch();
2336 return m_RawImpl->m_Iter.GetCIGAR(raw_cigar);
2341 const char* ptr =
m_AADBImpl->m_CIGAR.data();
2342 const char* end = ptr +
m_AADBImpl->m_CIGAR.size();
2345 while ( ptr != end ) {
2347 for (
len = 0; ++ptr != end; ) {
2349 if ( c >=
'0' && c <=
'9' ) {
2356 const char*
types =
"MIDNSHP=X";
2358 unsigned op = ptr? unsigned(ptr-
types): 15u;
2359 raw_cigar.push_back((
len<<4)|(op));
2368 return m_RawImpl->m_Iter.GetCIGARRefSize();
2373 const char* ptr =
m_AADBImpl->m_CIGAR.data();
2374 const char* end = ptr +
m_AADBImpl->m_CIGAR.size();
2377 while ( ptr != end ) {
2379 for (
len = 0; ++ptr != end; ) {
2381 if ( c >=
'0' && c <=
'9' ) {
2392 else if (
type ==
'I' ||
type ==
'S' ) {
2395 else if (
type ==
'D' ||
type ==
'N' ) {
2399 else if (
type !=
'P' ) {
2416 return m_RawImpl->m_Iter.GetCIGARShortSize();
2421 const char* ptr =
m_AADBImpl->m_CIGAR.data();
2422 const char* end = ptr +
m_AADBImpl->m_CIGAR.size();
2425 while ( ptr != end ) {
2427 for (
len = 0; ++ptr != end; ) {
2429 if ( c >=
'0' && c <=
'9' ) {
2440 else if (
type ==
'I' ||
type ==
'S' ) {
2444 else if (
type ==
'D' ||
type ==
'N' ) {
2447 else if (
type !=
'P' ) {
2465 return m_RawImpl->m_Iter.GetCIGARAlignment();
2472 TSeqPos ref_size = 0, short_size = 0;
2473 const char* ptr =
m_AADBImpl->m_CIGAR.data();
2474 const char* end = ptr +
m_AADBImpl->m_CIGAR.size();
2477 while ( ptr != end ) {
2479 for (
len = 0; ++ptr != end; ) {
2481 if ( c >=
'0' && c <=
'9' ) {
2493 else if (
type ==
'I' ||
type ==
'S' ) {
2497 else if (
type ==
'D' ||
type ==
'N' ) {
2501 else if (
type !=
'P' ) {
2510 ret.first.SetLength(ref_size);
2511 ret.second.SetLength(short_size);
2536 bool paired =
IsPaired(), is_1st =
false, is_2nd =
false;
2547 paired = (
flags & (BAMFlags_WasPaired |
2548 BAMFlags_IsMappedAsPair)) != 0;
2549 is_1st = (
flags & BAMFlags_IsFirst) != 0;
2550 is_2nd = (
flags & BAMFlags_IsSecond) != 0;
2554 if ( is_1st && !is_2nd ) {
2557 else if ( is_2nd && !is_1st ) {
2563 detector->AddSpotId(
id,
this);
2596 AlignmentStrandDirection dir;
2597 if ( AlignAccessAlignmentEnumeratorGetStrandDirection(
m_AADBImpl->m_Iter, &dir) != 0 ) {
2635 "Strand is not set");
2645 return m_RawImpl->m_Iter.GetMapQuality();
2650 if (
rc_t rc = AlignAccessAlignmentEnumeratorGetMapQuality(
m_AADBImpl->m_Iter, &q) ) {
2652 "Cannot get MapQuality", rc);
2667 if (
rc_t rc = AlignAccessAlignmentEnumeratorGetIsPaired(
m_AADBImpl->m_Iter, &
f) ) {
2669 "Cannot get IsPaired flag", rc);
2679 return m_RawImpl->m_Iter.IsFirstInPair();
2684 if (
rc_t rc=AlignAccessAlignmentEnumeratorGetIsFirstInPair(
m_AADBImpl->m_Iter, &
f) ) {
2686 "Cannot get IsFirstInPair flag", rc);
2696 return m_RawImpl->m_Iter.IsSecondInPair();
2701 if (
rc_t rc=AlignAccessAlignmentEnumeratorGetIsSecondInPair(
m_AADBImpl->m_Iter, &
f) ) {
2703 "Cannot get IsSecondInPair flag", rc);
2719 return (
flags & BAMFlags_IsNotPrimary) != 0;
2731 "Cannot get BAM file alignment", rc);
2739 if (
rc_t rc = BAMAlignmentGetRefSeqId(*
this, &
id) ) {
2741 "Cannot get BAM RefSeqIndex", rc);
2750 return m_RawImpl->m_Iter.GetRefSeqIndex();
2762 if (
rc_t rc = BAMAlignmentGetFlags(*
this, &
flags) ) {
2764 "Cannot get BAM flags", rc);
2772 return BAMAlignmentGetFlags(*
this, &
flags) == 0;
2825 return impl->GetAuxIterator();
2835 if ( length == 0 ) {
2845 string& iupac = inst.
SetSeq_data().SetIupacna().Set();
2846 iupac.assign(data.
data(), length);
2892 cache->
SetType().SetStr(
"Secondary");
2904 obj.
SetType().SetStr(
"Mate read");
2905 obj.
AddField(
"Match by local Seq-id",
true);
2926 m_RawImpl->m_Iter.GetSegments(starts, lens);
2927 segcount =
int(lens.size());
2932 const char* ptr =
m_AADBImpl->m_CIGAR.data();
2933 const char* end = ptr +
m_AADBImpl->m_CIGAR.size();
2936 TSeqPos refstart = 0, seqstart = 0;
2937 while ( ptr != end ) {
2939 for ( seglen = 0; ++ptr != end; ) {
2941 if ( c >=
'0' && c <=
'9' ) {
2942 seglen = seglen*10+(c-
'0');
2955 else if (
type ==
'I' ||
type ==
'S' ) {
2960 else if (
type ==
'D' ||
type ==
'N' ) {
2966 else if (
type ==
'P' ) {
2973 if ( seglen == 0 ) {
2975 "Bad CIGAR length: " <<
type <<
2978 starts.push_back(refstart);
2979 starts.push_back(seqstart);
2980 lens.push_back(seglen);
2986 strands.reserve(2*segcount);
2988 for (
int i = 0;
i < segcount; ++
i ) {
2994 starts[
i*2+1] = end - (pos +
len);
3003 bool add_aux = !tags.empty();
3016 Int4 next_ref_index = -1;
3024 if ( next_ref_id.
empty() ) {
3033 if ( add_cigar || add_aux ) {
3042 obj->
SetData().push_back(field);
3048 CBamDb::TTagList::const_iterator info_iter = find(tags.begin(), tags.end(), name);
3049 if ( info_iter == tags.end() ) {
3054 if ( aux_it->IsArray() ) {
3055 if ( aux_it->IsFloat() ) {
3057 for (
size_t i = 0;
i < aux_it->size(); ++
i ) {
3058 arr.push_back(aux_it->GetFloat(
i));
3063 for (
size_t i = 0;
i < aux_it->size(); ++
i ) {
3069 if ( aux_it->IsChar() ) {
3070 field->
SetData().SetStr(
string(1, aux_it->GetChar()));
3072 else if ( aux_it->IsString() ) {
3073 field->
SetData().SetStr(aux_it->GetString());
3075 else if ( aux_it->IsFloat() ) {
3076 field->
SetData().SetReal(aux_it->GetFloat());
3082 obj->
SetData().push_back(field);
3087 align->
SetExt().push_back(obj);
3099 obj->
SetData().push_back(field);
3104 field->
SetData().SetInt(next_ref_pos);
3105 obj->
SetData().push_back(field);
3112 for ( ; mate_iter; ++mate_iter ) {
3120 obj->
SetData().push_back(field);
3126 align->
SetExt().push_back(obj);
3145 annot->
SetDesc().Set().push_back(desc);
3167 entry->
SetAnnot().push_back(annot);
3168 annot->
SetData().SetAlign().push_back(align);
void x_Assign(CObject_id &dst, const CObject_id &src)
static CRef< CSeq_id > sx_GetShortSeq_id(const string &str, IIdMapper *idmapper, bool external)
static bool s_OmitAmbiguousMatchCigar(void)
static const SVDBSeverityTag kSeverityTags[]
static bool s_ExplicitMateInfo(void)
static char s_VDBVersion[32]
static bool s_HasWindowsDriveLetter(const string &s)
static rc_t VDBLogWriter(void *, const char *buffer, size_t size, size_t *written)
static void s_InitLocalKNS(KNSManager *kns_mgr)
static CBamRef< KConfig > s_InitProxyConfig()
static void s_InitAllKNS(KNSManager *kns_mgr)
static int s_GetDiagHandler(void)
NCBI_PARAM_DEF(bool, BAM, CIGAR_IN_ALIGN_EXT, true)
static const SVDBSeverityTag * s_GetVDBSeverityTag(CTempString token)
DEFINE_STATIC_FAST_MUTEX(sx_SDKMutex)
static void s_InitVDBVersion()
SPECIALIZE_BAM_REF_TRAITS(KConfig,)
static const char kBamExt[]
static VPath * sx_GetVPath(const CBamVFSManager &mgr, const string &path)
static void s_InitStaticKNS(KNSManager *kns_mgr)
NCBI_PARAM_DECL(string, SRZ, REP_PATH)
static bool s_IsSysPath(const string &s)
static void s_InitDiagCheck()
static bool s_DiagIsSafe()
#define NCBI_THROW2_FMT(exception_class, err_code, message, extra)
static CObject_id & sx_GetObject_id(CTempString name, CRef< CObject_id > &cache)
static void s_AddReplacedExt(vector< string > &dst, const string &base_name, CTempString old_ext, CTempString new_ext)
static CRef< CUser_object > sx_GetSecondaryIndicator(CRef< CUser_object > &cache)
NCBI_PARAM_DEF_EX(string, SRZ, REP_PATH, NCBI_SRZ_REP_PATH, eParam_NoThread, SRZ_REP_PATH)
static void sx_MapId(CSeq_id &id, IIdMapper *idmapper)
static CRef< CSeq_id > sx_GetRefSeq_id(const string &str, IIdMapper *idmapper)
static const char kBaiExt[]
static void s_UpdateVDBRequestContext(void)
static bool s_GetCigarInAlignExt(void)
ostream & operator<<(ostream &out, const CBamRcFormatter &rc)
DEFINE_BAM_REF_TRAITS(VFSManager,)
static CRef< CAnnotdesc > sx_GetMatchAnnotIndicator(CRef< CAnnotdesc > &cache)
static DECLARE_TLS_VAR(const CRequestContext *, s_LastRequestContext)
#define NCBI_THROW3(exc_cls, err_code, msg, extra1, extra2)
ISpotIdDetector interface is used to detect spot id in case of incorrect flag combination.
virtual ~ISpotIdDetector(void)
ISpotIdDetector * GetSpotIdDetector(void) const
friend class CBamFileAlign
CIRef< ISpotIdDetector > m_SpotIdDetector
CRef< CSeq_align > GetMatchAlign(void) const
Int4 GetRefSeqIndex(void) const
bool TryGetFlags(Uint2 &flags) const
CRef< CBioseq > GetShortBioseq(void) const
CTempString GetShortSequence(void) const
TSeqPos GetShortSequenceLength(void) const
bool x_HasAmbiguousMatch() const
TSeqPos GetCIGARShortSize(void) const
void SetRefSeq_id(CRef< CSeq_id > seq_id)
TSeqPos GetNextRefSeqPos() const
CRef< CSeq_id > GetShortSeq_id(void) const
TSeqPos GetRefSeqPos(void) const
AutoPtr< SCreateCache > m_CreateCache
bool x_CheckRC(CBamString &buf, rc_t rc, size_t size, const char *msg) const
CRef< CSeq_annot > x_GetSeq_annot(const string *annot_name) const
void SetShortSeq_id(CRef< CSeq_id > seq_id)
CTempString GetCIGAR(void) const
CRef< SRawImpl > m_RawImpl
Uint2 GetFlags(void) const
void x_GetStrand(void) const
CRef< CSeq_id > GetRefSeq_id(void) const
TSeqPos GetCIGARRefSize(void) const
Int4 GetNextRefSeqIndex() const
SCreateCache & x_GetCreateCache(void) const
bool IsSecondary(void) const
CTempString GetRefSeqId(void) const
bool IsSecondInPair(void) const
CBamRawAlignIterator * GetRawIndexIteratorPtr() const
CBamAuxIterator GetAuxIterator() const
CTempString GetShortSeqId(void) const
IIdMapper * GetIdMapper(void) const
Uint1 GetMapQuality(void) const
TSeqPos GetCIGARPos(void) const
bool IsSetStrand(void) const
EBamFlagsAvailability m_BamFlagsAvailability
void GetRawCIGAR(vector< Uint4 > &raw_cigar) const
CRef< CSeq_id > m_ShortSeq_id
bool UsesRawIndex() const
CRef< SAADBImpl > m_AADBImpl
void x_GetString(CBamString &buf, const char *msg, TGetString func) const
CBamAlignIterator & operator++(void)
CTempString GetNextRefSeqId(void) const
void x_CheckValid(void) const
void x_GetCIGAR(void) const
bool IsPaired(void) const
CBamAlignIterator & operator=(const CBamAlignIterator &iter)
CRef< CSeq_id > m_RefSeq_id
bool IsFirstInPair(void) const
ENa_strand GetStrand(void) const
CTempString GetShortSeqAcc(void) const
pair< COpenRange< TSeqPos >, COpenRange< TSeqPos > > GetCIGARAlignment(void) const
CRef< CSeq_entry > x_GetMatchEntry(const string *annot_name) const
virtual ~ICollectPileupCallback()
AutoPtr< TRefSeqLengths > m_RefSeqLengths
static int GetDebugLevel()
string GetHeaderText(void) const
bool ExcludeAlignTag(CTempString tag)
CRef< CSeq_id > GetShortSeq_id(const string &str, bool external=false) const
bool UsesRawIndex() const
bool IncludeAlignTag(CTempString tag)
CRef< CSeq_id > GetRefSeq_id(const string &label) const
TTagList m_IncludedAlignTags
vector< STagInfo > TTagList
unordered_map< string, CRef< CSeq_id > > TRefSeqIds
AutoPtr< TRefSeqIds > m_RefSeqIds
IIdMapper * GetIdMapper(void) const
TSeqPos GetRefSeqLength(const string &str) const
const TTagList & GetIncludedAlignTags() const
size_t CollectPileup(SPileupValues &values, const string &ref_id, CRange< TSeqPos > graph_range, Uint1 map_quality=0, ICollectPileupCallback *callback=0, SPileupValues::EIntronMode intron_mode=SPileupValues::eNoCountIntron, TSeqPos gap_to_intron_threshold=kInvalidSeqPos) const
static bool UseRawIndex(EUseAPI use_api)
CRef< CObjectFor< CBamRawDb > > m_RawDB
unordered_map< string, TSeqPos > TRefSeqLengths
virtual const char * GetErrCodeString(void) const
Translate from the error code value to its string representation.
EErrCode
Error types that CBamXxx classes can generate.
@ eAddRefFailed
AddRef failed.
@ eInvalidArg
Invalid argument error.
@ eInitFailed
Initialization failed.
@ eInvalidBAIFormat
Invalid data in BAM index file.
@ eInvalidBAMFormat
Invalid data in BAM file.
@ eFileNotFound
File not found.
@ eBadCIGAR
Bad CIGAR string.
@ eNullPtr
Null pointer error.
virtual const CException * x_Clone(void) const
Helper clone method.
int TErrCode
Translate from the error code value to its string representation.
virtual const char * GetType(void) const
CBamException(void)
Constructor.
virtual TErrCode GetErrCode(void) const
virtual void ReportExtra(ostream &out) const
Report "non-standard" attributes.
~CBamException(void) noexcept
static void ReportError(const char *msg, rc_t rc)
bool TryGetFlags(Uint2 &flags) const
Uint2 GetFlags(void) const
CBamFileAlign(const CBamAlignIterator &iter)
Int4 GetRefSeqIndex(void) const
const CBamRef< const AlignAccessMgr > & GetAlignAccessMgr() const
const CBamVFSManager & GetVFSManager() const
CBamRef< const AlignAccessMgr > m_AlignAccessMgr
void x_GetString(CBamString &buf, const char *msg, TGetString func) const
CRef< CObjectFor< CBamRawDb > > m_RawDB
CRef< CSeq_id > GetRefSeq_id(void) const
TSeqPos GetLength(void) const
CTempString GetRefSeqId(void) const
bool x_CheckRC(CBamString &buf, rc_t rc, size_t size, const char *msg) const
CRef< CSeq_id > m_CachedRefSeq_id
CBamRefSeqIterator & operator++(void)
void x_InvalidateBuffers(void)
void x_CheckValid(void) const
CBamRefSeqIterator & operator=(const CBamRefSeqIterator &iter)
CRef< SAADBImpl > m_AADBImpl
void x_AllocBuffers(void)
void SetReferencedPointer(TObject *ptr)
TObject ** x_InitPtr(void)
void reserve(size_t min_capacity)
AutoArray< char > m_Buffer
void x_reserve(size_t min_capacity)
Incapsulate compile time information such as __FILE__, __LINE__, NCBI_MODULE, current function.
CNcbiOstrstreamToString class helps convert CNcbiOstrstream to a string Sample usage:
static SIZE_TYPE ReverseComplement(const string &src, TCoding src_coding, TSeqPos pos, TSeqPos length, string &dst)
@ eBadFormat
Invalid SRZ accession format.
@ eNotFound
Accession not found.
virtual const char * GetErrCodeString(void) const override
Get error code interpreted as text.
vector< string > m_VolPath
static string GetDefaultRepPath(void)
void AddRepPath(const string &rep_path)
vector< string > m_RepPath
string FindAccPath(const string &acc, EMissing mising)
void AddVolPath(const string &vol_path)
static string GetDefaultVolPath(void)
CTempString implements a light-weight string on top of a storage buffer whose lifetime management is ...
CUser_object & AddField(const string &label, const string &value, EParseField parse=eParse_String)
add a data field to the user object that holds a given value
General IdMapper interface.
virtual void MapObject(CSerialObject &)=0
Map all embedded IDs in a given object at once.
static void SplitBufferInto4(const int *src, size_t count, int *dest0, int *dest1, int *dest2, int *dest3)
Split source memory buffer into 4 buffers Source buffer contains 4*count elements Each destination bu...
static void Find4MaxElements(const unsigned int *src, size_t count, unsigned int dest[4])
Find maximum values in 4 arrays, or dest Source buffer contains 4*count elements with the following l...
static void ClearBuffer(char *dest, size_t count)
Fill destination memory buffer with zeros.
static void MoveBuffer(const int *src, size_t count, int *dest)
Copy memory buffer when source and destination overlap.
static unsigned int FindMaxElement(const unsigned int *src, size_t count)
Find maximum value in an array.
constexpr auto end(const ct_const_array< T, N > &in) noexcept
static vector< string > arr
std::ofstream out("events_result.xml")
main entry point for tests
static string GetAppName(EAppNameType name_type=eBaseName, int argc=0, const char *const *argv=NULL)
static CNcbiApplicationGuard InstanceGuard(void)
Singleton method.
const CNcbiRegistry & GetConfig(void) const
Get the application's cached configuration parameters (read-only).
unsigned int TSeqPos
Type for sequence locations and lengths.
CVersionInfo GetVersion(void) const
Get the program version information.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
element_type * get(void) const
Get pointer.
const TSeqPos kInvalidSeqPos
Define special value for invalid sequence position.
void reset(element_type *p=0)
Reset will delete the old pointer, set content to the new value, and assume the ownership upon the ne...
const CNcbiDiag &(* FManip)(const CNcbiDiag &)
Diagnostic stream manipulator.
string GetSessionID(void) const
Session ID.
CAtomicCounter::TValue TVersion
bool IsSetSessionID(void) const
static CRequestContext & GetRequestContext(void)
Shortcut to CDiagContextThreadData::GetThreadData().GetRequestContext()
string GetClientIP(void) const
Client IP/hostname.
bool IsSetHitID(EHitIDSource src=eHitID_Any) const
Check if there's an explicit hit id or the default one.
bool IsSetClientIP(void) const
string GetHitID(void) const
Get explicit hit id or the default one (from HTTP_NCBI_PHID etc).
#define ERR_POST(message)
Error posting with file, line number information but without error codes.
TVersion GetVersion(void) const
Return version increased on every context change (hit/subhit id, client ip, session id).
EDiagSev
Severity level for the posted diagnostics.
void Error(CExceptionArgs_Base &args)
TErrCode GetErrCode(void) const
Get error code.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
void Trace(CExceptionArgs_Base &args)
void Warning(CExceptionArgs_Base &args)
void Fatal(CExceptionArgs_Base &args)
#define NCBI_THROW2(exception_class, err_code, message, extra)
Throw exception with extra parameter.
EErrCode
Error types that an application can generate.
#define NCBI_THROW_FMT(exception_class, err_code, message)
The same as NCBI_THROW but with message processed as output to ostream.
virtual const char * GetErrCodeString(void) const
Get error code interpreted as text.
void Info(CExceptionArgs_Base &args)
static string CreateAbsolutePath(const string &path, ERelativeToWhat rtw=eRelativeToCwd)
Get an absolute path from some, possibly relative, path.
static string MakePath(const string &dir=kEmptyStr, const string &base=kEmptyStr, const string &ext=kEmptyStr)
Assemble a path from basic components.
const string AsFastaString(void) const
static SIZE_TYPE ParseIDs(CBioseq::TId &ids, const CTempString &s, TParseFlags flags=fParse_Default)
Parse a string representing one or more Seq-ids, appending the results to IDS.
void GetLabel(string *label, ELabelType type=eDefault, TLabelFlags flags=fLabel_Default) const
Append a label for this Seq-id to the supplied string.
@ eContent
Untagged human-readable accession or the like.
T & GetData(void)
Get data as a reference.
void Reset(void)
Reset reference object.
TObjectType & GetNCObject(void) const
Get object.
#define NCBI_PARAM_TYPE(section, name)
Generate typename for a parameter from its {section, name} attributes.
@ eParam_NoThread
Do not use per-thread values.
uint8_t Uint1
1-byte (8-bit) unsigned integer
int32_t Int4
4-byte (32-bit) signed integer
unsigned char Uchar
Alias for unsigned char.
uint32_t Uint4
4-byte (32-bit) unsigned integer
uint16_t Uint2
2-byte (16-bit) unsigned integer
position_type GetLength(void) const
TThisType & SetFrom(position_type from)
position_type GetToOpen(void) const
virtual bool GetBool(const string §ion, const string &name, bool default_value, TFlags flags=0, EErrAction err_action=eThrow) const
Get boolean value of specified parameter name.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define BEGIN_SCOPE(ns)
Define a new scope.
NCBI_NS_STD::string::size_type SIZE_TYPE
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static bool EndsWith(const CTempString str, const CTempString end, ECase use_case=eCase)
Check if a string ends with a specified suffix value.
static void TruncateSpacesInPlace(string &str, ETrunc where=eTrunc_Both)
Truncate spaces in a string (in-place)
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
const char * data(void) const
Return a pointer to the array represented.
bool empty(void) const
Return true if the represented string is empty (i.e., the length is zero)
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static unsigned int StringToUInt(const CTempString str, TStringToNumFlags flags=0, int base=10)
Convert string to unsigned int.
size_type find(const CTempString match, size_type pos=0) const
Find the first instance of the entire matching string within the current string, beginning at an opti...
static string & ToUpper(string &str)
Convert string to upper case – string& version.
size_type size(void) const
Return the length of the represented array.
virtual string Print(void) const
Print version information.
static const char label[]
TFrom GetFrom(void) const
Get the From member data.
bool IsSetData(void) const
the object itself Check if a value has been assigned to Data data member.
TData & SetData(void)
Assign a value to Data data member.
void SetLabel(TLabel &value)
Assign a value to Label data member.
TStr & SetStr(void)
Select the variant.
void SetType(TType &value)
Assign a value to Type data member.
void SetData(TData &value)
Assign a value to Data data member.
TLens & SetLens(void)
Assign a value to Lens data member.
void SetSegs(TSegs &value)
Assign a value to Segs data member.
vector< ENa_strand > TStrands
vector< TSignedSeqPos > TStarts
void SetType(TType value)
Assign a value to Type data member.
TExt & SetExt(void)
Assign a value to Ext data member.
TStarts & SetStarts(void)
Assign a value to Starts data member.
TStrands & SetStrands(void)
Assign a value to Strands data member.
void SetNumseg(TNumseg value)
Assign a value to Numseg data member.
TIds & SetIds(void)
Assign a value to Ids data member.
@ eType_diags
unbroken, but not ordered, diagonals
ENa_strand
strand of nucleic acid
TGi GetGi(void) const
Get the variant data.
bool IsGi(void) const
Check if variant Gi is selected.
TSet & SetSet(void)
Select the variant.
TSeq & SetSeq(void)
Select the variant.
TSeq_set & SetSeq_set(void)
Assign a value to Seq_set data member.
void SetData(TData &value)
Assign a value to Data data member.
TId & SetId(void)
Assign a value to Id data member.
void SetDesc(TDesc &value)
Assign a value to Desc data member.
TName & SetName(void)
Select the variant.
TUser & SetUser(void)
Select the variant.
list< CRef< CSeq_id > > TId
void SetInst(TInst &value)
Assign a value to Inst data member.
void SetRepr(TRepr value)
Assign a value to Repr data member.
void SetLength(TLength value)
Assign a value to Length data member.
void SetSeq_data(TSeq_data &value)
Assign a value to Seq_data data member.
void SetMol(TMol value)
Assign a value to Mol data member.
@ eRepr_raw
continuous sequence
@ eMol_na
just a nucleic acid
unsigned int
A callback function used to compare two keys in a database.
#define NCBI_DEVELOPMENT_VER
static void hex(unsigned char c)
const struct ncbi::grid::netcache::search::fields::SIZE size
string s_Value(TValue value)
#define NCBI_PACKAGE_NAME
#define NCBI_PACKAGE_VERSION
#define NCBI_SRZ_VOL_PATH
#define NCBI_SRZ_REP_PATH
Defines classes: CDirEntry, CFile, CDir, CSymLink, CMemoryFile, CFileUtil, CFileLock,...
void copy(Njn::Matrix< S > *matrix_, const Njn::Matrix< T > &matrix0_)
double f(double x_, const double &y_)
static const char * prefix[]
static pcre_uint8 * buffer
Defines CRequestContext class for NCBI C++ diagnostic API.
static __m128i _mm_cvtsi32_si128(int a)
static __m128i _mm_srl_epi32(__m128i a, __m128i count)
static void _mm_store_si128(__m128i *p, __m128i a)
static __m128i _mm_load_si128(const __m128i *p)
static __m128i _mm_add_epi32(__m128i a, __m128i b)
static __m128i _mm_set_epi32(int, int, int, int)
static __m128i _mm_set1_epi32(int)
static __m128i _mm_and_si128(__m128i, __m128i)
static const char * str(char *buf, int n)
unsigned __int64 uint64_t
bool x_HasAmbiguousMatch() const
SAADBImpl(const CBamDb::SAADBImpl &db, AlignAccessAlignmentEnumerator *ptr)
CBamRef< AlignAccessAlignmentEnumerator > m_Iter
TSeqPos GetRefSeqPos() const
void x_InvalidateBuffers()
CBamString m_ShortSequence
TObjectIdCache m_ObjectIdLcl
TObjectIdCache m_ObjectIdCIGAR
TObjectIdCache m_ObjectIdRefId
TObjectIdCache m_ObjectIdMateRead
CRef< CUser_object > m_SecondaryIndicator
TObjectIdCache m_ObjectIdHP
CRef< CAnnotdesc > m_MatchAnnotIndicator
TObjectIdCache m_ObjectIdTracebacks
TObjectIdCache m_ObjectIdRefPos
SRawImpl(CObjectFor< CBamRawDb > &db)
CBamString m_ShortSequence
void x_InvalidateBuffers()
SAADBImpl(const CBamMgr &mgr, const string &db_name)
CBamRef< const AlignAccessDB > m_DB
void advance_current_end(TSeqPos ref_end)
void decode_intron(TSeqPos len)
void add_bases_graph_range_raw(TSeqPos pos, TSeqPos end, CTempString read, TSeqPos read_pos)
void update_max_counts(TSeqPos len)
void add_bases_graph_range(TSeqPos pos, TSeqPos end, CTempString read, TSeqPos read_pos)
void finalize(ICollectPileupCallback *callback)
void initialize(CRange< TSeqPos > ref_range, EIntronMode intron_mode=eNoCountIntron)
void advance_current_beg(TSeqPos ref_pos, ICollectPileupCallback *callback)
void decode_gap(TSeqPos len)
void make_split_acgt(TSeqPos len)
static void Delete(const VPath *kpath)
int g(Seg_Gsm *spe, Seq_Mtf *psm, Thd_Gsm *tdg)
static const struct type types[]