Changeset 1047
- Timestamp:
- Apr 27, 2009, 3:24:16 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/base2/net.sf.basedb.normalizers/trunk/src/c++/bin/qQN.cc
r1045 r1047 99 99 } 100 100 101 std::vector<double> target (m.rows());101 std::vector<double> target; 102 102 ( assay.present() ? create_target_and_fix_nans(target,m,assay.value()) : 103 103 create_target_and_fix_nans(target,m) ); … … 131 131 std::string line; 132 132 size_t column=0; 133 std::vector<size_t> yes(m.rows(),0); 134 for (size_t row=0; row<m.rows(); ++row) 135 t[row]=0; 133 std::vector<size_t> column_contribs(m.rows(),0); 134 std::vector<double> temp_target(m.rows(),0.0); 136 135 while (getline(is, line)) { 137 136 size_t found=line.find("yes"); … … 139 138 for (size_t row=0; row<m.rows(); ++row) 140 139 if (m(row,column).weight()) { // weight either 0 or 1 141 t [row]+=m(row,column).data();142 ++ yes[row];140 temp_target[row]+=m(row,column).data(); 141 ++column_contribs[row]; 143 142 } 144 143 else … … 149 148 throw std::runtime_error("Too many annotation columns wrt data matrix"); 150 149 } 151 for (size_t row=0; row<m.rows(); ++row) { 152 if (!yes[row]) 153 throw std::runtime_error("At least one row with no valid reference"); 154 t[row]/=yes[row]; 155 } 150 t.reserve(m.rows()); 151 for (size_t row=0; row<m.rows(); ++row) 152 if (column_contribs[row]) 153 t.push_back(temp_target[row]/=column_contribs[row]); 154 if (!t.size()) 155 throw std::runtime_error("Not a well defined reference, aborting"); 156 156 } 157 157 … … 159 159 void create_target_and_fix_nans(std::vector<double>& t, MatrixWeighted& m) 160 160 { 161 std::vector<double> temp_target(m.rows(),0.0); 162 t.reserve(m.rows()); 161 163 for (size_t row=0; row<m.rows(); ++row) { 162 t[row]=0;163 164 size_t column_contribs=0; 164 165 for (size_t column=0; column<m.columns(); ++column) 165 166 if (m(row,column).weight()) { // weight either 0 or 1 166 t [row]+=m(row,column).data();167 temp_target[row]+=m(row,column).data(); 167 168 ++column_contribs; 168 169 } 169 170 else 170 171 m(row,column).data()=0; 171 if (!column_contribs) 172 throw std::runtime_error("At least one row with no valid reference"); 173 t[row]/=column_contribs; 172 if (column_contribs) 173 t.push_back(temp_target[row]/=column_contribs); 174 174 } 175 if (!t.size()) 176 throw std::runtime_error("Not a well defined reference, aborting"); 175 177 } 176 178
Note: See TracChangeset
for help on using the changeset viewer.