78 template <
typename T>
void projectToAli(vector< map<int_fast64_t,T*> > &seqints,
79 map<int_fast64_t, list<pair<int,T*> > > &alignedSIs) {
81 int k = alignment->rows.size();
82 int_fast64_t aliStart, aliEnd;
85 typename map<int_fast64_t, list<pair<int,T*> > >::iterator asi;
91 for (
size_t s=0; s<k; s++){
92 if (alignment->rows[s] == NULL)
94 int offset = offsets[s];
96 vector<fragment>::const_iterator from = row->frags.begin();
97 for(
typename map<int_fast64_t,T*>::iterator siit = seqints[s].begin(); siit != seqints[s].end(); ++siit){
100 while (from != row->frags.end() && from->chrPos + from->len - 1 < siit->second->getStart() + offset)
102 if (from == row->frags.end())
105 chrStart = chrKey.getStart() + offset;
106 aliStart = row->
getAliPos(chrStart, from);
108 chrEnd = chrKey.getLen() + chrStart;
113 SeqIntKey aliKey(aliStart,aliEnd-aliStart,chrKey.getAddInfo());
114 asi = alignedSIs.find(aliKey.getKey());
115 if (asi == alignedSIs.end()){
116 list<pair<int,T*> > si;
117 si.push_back(pair<int,T*> (s, siit->second));
118 alignedSIs.insert(pair<int_fast64_t,list<pair<int,T*> > >(aliKey.getKey(), si));
120 asi->second.push_back(pair<int,T*> (s, siit->second));
147 template <
typename T>
void projectToGenome(map<int_fast64_t, list<pair<int,T*> > > &alignedSIs, vector<AnnoSequence*>
const &seqRanges,
148 vector< map<int_fast64_t,T*> > &seqints,
bool insertMissingSIs=
true) {
150 int k = alignment->rows.size();
151 vector<vector<fragment>::const_iterator > fragsit(k);
154 for (
size_t s=0; s < k; s++){
155 if (alignment->rows[s])
156 fragsit[s] = alignment->rows[s]->frags.begin();
159 typename map<int_fast64_t, list<pair<int,T*> > >::iterator asi;
165 for(asi = alignedSIs.begin(); asi != alignedSIs.end(); asi++){
167 int_fast64_t aliStart = aliKey.getStart();
168 int_fast64_t aliEnd = aliKey.getLen() + aliStart;
170 typename list<pair<int,T*> >::iterator siit = asi->second.begin();
172 for(
size_t s=0; s<k; s++){
173 if(siit != asi->second.end() && siit->first == s){
177 if (alignment->rows[s] == NULL)
181 while (fragsit[s] != row->frags.end() && fragsit[s]->aliPos + fragsit[s]->len - 1 < aliStart){
184 if (fragsit[s] == row->frags.end()){
187 int_fast64_t chrStart = row->getChrPos(aliStart,fragsit[s]) - offsets[s];
188 int_fast64_t chrEnd = row->getChrPos(aliEnd, fragsit[s]) - offsets[s];
190 if (chrStart >= 0 && chrEnd >= 0){
192 if(insertMissingSIs){
193 SeqIntKey chrKey(chrStart,chrEnd-chrStart,aliKey.getAddInfo());
194 si = create(chrKey.getKey(), seqRanges[s]->sequence, seqRanges[s]->length);
197 seqints[s].insert(pair<int_fast64_t,T*>(chrKey.getKey(), si));
201 asi->second.insert(siit,pair<int,T*> (s, si));