diff --git a/modules/io/src/mol/mmcif_writer.cc b/modules/io/src/mol/mmcif_writer.cc index 4af329c284532452ba627e246fe7ff17299ddc0f..18831c0465b34eab6a6450bed00018e95dfe79cd 100644 --- a/modules/io/src/mol/mmcif_writer.cc +++ b/modules/io/src/mol/mmcif_writer.cc @@ -898,8 +898,7 @@ namespace { for(int i = 0; i < N; ++i) { symbols.insert(data[i*desc_size + type_symbol_idx].GetValue()); } - std::vector<ost::io::StarWriterValue> atom_type_data; - atom_type_data.push_back(ost::io::StarWriterValue::FromString("")); + std::vector<ost::io::StarWriterValue> atom_type_data(1); for(auto symbol: symbols) { atom_type_data[0] = ost::io::StarWriterValue::FromString(symbol); atom_type_ptr->AddData(atom_type_data); @@ -914,14 +913,10 @@ namespace { ost::io::MMCifWriterEntity& entity_info, const T& res_list) { - std::vector<ost::io::StarWriterValue> data; - data.push_back(ost::io::StarWriterValue::FromString(label_asym_id)); - data.push_back(ost::io::StarWriterValue::FromInt(label_entity_id)); - data.push_back(ost::io::StarWriterValue::FromString("")); - data.push_back(ost::io::StarWriterValue::FromInt(0)); - data.push_back(ost::io::StarWriterValue::FromString("")); - data.push_back(ost::io::StarWriterValue::FromInt(0)); - data.push_back(ost::io::StarWriterValue::FromString("")); + std::vector<ost::io::StarWriterValue> data(7); + // processing chain by chain, label_asym_id and label_entity_id are constant + data[0] = ost::io::StarWriterValue::FromString(label_asym_id); + data[1] = ost::io::StarWriterValue::FromInt(label_entity_id); int asym_idx = entity_info.GetAsymIdx(label_asym_id); const std::vector<String>& aln = entity_info.asym_alns[asym_idx]; @@ -979,6 +974,7 @@ namespace { int asym_idx = entity_info.GetAsymIdx(label_asym_id); const std::vector<String>& aln = entity_info.asym_alns[asym_idx]; int label_seq_id = 0; // 0-based index + std::vector<ost::io::StarWriterValue> at_data(17); for(auto res: res_list) { String comp_id = res.GetName(); @@ -1004,49 +1000,48 @@ namespace { } for(auto at: at_list) { - std::vector<ost::io::StarWriterValue> at_data; // group_PDB if(at.IsHetAtom()) { - at_data.push_back(ost::io::StarWriterValue::FromString("HETATM")); + at_data[0] = ost::io::StarWriterValue::FromString("HETATM"); } else { - at_data.push_back(ost::io::StarWriterValue::FromString("ATOM")); + at_data[0] = ost::io::StarWriterValue::FromString("ATOM"); } // type_symbol - at_data.push_back(ost::io::StarWriterValue::FromString(at.GetElement())); + at_data[1] = ost::io::StarWriterValue::FromString(at.GetElement()); // label_atom_id - at_data.push_back(ost::io::StarWriterValue::FromString(at.GetName())); + at_data[2] = ost::io::StarWriterValue::FromString(at.GetName()); // label_comp_id - at_data.push_back(ost::io::StarWriterValue::FromString(comp_id)); + at_data[3] = ost::io::StarWriterValue::FromString(comp_id); // label_asym_id - at_data.push_back(ost::io::StarWriterValue::FromString(label_asym_id)); + at_data[4] = ost::io::StarWriterValue::FromString(label_asym_id); // label_entity_id - at_data.push_back(ost::io::StarWriterValue::FromInt(label_entity_id)); + at_data[5] = ost::io::StarWriterValue::FromInt(label_entity_id); // label_seq_id if(entity_info.is_poly) { - at_data.push_back(ost::io::StarWriterValue::FromInt(label_seq_id+1)); + at_data[6] = ost::io::StarWriterValue::FromInt(label_seq_id+1); } else { - at_data.push_back(ost::io::StarWriterValue::FromString(".")); + at_data[6] = ost::io::StarWriterValue::FromString("."); } // label_alt_id - at_data.push_back(ost::io::StarWriterValue::FromString(".")); + at_data[7] = ost::io::StarWriterValue::FromString("."); // Cartn_x - at_data.push_back(ost::io::StarWriterValue::FromFloat(at.GetPos().GetX(), 3)); + at_data[8] = ost::io::StarWriterValue::FromFloat(at.GetPos().GetX(), 3); // Cartn_y - at_data.push_back(ost::io::StarWriterValue::FromFloat(at.GetPos().GetY(), 3)); + at_data[9] = ost::io::StarWriterValue::FromFloat(at.GetPos().GetY(), 3); // Cartn_z - at_data.push_back(ost::io::StarWriterValue::FromFloat(at.GetPos().GetZ(), 3)); + at_data[10] = ost::io::StarWriterValue::FromFloat(at.GetPos().GetZ(), 3); // occupancy - at_data.push_back(ost::io::StarWriterValue::FromFloat(at.GetOccupancy(), 2)); + at_data[11] = ost::io::StarWriterValue::FromFloat(at.GetOccupancy(), 2); // B_iso_or_equiv - at_data.push_back(ost::io::StarWriterValue::FromFloat(at.GetBFactor(), 2)); + at_data[12] = ost::io::StarWriterValue::FromFloat(at.GetBFactor(), 2); // auth_seq_id - at_data.push_back(ost::io::StarWriterValue::FromString(auth_seq_id)); + at_data[13] = ost::io::StarWriterValue::FromString(auth_seq_id); // auth_asym_id - at_data.push_back(ost::io::StarWriterValue::FromString(auth_asym_id)); + at_data[14] = ost::io::StarWriterValue::FromString(auth_asym_id); // id - at_data.push_back(ost::io::StarWriterValue::FromInt(atom_site_ptr->GetN())); + at_data[15] = ost::io::StarWriterValue::FromInt(atom_site_ptr->GetN()); // pdbx_PDB_ins_code - at_data.push_back(ost::io::StarWriterValue::FromString(ins_code)); + at_data[16] = ost::io::StarWriterValue::FromString(ins_code); atom_site_ptr->AddData(at_data); } ++label_seq_id; @@ -1055,21 +1050,21 @@ namespace { void Feed_entity(ost::io::StarWriterLoopPtr entity_ptr, const std::vector<ost::io::MMCifWriterEntity>& entity_info) { + std::vector<ost::io::StarWriterValue> ent_data(2); for(size_t entity_idx = 0; entity_idx < entity_info.size(); ++entity_idx) { - std::vector<ost::io::StarWriterValue> ent_data; - ent_data.push_back(ost::io::StarWriterValue::FromInt(entity_idx)); - ent_data.push_back(ost::io::StarWriterValue::FromString(entity_info[entity_idx].type)); + ent_data[0] = ost::io::StarWriterValue::FromInt(entity_idx); + ent_data[1] = ost::io::StarWriterValue::FromString(entity_info[entity_idx].type); entity_ptr->AddData(ent_data); } } void Feed_struct_asym(ost::io::StarWriterLoopPtr struct_asym_ptr, const std::vector<ost::io::MMCifWriterEntity>& entity_info) { + std::vector<ost::io::StarWriterValue> asym_data(2); for(size_t entity_idx = 0; entity_idx < entity_info.size(); ++entity_idx) { for(auto asym_id : entity_info[entity_idx].asym_ids) { - std::vector<ost::io::StarWriterValue> asym_data; - asym_data.push_back(ost::io::StarWriterValue::FromString(asym_id)); - asym_data.push_back(ost::io::StarWriterValue::FromInt(entity_idx)); + asym_data[0] = ost::io::StarWriterValue::FromString(asym_id); + asym_data[1] = ost::io::StarWriterValue::FromInt(entity_idx); struct_asym_ptr->AddData(asym_data); } } @@ -1077,12 +1072,7 @@ namespace { void Feed_entity_poly_seq(ost::io::StarWriterLoopPtr entity_poly_seq_ptr, const std::vector<ost::io::MMCifWriterEntity>& entity_info) { - // reuse data vector for efficiency - std::vector<ost::io::StarWriterValue> entity_poly_seq_data; - entity_poly_seq_data.push_back(ost::io::StarWriterValue::FromInt(0)); - entity_poly_seq_data.push_back(ost::io::StarWriterValue::FromString("ALA")); - entity_poly_seq_data.push_back(ost::io::StarWriterValue::FromInt(1)); - + std::vector<ost::io::StarWriterValue> entity_poly_seq_data(3); for(size_t entity_idx = 0; entity_idx < entity_info.size(); ++entity_idx) { if(entity_info[entity_idx].is_poly) { const std::vector<String>& mon_ids = entity_info[entity_idx].mon_ids; @@ -1098,12 +1088,7 @@ namespace { void Feed_entity_poly(ost::io::StarWriterLoopPtr entity_poly_ptr, const std::vector<ost::io::MMCifWriterEntity>& entity_info) { - // reuse data vector for efficiency - std::vector<ost::io::StarWriterValue> entity_poly_data; - entity_poly_data.push_back(ost::io::StarWriterValue::FromInt(0)); - entity_poly_data.push_back(ost::io::StarWriterValue::FromString("other")); - entity_poly_data.push_back(ost::io::StarWriterValue::FromString("A")); - entity_poly_data.push_back(ost::io::StarWriterValue::FromString("A")); + std::vector<ost::io::StarWriterValue> entity_poly_data(4); for(size_t entity_idx = 0; entity_idx < entity_info.size(); ++entity_idx) { if(entity_info[entity_idx].is_poly) { entity_poly_data[0] = ost::io::StarWriterValue::FromInt(entity_idx); @@ -1133,9 +1118,7 @@ namespace { void Feed_chem_comp(ost::io::StarWriterLoopPtr chem_comp_ptr, const std::map<String, ost::io::MMCifWriterComp>& comp_infos) { - std::vector<ost::io::StarWriterValue> comp_data; - comp_data.push_back(ost::io::StarWriterValue::FromString("ALA")); - comp_data.push_back(ost::io::StarWriterValue::FromString("L-PEPTIDE LINKING")); + std::vector<ost::io::StarWriterValue> comp_data(2); for(auto it = comp_infos.begin(); it != comp_infos.end(); ++it) { comp_data[0] = ost::io::StarWriterValue::FromString(it->first); comp_data[1] = ost::io::StarWriterValue::FromString(it->second.type); @@ -1145,9 +1128,7 @@ namespace { void Feed_pdbx_entity_branch(ost::io::StarWriterLoopPtr pdbx_entity_branch_ptr, const std::vector<ost::io::MMCifWriterEntity>& entity_infos) { - std::vector<ost::io::StarWriterValue> branch_data; - branch_data.push_back(ost::io::StarWriterValue::FromInt(0)); - branch_data.push_back(ost::io::StarWriterValue::FromString("oligosaccharide")); + std::vector<ost::io::StarWriterValue> branch_data(2); for(size_t i = 0; i < entity_infos.size(); ++i) { if(entity_infos[i].type == "branched") { branch_data[0] = ost::io::StarWriterValue::FromInt(i); diff --git a/modules/io/src/mol/star_writer.hh b/modules/io/src/mol/star_writer.hh index dd8cb5a2acf1feaa27154eb5c6101b4c9908882b..49728fcb77d93a2e183ba0667556ceca33ff1470 100644 --- a/modules/io/src/mol/star_writer.hh +++ b/modules/io/src/mol/star_writer.hh @@ -88,6 +88,9 @@ public: class DLLEXPORT_OST_IO StarWriterValue{ public: + + StarWriterValue() { } + static StarWriterValue FromInt(int int_value) { StarWriterValue value; value.value_ = std::to_string(int_value); @@ -123,8 +126,6 @@ public: } const String& GetValue() const { return value_; } private: -// force construction through static members -StarWriterValue() { } String value_; };