source: src/Parser/PdbAtomInfoContainer.cpp@ 9dba5f

Action_Thermostats Add_AtomRandomPerturbation Add_FitFragmentPartialChargesAction Add_RotateAroundBondAction Add_SelectAtomByNameAction Added_ParseSaveFragmentResults AddingActions_SaveParseParticleParameters Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_ParticleName_to_Atom Adding_StructOpt_integration_tests AtomFragments Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.5.4 Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator CombiningParticlePotentialParsing Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_BoundInBox_CenterInBox_MoleculeActions Fix_ChargeSampling_PBC Fix_ChronosMutex Fix_FitPartialCharges Fix_FitPotential_needs_atomicnumbers Fix_ForceAnnealing Fix_IndependentFragmentGrids Fix_ParseParticles Fix_ParseParticles_split_forward_backward_Actions Fix_PopActions Fix_QtFragmentList_sorted_selection Fix_Restrictedkeyset_FragmentMolecule Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns Fix_fitting_potentials Fixes ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion FragmentAction_writes_AtomFragments FragmentMolecule_checks_bonddegrees GeometryObjects Gui_Fixes Gui_displays_atomic_force_velocity ImplicitCharges IndependentFragmentGrids IndependentFragmentGrids_IndividualZeroInstances IndependentFragmentGrids_IntegrationTest IndependentFragmentGrids_Sole_NN_Calculation JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix MoreRobust_FragmentAutomation ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PdbParser_setsAtomName PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks Rewrite_FitPartialCharges RotateToPrincipalAxisSystem_UndoRedo SaturateAtoms_findBestMatching SaturateAtoms_singleDegree StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_LinearAlgebra Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg Switchable_LogView ThirdParty_MPQC_rebuilt_buildsystem TrajectoryDependenant_MaxOrder TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps TremoloParser_setsAtomName Ubuntu_1604_changes stable
Last change on this file since 9dba5f was 9dba5f, checked in by Frederik Heber <heber@…>, 14 years ago

PdbParser can now load and save multiple time steps.

  • WARNING: Molecules are not yet updated, it only works on simple test.
  • TEST: Parser/Pdb regression test on loading/storing multiple steps added.
  • PdbAtomInfoContainer:
    • private static knownDataKeys map from enum to strings, filled in cstor when empty by fillknownDataKeys() and cleared by befriended PdbParser's dstor.
    • operator << to easily print container.
    • getter function getDataKey.
  • PdbKey:
  • Pdbparser:
    • extended load() and added verbosity.
    • readAtomDataLine() can parse trajectories into present atoms.
    • extended save() and added verbosity.
    • new helper functions getAtomToParse() and readPdbAtomInfoContainer().
  • Property mode set to 100644
File size: 6.9 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2010 University of Bonn. All rights reserved.
5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
6 */
7
8/*
9 * PdbAtomInfoContainer.cpp
10 *
11 * Created on: Dec 4, 2010
12 * Author: heber
13 */
14
15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20#include "CodePatterns/MemDebug.hpp"
21
22#include "CodePatterns/Assert.hpp"
23//#include "CodePatterns/Log.hpp"
24#include "CodePatterns/toString.hpp"
25//#include "CodePatterns/Verbose.hpp"
26#include "LinearAlgebra/Vector.hpp"
27#include "PdbAtomInfoContainer.hpp"
28
29PdbAtomInfoContainer::knownDataKeysMap PdbAtomInfoContainer::knownDataKeys;
30
31PdbAtomInfoContainer::PdbAtomInfoContainer() :
32 token("ATOM"),
33 serial(0),
34 name("-"),
35 altLoc('0'),
36 resName("-"),
37 chainID('0'),
38 resSeq(0),
39 iCode(' '),
40 occupancy(0.),
41 tempFactor(0.),
42 element(""),
43 charge(0),
44 timestep(0)
45{
46 if (knownDataKeys.empty())
47 fillknownDataKeys();
48}
49
50PdbAtomInfoContainer::~PdbAtomInfoContainer()
51{}
52
53void PdbAtomInfoContainer::fillknownDataKeys()
54{
55 knownDataKeys[PdbKey::token] = "token";
56 knownDataKeys[PdbKey::serial] = "serial";
57 knownDataKeys[PdbKey::name] = "name";
58 knownDataKeys[PdbKey::altLoc] = "altLoc";
59 knownDataKeys[PdbKey::resName] = "resName";
60 knownDataKeys[PdbKey::chainID] = "chainID";
61 knownDataKeys[PdbKey::resSeq] = "resSeq";
62 knownDataKeys[PdbKey::iCode] = "iCode";
63 knownDataKeys[PdbKey::X] = "X";
64 knownDataKeys[PdbKey::Y] = "Y";
65 knownDataKeys[PdbKey::Z] = "Z";
66 knownDataKeys[PdbKey::occupancy] = "occupancy";
67 knownDataKeys[PdbKey::tempFactor] = "tempFactor";
68 knownDataKeys[PdbKey::element] = "element";
69 knownDataKeys[PdbKey::charge] = "charge";
70 knownDataKeys[PdbKey::timestep] = "timestep";
71}
72
73void PdbAtomInfoContainer::set(const PdbKey::PdbDataKey key, std::string value)
74{
75 switch (key) {
76 case PdbKey::token :
77 ScanKey(token, value);
78 break;
79 case PdbKey::serial :
80 ScanKey(serial, value);
81 break;
82 case PdbKey::name :
83 ScanKey(name, value);
84 break;
85 case PdbKey::altLoc :
86 ScanKey(altLoc, value);
87 break;
88 case PdbKey::resName :
89 ScanKey(resName, value);
90 break;
91 case PdbKey::chainID :
92 ScanKey(chainID, value);
93 break;
94 case PdbKey::resSeq :
95 ScanKey(resSeq, value);
96 break;
97 case PdbKey::iCode :
98 ScanKey(iCode, value);
99 break;
100 case PdbKey::X :
101 ScanKey(XYZ[0], value);
102 break;
103 case PdbKey::Y :
104 ScanKey(XYZ[1], value);
105 break;
106 case PdbKey::Z :
107 ScanKey(XYZ[2], value);
108 break;
109 case PdbKey::occupancy :
110 ScanKey(occupancy, value);
111 break;
112 case PdbKey::tempFactor :
113 ScanKey(tempFactor, value);
114 break;
115 case PdbKey::element :
116 ScanKey(element, value);
117 break;
118 case PdbKey::charge :
119 ScanKey(charge, value);
120 break;
121 case PdbKey::timestep :
122 ScanKey(timestep, value);
123 break;
124 default :
125 std::cout << "Unknown key: " << key << ", value: " << value << std::endl;
126 break;
127 }
128}
129
130template <>
131std::string PdbAtomInfoContainer::get<std::string>(const PdbKey::PdbDataKey key) const
132{
133 switch (key) {
134 case PdbKey::token :
135 return toString(token);
136 case PdbKey::serial :
137 return toString(serial);
138 case PdbKey::name :
139 return toString(name);
140 case PdbKey::altLoc :
141 return toString(altLoc);
142 case PdbKey::resName :
143 return toString(resName);
144 case PdbKey::chainID :
145 return toString(chainID);
146 case PdbKey::resSeq :
147 return toString(resSeq);
148 case PdbKey::iCode :
149 return toString(iCode);
150 case PdbKey::X :
151 return toString(XYZ[0]);
152 case PdbKey::Y :
153 return toString(XYZ[1]);
154 case PdbKey::Z :
155 return toString(XYZ[2]);
156 case PdbKey::occupancy :
157 return toString(occupancy);
158 case PdbKey::tempFactor :
159 return toString(tempFactor);
160 case PdbKey::element :
161 return toString(element);
162 case PdbKey::charge :
163 return toString(charge);
164 case PdbKey::timestep :
165 return toString(timestep);
166 default :
167 std::cout << "Unknown key: " << key << std::endl;
168 return "";
169 }
170}
171
172template <>
173int PdbAtomInfoContainer::get<int>(const PdbKey::PdbDataKey key) const
174{
175 switch (key) {
176 case PdbKey::serial :
177 return serial;
178 case PdbKey::resSeq :
179 return resSeq;
180 case PdbKey::charge :
181 return charge;
182 case PdbKey::timestep :
183 return timestep;
184 default :
185 std::cout << "Unknown key or not presentable as int: " << key << std::endl;
186 return 0;
187 }
188}
189
190template <>
191double PdbAtomInfoContainer::get<double>(const PdbKey::PdbDataKey key) const
192{
193 switch (key) {
194 case PdbKey::X :
195 return XYZ[0];
196 case PdbKey::Y :
197 return XYZ[1];
198 case PdbKey::Z :
199 return XYZ[2];
200 case PdbKey::occupancy :
201 return occupancy;
202 case PdbKey::tempFactor :
203 return tempFactor;
204 default :
205 std::cout << "Unknown key or not presentable as double: " << key << std::endl;
206 return 0.;
207 }
208}
209
210const std::string& PdbAtomInfoContainer::getDataKey(PdbKey::PdbDataKey key) const
211{
212 knownDataKeysMap::const_iterator iter;
213 iter = knownDataKeys.find(key);
214 ASSERT(iter != knownDataKeys.end(),
215 "PdbAtomInfoContainer::getDataKey() - unknown key "
216 +toString(key)+" request, did someone add a key to PdbKey?");
217 return iter->second;
218}
219
220std::ostream& operator<<(std::ostream &ost, const PdbAtomInfoContainer& m)
221{
222 ost << m.getDataKey(PdbKey::token) << "(" << m.get<std::string>(PdbKey::token) <<") ";
223 ost << m.getDataKey(PdbKey::serial) << "(" << m.get<std::string>(PdbKey::serial) <<") ";
224 ost << m.getDataKey(PdbKey::name) << "(" << m.get<std::string>(PdbKey::name) <<") ";
225 ost << m.getDataKey(PdbKey::altLoc) << "(" << m.get<std::string>(PdbKey::altLoc) <<") ";
226 ost << m.getDataKey(PdbKey::resName) << "(" << m.get<std::string>(PdbKey::resName) <<") ";
227 ost << m.getDataKey(PdbKey::chainID) << "(" << m.get<std::string>(PdbKey::chainID) <<") ";
228 ost << m.getDataKey(PdbKey::resSeq) << "(" << m.get<std::string>(PdbKey::resSeq) <<") ";
229 ost << m.getDataKey(PdbKey::iCode) << "(" << m.get<std::string>(PdbKey::iCode) <<") ";
230 ost << m.getDataKey(PdbKey::X) << "(" << m.get<std::string>(PdbKey::X) <<") ";
231 ost << m.getDataKey(PdbKey::Y) << "(" << m.get<std::string>(PdbKey::Y) <<") ";
232 ost << m.getDataKey(PdbKey::Z) << "(" << m.get<std::string>(PdbKey::Z) <<") ";
233 ost << m.getDataKey(PdbKey::occupancy) << "(" << m.get<std::string>(PdbKey::occupancy) <<") ";
234 ost << m.getDataKey(PdbKey::tempFactor) << "(" << m.get<std::string>(PdbKey::tempFactor) <<") ";
235 ost << m.getDataKey(PdbKey::element) << "(" << m.get<std::string>(PdbKey::element) <<") ";
236 ost << m.getDataKey(PdbKey::charge) << "(" << m.get<std::string>(PdbKey::charge) <<") ";
237 ost << m.getDataKey(PdbKey::timestep) << "(" << m.get<std::string>(PdbKey::timestep) <<") ";
238 return ost;
239}
Note: See TracBrowser for help on using the repository browser.