+void Transcripts::buildMappings(int n_targets, char** target_name) {
+ std::map<std::string, int> dict;
+ std::map<std::string, int>::iterator iter;
+
+ general_assert(n_targets == M, "Number of transcripts does not match! Please check if the reads are aligned to a transcript set (instead of a genome)!");
+
+ dict.clear();
+ for (int i = 1; i <= M; i++) {
+ const std::string& tid = transcripts[i].getTranscriptID();
+ iter = dict.find(tid);
+ assert(iter == dict.end());
+ dict[tid] = i;
+ }
+
+ e2i.assign(M + 1, 0);
+ i2e.assign(M + 1, 0);
+ for (int i = 0; i < n_targets; i++) {
+ iter = dict.find(std::string(target_name[i]));
+ general_assert(iter != dict.end(), "RSEM can not recognize transcript " + cstrtos(target_name[i]) + "!");
+ general_assert(iter->second > 0, "Reference sequence name " + cstrtos(target_name[i]) + " is duplicated!");
+ e2i[i + 1] = iter->second;
+ i2e[iter->second] = i + 1;
+ iter->second = -1;
+ }
+}
+