Changeset 151
- Timestamp:
- 02/19/10 19:08:58 (7 months ago)
- Location:
- current/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
current/src/align.cpp
r142 r151 27 27 using namespace std; 28 28 29 #ifdef min30 # undef min31 #endif32 33 29 template<class T> 34 30 inline T min3(T a, T b, T c) 35 31 { 36 return min(a, min(b,c));32 return (std::min)(a, (std::min)(b,c)); 37 33 } 38 34 … … 67 63 68 64 // Allocate travel table to maximum possible size 69 size_t szA = std::min(szMa,seqA.size())+1;65 size_t szA = (std::min)(szMa,seqA.size())+1; 70 66 tabTravel.resize(szA); 71 size_t szB = std::min(szMb,seqB.size())+1;67 size_t szB = (std::min)(szMb,seqB.size())+1; 72 68 for(travel_table::iterator it = tabTravel.begin(); 73 69 it != tabTravel.end(); ++it) … … 582 578 } 583 579 580 double alignment::identity() const { 581 aln_data::size_type matches = 0, mismatches = 0; 582 std::string::const_iterator ait = seqA.dna.begin(), bit = seqB.dna.begin(); 583 for(aln_data::const_iterator cit = data.begin(); cit != data.end(); ++cit) { 584 if(*cit == 0) { 585 if(*ait == *bit) 586 ++matches; 587 else 588 ++mismatches; 589 ++ait; 590 ++bit; 591 } else if(*cit > 0) 592 bit+=*cit; 593 else 594 ait-=*cit; 595 } 596 return (1.0*matches)/(matches+mismatches); 597 } 598 -
current/src/align.h
r146 r151 42 42 inline void print(OS &os, int format=0, double cost=0.0, int dir=0, bool swapped=false) const; 43 43 44 double identity() const; 45 44 46 protected: 45 47 const seq_data &seqA, &seqB; … … 50 52 }; 51 53 52 class aligner 53 { 54 class aligner { 54 55 public: 55 struct indel 56 { 56 struct indel { 57 57 indel() { } 58 58 indel(size_t pp, size_t xx, double dd) … … 62 62 double d; // Score 63 63 }; 64 struct min_mid_cost 65 { 64 struct min_mid_cost { 66 65 double c; // Minimum cost 67 66 size_t s; // minimum position in s-vector … … 141 140 142 141 std::string::const_iterator ait = seqA.dna.begin(), bit = seqB.dna.begin(); 143 unsigned int matches = 0, mismatches = 0;144 142 for(aln_data::const_iterator cit = data.begin(); cit != data.end(); ++cit) { 145 143 if(*cit == 0) { 146 if(*ait == *bit) {144 if(*ait == *bit) 147 145 strC.append(1, '*'); 148 ++matches; 149 } else { 146 else 150 147 strC.append(1, ' '); 151 ++mismatches;152 }153 148 strA.append(ait, ait+1); ++ait; 154 149 strB.append(bit, bit+1); ++bit; … … 173 168 size_t sz = strA.size(); 174 169 std::string ss; 175 double identity = double(matches)/(matches+mismatches);176 170 if(format == 0) { 177 171 os << "CLUSTAL multiple sequence alignment (Created by " << PACKAGE_STRING 178 << "; Cost = " << std::setprecision(10) << cost << " Identity = " << identity172 << "; Cost = " << std::setprecision(10) << cost 179 173 << ")" << std::endl << std::endl; 180 174 … … 199 193 os << ">" << nameA << " " 200 194 << "(Created by " << PACKAGE_STRING 201 << "; Cost = " << std::setprecision(10) << cost << " Identity = " << identity195 << "; Cost = " << std::setprecision(10) << cost 202 196 << ")" << std::endl; 203 197 for(size_t u = 0; u < sz; u += 80) -
current/src/ngila.cpp
r150 r151 20 20 #include <iomanip> 21 21 #include <iostream> 22 #include <limits> 22 23 23 24 #include <boost/preprocessor.hpp> 24 25 #include <boost/foreach.hpp> 25 26 #include <boost/config.hpp> 27 //BOOST_DISABLE_ASSERTS 26 28 #include <boost/multi_array.hpp> 29 #include <boost/algorithm/string/predicate.hpp> 27 30 28 31 #include "ngila_app.h" … … 96 99 } 97 100 98 template<size_t _N> 99 size_t key_switch(const std::string &ss, const std::string (&key)[_N]) { 100 for(size_t i=0;i<_N;++i) { 101 if(key[i].find(ss) == 0) 101 template<std::size_t _N> 102 std::size_t key_switch(const std::string &ss, const std::string (&key)[_N]) { 103 using boost::algorithm::starts_with; 104 for(std::size_t i=0;i<_N;++i) { 105 if(starts_with(key[i], ss)) 102 106 return i; 103 107 } 104 return (s ize_t)-1;108 return (std::size_t)-1; 105 109 } 106 110 … … 169 173 string pairs_keys[] = { string("first"), string("all"), string("each") }; 170 174 seq_db::size_type table_size = mydb.size(); 171 switch(key_switch(arg.pairs, pairs_keys))172 {175 176 switch(key_switch(arg.pairs, pairs_keys)) { 173 177 case 0: 174 178 pvec.push_back(make_pair(0,1)); … … 189 193 }; 190 194 191 string format_keys[] = { string("aln"), string("fasta"), string("smat") /*,string("imat")*/ }; 195 string format_keys[] = { 196 string("aln"), string("fasta"), 197 string("dist"), string("dist-c"), 198 string("dist-d"), string("dist-i") 199 }; 192 200 int out_format = 0; 193 201 if(!arg.output.empty()) { … … 223 231 } 224 232 } 225 226 typedef boost::multi_array<float, 2> tabmat; 227 tabmat cost_table(boost::extents[table_size][table_size]); 228 229 for(pair_vec::const_iterator cit = pvec.begin(); cit != pvec.end(); ++cit) 230 { 231 if(cit != pvec.begin()) 232 cout << "//" << endl; 233 ostream &myout = fout.is_open() ? static_cast<ostream&>(fout) 234 : static_cast<ostream&>(cout); 235 typedef boost::multi_array<float, 2> dist_mat; 236 dist_mat dist_table; 237 const bool do_dist = (out_format >= 2); 238 if(do_dist) { 239 dist_table.resize(boost::extents[table_size][table_size]); 240 fill(dist_table.data(), dist_table.data()+dist_table.num_elements(), numeric_limits<float>::quiet_NaN()); 241 float diag = (out_format == 5) ? 1.0f : 0.0f; 242 for(seq_db::size_type i = 0; i < table_size; ++i) 243 dist_table[i][i] = diag; 244 } 245 246 for(pair_vec::const_iterator cit = pvec.begin(); cit != pvec.end(); ++cit) { 247 if(!do_dist && cit != pvec.begin()) 248 myout << "//" << endl; 233 249 // swap a and b so that a's hashed position is lower 234 250 size_t a = cit->first; … … 243 259 alignment aln(mydb[a], mydb[b]); 244 260 double dcost = alner.align(aln); 245 dcost += pmod->offset(mydb[a].dna,246 mydb[b].dna);261 dcost += pmod->offset(mydb[a].dna, mydb[b].dna); 262 double dident = aln.identity(); 247 263 248 if( fout.is_open()) {249 aln.print( fout, out_format, dcost,264 if(!do_dist) { 265 aln.print(myout, out_format, dcost, 250 266 ((arg.const_align & 16) ? 0 : direction), swapped); 251 267 } else { 252 aln.print(cout, out_format, dcost, 253 ((arg.const_align & 16) ? 0 : direction), swapped); 268 double upper,lower; 269 if(a > b) 270 swap(a,b); 271 switch(out_format) { 272 default: 273 case 2: //dist 274 lower = 1.0-dident; 275 upper = dcost; 276 break; 277 case 3: //dist-c 278 upper = lower = dcost; 279 break; 280 case 4: //dist-d 281 upper = lower = 1.0-dident; 282 break; 283 case 5: //dist-i 284 upper = lower = dident; 285 break; 286 } 287 dist_table[a][b] = (float)upper; 288 dist_table[b][a] = (float)lower; 289 } 290 } 291 if(do_dist) { 292 myout << setprecision(10); 293 for(seq_db::size_type i = 0; i < table_size; ++i) { 294 for(seq_db::size_type j = 0; j < table_size-1; ++j) 295 myout << dist_table[i][j] << "\t"; 296 myout << dist_table[i][table_size-1] << endl; 254 297 } 255 298 } -
current/src/sort.h
- Property svn:eol-style set to native
-
current/src/xm.h
- Property svn:eol-style set to native
Note: See TracChangeset
for help on using the changeset viewer.
