A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://www.ncbi.nlm.nih.gov/IEB/ToolBox/CPP_DOC/doxyhtml/aligncollapser_8cpp_source.html below:

NCBI C++ ToolKit: src/algo/gnomon/aligncollapser.cpp Source File

50  for

(

int i

= shift; id_pool[

i

] != 0; ++

i

)

51

target.push_back(id_pool[

i

]);

76  if

(

a

.Strand() ==

ePlus

)

77

ss =

m_introns

.front().m_sig.substr(0,2);

79

ss =

m_introns

.front().m_sig.substr(2,2);

84  if

(

a

.Strand() ==

ePlus

) {

95  if

(

a

.Strand() ==

ePlus

)

104  CAlignMap

amap(

a

.Exons(),

a

.FrameShifts(),

a

.Strand());

118  if

(

a

.m_range ==

b

.m_range)

120  else if

(

a

.m_range.GetFrom() !=

b

.m_range.GetFrom())

121  return a

.m_range.GetFrom() <

b

.m_range.GetFrom();

123  return a

.m_range.GetTo() >

b

.m_range.GetTo();

128  return a

.m_target_id <

b

.m_target_id;

155  for

(

int i

= 1;

i

< (

int

)e.size(); ++

i

) {

156  if

(e[

i

-1].m_ssplice && e[

i

].m_fsplice) {

159

sig = e[

i

-1].m_ssplice_sig+e[

i

].m_fsplice_sig;

161

sig = e[

i

].m_fsplice_sig+e[

i

-1].m_ssplice_sig;

174  if

(ri != right_exon_ends.

end

())

177  if

(ri != right_exon_ends.

begin

())

182  if

(li != left_exon_ends.

end

())

196

arg_desc->

AddFlag

(

"filtersr"

,

"Filter SR"

);

197

arg_desc->

AddFlag

(

"filterest"

,

"Filter EST"

);

198

arg_desc->

AddFlag

(

"no_lr_only_introns"

,

"Filter introns supported only by LR"

);

199

arg_desc->

AddFlag

(

"filtermrna"

,

"Filter mRNA"

);

200

arg_desc->

AddFlag

(

"filterprots"

,

"Filter proteins"

);

201

arg_desc->

AddFlag

(

"collapsest"

,

"Collaps EST"

);

202

arg_desc->

AddFlag

(

"collapssr"

,

"Collaps SR"

);

203

arg_desc->

AddFlag

(

"fillgenomicgaps"

,

"Use provided selfspecies cDNA for genomic gap filling"

);

205

arg_desc->

AddDefaultKey

(

"max-extension"

,

"MaxExtension"

,

206  "Maximal extension for one-exon collapsed alignments"

,

209

arg_desc->

AddDefaultKey

(

"min-consensus-support"

,

"MinConsensusSupport"

,

210  "Minimal number of support for consensus intron"

,

213

arg_desc->

AddDefaultKey

(

"min-non-consensussupport"

,

"MinNonconsensusSupport"

,

214  "Minimal number of support for non-consensus intron"

,

217

arg_desc->

AddDefaultKey

(

"high-identity"

,

"HighIdentity"

,

218  "Minimal exon identity threshold for accepted introns"

,

221

arg_desc->

AddDefaultKey

(

"min-support-fraction"

,

"MinSupportFraction"

,

222  "Minimal splice expression relative exon expression"

,

225

arg_desc->

AddDefaultKey

(

"end-pair-support-cutoff"

,

"EndPairSupportCutoff"

,

226  "Minimal expression relative to the mean for introns with the same splice"

,

235

arg_desc->

AddDefaultKey

(

"min-edge-coverage"

,

"MinEdgeCoverage"

,

236  "Minimal absolute expression for accepted single-exon alignments without polyA/Cap"

,

239

arg_desc->

AddDefaultKey

(

"sharp-boundary"

,

"SharpBoundary"

,

240  "Minimal relative expression for crossing splice"

,

244

arg_desc->

AddFlag

(

"use-long-read-tss"

,

"Treat 5' ends of long reads like CAGE"

);

249 #define MAX_DIST_TO_FLANK_GAP 10000 265  int

length (sv.

size

());

276  for

(

int i

= from;

i

<=to; ++

i

) {

281

++current_gap->second;

297  if

(nofilteringcollapsing) {

315  m_minident

= args[

"high-identity"

].AsDouble();

317  if

(

m_scope

!= 0 && contig !=

""

) {

328 #define COVERED_FRACTION 0.75 333  int

covered_length = 0;

335  for

(

int

p =

i

->Limits().GetFrom(); p <= i->Limits().GetTo(); ++p)

336  if

(coverage[p-left_end] >= mincoverage)

344  SIntron

intron_oriented_nosig(

a

,

b

, strand,

true

,

""

);

346  bool

good_intron = (introns.

find

(intron_oriented_nosig) != introns.

end

() || introns.

find

(intron_notoriented_nosig) != introns.

end

());

347  if

(!good_intron && check_introns_on_both_strands) {

349

good_intron = (introns.

find

(intron_otherstrand_nosig) != introns.

end

());

356 #define END_PART_LENGTH 35 358 #define EXON_TO_SKIP 10 363  for

(

int i

= e->GetFrom(); i <= e->GetTo(); ++

i

) {

370  double

threshold =

max

(clip_threshold*cov, min_lim);

377  if

(++exnl == (

int

)align.

Exons

().size()) {

381

left_lim = align.

Exons

()[exnl].GetFrom();

385  int

exnr = (

int

)align.

Exons

().size()-1;

393

right_lim = align.

Exons

()[exnr].GetTo();

396  _ASSERT

(right_lim >= left_lim);

408  for

(

int i

= e->GetFrom(); i <= e->GetTo(); ++

i

) {

415  double

lim =

max

(clip_threshold*cov, min_lim);

422  int

not_aligned_left = tlim.

GetFrom

();

425  swap

(not_aligned_left,not_aligned_right);

427  if

(not_aligned_left > 30) {

431  if

(

l

< align.

Exons

()[ie].GetTo())

434  l

= align.

Exons

()[++ie].GetFrom();

447  if

(not_aligned_right > 30) {

449  int

ie = (

int

)align.

Exons

().size()-1;

451  if

(

r

> align.

Exons

()[ie].GetFrom())

454  r

= align.

Exons

()[--ie].GetTo();

469  bool

keepdoing =

true

;

472  for

(

int

k = 1; k < (

int

)align.

Exons

().size(); ++k) {

479  if

(

l

!= exonl.

GetTo

())

510  for

(

int

prev_exon = -1; prev_exon < (

int

)align.

Exons

().size()-1; ++prev_exon) {

511  int

piece_begin = prev_exon+1;

512  if

(align.

Exons

()[piece_begin].m_fsplice)

514  int

piece_end = piece_begin;

515  for

( ; piece_end < (

int

)align.

Exons

().size() && align.

Exons

()[piece_end].m_ssplice; ++piece_end);

516  int a

= align.

Exons

()[piece_begin].GetFrom();

517  int b

= align.

Exons

()[piece_end].GetTo();

550 #define CUT_MARGIN 15 556  bool

keepdoing =

true

;

559  for

(

int

k = 1; k < (

int

)align.

Exons

().size(); ++k) {

605  for

(CAlignModel::TExons::const_iterator piece_begin = align.

Exons

().begin(); piece_begin != align.

Exons

().end(); ++piece_begin) {

606  _ASSERT

( !piece_begin->m_fsplice );

608

CAlignModel::TExons::const_iterator piece_end = piece_begin;

609  for

( ; piece_end != align.

Exons

().end() && piece_end->m_ssplice; ++piece_end) ;

616  int

new_left =

a

.Limits().GetFrom();

617  for

(

int

k = 1; k < (

int

)

a

.Exons().size(); ++k) {

625  int

new_right =

a

.Limits().GetTo();

626  for

(

int

k = (

int

)

a

.Exons().size()-1; k > 0 &&

a

.Exons()[k-1].GetTo() > new_left; --k) {

632

new_right = exonl.

GetTo

();

636  if

(new_lim !=

a

.Limits()) {

642  if

(!editedmodel.

Exons

().empty())

646

editedmodel.

AddExon

(e->Limits(), e->m_fsplice_sig, e->m_ssplice_sig, e->m_ident);

648

editedmodel.

FrameShifts

().insert(editedmodel.

FrameShifts

().end(),

a

.FrameShifts().begin(),

a

.FrameShifts().end());

650

piece_begin = piece_end;

655  bool

good_alignment =

true

;

657

good_alignment =

false

;

660  bool

keepdoing =

true

;

663  for

(

int

k = 1; k < (

int

)editedmodel.

Exons

().size() && good_alignment; ++k) {

676

good_alignment =

false

;

682

vector<TSignedSeqRange> transcript_exons;

686

transcript_exons.push_back(te);

709  return

good_alignment;

712 #define MISM_PENALTY 10 713 #define INDEL_PENALTY 20 715 #define BIG_NOT_ALIGNED 20 718  string

transcript = trans;

723  _ASSERT

(tlen == (

int

)transcript.size());

727

vector<TSignedSeqRange> transcript_exons;

728

transcript_exons.reserve(exons.size());

729  for

(

int

ie = 0; ie < (

int

)exons.size(); ++ie) {

733  for

(

int

ie = 0; ie < (

int

)exons.size(); ++ie) {

738  for

(

int

ie = 0; ie < (

int

)exons.size(); ++ie) {

739  if

(!exons[ie].m_fsplice) {

740  int

glim = (ie > 0) ? exons[ie-1].GetTo() : -1;

741  int

tlim = (ie > 0) ? transcript_exons[ie-1].GetTo() : -1;

742  int g

= exons[ie].GetFrom();

743  int t

= transcript_exons[ie].GetFrom();

744  while

(

g

> glim+1 &&

t

> tlim+1 && transcript[

t

-1] ==

m_contig

[

g

-1]) {

748  if

(

g

< exons[ie].GetFrom()) {

749

exons[ie].AddFrom(

g

-exons[ie].GetFrom());

750

exons[ie].m_fsplice_sig.clear();

751

transcript_exons[ie].SetFrom(

t

);

754  if

(!exons[ie].m_ssplice) {

756  int

tlim = (ie+1 < (

int

)exons.size()) ? transcript_exons[ie+1].GetFrom() : (

int

)transcript.size();

757  int g

= exons[ie].GetTo();

758  int t

= transcript_exons[ie].GetTo();

759  while

(

g

< glim-1 &&

t

< tlim-1 && transcript[

t

+1] ==

m_contig

[

g

+1]) {

763  if

(

g

> exons[ie].GetTo()) {

764

exons[ie].AddTo(

g

-exons[ie].GetTo());

765

exons[ie].m_ssplice_sig.clear();

766

transcript_exons[ie].SetTo(

t

);

774

vector<TSignedSeqRange> edited_transcript_exons;

776  for

(

int

piece_begin = 0; piece_begin < (

int

)exons.size(); ++piece_begin) {

777  _ASSERT

( !exons[piece_begin].m_fsplice );

778  int

piece_end = piece_begin;

779  for

( ; exons[piece_end].m_ssplice; ++piece_end);

780  _ASSERT

(piece_end < (

int

)exons.size());

782  TInDels

indels = align.

GetInDels

(exons[piece_begin].GetFrom(), exons[piece_end].GetTo(),

false

);

783

TInDels::const_iterator indl = indels.begin();

787  TIVec

exons_to_align;

788  int

tp = transcript_exons[piece_begin].GetFrom();

789  for

(

int

ie = piece_begin; ie <= piece_end; ++ie) {

791  while

(gp <= exons[ie].GetTo()) {

792  if

(indl == indels.end() || indl->Loc() != gp) {

793

tseq.push_back(transcript[tp++]);

795

}

else if

(indl->IsDeletion()) {

796

tseq += transcript.substr(tp,indl->Len());

797

gseq.insert(gseq.end(),indl->Len(),

'-'

);

801

tseq.insert(tseq.end(),indl->Len(),

'-'

);

807  if

(indl != indels.end() && indl->Loc() == gp) {

809

tseq += transcript.substr(tp,indl->Len());

810

gseq.insert(gseq.end(), indl->Len(),

'-'

);

814

exons_to_align.push_back((

int

)gseq.size()-1);

816  _ASSERT

(tseq.size() == gseq.size() && indl == indels.end());

818  TIVec

score(tseq.size());

819  for

(

int i

= 0;

i

< (

int

)score.size(); ++

i

) {

820  if

(tseq[

i

] == gseq[

i

] && tseq[

i

] !=

'N'

)

822  else if

(tseq[

i

] ==

'-'

|| gseq[

i

] ==

'-'

)

827

score[

i

] += score[

i

-1];

828

score[

i

] =

max

(0,score[

i

]);

831  int

align_right = (

int

)(max_element(score.begin(),score.end())-score.begin());

833  if

(score[align_right] > 0) {

834  int

align_left = align_right;

835  while

(align_left > 0 && score[align_left-1] > 0)

838  int

agaps = (

int

)

count

(tseq.begin(), tseq.begin()+align_left,

'-'

);

839  int

bgaps = (

int

)

count

(tseq.begin(), tseq.begin()+align_right,

'-'

);

840  TSignedSeqRange

trange(transcript_exons[piece_begin].GetFrom()+align_left-agaps, transcript_exons[piece_begin].GetFrom()+align_right-bgaps);

845  int pb

= piece_begin;

846  while

(exons[

pb

].GetTo() < grange.

GetFrom

())

849  while

(exons[pe].GetFrom() > grange.

GetTo

())

855  for

(

int i

= align_left;

i

<= (pe >

pb

? exons_to_align[

pb

-piece_begin] : align_right); ++

i

) {

857  if

(tseq[

i

] == gseq[

i

])

864  for

(

int i

= align_right;

i

>= (pe >

pb

? exons_to_align[pe-1-piece_begin]+1 : align_left); --

i

) {

866  if

(tseq[

i

] == gseq[

i

])

871  for

(

int

ie =

pb

; ie <= pe; ++ie) {

884  t

.SetTo(trange.

GetTo

());

889

edited_exons.push_back(e);

890

edited_transcript_exons.push_back(

t

);

893

piece_begin = piece_end;

901  for

(

int

piece_begin = 0; piece_begin < (

int

)edited_exons.size(); ++piece_begin) {

902  _ASSERT

( !edited_exons[piece_begin].m_fsplice );

903  int

piece_end = piece_begin;

904  for

( ; edited_exons[piece_end].m_ssplice; ++piece_end);

905  _ASSERT

(piece_end < (

int

)edited_exons.size());

911  int

distance_to_lgap = -1;

915

distance_to_lgap = elim.

GetFrom

()-(igap->first+igap->second);

917  if

(distance_to_lgap == 0) {

918

edited_exons[piece_begin].m_fsplice_sig =

"NN"

;

919

}

else if

(tlim.

GetFrom

() >

BIG_NOT_ALIGNED

&& (piece_begin == 0 || tlim.

GetFrom

() > edited_transcript_exons[piece_begin-1].GetTo()+1)) {

920  string

splice = (align.

Strand

() ==

ePlus

) ?

"AG"

:

"AC"

;

927  if

(indl->IsDeletion() &&

Include

(elim, indl->Loc()))

928

del_len += indl->Len();

930  double

errors = (1.-edited_exons[piece_begin].m_ident)*(elim.

GetLength

()+del_len);

932

edited_exons[piece_begin].m_ident = 1.-errors/(elim.

GetLength

()+del_len);

935

edited_exons[piece_begin].m_fsplice_sig = splice;

946  int

distance_to_rgap = -1;

949

distance_to_rgap = igap->first-elim.

GetTo

()-1;

950  if

(distance_to_rgap == 0) {

951

edited_exons[piece_end].m_ssplice_sig =

"NN"

;

952

}

else if

(tlen-tlim.

GetTo

()-1 >

BIG_NOT_ALIGNED

&& (piece_end == (

int

)edited_exons.size()-1 || tlim.

GetTo

() < edited_transcript_exons[piece_end+1].GetFrom()-1)) {

953  string

splice = (align.

Strand

() ==

ePlus

) ?

"GT"

:

"CT"

;

960  if

(indl->IsDeletion() &&

Include

(elim, indl->Loc()))

961

del_len += indl->Len();

963  double

errors = (1.-edited_exons[piece_end].m_ident)*(elim.

GetLength

()+del_len);

965

edited_exons[piece_end].m_ident = 1.-errors/(elim.

GetLength

()+del_len);

968

edited_exons[piece_end].m_ssplice_sig = splice;

977  for

(

int

ie = piece_begin; ie <= piece_end; ++ie) {

983  if

(indl->Loc() > edited_exons[piece_begin].GetFrom() && indl->Loc() < edited_exons[piece_end].GetTo())

984

edited_indels.push_back(*indl);

987

piece_begin = piece_end;

991  for

(

int

ie = 0; ie < (

int

)edited_transcript_exons.size(); ++ie) {

1001

align = editedalign;

1007  if

(indl->IsMismatch() || !indl->IntersectingWith(

a

,

b

))

1009  if

(indl->IsInsertion())

1032  size_t

count_m_aligns = 0;

1034  ITERATE

(deque<SAlignIndividual>, k,

i

->second) {

1036

right_end =

max

(right_end, k->m_range.GetTo());

1042

TAlignModelList::iterator

i

= it++;

1052  const SIntron

& intron = it->first;

1059

right_end =

max

(right_end,

b

);

1064

right_end =

max

(right_end,

i

->Limits().GetTo());

1072

map<TSignedSeqRange, tuple<double,bool>> intervals;

1074  const SIntron

& intron = it->first;

1076  auto

& rslt = intervals[intron.

m_range

];

1077

get<0>(rslt) +=

data

.m_weight;

1078  bool

not_long =

data

.m_sr_support > 0 ||

data

.m_other_support > 0;

1080

get<1>(rslt) =

true

;

1083

multimap<int, TAlignIntrons::iterator> left_intronsp;

1084

multimap<int, TAlignIntrons::iterator> right_intronsp;

1086  const SIntron

& intron = it->first;

1087  if

(!get<1>(intervals[intron.

m_range

])) {

1089

right_intronsp.emplace(intron.

m_range

.

GetTo

(), it);

1093

set<SIntron> deleted_introns;

1095  for

(

auto

& interval : intervals) {

1097  auto

il = left_intronsp.lower_bound(range.

GetFrom

()-

delta

);

1098  if

(il == left_intronsp.end() || il->first > range.

GetFrom

()+

delta

)

1100  auto

ir = left_intronsp.upper_bound(range.

GetFrom

()+

delta

);

1101

set<TAlignIntrons::value_type*> close_lefts;

1102  for

(

auto i

= il;

i

!= ir; ++

i

) {

1103  const SIntron

& intronb =

i

->second->first;

1104  if

(intronb.

m_range

!= range)

1105

close_lefts.insert(&(*

i

->second));

1107  if

(close_lefts.empty())

1110  auto

jl = right_intronsp.lower_bound(range.

GetTo

()-

delta

);

1111  if

(jl == right_intronsp.end() || jl->first > range.

GetTo

()+

delta

)

1113  auto

jr = right_intronsp.upper_bound(range.

GetTo

()+

delta

);

1114

set<TAlignIntrons::value_type*> close_rights;

1115  for

(

auto

j = jl; j != jr; ++j) {

1116  const SIntron

& intronb = j->second->first;

1117  if

(intronb.

m_range

!= range)

1118

close_rights.insert(&(*j->second));

1120  if

(close_rights.empty())

1123

vector<TAlignIntrons::value_type*>

close

(

min

(close_lefts.size(),close_rights.size()),

nullptr

);

1124  auto

close_end = set_intersection(close_lefts.begin(), close_lefts.end(), close_rights.begin(), close_rights.end(),

close

.begin());

1125  for

(

auto

it =

close

.begin(); it != close_end; ++it) {

1126  const SIntron

& intronb = (*it)->first;

1127  if

(get<0>(intervals[intronb.

m_range

]) < get<0>(interval.second))

1128

deleted_introns.insert(intronb);

1131  for

(

auto

& intron : deleted_introns) {

1138 #define COVERAGE_WINDOW 20 1143  if

(

i

->first.isEST() &&

i

->first.GetIntrons().size() > 1)

1144

factor =

i

->first.GetIntrons().size();

1145  ITERATE

(deque<SAlignIndividual>, k,

i

->second) {

1146  float weight

= k->m_weight*factor;

1151  for

(

int l

=

in

->m_range.GetFrom()+1; l <= in->

m_range

.

GetTo

()-1; ++

l

)

1160  for

(

auto

& exon : align.Exons()) {

1161  for

(

int l

= exon.GetFrom();

l

<= exon.GetTo(); ++

l

)

1166

vector<double> left_coverage(

len

,0.);

1168  for

(

int i

= 0;

i

<

len

; ++

i

) {

1175

vector<double> right_coverage(

len

,0.);

1177  for

(

int i

=

len

-1;

i

>= 0; --

i

) {

1186  int

minconsensussupport = args[

"min-consensus-support"

].AsInteger();

1187  int

minnonconsensussupport = args[

"min-non-consensussupport"

].AsInteger();

1191  bool

bad_intron =

false

;

1194  if

(!

id

.m_selfsp_support)

1197  if

(

id

.m_keep_anyway)

1200  if

(intron->first.m_sig ==

"CTAC"

&& intron->first.m_oriented)

1204  if

(intron->first.m_sig ==

"GTAG"

|| (intron->second.m_intron_num >= 3 && intron->first.m_sig ==

"GCAG"

)) {

1205  if

(

id

.m_weight < minconsensussupport)

1208  if

(

id

.m_weight < minnonconsensussupport)

1219  double

minspliceexpression = args[

"min-support-fraction"

].AsDouble();

1220  double

minintronexpression = args[

"end-pair-support-cutoff"

].AsDouble();

1222  typedef

multimap<int,CAlignCollapser::TAlignIntrons::iterator> TIntronsBySplice;

1223

TIntronsBySplice introns_by_left_splice;

1227  for

(TIntronsBySplice::iterator

a

= introns_by_left_splice.begin();

a

!= introns_by_left_splice.end(); ) {

1228  int

splice =

a

->first;

1229

TIntronsBySplice::iterator

b

= introns_by_left_splice.upper_bound(splice);

1233  for

(TIntronsBySplice::iterator

i

=

a

;

i

!=

b

; ++

i

) {

1235  weight

+=

i

->second->second.m_weight*

i

->second->second.m_intron_num;

1239  for

(TIntronsBySplice::iterator it =

a

; it !=

b

; ) {

1240

TIntronsBySplice::iterator

i

= it++;

1242  if

(!

id

.m_keep_anyway && (

id

.m_weight*

id

.m_intron_num < minintronexpression*mean ||

weight

< minspliceexpression*left_coverage[splice-

m_left_end

])) {

1244

introns_by_left_splice.erase(

i

);

1251

TIntronsBySplice introns_by_right_splice;

1255  for

(TIntronsBySplice::iterator

a

= introns_by_right_splice.begin();

a

!= introns_by_right_splice.end(); ) {

1256  int

splice =

a

->first;

1257

TIntronsBySplice::iterator

b

= introns_by_right_splice.upper_bound(splice);

1261  for

(TIntronsBySplice::iterator

i

=

a

;

i

!=

b

; ++

i

) {

1263  weight

+=

i

->second->second.m_weight*

i

->second->second.m_intron_num;

1267  for

(TIntronsBySplice::iterator it =

a

; it !=

b

; ) {

1268

TIntronsBySplice::iterator

i

= it++;

1270  if

(!

id

.m_keep_anyway && (

id

.m_weight*

id

.m_intron_num < minintronexpression*mean ||

weight

< minspliceexpression*right_coverage[splice-

m_left_end

])) {

1272

introns_by_right_splice.erase(

i

);

1281  if

(intron->second.m_weight < 0) {

1296  if

(introns.empty())

1299  bool

all_good =

true

;

1300  for

(

int i

= 0; all_good &&

i

< (

int

)introns.size(); ++

i

) {

1310  for

(

unsigned int l

= 1;

l

< e.size(); ++

l

) {

1313

e[

l

-1].m_ssplice =

false

;

1314

e[

l

].m_fsplice =

false

;

1318  for

(

auto

&

a

: aligns) {

1321  if

(

a

.Exons().size() > 1) {

1334  double

mincrossexpression = args[

"sharp-boundary"

].AsDouble();

1340  const SIntron

& intron = intron_data.first;

1348  if

(right_coverage[

a

+1-

m_left_end

] < mincrossexpression*two_side_exon_coverage) {

1350  data

.m_not_cross =

true

;

1354  data

.m_not_cross =

true

;

1360  if

(left_coverage[

b

-1-

m_left_end

] < mincrossexpression*two_side_exon_coverage) {

1362  data

.m_not_cross =

true

;

1366  data

.m_not_cross =

true

;

1374  for

(

int i

= 1;

i

<

len

; ++

i

) {

1375

right_plus[

i

] =

max

(right_plus[

i

],right_plus[

i

-1]);

1376

right_minus[

i

] =

max

(right_minus[

i

],right_minus[

i

-1]);

1378  for

(

int i

=

len

-2;

i

>= 0; --

i

) {

1379

left_plus[

i

] =

min

(left_plus[

i

],left_plus[

i

+1]);

1380

left_minus[

i

] =

min

(left_minus[

i

],left_minus[

i

+1]);

1383  double

clip_threshold = args[

"utrclipthreshold"

].AsDouble();

1387

deque<SAlignIndividual>& aligns =

data

->second;

1397  auto

exnum = align.

Exons

().size();

1402  if

(align.

Limits

() == lim)

1412  if

(exnum != align.

Exons

().size() || cap_polya0 != cap_polya1) {

1413  if

(align.

Exons

().size() > 1 || exnum == 1) {

1420  i

->m_range = align.

Limits

();

1429  int

minsingleexpression = args[

"min-edge-coverage"

].AsInteger();

1430  int

trim = args[

"trim"

].AsInteger();

1436

deque<SAlignIndividual>& aligns =

data

->second;

1443  int a

=

i

->m_range.GetFrom()+trim;

1444  int b

=

i

->m_range.GetTo()-trim;

1461  if

(align.

Exons

().front().Limits().GetLength() > trim) {

1462  int a

= align.

Exons

().front().Limits().GetFrom()+trim;

1463  int b

= align.

Exons

().front().Limits().GetTo();

1470  if

(align.

Exons

().back().Limits().GetLength() > trim) {

1471  int a

= align.

Exons

().back().Limits().GetFrom();

1472  int b

= align.

Exons

().back().Limits().GetTo()-trim;

1479  i

->m_range = new_lim;

1482  for

(

int n

= 1;

n

< (

int

)align.

Exons

().size()-1 &&

i

->m_weight > 0; ++

n

) {

1483  int a

= align.

Exons

()[

n

].Limits().GetFrom();

1484  int b

= align.

Exons

()[

n

].Limits().GetTo();

1486

pair<TIntronsBySplice::iterator,TIntronsBySplice::iterator> eqr(introns_by_right_splice.end(),introns_by_right_splice.end());

1488

eqr = introns_by_right_splice.equal_range(right_plus[

b

-

m_left_end

]);

1490

eqr = introns_by_right_splice.equal_range(right_minus[

b

-

m_left_end

]);

1491  for

(TIntronsBySplice::iterator

ip

= eqr.first;

ip

!= eqr.second; ++

ip

) {

1492  if

(

ip

->second->first.m_range.GetFrom() >

a

)

1499  if

(aligns.empty()) {

1512

deque<SAlignIndividual>& aligns_ind =

data

->second;

1517  if

(introns.empty()) {

1519  int a

= ali.m_range.GetFrom();

1520  int b

= ali.m_range.GetTo();

1521  if

(ali.m_range.GetLength() > 2*trim) {

1535

strands.push_back(

ePlus

);

1536

strands.push_back(

eMinus

);

1542  for

(

int

strand : strands) {

1543  for

(

int i

= 0;

i

< (

int

)introns.size()-1; ++

i

) {

1547  if

(

Include

(exon,

ip

->first.m_range) &&

ip

->second.m_not_cross)

1555  bool

save_and_delete =

false

;

1558  int a

= ali.m_range.GetFrom();

1559  int b

= introns.front().m_range.GetFrom();

1563

save_and_delete =

true

;

1569

save_and_delete =

true

;

1573  a

= introns.back().m_range.GetTo();

1574  b

= ali.m_range.GetTo();

1578

save_and_delete =

true

;

1583

save_and_delete =

true

;

1586  if

(!save_and_delete)

1587

ali.m_range = new_lim;

1590  for

(

int

strand : strands) {

1594  if

(

Include

(exon,

ip

->first.m_range) &&

ip

->second.m_not_cross)

1599  for

(

int

strand : strands) {

1603  if

(

Include

(exon,

ip

->first.m_range) &&

ip

->second.m_not_cross)

1604

bad_exons.

insert

(introns.size());

1608  if

(save_and_delete || !bad_exons.

empty

()) {

1610  if

(new_lim != align.

Limits

())

1613  if

(!bad_exons.

empty

()) {

1615  for

(

unsigned i

: bad_exons) {

1617

e[

i

-1].m_ssplice =

false

;

1618

e[

i

].m_fsplice =

false

;

1619

e[

i

].m_ssplice =

false

;

1620  if

(

i

!= introns.size())

1621

e[

i

+1].m_fsplice =

false

;

1624  for

(

auto

&

a

: aligns) {

1625  if

(

a

.Exons().size() > 1) {

1643  if

(aligns_ind.empty()) {

1651

total +=

a

.second.size();

1657

TAlignModelList::iterator

i

= it++;

1688  bool

good_alignment =

true

;

1701  if

(reversed.

Exons

().size() > align.

Exons

().size()) {

1703

good_alignment = good_reversed_alignment;

1708  if

(!align.

Exons

().empty())

1731  if

(indl->IsDeletion()) {

1735  for

(

int

p = indl->Loc(); p < indl->

Loc

()+indl->Len(); ++p)

1743

TAlignModelList::iterator

i

= it++;

1753  int b

=

min

(right_end, ie->GetTo());

1754  for

(

int

p =

a

; p <=

b

; ++p) {

1764  typedef

pair<TSignedSeqRange,TInDels> TGapEnd;

1765

set<TGapEnd> right_gends;

1766

set<TGapEnd> left_gends;

1769 #define DESIRED_CHUNK 100 1772

TAlignModelList::iterator

i

= it++;

1784

left_gends.insert(TGapEnd(ie->Limits(),fs));

1785

right_gends.insert(TGapEnd(ie->Limits(),fs));

1790  if

(editedalign.

Exons

().size() > align.

Exons

().size()) {

1797  if

(align.

Exons

().front().Limits().GetLength() >

MIN_EXON

) {

1801  int len

=

l

.GetLength();

1807  if

(

a

.Exons()[ie+1].m_ssplice) {

1808  l

.SetTo(

a

.Exons()[ie+1].GetTo());

1809  len

+=

a

.Exons()[ie+1].Limits().GetLength();

1815  l

=

a

.GetAlignMap().ShrinkToRealPoints(

l

,

false

);

1816  if

(

l

.NotEmpty()) {

1819  if

(editedalign.

Exons

().size() >

a

.Exons().size()) {

1825  for

(

int

ie = 0; ie < (

int

)align.

Exons

().size()-1; ++ie) {

1826  if

((!align.

Exons

()[ie].m_ssplice || !align.

Exons

()[ie+1].m_fsplice) &&

1830  int

left =

a

.Exons()[ie].GetFrom();

1831  int len

=

a

.Exons()[ie].Limits().GetLength();

1837  if

(

a

.Exons()[iie-1].m_fsplice) {

1838

left =

a

.Exons()[iie-1].GetFrom();

1839  len

+=

a

.Exons()[iie-1].Limits().GetLength();

1844  int

right =

a

.Exons()[ie+1].GetTo();

1845  len

=

a

.Exons()[ie+1].Limits().GetLength();

1851  if

(

a

.Exons()[iie+1].m_ssplice) {

1852

right =

a

.Exons()[iie+1].GetTo();

1853  len

+=

a

.Exons()[iie+1].Limits().GetLength();

1858  if

(left >= 0 && right >= 0) {

1860  l

=

a

.GetAlignMap().ShrinkToRealPoints(

l

,

false

);

1861  if

(

l

.NotEmpty()) {

1864  if

(editedalign.

Exons

().size() >

a

.Exons().size()) {

1872  if

(align.

Exons

().back().Limits().GetLength() >

MIN_EXON

) {

1876  int len

=

l

.GetLength();

1882  if

(

a

.Exons()[ie-1].m_fsplice) {

1883  l

.SetFrom(

a

.Exons()[ie-1].GetFrom());

1884  len

+=

a

.Exons()[ie-1].Limits().GetLength();

1890  l

=

a

.GetAlignMap().ShrinkToRealPoints(

l

,

false

);

1891  if

(

l

.NotEmpty()) {

1894  if

(editedalign.

Exons

().size() >

a

.Exons().size()) {

1904  enum

EnpPoint {

eUnknown

= 0, eRightPlus = 1, eRightMinus = 2, eLeftPlus = 4, eLeftMinus = 8};

1905

vector<unsigned char> end_status(

len

, 0);

1910  for

(

int

ie = 0; ie < (

int

)align.

Exons

().size(); ++ie) {

1911  if

(align.

Exons

()[ie].Limits().Empty()) {

1913  int a

= align.

Exons

()[ie-1].GetTo();

1916  if

(

a

< right_end) {

1919

end_status[al] |= eLeftPlus;

1922

left_minus[al] =

a

;

1923

end_status[al] |= eLeftMinus;

1927  if

(ie < (

int

)align.

Exons

().size()-1) {

1928  int b

= align.

Exons

()[ie+1].GetFrom();

1933

right_plus[bl] =

b

;

1934

end_status[bl] |= eRightPlus;

1937

right_minus[bl] =

b

;

1938

end_status[bl] |= eRightMinus;

1946  for

(

int i

= 1;

i

<

len

; ++

i

) {

1947

right_plus[

i

] =

max

(right_plus[

i

],right_plus[

i

-1]);

1948

right_minus[

i

] =

max

(right_minus[

i

],right_minus[

i

-1]);

1950  for

(

int i

=

len

-2;

i

>= 0; --

i

) {

1951

left_plus[

i

] =

min

(left_plus[

i

],left_plus[

i

+1]);

1952

left_minus[

i

] =

min

(left_minus[

i

],left_minus[

i

+1]);

1957 #define MAX_CLIP 200 1958 #define SMALL_CLIP 30 1962

TAlignModelList::iterator

i

= it++;

1978  bool

good_alignment =

true

;

1980  bool

keepdoing =

true

;

1981  while

(keepdoing && good_alignment) {

1983  for

(

int

ie = 0; ie < (

int

)align.

Exons

().size(); ++ie) {

1996

rights = &right_plus;

2001

rights = &right_minus;

2010  int

firstclip = new_l;

2014  if

(ig->first.GetFrom() <= putativel && ig->first.GetTo() >= firstclip) {

2017  if

(prot_fs == tsa_fs)

2024  for

(

int i

= 0;

i

< (

int

)pindels.size() && pindels[

i

].Loc() <= new_l+

FS_FUZZ

; ++

i

)

2025

new_l =

max

(new_l,pindels[

i

].

Loc

());

2032

good_alignment =

false

;

2039

good_alignment =

false

;

2073

lefts = &left_minus;

2082  int

firstclip = new_r;

2086  if

(ig->first.GetFrom() <= firstclip && ig->first.GetTo() >= putativer) {

2089  if

(prot_fs == tsa_fs)

2096  for

(

int i

= (

int

)pindels.size()-1;

i

>= 0 && pindels[

i

].Loc() >= new_r-

FS_FUZZ

; --

i

)

2097

new_r =

min

(new_r,pindels[

i

].

Loc

()-1);

2104

good_alignment =

false

;

2111

good_alignment =

false

;

2116  if

(ie == (

int

)align.

Exons

().size()-1) {

2132  if

(!good_alignment)

2141

cerr <<

"After filtering: "

<<

m_align_introns

.

size

() <<

" introns, "

<< total <<

" alignments"

<< endl;

2147  if

(

i

->Limits().NotEmpty()) {

2151  if

(ig->GetSource().m_range.NotEmpty())

2163  bool operator()

(TAlignModelList::const_iterator

a

, TAlignModelList::const_iterator

b

) {

2164  if

(

a

->Limits() ==

b

->Limits()) {

2165  if

(

a

->Ident() !=

b

->Ident())

2166  return a

->Ident() >

b

->Ident();

2168  return a

->TargetAccession() <

b

->TargetAccession();

2169

}

else if

(

a

->Limits().GetFrom() !=

b

->Limits().GetFrom()) {

2170  return a

->Limits().GetFrom() <

b

->Limits().GetFrom();

2172  return a

->Limits().GetTo() >

b

->Limits().GetTo();

2181  if

(!

a

.m_seq.empty() || !

b

.m_seq.empty()) {

2182  return a

.m_seq <

b

.m_seq;

2183

}

else if

(

b

.Limits().Empty()) {

2185

}

else if

(

a

.Limits().Empty()) {

2187

}

else if

(

a

.m_fsplice !=

b

.m_fsplice) {

2188  return a

.m_fsplice <

b

.m_fsplice;

2189

}

else if

(

a

.m_ssplice !=

b

.m_ssplice) {

2190  return a

.m_ssplice <

b

.m_ssplice;

2192  return a

.Limits() <

b

.Limits();

2199  if

(

a

.size() !=

b

.size()) {

2200  return a

.size() <

b

.size();

2202  for

(

int i

= 0;

i

< (

int

)

a

.size(); ++

i

) {

2232

cerr <<

"Added "

<<

m_count

<<

" alignments to collapser for contig "

<<

m_contig_name

<< endl;

2241  int

oep = args[

"oep"

].AsInteger();

2242  int

max_extend = args[

"max-extension"

].AsInteger();

2244  set<int>

left_exon_ends, right_exon_ends;

2246  const SIntron

& intron = it->first;

2250

right_exon_ends.

insert

(

a

);

2257

deque<SAlignIndividual>& alideque =

i

->second;

2261  ITERATE

(deque<SAlignIndividual>, k, alideque) {

2263

rnaseq_or_est.push_back(align);

2268  bool

notspliced = alc.

GetIntrons

().empty();

2270  typedef

list<SAlignExtended> TEA_List;

2271

TEA_List extended_aligns;

2275  bool

collapsed =

false

;

2277  for

(TEA_List::iterator itloop = extended_aligns.begin(); itloop != extended_aligns.end(); ) {

2278

TEA_List::iterator ita = itloop++;

2283

rnaseq_or_est.push_back(align);

2284

extended_aligns.erase(ita);

2285

}

else if

(!collapsed) {

2291  if

(aj.

m_range

.

GetTo

()-ita->m_initial_right_end > max_extend)

2307

extended_aligns.push_back(

SAlignExtended

(aj,left_exon_ends,right_exon_ends));

2310  ITERATE

(TEA_List, ita, extended_aligns) {

2312

rnaseq_or_est.push_back(align);

2324  TIntMap

* mp = (align.

Strand

() ==

ePlus

) ? &strandedplus_len : &strandedminus_len;

2325  if

(mp->

empty

() || mp->rbegin()->first+mp->rbegin()->second < align.

Limits

().

GetFrom

()) {

2328

mp->rbegin()->second =

max

(mp->rbegin()->second, align.

Limits

().

GetTo

()-mp->rbegin()->first+1);

2333  int

forced_orientation = 0;

2337  bool

included_in_plus =

false

;

2340

included_in_plus =

true

;

2341  bool

included_in_minus =

false

;

2344

included_in_minus =

true

;

2346  if

(included_in_plus != included_in_minus) {

2349

++forced_orientation;

2353

cerr <<

"Forced orintation: "

<< forced_orientation << endl;

2362  typedef

map<CGeneModel::TExons, vector<TAlignModelList::iterator>,

MultiExonsCompare

> TEstHolder;

2363

TEstHolder est_for_collapsing;

2367  if

(exons.size() == 1) {

2369  _ASSERT

(exons.front().m_seq.empty());

2371  if

(exons.front().m_ssplice_sig !=

"XX"

)

2372

exons.front().Limits().SetFrom(exons.front().GetTo());

2373  if

(exons.back().m_fsplice_sig !=

"XX"

)

2374

exons.back().Limits().SetTo(exons.back().GetFrom());

2376

est_for_collapsing[exons].push_back(

i

);

2382

list<TAlignModelList::iterator> ests(

i

->second.begin(),

i

->second.end());

2383  for

(list<TAlignModelList::iterator>::iterator ihost = ests.begin(); ihost != ests.end(); ++ihost) {

2387  if

(ri != right_exon_ends.

begin

())

2391  if

(li != left_exon_ends.

end

())

2394

list<TAlignModelList::iterator>::iterator iloop = ihost;

2395  for

(++iloop; iloop != ests.end(); ) {

2396

list<TAlignModelList::iterator>::iterator iguest = iloop++;

2439  size_t

flex_cap = 0;

2440  size_t

flex_polya = 0;

2442  if

(status_align.second.Limits().GetFrom() >= 0 && status_align.second.Limits().GetTo() <

m_contig

.

FullLength

() &&

CheckAndInsert

(status_align.second, clsset)) {

2450

cerr <<

"After collapsing: "

<< total <<

" alignments "

<< flex_cap <<

" Flexible caps "

<< flex_polya <<

" Flexible polyas"

<< endl;

2458

vector<TSignedSeqRange> transcript_exons;

2461  bool

chainer_tsa = (acc.find(

"ChainerTSA"

) != string::npos);

2463  string

left_seq, right_seq;

2470

left_seq = transcript.substr(0,tlim.

GetFrom

());

2474

left_src.

m_range

= left_texon;

2477

right_seq = transcript.substr(tlim.

GetTo

()+1);

2481

right_src.

m_range

= right_texon;

2484  swap

(left_seq, right_seq);

2485  swap

(left_texon, right_texon);

2486  swap

(left_src, right_src);

2489  if

(!left_seq.empty() && (fill&

efill_left

) != 0 && !chainer_tsa) {

2492

transcript_exons.push_back(left_texon);

2503  for

(

int i

= 0;

i

< (

int

)align.

Exons

().size(); ++

i

) {

2515

transcript_exons.push_back(texon);

2537  if

(!right_seq.empty() && (fill&

efill_right

) != 0 && !chainer_tsa) {

2540

transcript_exons.push_back(right_texon);

2568

galign.

Status

() |= status;

2571  auto

& stored = rslt.first->second;

2572

stored.SetWeight(stored.Weight()+

weight

);

2577 #define COLLAPS_CHUNK 500000 2580  string

acc =

a

.TargetAccession();

2581  for

(

char

& c : acc)

2584  if

(acc.find(

"CORRECTIONDATA"

) != string::npos) {

2589  if

(gap->first <=

a

.Limits().GetTo() && gap->first+gap->second-1 >=

a

.Limits().GetFrom())

2595  TInDels

corrections =

a

.FrameShifts();

2597  if

(

i

->IsMismatch()) {

2598  string

seq =

i

->GetInDelV();

2599  for

(

int l

= 0;

l

<

i

->Len(); ++

l

)

2611  if

(acc.find(

"CAPINFO"

) != string::npos)

2613  else if

(acc.find(

"POLYAINFO"

) != string::npos)

2620

pos =

a

.Limits().GetFrom();

2623

pos =

a

.Limits().GetTo();

2626  if

(

a

.Exons().size() == 1)

2630  bool

long_read = acc.find(

"SRA"

) != string::npos && acc.find(

"RNASEQ_COLLAPSE"

) == string::npos;

2632  if

(long_read &&

a

.Exons().front().m_ident == 0) {

2633  TInDels

& indels =

a

.FrameShifts();

2635  auto

it = indels.begin();

2637  int

align_len = exon.Limits().GetLength();

2638  double

matches = align_len;

2639  for

( ;it != indels.end() && it->IntersectingWith(exon.GetFrom(), exon.GetTo()); ++it) {

2640  if

(it->IsMismatch() || it->IsInsertion())

2641

matches -= it->Len();

2642  if

(it->IsDeletion())

2643

align_len += it->Len();

2646

exon.m_ident = matches/align_len;

2654  int

shift =

a

.TranscriptLimits().GetFrom();

2657  for

(

int i

= 0;

i

< (

int

)

a

.Exons().size(); ++

i

) {

2658  auto

te =

a

.TranscriptExon(

i

);

2659  string

eseq = transcript.substr(te.GetFrom()-shift, te.GetLength());

2661  if

(

i

== (

int

)

a

.Exons().size()-1) {

2664

lim.

SetFrom

(

a

.Exons()[

i

+1].GetFrom());

2665  if

(

a

.Exons()[

i

].m_ssplice &&

a

.Exons()[

i

+1].m_fsplice)

2666

cerr <<

"Low complexity: "

<<

a

.ID() <<

" "

<<

m_contig_name

<<

':'

<<

a

.Exons()[

i

].GetTo()+1 <<

':'

<<

a

.Exons()[

i

+1].GetFrom()+1 <<

' '

<< eseq <<

"\n"

;

2672  if

(lim.

Empty

()) {

2673

cerr <<

"Erased: "

<<

a

.ID() <<

"\n"

;

2677  for

(

int i

= (

int

)

a

.Exons().size()-1;

i

> 0; --

i

) {

2678  auto

te =

a

.TranscriptExon(

i

);

2679  string

eseq = transcript.substr(te.GetFrom()-shift, te.GetLength());

2681

lim.

SetTo

(

a

.Exons()[

i

-1].GetTo());

2682  if

(

a

.Exons()[

i

-1].m_ssplice &&

a

.Exons()[

i

].m_fsplice)

2683

cerr <<

"Low complexity: "

<<

a

.ID() <<

" "

<<

m_contig_name

<<

':'

<<

a

.Exons()[

i

-1].GetTo()+1 <<

':'

<<

a

.Exons()[

i

].GetFrom()+1 <<

' '

<< eseq <<

"\n"

;

2688  if

(lim !=

a

.Limits()) {

2701

use_alignment =

false

;

2703  int

not_aligned_5p = tlim.

GetFrom

();

2704  int

not_aligned_3p =

a

.TargetLen()-1-tlim.

GetTo

();

2706  swap

(not_aligned_5p, not_aligned_3p);

2708

use_alignment =

false

;

2710  if

(use_alignment) {

2713  if

(

a

.Strand() ==

ePlus

) {

2714

pos =

a

.Limits().GetFrom();

2717

pos =

a

.Limits().GetTo();

2740  for

(

unsigned int l

= 1;

l

< e.size(); ++

l

) {

2741  if

(e[

l

-1].m_ssplice && e[

l

].m_fsplice) {

2742  double

ident =

min

(e[

l

-1].m_ident, e[

l

].m_ident);

2750

sig = e[

l

-1].m_ssplice_sig+e[

l

].m_fsplice_sig;

2752

sig = e[

l

].m_fsplice_sig+e[

l

-1].m_ssplice_sig;

2761  id

.m_keep_anyway =

true

;

2766

e[

l

-1].Limits().GetLength() > 15 && e[

l

-1].m_ident > 0.99 &&

2767

e[

l

].Limits().GetLength() > 15 && e[

l

].m_ident > 0.99)) {

2769  id

.m_selfsp_support =

true

;

2773  id

.m_sr_support += align.

Weight

()+0.5;

2775  id

.m_est_support += align.

Weight

()+0.5;

2777  id

.m_other_support += align.

Weight

()+0.5;

2779  id

.m_intron_num =

max

(

id

.m_intron_num, (

int

)e.size()-1);

2780  id

.m_weight += align.

Weight

();

2782  id

.m_ident =

max

(

id

.m_ident,ident);

2792  if

(

a

.Strand() ==

ePlus

) {

2793

pos =

a

.Limits().GetFrom();

2796

pos =

a

.Limits().GetTo();

2804  if

(

a

.Strand() ==

eMinus

) {

2805

pos =

a

.Limits().GetFrom();

2808

pos =

a

.Limits().GetTo();

2834

cerr <<

"Added "

<<

m_count

<<

" alignments to collapser"

<< endl;

2841

deque<SAlignIndividual>& alideque =

i

->second;

2843  if

(!alideque.empty()) {

2847

deque<SAlignIndividual>::iterator ali = alideque.begin();

2848  for

(deque<SAlignIndividual>::iterator farp = ali+1; farp != alideque.end(); ++farp) {

2850  if

(farp->m_range == ali->m_range) {

2851

ali->m_weight += farp->m_weight;

2852  for

(deque<char>::iterator p = id_pool.begin()+farp->m_target_id; *p != 0; ++p) {

2860  _ASSERT

(ali-alideque.begin()+1 <= (

int

)alideque.size());

2861

alideque.resize(ali-alideque.begin()+1);

2867

deque<char>::iterator

id

= id_pool.begin();

2869

ali = alideque.begin();

2870  for

(deque<char>::iterator farp =

id

; farp != id_pool.end(); ) {

2871  while

(farp != id_pool.end() && *farp == 0) {

2875  if

(farp != id_pool.end()) {

2877  if

(farp-id_pool.begin() == ali->m_target_id) {

2878

ali->m_target_id -= shift;

2879  _ASSERT

(ali->m_target_id >= 0);

2885  while

(*farp != 0) {

2891

id_pool.resize(

id

-id_pool.begin());

2893  _ASSERT

(ali == alideque.end());

bool OneExonCompare(const CModelExon &a, const CModelExon &b)

bool OriginalOrder(const SAlignIndividual &a, const SAlignIndividual &b)

bool isGoodIntron(int a, int b, EStrand strand, const CAlignCollapser::TAlignIntrons &introns, bool check_introns_on_both_strands)

string GetTargetAcc(int shift, const deque< char > &id_pool)

int TotalFrameShift(const TInDels &indels, int a, int b)

bool AlignmentMarkedForDeletion(const SAlignIndividual &ali)

#define MAX_DIST_TO_FLANK_GAP

bool AlignmentIsSupportedBySR(const CAlignModel &align, const vector< double > &coverage, int mincoverage, int left_end)

#define NOT_ALIGNED_PHONY_CAGE

#define SPECIAL_ALIGN_LEN

void remove_if(Container &c, Predicate *__pred)

TSignedSeqPos FullLength() const

void Init(const CSeqVector &sv, TSignedSeqPos from, TSignedSeqPos to)

string substr(TSignedSeqPos p, TSignedSeqPos l) const

CAlignModel FillGapsInAlignmentAndAddToGenomicGaps(const CAlignModel &align, int fill)

bool RemoveNotSupportedIntronsFromProt(CAlignModel &align)

CAlignCollapser(string contig="", CScope *scope=0, bool nofilteringcollapsing=false)

void AddAlignment(CAlignModel &align)

bool m_no_lr_only_introns

void InitContig(string contig, CScope *scope)

vector< double > m_coverage

map< tuple< int, TSignedSeqPos, EStrand >, CAlignModel > m_special_aligns

void ClipNotSupportedFlanks(CAlignModel &align, double clip_threshold, double min_lim=0)

bool RemoveNotSupportedIntronsFromTranscript(CAlignModel &align, bool check_introns_on_both_strands) const

void GetOnlyOtherAlignments(TAlignModelClusterSet &clsset)

bool CheckAndInsert(const CAlignModel &align, TAlignModelClusterSet &clsset) const

TAlignIntrons m_align_introns

SCorrectionData m_correction_data

void ClipESTorSR(CAlignModel &align, double clip_threshold, double min_lim)

TIntMap m_genomic_gaps_len

void GetCollapsedAlgnments(TAlignModelClusterSet &clsset)

TAlignModelList m_aligns_for_filtering_only

bool m_use_long_reads_tss

void CleanSelfTranscript(CAlignModel &align, const string &trans) const

void AddFlexible(int status, TSignedSeqPos pos, EStrand strand, Int8 id, double weight)

static void SetupArgDescriptions(CArgDescriptions *arg_desc)

CAlignModel GetAlignment(const SAlignIndividual &ali, const deque< char > &target_id_pool) const

vector< SIntron > Tintrons

const Tintrons & GetIntrons() const

TSignedSeqRange MapRangeEditedToOrig(TSignedSeqRange edited_range, bool withextras=true) const

void EditedSequence(const In &original_sequence, Out &edited_sequence, bool includeholes=false) const

TSignedSeqRange ShrinkToRealPoints(TSignedSeqRange orig_range, bool snap_to_codons=false) const

int FShiftedLen(TSignedSeqRange ab, ERangeEnd lend, ERangeEnd rend) const

TSignedSeqRange MapRangeOrigToEdited(TSignedSeqRange orig_range, ERangeEnd lend, ERangeEnd rend) const

string TargetAccession() const

virtual void Clip(TSignedSeqRange limits, EClipMode mode, bool ensure_cds_invariant=true)

CConstRef< objects::CSeq_id > GetTargetId() const

virtual void CutExons(TSignedSeqRange hole)

virtual CAlignMap GetAlignMap() const

void SetTargetId(const objects::CSeq_id &id)

void AddExon(TSignedSeqRange exon, const string &fs="", const string &ss="", double ident=0, const string &seq="", const CInDelInfo::SSource &src=CInDelInfo::SSource())

virtual void CutExons(TSignedSeqRange hole)

TSignedSeqRange TranscriptLimits() const

EStrand Orientation() const

const TExons & Exons() const

virtual CAlignMap GetAlignMap() const

TSignedSeqRange TranscriptExon(int i) const

void ReverseComplementModel()

void SetStrand(EStrand s)

TSignedSeqRange Limits() const

vector< CModelExon > TExons

TInDels GetInDels(bool fs_only) const

static CRef< CSeq_id > ToSeq_id(const string &str)

void Insert(const typename Cluster::TModel &a)

TSignedSeqPos GetFrom() const

const TSignedSeqRange & Limits() const

TSignedSeqPos GetTo() const

static CNcbiApplication * Instance(void)

Singleton method.

container_type::const_iterator const_iterator

container_type::iterator iterator

const_iterator begin() const

const_iterator end() const

const_iterator lower_bound(const key_type &key) const

iterator_bool insert(const value_type &val)

const_iterator upper_bound(const key_type &key) const

container_type::value_type value_type

const_iterator find(const key_type &key) const

iterator_bool insert(const value_type &val)

const_iterator begin() const

parent_type::iterator iterator

const_iterator upper_bound(const key_type &key) const

const_iterator end() const

const_iterator lower_bound(const key_type &key) const

parent_type::const_iterator const_iterator

struct parameters_t * pb[]

double Entropy(const string &seq)

list< CAlignModel > TAlignModelList

bool Include(TSignedSeqRange big, TSignedSeqRange small)

void ReverseComplement(const BidirectionalIterator &first, const BidirectionalIterator &last)

EStrand OtherStrand(EStrand s)

vector< CInDelInfo > TInDels

list< Model > GetAlignParts(const Model &algn, bool settrimflags)

virtual const CArgs & GetArgs(void) const

Get parsed command line arguments.

#define ITERATE(Type, Var, Cont)

ITERATE macro to sequence through container elements.

int TSignedSeqPos

Type for signed sequence position.

#define NON_CONST_ITERATE(Type, Var, Cont)

Non constant version of ITERATE macro.

void swap(NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair1, NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair2)

void AddFlag(const string &name, const string &comment, CBoolEnum< EFlagValue > set_value=eFlagHasValueIfSet, TFlags flags=0)

Add description for flag argument.

void SetCurrentGroup(const string &group)

Set current arguments group name.

void AddDefaultKey(const string &name, const string &synopsis, const string &comment, EType type, const string &default_value, TFlags flags=0, const string &env_var=kEmptyStr, const char *display_value=nullptr)

Add description for optional key with default value.

@ eDouble

Convertible into a floating point number (double)

@ eInteger

Convertible into an integer number (int or Int8)

#define NCBI_THROW(exception_class, err_code, message)

Generic macro to throw an exception, given the exception class, error code and message string.

virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)

Optimized implementation of CSerialObject::Assign, which is not so efficient.

const CMolInfo * GetMolInfo(const CBioseq &bioseq)

Retrieve the MolInfo object for a given bioseq handle.

CBioseq_Handle GetBioseqHandle(const CSeq_id &id)

Get bioseq handle by seq-id.

CSeqVector GetSeqVector(EVectorCoding coding, ENa_strand strand=eNa_strand_plus) const

Get sequence: Iupacna or Iupacaa if use_iupac_coding is true.

@ eCoding_Iupac

Set coding to printable coding (Iupacna or Iupacaa)

bool IsInGap(TSeqPos pos) const

true if sequence at 0-based position 'pos' has gap Note: this method is not MT-safe,...

int64_t Int8

8-byte (64-bit) signed integer

position_type GetLength(void) const

bool NotEmpty(void) const

static TThisType GetEmpty(void)

CRange< TSignedSeqPos > TSignedSeqRange

static TThisType GetWhole(void)

#define END_SCOPE(ns)

End the previously defined scope.

#define BEGIN_SCOPE(ns)

Define a new scope.

void SetFrom(TFrom value)

Assign a value to From data member.

TTo GetTo(void) const

Get the To member data.

TFrom GetFrom(void) const

Get the From member data.

void SetTo(TTo value)

Assign a value to To data member.

TTech GetTech(void) const

Get the Tech member data.

bool IsSetTech(void) const

Check if a value has been assigned to Tech data member.

@ eTech_tsa

transcriptome shotgun assembly

unsigned int

A callback function used to compare two keys in a database.

string GetDNASequence(CConstRef< objects::CSeq_id > id, CScope &scope)

constexpr auto sort(_Init &&init)

double value_type

The numeric datatype used by the parser.

Magic spell ;-) needed for some weird compilers... very empiric.

Defines command line argument related classes.

std::istream & in(std::istream &in_, double &x_)

Int4 delta(size_t dimension_, const Int4 *score_)

double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)

static SLJIT_INLINE sljit_ins l(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)

bool operator()(TAlignModelList::const_iterator a, TAlignModelList::const_iterator b)

const deque< char > & id_pool

LeftAndLongFirstOrder(const deque< char > &idp)

bool operator()(const SAlignIndividual &a, const SAlignIndividual &b)

bool operator()(const CGeneModel::TExons &a, const CGeneModel::TExons &b) const

SAlignExtended(SAlignIndividual &ali, const set< int > &left_exon_ends, const set< int > &right_exon_ends)

TSignedSeqPos m_target_id

list< TSignedSeqRange > m_confirmed_intervals

map< int, char > m_replacements

TInDels m_correction_indels

int g(Seg_Gsm *spe, Seq_Mtf *psm, Thd_Gsm *tdg)


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