m_HaveStrands(
false),
93 row.m_IsSetStrand = is_set_strand;
94 row.m_Strand = strand;
112 row.m_IsSetStrand = is_set_strand;
113 row.m_Strand = strand;
123: m_LocMapper(loc_mapper),
125m_HaveStrands(
false),
127m_ScoresInvalidated(
false),
129m_AlignFlags(eAlign_Normal)
138: m_LocMapper(loc_mapper),
140m_HaveStrands(
false),
142m_ScoresInvalidated(
false),
144m_AlignFlags(eAlign_Normal)
157 template<
classT,
classC1,
classC2>
160 ITERATE(
typenameC1, it, src) {
171 template<
classC1,
classC2>
174 ITERATE(
typenameC1, it, src) {
188CopyContainer<CSeq_align::TScore, TScores>(
245TSegments::iterator ins_it =
261 size_tdim = diag.
GetDim();
262 if(dim != diag.
GetIds().size()) {
284 boolhave_prot =
false;
285 boolhave_nuc =
false;
291CopyContainer<CDense_diag::TScores, TScores>(
294 for(
size_t row= 0;
row< dim; ++
row) {
317 if(have_prot && have_nuc) {
320 "Dense-diags with mixed sequence types are not supported");
333 if(numseg != denseg.
GetLens().size()) {
335numseg =
min(numseg, denseg.
GetLens().size());
353CopyContainer<CDense_seg::TScores, TScores>(
357 boolhave_nuc =
false;
358 boolhave_prot =
false;
365 switch( seq_type ) {
378 if(have_prot && have_nuc) {
380 "Dense-segs with mixed sequence types are not supported");
382 if((have_nuc || have_prot) && !unknown.
empty()) {
392 intwidth = have_prot ? 3 : 1;
394 for(
size_tseg = 0; seg < numseg; seg++) {
406alnseg.
m_Len*= width;
415seglens.reserve(sseg.size());
432 "Locations with mixed seq-ids are not supported " 433 "in std-seg alignments");
436 if(minlen == 0 ||
len== minlen) {
439 else if(maxlen == 0 ||
len== maxlen) {
442 if(minlen > maxlen) {
443 swap(minlen, maxlen);
450 "Rows of the same std-seg have different lengths");
454 if(minlen != 0 && maxlen != 0) {
455 if(minlen*3 != maxlen) {
457 "Inconsistent seq-loc lengths in std-seg rows");
477 if(seqtype != newtype) {
479 "Segment lengths in std-seg alignment are " 480 "inconsistent with sequence types");
499seglens.push_back(maxlen == 0 ? -1 : maxlen);
509 size_tdim = stdseg.
GetDim();
511&& dim != stdseg.
GetIds().size()) {
513dim =
min(dim, stdseg.
GetIds().size());
518 intseg_len = seglens[seg_idx++];
521CopyContainer<CStd_seg::TScores, TScores>(
524 unsigned introw_idx = 0;
536 "Missing or multiple seq-ids in std-seg alignment");
548 boolhave_strand =
false;
549 switch( loc.
Which() ) {
566 "Unsupported seq-loc type in std-seg alignment");
575 if(
len> 0 &&
len!= seg_len) {
579 if(seg_len == -1 && seg.
m_Len== -1) {
587 "Rows have different lengths in std-seg");
609 if(numseg != pseg.
GetLens().size()) {
611numseg =
min(numseg, pseg.
GetLens().size());
632CopyContainer<CPacked_seg::TScores, TScores>(
636 for(
size_tseg = 0; seg < numseg; seg++) {
641 boolhave_nuc =
false;
666 if(have_nuc && seg_width == 3) {
668 "Packed-segs with mixed sequence types are not supported");
671alnseg.
m_Len*= seg_width;
702CopyContainer<CScore_set::Tdata, TScores>(
738 intprod_start, prod_end;
765part_gen_start = gen_start;
766gen_start += seg_len;
770part_gen_start = gen_end;
780part_prod_start = -1;
784part_prod_start = prod_start;
785prod_start += seg_len;
789part_prod_start = prod_end;
793*ex_prod_id, part_prod_start,
m_HaveStrands, ex_prod_strand);
798 TSeqPosseg_len = gen_end - gen_start;
823 if( sparse.
GetRows().size() > 1) {
825 "Sparse-segs with multiple rows are not supported");
827 if( sparse.
GetRows().empty() ) {
832CopyContainer<CSparse_seg::TRow_scores, TScores>(
841 size_tnumseg =
row.GetNumseg();
842 if(numseg !=
row.GetFirst_starts().size()) {
844 "Invalid 'first-starts' size in sparse-align");
845numseg =
min(numseg,
row.GetFirst_starts().size());
847 if(numseg !=
row.GetSecond_starts().size()) {
849 "Invalid 'second-starts' size in sparse-align");
850numseg =
min(numseg,
row.GetSecond_starts().size());
852 if(numseg !=
row.GetLens().size()) {
854numseg =
min(numseg,
row.GetLens().size());
859 "Invalid 'second-strands' size in sparse-align");
860numseg =
min(numseg,
row.GetSecond_strands().size());
871 if(width != second_width) {
873 "Sparse-segs with mixed sequence types are not supported");
876 if(
row.IsSetSeg_scores() ) {
881CopyContainer<CSparse_align::TSeg_scores, TScores>(
885 for(
size_tseg = 0; seg < numseg; seg++) {
890 row.GetFirst_starts()[seg]*width,
894 row.GetSecond_starts()[seg]*width,
916 if( (*it)->m_ScoresInvalidated ) {
937(*it)->Convert(
row);
938 if( (*it)->m_ScoresInvalidated ) {
959 for(
size_trow_idx = 0; row_idx <
m_Dim; ++row_idx) {
970TSegments::iterator seg_it =
m_Segs.begin();
971 for( ; seg_it !=
m_Segs.end(); ) {
972 if(seg_it->m_Rows.size() <=
row) {
985 if(dst_id && dst_id != seg_id &&
1009TSegments::iterator old_it = seg_it;
1019 if(id_it == idmap.
end()) {
1021 returnaln_row.
m_Id;
1024 if( rmap.
empty() ) {
1027 returnaln_row.
m_Id;
1030 typedefvector< CRef<CMappingRange> > TSortedMappings;
1031TSortedMappings mappings;
1033 for( ; rg_it; ++rg_it) {
1034mappings.push_back(rg_it->second);
1044dst_id = mappings[0]->GetDstIdHandle();
1048 if(mappings.size() > 1) {
1049 ITERATE(TSortedMappings, it, mappings) {
1050 if((*it)->GetDstIdHandle() != dst_id) {
1062TSegments::iterator ins_point = seg_it;
1065 boolmapped =
false;
1073 for(
size_tmap_idx = 0; map_idx < mappings.size(); ++map_idx) {
1075 if(!mapping->CanMap(start, stop,
1086 if(mapping->m_Dst_id_Handle != dst_id) {
1090dst_id = mapping->m_Dst_id_Handle;
1092group_idx = mapping->m_Group;
1098 TSeqPosdl = mapping->m_Src_from <= start ?
10990 : mapping->m_Src_from - start;
1100 TSeqPos dr= mapping->m_Src_to >= stop ?
11010 : stop - mapping->m_Src_to;
1105 "Alignment segment can not be mapped without trimming.");
1115 for(
size_t r= 0;
r< seg.
m_Rows.size(); ++
r) {
1121lrow.
m_Id= dst_id;
1139stop -
dr- start + 1, seg.
m_Rows.size(), src_reverse);
1154 for(
size_t r= 0;
r< seg.
m_Rows.size(); ++
r) {
1160mapping->Map_Range(start, stop -
dr);
1161mapping->Map_Strand(
1165mrow.
m_Id= mapping->m_Dst_id_Handle;
1188left_shift += mseg.
m_Len;
1189start += mseg.
m_Len;
1191 if(start > stop)
break;
1204seg.
m_Rows[
row].m_Id = rmap.
begin()->second->m_Dst_id_Handle;
1209 if(start <= stop) {
1212stop - start + 1, seg.
m_Rows.size(), src_reverse);
1215 for(
size_t r= 0;
r< seg.
m_Rows.size(); ++
r) {
1221rrow.
m_Id= dst_id;
1245 size_tmax_rows =
m_Segs.front().m_Rows.size();
1249 if(seg_it->m_Rows.size() > max_rows) {
1250max_rows = seg_it->m_Rows.size();
1254strands.reserve(max_rows);
1255 for(
size_tr_idx = 0; r_idx < max_rows; r_idx++) {
1260 if(seg_it->m_Rows.size() <= r_idx)
continue;
1261 if(seg_it->m_Rows[r_idx].GetSegStart() != -1) {
1262strand = seg_it->m_Rows[r_idx].m_Strand;
1293 "Mapped alignment contains gaps and can not be " 1294 "converted to dense-diag.");
1306 id.Reset(&
const_cast<CSeq_id&
>(*
row->m_Id.GetSeqId()));
1307diag->SetIds().push_back(
id);
1308diag->SetStarts().push_back(
row->GetSegStart()/seq_width);
1314 row->m_Strand : strands[str_idx]);
1319diag->SetLen(seg_it->m_Len/len_width);
1322CloneContainer<CScore, TScores, CDense_diag::TScores>(
1323seg.
m_Scores, diag->SetScores());
1325diags.push_back(diag);
1342CloneContainer<CScore, TScores, CDense_seg::TScores>(
1347 for(
size_t r= 0;
r<
m_Segs.front().m_Rows.size();
r++) {
1348 boolonly_gaps =
true;
1354 id.Reset(&
const_cast<CSeq_id&
>(*
row.m_Id.GetSeqId()));
1355dseg.
SetIds().push_back(
id);
1372 "Mapped denseg contains empty row.");
1379dseg.
SetLens().push_back(seg_it->m_Len/len_width);
1384 if(len_width == 3) {
1391 intstart =
row->GetSegStart();
1414 intnon_gap_count = 0;
1419 boolset_frames =
true;
1421vector< pair<TSeqPos, TSeqPos> > frames;
1422frames.reserve(
m_Segs.size());
1424 if(seg_it->m_Rows.size() != 2) {
1425set_frames =
false;
1432 if(r0_type == r1_type) {
1433set_frames =
false;
1444set_frames =
false;
1449 TSeqPosstart = seg_it->m_Rows[p_row].m_Start;
1453start_frame = start % 3;
1454stop_frame = (start + seg_it->m_Len) % 3;
1456stop_frame = 3 - stop_frame;
1459frames.push_back(pair<TSeqPos, TSeqPos>(start_frame, stop_frame));
1466std_seg->SetDim(
static_cast<CStd_seg::TDim>(seg_it->m_Rows.size()));
1467 if( !seg_it->m_Scores.empty() ) {
1469CloneContainer<CScore, TScores, CStd_seg::TScores>(
1470seg_it->m_Scores, std_seg->SetScores());
1480 id.Reset(&
const_cast<CSeq_id&
>(*
row->m_Id.GetSeqId()));
1481std_seg->SetIds().push_back(
id);
1490loc->
SetInt().SetId(*
id);
1493 TSeqPosstop = (
row->m_Start + seg_it->m_Len)/width;
1500seg_it->m_Rows[1 - p_row];
1501 TSeqPosstart_frame = frames[seg_n].first;
1502 TSeqPosstop_frame = frames[seg_n].second;
1504 swap(start_frame, stop_frame);
1506 if( row_n == p_row ) {
1510 if(g_start < start_frame) {
1525std_seg->SetLoc().pop_back();
1538 if( start_frame ) {
1539 if(start >= start_frame) {
1541loc->
SetInt().SetFuzz_from().SetAlt().push_back(start);
1542start -= start_frame;
1546start += 3 - start_frame;
1550loc->
SetInt().SetFuzz_to().SetAlt().push_back(stop - 1);
1556loc->
SetInt().SetFrom(start);
1559loc->
SetInt().SetTo(stop > start ? stop - 1 : stop);
1560 if(
row->m_IsSetStrand) {
1561loc->
SetInt().SetStrand(
row->m_Strand);
1565std_seg->SetLoc().push_back(loc);
1570 if(seg_it ==
m_Segs.begin() && non_gap_count < 2) {
1574 if( std_seg->GetLoc().empty() )
continue;
1575std_segs.push_back(std_seg);
1577 if(non_gap_count < 2 && !std_segs.empty()) {
1579std_segs.pop_back();
1595CloneContainer<CScore, TScores, CPacked_seg::TScores>(
1602 for(
size_t r= 0;
r<
m_Segs.front().m_Rows.size();
r++) {
1607 id.Reset(&
const_cast<CSeq_id&
>(*
row.m_Id.GetSeqId()));
1608pseg.
SetIds().push_back(
id);
1632 row->m_Strand : strands[str_idx]);
1637pseg.
SetLens().push_back(seg_it->m_Len/len_width);
1650 data.push_back((*it)->GetDstAlign());
1694 if(last_part && last_part->Which() == part_type) {
1698sx_GetExonPartLength(*last_part) + part_len);
1705exon.
SetParts().push_back(last_part);
1720TSegments::const_iterator& seg,
1725 bool& last_exon_partial,
1729 boolpartial_left =
false;
1730 boolpartial_right =
false;
1732 if(seg !=
m_Segs.begin() && last_exon_partial) {
1735exon->SetPartial(
true);
1736partial_left =
true;
1739last_exon_partial =
false;
1741 intprod_start = -1;
1746 boolgstrand_set =
false;
1747 boolpstrand_set =
false;
1748 boolaln_protein =
false;
1749 size_tmapped_gaps = 0;
1750 intnon_gap_gen_start = 0;
1751 intnon_gap_prod_start = 0;
1752 intnon_gap_gen_end = 0;
1753 intnon_gap_prod_end = 0;
1762 boolhave_non_gaps =
false;
1764 for( ; seg !=
m_Segs.end(); ++seg) {
1767 if(group_idx != -1 && seg->m_GroupIdx && seg->m_GroupIdx != group_idx) {
1769partial_right =
true;
1773 if( seg->m_GroupIdx ) {
1774group_idx = seg->m_GroupIdx;
1782 if(seg->m_Rows.size() > 2) {
1784 "Can not construct spliced-seg with more than two rows");
1789 intgend = gstart + seg->m_Len;
1790 intpend = pstart + seg->m_Len;
1796 if(gen_id != gen_row.
m_Id) {
1803gen_id = gen_row.
m_Id;
1813 if(prod_id != prod_row.
m_Id) {
1820prod_id = prod_row.
m_Id;
1832aln_protein =
true;
1836 "Can not map protein product to a sequence " 1837 "of unknown type.");
1857 boolgen_reverse =
false;
1858 boolprod_reverse =
false;
1861 if( !gstrand_set ) {
1863gstrand_set =
true;
1865 else if(gen_strand != gen_row.
m_Strand) {
1867 "Can not construct spliced-seg " 1868 "with different genomic strands in the same exon");
1872 if( gstrand_set ) {
1877 if( !pstrand_set ) {
1879pstrand_set =
true;
1881 else if(prod_strand != prod_row.
m_Strand) {
1883 "Can not construct spliced-seg " 1884 "with different product strands in the same exon");
1888 if( pstrand_set ) {
1899last_exon_partial =
true;
1900exon->SetPartial(
true);
1901partial_right =
true;
1912 if(prod_start >= 0 && prod_end > 0) {
1913 if(!prod_reverse) {
1915 if(pstart < prod_end) {
1917partial_right =
true;
1920 if(pstart > prod_end) {
1922pins_len = pstart - prod_end;
1927 if(pend > prod_start) {
1929partial_right =
true;
1932 if(pend < prod_start) {
1934pins_len = prod_start - pend;
1949 if(gen_start >= 0 && gen_end > 0) {
1952 if(gstart < gen_end) {
1954partial_right =
true;
1957 if(gstart > gen_end) {
1959gins_len = gstart - gen_end;
1964 if(gend > gen_start) {
1966partial_right =
true;
1969 if(gend < gen_start) {
1971gins_len = gen_start - gend;
1979 if(prod_start < 0 || prod_start > pstart) {
1980prod_start = pstart;
1982 if(prod_end < pend) {
1988 if(gen_start < 0 || gen_start > gstart) {
1991 if(gen_end < gend) {
1998 if( !exon->GetParts().empty() ) {
2004 if( !exon->GetParts().empty() ) {
2013have_non_gaps =
true;
2017 if(!is_gap || !exon->GetParts().empty() || orig_ptype == ptype) {
2018 size_told_size = exon->GetParts().size();
2022 if(is_gap && orig_ptype != ptype) {
2024mapped_gaps += exon->GetParts().size() - old_size;
2030non_gap_prod_start = prod_start;
2031non_gap_gen_start = gen_start;
2032non_gap_prod_end = prod_end;
2033non_gap_gen_end = gen_end;
2038 if( !gen_reverse ) {
2039gen_start += seg->m_Len;
2042gen_end -= seg->m_Len;
2046 if( !prod_reverse ) {
2047prod_start += seg->m_Len;
2050prod_end -= seg->m_Len;
2057 if(mapped_gaps > 0) {
2059 _ASSERT(parts.size() >= mapped_gaps);
2060 for(; mapped_gaps > 0; mapped_gaps--) {
2063gen_start = non_gap_gen_start;
2064prod_start = non_gap_prod_start;
2065gen_end = non_gap_gen_end;
2066prod_end = non_gap_prod_end;
2070 if(!have_non_gaps || exon->GetParts().empty()) {
2073last_exon_partial =
true;
2074 if(!spliced.
GetExons().empty()) {
2093exon->SetAcceptor_before_exon().Assign(
2098exon->SetDonor_after_exon().Assign(
2105exon->SetAcceptor_before_exon().Assign(
2110exon->SetDonor_after_exon().Assign(
2116 if(!gen_id && last_gen_id) {
2117gen_id = last_gen_id;
2120 if(!prod_id && last_prod_id) {
2121prod_id = last_prod_id;
2125exon->SetGenomic_start(gen_start);
2126exon->SetGenomic_end(gen_end - 1);
2128exon->SetGenomic_strand(gen_strand);
2130 if( aln_protein ) {
2132exon->SetProduct_start().SetProtpos().SetAmin(prod_start/3);
2133exon->SetProduct_start().SetProtpos().SetFrame(prod_start%3 + 1);
2134exon->SetProduct_end().SetProtpos().SetAmin((prod_end - 1)/3);
2135exon->SetProduct_end().SetProtpos().SetFrame((prod_end - 1)%3 + 1);
2138exon->SetProduct_start().SetNucpos(prod_start);
2139exon->SetProduct_end().SetNucpos(prod_end - 1);
2141exon->SetProduct_strand(prod_strand);
2148CloneContainer<CScore, TScores, CScore_set::Tdata>(
2153CloneContainer<CUser_object, CSpliced_exon::TExt, CSpliced_exon::TExt>(
2157spliced.
SetExons().push_back(exon);
2165 bool& last_exon_partial,
2168 bool& single_gen_id,
2170 bool& single_gen_str,
2173 bool& single_prod_id,
2175 bool& single_prod_str,
2176 bool& partial)
const 2178TSegments::const_iterator seg = sub_align.
m_Segs.begin();
2184 while(seg != sub_align.
m_Segs.end()) {
2189 booladded_exon = sub_align.
x_GetDstExon(spliced, seg, ex_gen_id, ex_prod_id,
2190ex_gen_strand, ex_prod_strand, last_exon_partial,
2191last_gen_id, last_prod_id);
2192partial = partial || last_exon_partial;
2197last_gen_id = ex_gen_id;
2202single_gen_id &= gen_id == ex_gen_id;
2207prod_id = ex_prod_id;
2210single_prod_id &= prod_id == ex_prod_id;
2216(gen_strand == ex_gen_strand);
2217gen_strand = ex_gen_strand;
2224(prod_strand == ex_prod_strand);
2225prod_strand = ex_prod_strand;
2245 boolsingle_gen_id =
true;
2246 boolsingle_gen_str =
true;
2247 boolsingle_prod_id =
true;
2248 boolsingle_prod_str =
true;
2249 boolpartial =
false;
2250 boollast_exon_partial =
false;
2260 swap(gen_row, prod_row);
2264last_exon_partial, gen_id, last_gen_id, single_gen_id,
2265gen_strand, single_gen_str,
2266prod_id, last_prod_id, single_prod_id,
2267prod_strand, single_prod_str,
2273last_exon_partial, gen_id, last_gen_id, single_gen_id,
2274gen_strand, single_gen_str,
2275prod_id, last_prod_id, single_prod_id,
2276prod_strand, single_prod_str,
2286 boolex_gen_reverse =
false;
2287 boolex_prod_reverse =
false;
2288 if( exon->IsSetGenomic_strand() ) {
2289ex_gen_reverse =
IsReverse(exon->GetGenomic_strand());
2294 if( exon->IsSetProduct_strand() ) {
2295ex_prod_reverse =
IsReverse(exon->GetProduct_strand());
2300 TSeqPosgen_start = exon->GetGenomic_start();
2301 TSeqPosgen_end = exon->GetGenomic_end();
2304 _ASSERT(exon->GetProduct_start().IsProtpos());
2305 _ASSERT(exon->GetProduct_end().IsProtpos());
2306prod_start = exon->GetProduct_start().GetProtpos().GetAmin()*3
2307+ exon->GetProduct_start().GetProtpos().GetFrame() - 1;
2308prod_end = exon->GetProduct_end().GetProtpos().GetAmin()*3
2309+ exon->GetProduct_end().GetProtpos().GetFrame() - 1;
2312 _ASSERT(exon->GetProduct_start().IsNucpos());
2313 _ASSERT(exon->GetProduct_end().IsNucpos());
2314prod_start = exon->GetProduct_start().GetNucpos();
2315prod_end = exon->GetProduct_end().GetNucpos();
2317 while(
IsExonGap(exon->GetParts().front()->Which()) ) {
2320 if( ex_gen_reverse ) {
2328 if( ex_prod_reverse ) {
2335exon->SetParts().pop_front();
2337exon->SetGenomic_start(gen_start);
2338exon->SetGenomic_end(gen_end);
2340exon->SetProduct_start().SetProtpos().SetAmin(prod_start/3);
2341exon->SetProduct_start().SetProtpos().SetFrame(prod_start%3 + 1);
2342exon->SetProduct_end().SetProtpos().SetAmin(prod_end/3);
2343exon->SetProduct_end().SetProtpos().SetFrame(prod_end%3 + 1);
2346exon->SetProduct_start().SetNucpos(prod_start);
2347exon->SetProduct_end().SetNucpos(prod_end);
2350exon = spliced.
SetExons().back();
2351ex_gen_reverse =
false;
2352ex_prod_reverse =
false;
2353 if( exon->IsSetGenomic_strand() ) {
2354ex_gen_reverse =
IsReverse(exon->GetGenomic_strand());
2359 if( exon->IsSetProduct_strand() ) {
2360ex_prod_reverse =
IsReverse(exon->GetProduct_strand());
2365gen_start = exon->GetGenomic_start();
2366gen_end = exon->GetGenomic_end();
2368 _ASSERT(exon->GetProduct_start().IsProtpos());
2369 _ASSERT(exon->GetProduct_end().IsProtpos());
2370prod_start = exon->GetProduct_start().GetProtpos().GetAmin()*3
2371+ exon->GetProduct_start().GetProtpos().GetFrame() - 1;
2372prod_end = exon->GetProduct_end().GetProtpos().GetAmin()*3
2373+ exon->GetProduct_end().GetProtpos().GetFrame() - 1;
2376 _ASSERT(exon->GetProduct_start().IsNucpos());
2377 _ASSERT(exon->GetProduct_end().IsNucpos());
2378prod_start = exon->GetProduct_start().GetNucpos();
2379prod_end = exon->GetProduct_end().GetNucpos();
2381 while(
IsExonGap(exon->GetParts().back()->Which()) ) {
2384 if( ex_gen_reverse ) {
2392 if( ex_prod_reverse ) {
2399exon->SetParts().pop_back();
2401exon->SetGenomic_start(gen_start);
2402exon->SetGenomic_end(gen_end);
2404exon->SetProduct_start().SetProtpos().SetAmin(prod_start/3);
2405exon->SetProduct_start().SetProtpos().SetFrame(prod_start%3 + 1);
2406exon->SetProduct_end().SetProtpos().SetAmin(prod_end/3);
2407exon->SetProduct_end().SetProtpos().SetFrame(prod_end%3 + 1);
2410exon->SetProduct_start().SetNucpos(prod_start);
2411exon->SetProduct_end().SetNucpos(prod_end);
2418single_gen_id =
false;
2422single_prod_id =
false;
2424 if( single_gen_id ) {
2430 if( single_prod_id ) {
2444 if( mapped_it->
IsNull() ) {
2446mapped_it->
Assign(**it);
2448 bounds.push_back(mapped_it);
2455 if( single_gen_id ) {
2456(*it)->ResetGenomic_id();
2458 else if( gen_id && !(*it)->IsSetGenomic_id() ) {
2462 if( single_prod_id ) {
2463(*it)->ResetProduct_id();
2465 else if( prod_id && !(*it)->IsSetProduct_id() ) {
2467(*it)->SetProduct_id(
const_cast<CSeq_id&
>(*prod_id.
GetSeqId()));
2469 if( single_gen_str ) {
2470(*it)->ResetGenomic_strand();
2472 if( single_prod_str ) {
2473(*it)->ResetProduct_strand();
2480 if(
orig.IsSetPoly_a() ) {
2483 if(
orig.IsSetProduct_length() ) {
2488 if(!partial &&
orig.IsSetModifiers()) {
2503CloneContainer<CScore, TScores, CSparse_seg::TRow_scores>(
2507sparse.
SetRows().push_back(aln);
2519 if(seg->m_Rows.size() > 2) {
2521 "Can not construct sparse-seg with more than two ids");
2529 if(first_start < 0 || second_start < 0) {
2535 if(first_idh != first_row.
m_Id) {
2537 "Can not construct sparse-seg with multiple ids per row");
2541first_idh = first_row.
m_Id;
2545 if(second_idh != second_row.
m_Id) {
2547 "Can not construct sparse-seg with multiple ids per row");
2551second_idh = second_row.
m_Id;
2559 intfirst_width = first_prot ? 3 : 1;
2560 intsecond_width = second_prot ? 3 : 1;
2563 intlen_width = (first_prot || second_prot) ? 3 : 1;
2565aln->SetFirst_starts().push_back(first_start/first_width);
2566aln->SetSecond_starts().push_back(second_start/second_width);
2567aln->SetLens().push_back(seg->m_Len/len_width);
2570 if(aln->IsSetSecond_strands() ||
2573 for(
size_t i= aln->SetSecond_strands().size();
i< s;
i++) {
2580aln->SetSecond_strands().push_back(
IsForward(first_strand)
2581? second_strand :
Reverse(second_strand));
2585 if(scores_group == -2) {
2586scores_group = seg->m_ScoresGroupIdx;
2588 else if(scores_group != seg->m_ScoresGroupIdx) {
2594 if(scores_group >= 0) {
2595CloneContainer<CScore, TScores, CSparse_align::TSeg_scores>(
2607 size_tstart_seg)
const 2617TSegments::const_iterator start_seg_it =
m_Segs.begin();
2618 for(
size_ts = 0; s < start_seg && start_seg_it !=
m_Segs.end();
2619s++, start_seg_it++) {
2621 if(start_seg_it ==
m_Segs.end()) {
2627 size_tnum_rows = start_segment.
m_Rows.size();
2628 autolast_seg =
m_Segs.size() - 1;
2633vector<CSeq_id_Handle> ids;
2635ids.resize(num_rows);
2636 for(
size_t r= 0;
r< num_rows;
r++) {
2638TSegments::const_iterator seg_it = start_seg_it;
2639 autoseg_idx = start_seg;
2642 for( ; seg_idx <= last_seg && seg_it !=
m_Segs.end();
2643seg_idx++, seg_it++) {
2645 if(seg_it->m_Rows.size() != num_rows) {
2647last_seg = seg_idx - 1;
2652 if(last_id && last_id !=
row.m_Id) {
2653last_seg = seg_idx - 1;
2657last_id =
row.m_Id;
2658ids[
r] =
row.m_Id;
2661 intseg_start =
row.GetSegStart();
2662 intseg_stop = seg_start == -1 ? -1 : seg_start + seg_it->m_Len;
2663 if(seg_start != -1) {
2666 if(
row.m_IsSetStrand ) {
2667strands[
r] =
row.m_Strand;
2672last_seg = seg_idx - 1;
2683 if(seg_stop > left) {
2684last_seg = seg_idx - 1;
2690 if(seg_start < right) {
2691last_seg = seg_idx - 1;
2701 _ASSERT(last_seg >= start_seg);
2704 for(
size_t i= 0;
i< num_rows;
i++) {
2707dseg.
SetIds().push_back(
id);
2721vector<size_t> segs_per_row(num_rows, 0);
2724 intnon_empty_segs = 0;
2725 autocur_seg = start_seg;
2726 for(TSegments::const_iterator it = start_seg_it; it !=
m_Segs.end();
2728 if(cur_seg > last_seg) {
2732 boolonly_gaps =
true;
2733 for(
size_t row= 0;
row< it->m_Rows.size();
row++) {
2735segs_per_row[
row]++;
2739 if(only_gaps)
continue;
2742dseg.
SetLens().push_back(it->m_Len/len_width);
2755 intstart =
row->GetSegStart();
2770 if(non_empty_segs == 0) {
2775 ITERATE(vector<size_t>,
row, segs_per_row) {
2786 returnlast_seg + 1;
2805 if(!dseg)
continue;
2806 data.push_back(dseg);
2814 boolhave_prot =
false;
2815 boolhave_nuc =
false;
2827 if(have_prot && have_nuc)
return true;
2842 for(
size_t r= 0;
r< seg->m_Rows.size(); ++
r) {
2843 if(
r>= strands.size()) {
2848 if(
row.GetSegStart() == -1) {
2852 if(
row.m_IsSetStrand ) {
2853strands[
r] =
row.m_Strand;
2869 if( !
m_Segs.empty() ) {
2872 if(seg->m_Rows.size() < 2)
continue;
2876 if(++non_empty >= 2) {
2884 if( !(*sub)->x_IsEmpty() )
return false;
2903 "Mapping resulted in an empty alignment, " 2904 "can not initialize Seq-align.");
2908TSegments::iterator seg =
m_Segs.begin();
2909vector<CSeq_id_Handle> row_ids;
2910 for( ; seg !=
m_Segs.end(); ++seg) {
2911 if(row_ids.size() < seg->m_Rows.size()) {
2912row_ids.resize(seg->m_Rows.size());
2914 for(
size_t r= 0;
r< seg->m_Rows.size();
r++) {
2918row_ids[
r] =
row.m_Id;
2922 if( !row_ids[
r] ) {
2924TSegments::iterator fwd = seg;
2926 for( ; fwd !=
m_Segs.end(); ++fwd) {
2927 if(fwd->m_Rows.size() <=
r)
continue;
2930row_ids[
r] = fwd_row.
m_Id;
2935 if( row_ids[
r] ) {
2936 row.m_Id = row_ids[
r];
2950CloneContainer<CScore, TScores, CSeq_align::TScore>(
2954CloneContainer<CSeq_loc, CSeq_align::TBounds, CSeq_align::TBounds>(
2958CloneContainer<CObject_id, CSeq_align::TId, CSeq_align::TId>(
2962CloneContainer<CUser_object, CSeq_align::TExt, CSeq_align::TExt>(
2971row_ids.size() == 2 &&
2994 switch( orig_choice ) {
3065unique_ptr<CSeq_align_Mapper_Base> sub(
3067sub->InitExon(spliced, exon);
3068 returnsub.release();
3074 if(
m_Segs.empty() || idx >=
m_Segs.begin()->m_Rows.size() ) {
3076 "Invalid row index");
3078 return m_Segs.begin()->m_Rows[idx].m_Id;
bool IsForward(ENa_strand s)
bool IsReverse(ENa_strand s)
ENa_strand Reverse(ENa_strand s)
bool SameOrientation(ENa_strand a, ENa_strand b)
Seq-loc and seq-align mapper exceptions.
Class used to map seq-alignments.
CSeq_loc_Mapper_Base & m_LocMapper
void x_PushExonPart(CRef< CSpliced_exon_chunk > &last_part, CSpliced_exon_chunk::E_Choice part_type, int part_len, CSpliced_exon &exon) const
void x_ConvToDstDisc(CRef< CSeq_align > &dst) const
CSeq_align::C_Segs::TDendiag TDendiag
void x_GetDstSparse(CRef< CSeq_align > &dst) const
CRef< CSeq_align > GetDstAlign(void) const
Create mapped alignment.
CSeq_align_Mapper_Base(const CSeq_align &align, CSeq_loc_Mapper_Base &loc_mapper)
void Convert(void)
Map the whole alignment through the linked seq-loc mapper.
bool x_HaveMixedStrand(void) const
void x_InvalidateScores(SAlignment_Segment *seg=NULL)
void x_GetDstDenseg(CRef< CSeq_align > &dst) const
void x_GetDstDisc(CRef< CSeq_align > &dst) const
vector< CRef< CSeq_align_Mapper_Base > > TSubAligns
void x_FillKnownStrands(TStrands &strands) const
bool x_GetDstExon(CSpliced_seg &spliced, TSegments::const_iterator &seg, CSeq_id_Handle &gen_id, CSeq_id_Handle &prod_id, ENa_strand &gen_strand, ENa_strand &prod_strand, bool &last_exon_partial, const CSeq_id_Handle &last_gen_id, const CSeq_id_Handle &last_prod_id) const
SAlignment_Segment & x_InsertSeg(TSegments::iterator &where, int len, size_t dim, bool reverse)
void InitExon(const CSpliced_seg &spliced, const CSpliced_exon &exon)
bool x_IsEmpty(void) const
void x_ConvertRow(size_t row)
bool x_HaveMixedSeqTypes(void) const
void x_GetDstDendiag(CRef< CSeq_align > &dst) const
CConstRef< CSpliced_exon > m_OrigExon
vector< ENa_strand > TStrands
CRef< CSeq_align > m_DstAlign
~CSeq_align_Mapper_Base(void)
void x_GetDstSplicedSubAlign(CSpliced_seg &spliced, const CSeq_align_Mapper_Base &sub_align, bool &last_exon_partial, CSeq_id_Handle &gen_id, CSeq_id_Handle &last_gen_id, bool &single_gen_id, ENa_strand &gen_strand, bool &single_gen_str, CSeq_id_Handle &prod_id, CSeq_id_Handle &last_prod_id, bool &single_prod_id, ENa_strand &prod_strand, bool &single_prod_str, bool &partial) const
void x_ConvertAlign(size_t *row)
void x_GetDstStd(CRef< CSeq_align > &dst) const
CConstRef< CSeq_align > m_OrigAlign
TScoresGroups m_GroupScores
CSeq_align::C_Segs::TStd TStd
ssize_t x_GetPartialDenseg(CRef< CSeq_align > &dst, size_t start_seg) const
void x_Init(const CSeq_align &align)
const CSeq_id_Handle & GetRowId(size_t idx) const
Get seq-id for the given row.
virtual CSeq_align_Mapper_Base * CreateSubAlign(const CSeq_align &align)
void x_GetDstPacked(CRef< CSeq_align > &dst) const
void x_GetDstSpliced(CRef< CSeq_align > &dst) const
CSeq_id_Handle x_ConvertSegment(TSegments::iterator &seg_it, size_t row)
SAlignment_Segment & x_PushSeg(int len, size_t dim, ENa_strand strand=eNa_strand_unknown)
list< SAlignment_Segment > TSegments
CSeq_loc_Mapper_Base â.
CSpliced_seg_modifier â.
const_iterator end() const
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
static const char * bounds[]
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
const TSeqPos kInvalidSeqPos
Define special value for invalid sequence position.
void swap(NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair1, NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair2)
#define ERR_POST_X(err_subcode, message)
Error posting with default error code and given error subcode.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
void Warning(CExceptionArgs_Base &args)
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
CConstRef< CSeq_id > GetSeqId(void) const
static CSeq_id_Handle GetHandle(const CSeq_id &id)
Normal way of getting a handle, works for any seq-id.
ENa_strand GetStrand(void) const
Get the location's strand.
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Override Assign() to incorporate cache invalidation.
TRange GetTotalRange(void) const
const CSeq_id * GetId(void) const
Get the id of the location return NULL if has multiple ids or no id at all.
CRef< CSeq_loc > Map(const CSeq_loc &src_loc)
Map seq-loc.
ESeqType GetSeqTypeById(const CSeq_id_Handle &idh) const
Methods for getting sequence types, use cached types (m_SeqTypes) if possible.
const TIdMap & GetIdMap() const
void SetSeqTypeById(const CSeq_id_Handle &idh, ESeqType seqtype) const
Methods for setting sequence types.
bool x_IsSetMiscFlag(EMiscFlags flag) const
static TSeqPos sx_GetExonPartLength(const CSpliced_exon_chunk &part)
CRef< CMappingRanges > m_Mappings
const CSeq_id_Handle & x_GetPrimaryId(const CSeq_id_Handle &synonym) const
TIdMap::const_iterator TIdIterator
void x_AdjustSeqTypesToProt(const CSeq_id_Handle &idh)
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
void Reset(void)
Reset reference object.
void Reset(void)
Reset reference object.
position_type GetLength(void) const
const_iterator begin(void) const
#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.
TFrom GetFrom(void) const
Get the From member data.
const TScores & GetScores(void) const
Get the Scores member data.
bool IsSetProduct_strand(void) const
should be 'plus' or 'minus' Check if a value has been assigned to Product_strand data member.
const TDonor_after_exon & GetDonor_after_exon(void) const
Get the Donor_after_exon member data.
const TExt & GetExt(void) const
Get the Ext member data.
const TId & GetId(void) const
Get the Id member data.
const TDenseg & GetDenseg(void) const
Get the variant data.
TModifiers & SetModifiers(void)
Assign a value to Modifiers data member.
TId & SetId(void)
Assign a value to Id data member.
bool IsSetProduct_type(void) const
Check if a value has been assigned to Product_type data member.
TScore & SetScore(void)
Assign a value to Score data member.
vector< CRef< CSeq_loc > > TLoc
const TScores & GetScores(void) const
Get the Scores member data.
TRow_scores & SetRow_scores(void)
Assign a value to Row_scores data member.
bool IsProtpos(void) const
Check if variant Protpos is selected.
E_Choice
Choice variants.
TLens & SetLens(void)
Assign a value to Lens data member.
const TGenomic_id & GetGenomic_id(void) const
Get the Genomic_id member data.
bool IsSetBounds(void) const
regions of sequence over which align was computed Check if a value has been assigned to Bounds data m...
E_Choice Which(void) const
Which variant is currently selected.
bool IsSetParts(void) const
basic seqments always are in biologic order Check if a value has been assigned to Parts data member.
list< CRef< CStd_seg > > TStd
TPresent & SetPresent(void)
Assign a value to Present data member.
bool IsSetId(void) const
alignment id Check if a value has been assigned to Id data member.
bool IsSetStrands(void) const
Check if a value has been assigned to Strands data member.
TProduct_ins & SetProduct_ins(void)
Select the variant.
void SetProduct_id(TProduct_id &value)
Assign a value to Product_id data member.
E_Choice
Choice variants.
bool IsSetExt(void) const
extra info Check if a value has been assigned to Ext data member.
bool IsSetProduct_strand(void) const
should be 'plus' or 'minus' Check if a value has been assigned to Product_strand data member.
const TStarts & GetStarts(void) const
Get the Starts member data.
const TStarts & GetStarts(void) const
Get the Starts member data.
TStarts & SetStarts(void)
Assign a value to Starts data member.
TDim GetDim(void) const
Get the Dim member data.
const TProduct_id & GetProduct_id(void) const
Get the Product_id member data.
bool IsSetScores(void) const
score for each seg Check if a value has been assigned to Scores data member.
TGenomic_start GetGenomic_start(void) const
Get the Genomic_start member data.
const TProduct_id & GetProduct_id(void) const
Get the Product_id member data.
const TAcceptor_before_exon & GetAcceptor_before_exon(void) const
Get the Acceptor_before_exon member data.
void SetSegs(TSegs &value)
Assign a value to Segs data member.
const TLens & GetLens(void) const
Get the Lens member data.
TDiag & SetDiag(void)
Select the variant.
bool IsSetAcceptor_before_exon(void) const
splice sites Check if a value has been assigned to Acceptor_before_exon data member.
TExons & SetExons(void)
Assign a value to Exons data member.
void SetProduct_strand(TProduct_strand value)
Assign a value to Product_strand data member.
const TIds & GetIds(void) const
Get the Ids member data.
TScores & SetScores(void)
Assign a value to Scores data member.
TScores & SetScores(void)
Assign a value to Scores data member.
bool IsSetScores(void) const
score for each segment Check if a value has been assigned to Scores data member.
TNumseg GetNumseg(void) const
Get the Numseg member data.
void SetProduct_length(TProduct_length value)
Assign a value to Product_length data member.
TLen GetLen(void) const
Get the Len member data.
void SetDim(TDim value)
Assign a value to Dim data member.
TProduct_type GetProduct_type(void) const
Get the Product_type member data.
TRows & SetRows(void)
Assign a value to Rows data member.
void SetDim(TDim value)
Assign a value to Dim data member.
TGenomic_strand GetGenomic_strand(void) const
Get the Genomic_strand member data.
bool IsSetStrands(void) const
Check if a value has been assigned to Strands data member.
void SetDim(TDim value)
Assign a value to Dim data member.
bool IsSetGenomic_strand(void) const
genomic-strand represents the strand of translation Check if a value has been assigned to Genomic_str...
const TScores & GetScores(void) const
Get the Scores member data.
bool IsSetProduct_id(void) const
product is either protein or transcript (cDNA) Check if a value has been assigned to Product_id data ...
void SetType(TType value)
Assign a value to Type data member.
const TParts & GetParts(void) const
Get the Parts member data.
const TProduct_start & GetProduct_start(void) const
Get the Product_start member data.
void ResetDonor_after_exon(void)
Reset Donor_after_exon data member.
TMismatch & SetMismatch(void)
Select the variant.
TDim GetDim(void) const
Get the Dim member data.
const TIds & GetIds(void) const
Get the Ids member data.
const TProduct_end & GetProduct_end(void) const
Get the Product_end member data.
bool IsSetProduct_id(void) const
product is either protein or transcript (cDNA) Check if a value has been assigned to Product_id data ...
const TSpliced & GetSpliced(void) const
Get the variant data.
bool IsSetIds(void) const
Check if a value has been assigned to Ids data member.
TIds & SetIds(void)
Assign a value to Ids data member.
TDim GetDim(void) const
Get the Dim member data.
list< CRef< CSpliced_seg_modifier > > TModifiers
const TLens & GetLens(void) const
Get the Lens member data.
list< CRef< CSeq_loc > > TBounds
bool IsGenomic_ins(void) const
Check if variant Genomic_ins is selected.
const TPacked & GetPacked(void) const
Get the variant data.
bool IsSetExt(void) const
extra info Check if a value has been assigned to Ext data member.
TGenomic_ins GetGenomic_ins(void) const
Get the variant data.
TExt & SetExt(void)
Assign a value to Ext data member.
bool IsSetScores(void) const
Check if a value has been assigned to Scores data member.
bool IsSetGenomic_strand(void) const
Check if a value has been assigned to Genomic_strand data member.
const TStd & GetStd(void) const
Get the variant data.
const TScores & GetScores(void) const
Get the Scores member data.
TStarts & SetStarts(void)
Assign a value to Starts data member.
void SetPartial(TPartial value)
Assign a value to Partial data member.
const TIds & GetIds(void) const
Get the Ids member data.
void SetProduct_type(TProduct_type value)
Assign a value to Product_type data member.
TStrands & SetStrands(void)
Assign a value to Strands data member.
list< CRef< CSpliced_exon > > TExons
const TExons & GetExons(void) const
Get the Exons member data.
void SetPoly_a(TPoly_a value)
Assign a value to Poly_a data member.
TDim GetDim(void) const
Get the Dim member data.
void SetNumseg(TNumseg value)
Assign a value to Numseg data member.
const TDendiag & GetDendiag(void) const
Get the variant data.
TGenomic_strand GetGenomic_strand(void) const
Get the Genomic_strand member data.
bool IsSetStrands(void) const
Check if a value has been assigned to Strands data member.
const TPresent & GetPresent(void) const
Get the Present member data.
TGenomic_ins & SetGenomic_ins(void)
Select the variant.
void ResetAcceptor_before_exon(void)
Reset Acceptor_before_exon data member.
TType GetType(void) const
Get the Type member data.
TProduct_strand GetProduct_strand(void) const
Get the Product_strand member data.
TParts & SetParts(void)
Assign a value to Parts data member.
void SetGenomic_id(TGenomic_id &value)
Assign a value to Genomic_id data member.
bool IsSetDim(void) const
dimensionality Check if a value has been assigned to Dim data member.
void SetNumseg(TNumseg value)
Assign a value to Numseg data member.
const TStrands & GetStrands(void) const
Get the Strands member data.
const TRow_scores & GetRow_scores(void) const
Get the Row_scores member data.
const TIds & GetIds(void) const
Get the Ids member data.
const TExt & GetExt(void) const
Get the Ext member data.
const TStrands & GetStrands(void) const
Get the Strands member data.
list< CRef< CSpliced_exon_chunk > > TParts
TMatch & SetMatch(void)
Select the variant.
bool IsSetScore(void) const
for whole alignment Check if a value has been assigned to Score data member.
TGenomic_end GetGenomic_end(void) const
Get the Genomic_end member data.
const TStarts & GetStarts(void) const
Get the Starts member data.
void SetGenomic_strand(TGenomic_strand value)
Assign a value to Genomic_strand data member.
bool IsSpliced(void) const
Check if variant Spliced is selected.
TNumseg GetNumseg(void) const
Get the Numseg member data.
TProduct_strand GetProduct_strand(void) const
Get the Product_strand member data.
list< CRef< CSeq_align > > Tdata
const TSparse & GetSparse(void) const
Get the variant data.
TIds & SetIds(void)
Assign a value to Ids data member.
bool IsSetGenomic_id(void) const
Check if a value has been assigned to Genomic_id data member.
bool IsProduct_ins(void) const
Check if variant Product_ins is selected.
const TScore & GetScore(void) const
Get the Score member data.
TBounds & SetBounds(void)
Assign a value to Bounds data member.
TDim GetDim(void) const
Get the Dim member data.
const TScores & GetScores(void) const
Get the Scores member data.
const TRows & GetRows(void) const
Get the Rows member data.
TProduct_ins GetProduct_ins(void) const
Get the variant data.
const TDisc & GetDisc(void) const
Get the variant data.
const TStrands & GetStrands(void) const
Get the Strands member data.
const Tdata & Get(void) const
Get the member data.
TStrands & SetStrands(void)
Assign a value to Strands data member.
const TSegs & GetSegs(void) const
Get the Segs member data.
bool IsSetScores(void) const
Check if a value has been assigned to Scores data member.
const TGenomic_id & GetGenomic_id(void) const
Get the Genomic_id member data.
bool IsSetDonor_after_exon(void) const
Check if a value has been assigned to Donor_after_exon data member.
bool IsSetRow_scores(void) const
per-row scores Check if a value has been assigned to Row_scores data member.
TLens & SetLens(void)
Assign a value to Lens data member.
const TBounds & GetBounds(void) const
Get the Bounds member data.
bool IsSetGenomic_id(void) const
Check if a value has been assigned to Genomic_id data member.
bool IsSetScores(void) const
scores for this exon Check if a value has been assigned to Scores data member.
E_Choice Which(void) const
Which variant is currently selected.
@ e_Product_ins
insertion in product sequence (i.e. gap in the genomic sequence)
@ e_Diag
both sequences are represented, there is sufficient similarity between product and genomic sequences....
@ e_Genomic_ins
insertion in genomic sequence (i.e. gap in the product sequence)
@ e_Match
both sequences represented, product and genomic sequences match
@ e_not_set
No variant selected.
@ e_Mismatch
both sequences represented, product and genomic sequences do not match
@ eType_partial
mapping pieces together
@ eProduct_type_transcript
ENa_strand
strand of nucleic acid
const TPnt & GetPnt(void) const
Get the variant data.
E_Choice Which(void) const
Which variant is currently selected.
bool IsSetStrand(void) const
Check if a value has been assigned to Strand data member.
bool IsSetStrand(void) const
Check if a value has been assigned to Strand data member.
bool IsWhole(void) const
Check if variant Whole is selected.
const TInt & GetInt(void) const
Get the variant data.
bool IsNull(void) const
Check if variant Null is selected.
@ e_Empty
to NULL one Seq-id in a collection
unsigned int
A callback function used to compare two keys in a database.
Definition of all error codes used in objects libraries.
where boath are integers</td > n< td ></td > n</tr > n< tr > n< td > tse</td > n< td > optional</td > n< td > String</td > n< td class=\"description\"> TSE option controls what blob is orig
constexpr auto sort(_Init &&init)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
static bool GetSeqId(const T &d, set< string > &labels, const string name="", bool detect=false, bool found=false)
bool IsExonGap(CSpliced_exon_chunk::E_Choice chunk_type)
void CopyContainer(const C1 &src, C2 &dst)
void SetPartLength(CSpliced_exon_chunk &part, CSpliced_exon_chunk::E_Choice ptype, TSeqPos len)
void CloneContainer(const C1 &src, C2 &dst)
#define row(bind, expected)
Single row of a single alignment segment.
ENa_strand m_Strand
Strand value.
TSeqPos m_Start
kInvalidSeqPos means gap
CSeq_id_Handle m_Id
Row's seq-id.
int GetSegStart(void) const
Get segment start or -1 if it's a gap.
bool m_IsSetStrand
Is strand set for the row?
bool SameStrand(const SAlignment_Row &r) const
Check if the query row has the same strand orientation.
bool m_Mapped
Flag indicating mapped rows.
void SetMapped(void)
Mark the row as mapped.
Structure to hold information about a single alignment segment.
vector< SAlignment_Row > TRows
TRows m_Rows
Segment rows.
SAlignment_Row & CopyRow(size_t idx, const SAlignment_Row &src_row)
Create a copy of the given row, store is to this segment as row number 'idx'.
TScores m_Scores
Scores for this segment.
ssize_t m_ScoresGroupIdx
Group of scores.
bool m_HaveStrands
Do at least some rows have strand set?
int m_Len
Segment length.
SAlignment_Row & GetRow(size_t idx)
Get row data with the given index.
SAlignment_Row & AddRow(size_t idx, const CSeq_id &id, int start, bool is_set_strand, ENa_strand strand)
Add new row.
int m_GroupIdx
Group of segments (e.g.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4