void arow::update( const common::sfv_t& sfv, double alpha, double beta) { util::concurrent::scoped_wlock lk(storage_->get_lock()); for (common::sfv_t::const_iterator it = sfv.begin(); it != sfv.end(); ++it) { const std::string& feature = it->first; double val = it->second; storage::feature_val2_t val2; storage_->get2_nolock(feature, val2); storage::val2_t current_val(0.0, 1.0); if (val2.size() > 0) { current_val = val2[0].second; } storage_->set2_nolock( feature, "+", storage::val2_t(current_val.v1 + alpha * current_val.v2 * val, current_val.v2 - beta * current_val.v2 * current_val.v2* val * val)); } }
// load a Protein Data Bank file. Each line corresponds to a single atom bool ProteinComplex::LoadPDB2(bfs::path filename) { bfs::ifstream infile(filename); std::string current_line; if(!infile.is_open()) { std::cout << "File not found: " << filename.string() <<"\n"; return false; } while (!infile.eof()) { std::getline(infile, current_line); if (!infile.eof()) { if(current_line.substr(0, 4) == "ATOM") break; } } while (!infile.eof()) { if(current_line.substr(0, 4) == "ATOM") { AtomData current_atom; std::istringstream current_val(current_line.substr(6, 5)); current_val >> current_atom.atom_num; current_val.clear(); current_val.str(current_line.substr(12, 4)); current_val >> current_atom.atom_type; current_val.clear(); current_val.str(current_line.substr(17, 3)); current_val >> current_atom.residue_type; current_val.clear(); current_val.str(current_line.substr(21, 1)); current_val >> current_atom.chain_id; current_val.clear(); current_val.str(current_line.substr(22, 4)); current_val >> current_atom.residue_num; current_val.clear(); current_val.str(current_line.substr(30, 8)); current_val >> current_atom.x_cd; current_val.clear(); current_val.str(current_line.substr(38, 8)); current_val >> current_atom.y_cd; current_val.clear(); current_val.str(current_line.substr(46, 8)); current_val >> current_atom.z_cd; current_val.clear(); current_val.str(current_line.substr(54, 6)); current_val >> current_atom.occupancy; current_val.clear(); current_val.str(current_line.substr(60, 6)); current_val >> current_atom.temp_factor; current_val.clear(); current_val.str(current_line.substr(76, 2)); current_val >> current_atom.atom_element; current_val.clear(); InsertAtomData(current_atom); std::getline(infile, current_line); } else