ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/visitors/AtomNameVisitor.cpp
(Generate patch)

Comparing:
trunk/src/visitors/AtomNameVisitor.cpp (file contents), Revision 1390 by gezelter, Wed Nov 25 20:02:06 2009 UTC vs.
branches/development/src/visitors/AtomNameVisitor.cpp (file contents), Revision 1465 by chuckv, Fri Jul 9 23:08:25 2010 UTC

# Line 1 | Line 1
1   /*
2 < * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3 < *
4 < * The University of Notre Dame grants you ("Licensee") a
5 < * non-exclusive, royalty free, license to use, modify and
6 < * redistribute this software in source and binary code form, provided
7 < * that the following conditions are met:
8 < *
9 < * 1. Redistributions of source code must retain the above copyright
10 < *    notice, this list of conditions and the following disclaimer.
11 < *
12 < * 2. Redistributions in binary form must reproduce the above copyright
13 < *    notice, this list of conditions and the following disclaimer in the
14 < *    documentation and/or other materials provided with the
15 < *    distribution.
16 < *
17 < * This software is provided "AS IS," without a warranty of any
18 < * kind. All express or implied conditions, representations and
19 < * warranties, including any implied warranty of merchantability,
20 < * fitness for a particular purpose or non-infringement, are hereby
21 < * excluded.  The University of Notre Dame and its licensors shall not
22 < * be liable for any damages suffered by licensee as a result of
23 < * using, modifying or distributing the software or its
24 < * derivatives. In no event will the University of Notre Dame or its
25 < * licensors be liable for any lost revenue, profit or data, or for
26 < * direct, indirect, special, consequential, incidental or punitive
27 < * damages, however caused and regardless of the theory of liability,
28 < * arising out of the use of or inability to use software, even if the
29 < * University of Notre Dame has been advised of the possibility of
30 < * such damages.
31 < *
32 < * SUPPORT OPEN SCIENCE!  If you use OpenMD or its source code in your
33 < * research, please cite the appropriate papers when you publish your
34 < * work.  Good starting points are:
35 < *                                                                      
36 < * [1]  Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).            
37 < * [2]  Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).          
38 < * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).          
39 < * [4]  Vardeman & Gezelter, in progress (2009).                        
40 < */
41 < #include <sstream>
42 < #include <fstream>
43 < #include "visitors/AtomNameVisitor.hpp"
44 < #include "utils/Trim.hpp"
45 < #include "utils/StringTokenizer.hpp"
46 <
47 <
48 < namespace OpenMD {
49 < AtomNameVisitor::AtomNameVisitor(SimInfo* info) : BaseVisitor(), info_(info) {
50 <    visitorName = "AtomNameVisitor";
51 <    std::stringstream ss(defaultAtomTypeTable);
52 <    readAtomTypes(ss);
53 < }
54 <
55 < AtomNameVisitor::AtomNameVisitor(SimInfo* info, const std::string& atomTypeFile) : BaseVisitor(), info_(info) {
56 <    visitorName = "AtomNameVisitor";
57 <    std::ifstream ifs(atomTypeFile.c_str());
58 <    readAtomTypes(ifs);
59 < }
60 <
61 <
62 < void AtomNameVisitor::visitAtom(Atom* atom) {
63 <    AtomData* atomData;
64 <    GenericData* data;    
65 <    bool haveAtomData;
66 <    
67 <    data = atom->getPropertyByName("ATOMDATA");
68 <    if(data != NULL){
69 <      atomData = dynamic_cast<AtomData*>(data);  
70 <      if(atomData == NULL){
71 <        std::cerr << "can not get Atom Data from " << atom->getType() << std::endl;
72 <        atomData = new AtomData;
73 <        haveAtomData = false;      
74 <      } else {
75 <        haveAtomData = true;
76 <      }
77 <    } else {
78 <      atomData = new AtomData;
79 <      haveAtomData = false;
80 <    }
81 <
82 <    std::vector<AtomInfo*>::iterator i;
83 <    for (AtomInfo* atomInfo = atomData->beginAtomInfo(i); atomInfo != NULL; atomInfo = atomData->nextAtomInfo(i)) {
84 <        atomInfo->atomTypeName = getBaseAtomTypeName(atomInfo->atomTypeName);        
85 <    }
86 <    
87 < }
88 <
89 < void AtomNameVisitor::visit(RigidBody* rb) {
90 <    std::vector<Atom*>::iterator i;
91 <
92 <  for (Atom* atom = rb->beginAtom(i); atom != NULL; atom = rb->nextAtom(i)) {
93 <    visit(atom);
94 <  }
95 < }
96 <
97 <
98 < void AtomNameVisitor::readAtomTypes(std::istream& is) {
99 <    const int bufferSize = 65535;
100 <    char buffer[bufferSize];
101 <    std::string line;
102 <    while(is.getline(buffer, bufferSize)) {
103 <      line = trimLeftCopy(buffer);
104 <      //a line begins with "//" is comment
105 <      // let's also call lines starting with # and ! as comments
106 <     if ( line.empty() ||
107 <                  (line.size() >= 2 && line[0] == '/' && line[1] == '/') ||
108 <                  (line.size() >= 1 && line[0] == '#') ||
109 <                  (line.size() >= 1 && line[0] == '!') ) {
110 <        continue;
111 <      } else {
112 <        StringTokenizer tokenizer(line);
113 <        if (tokenizer.countTokens() >= 2) {
114 <            std::string atomName = tokenizer.nextToken();
115 <            std::string baseAtomName = tokenizer.nextToken();
116 <            atomNames_.insert(MapType::value_type(atomName, baseAtomName));
117 <        }
118 <      }
119 <    }
120 <
121 < }
122 <
123 < std::string AtomNameVisitor::getBaseAtomTypeName(const std::string& atomTypeName) {
124 <    MapType::iterator i;
125 <    i = atomNames_.find(atomTypeName);
126 <    return i != atomNames_.end() ? i->second : atomTypeName;
127 < }
128 <
129 <
130 < const std::string AtomNameVisitor::toString() {
131 <    char   buffer[65535];
132 <    std::string result;
133 <
134 <    sprintf(buffer,
135 <            "------------------------------------------------------------------\n");
136 <    result += buffer;
137 <
138 <    sprintf(buffer, "Visitor name: %s\n", visitorName.c_str());
139 <    result += buffer;
140 <
141 <    sprintf(buffer,
142 <            "Visitor Description: print base atom types\n");
143 <    result += buffer;
144 <
145 <    sprintf(buffer,
146 <            "------------------------------------------------------------------\n");
147 <    result += buffer;
148 <
149 <    return result;
150 < }
151 <
152 < }
2 > * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3 > *
4 > * The University of Notre Dame grants you ("Licensee") a
5 > * non-exclusive, royalty free, license to use, modify and
6 > * redistribute this software in source and binary code form, provided
7 > * that the following conditions are met:
8 > *
9 > * 1. Redistributions of source code must retain the above copyright
10 > *    notice, this list of conditions and the following disclaimer.
11 > *
12 > * 2. Redistributions in binary form must reproduce the above copyright
13 > *    notice, this list of conditions and the following disclaimer in the
14 > *    documentation and/or other materials provided with the
15 > *    distribution.
16 > *
17 > * This software is provided "AS IS," without a warranty of any
18 > * kind. All express or implied conditions, representations and
19 > * warranties, including any implied warranty of merchantability,
20 > * fitness for a particular purpose or non-infringement, are hereby
21 > * excluded.  The University of Notre Dame and its licensors shall not
22 > * be liable for any damages suffered by licensee as a result of
23 > * using, modifying or distributing the software or its
24 > * derivatives. In no event will the University of Notre Dame or its
25 > * licensors be liable for any lost revenue, profit or data, or for
26 > * direct, indirect, special, consequential, incidental or punitive
27 > * damages, however caused and regardless of the theory of liability,
28 > * arising out of the use of or inability to use software, even if the
29 > * University of Notre Dame has been advised of the possibility of
30 > * such damages.
31 > *
32 > * SUPPORT OPEN SCIENCE!  If you use OpenMD or its source code in your
33 > * research, please cite the appropriate papers when you publish your
34 > * work.  Good starting points are:
35 > *                                                                      
36 > * [1]  Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).            
37 > * [2]  Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).          
38 > * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).          
39 > * [4]  Vardeman & Gezelter, in progress (2009).                        
40 > */
41 > #include <sstream>
42 > #include <fstream>
43 > #include "visitors/AtomNameVisitor.hpp"
44 > #include "utils/Trim.hpp"
45 > #include "utils/StringTokenizer.hpp"
46 > #include "brains/SimInfo.hpp"
47 >
48 >
49 > namespace OpenMD {
50 >  AtomNameVisitor::AtomNameVisitor(SimInfo* info) : BaseVisitor(),
51 >                                                    info_(info) {
52 >    visitorName = "AtomNameVisitor";
53 >    ff_ = info_->getForceField();
54 >  }
55 >  
56 >  
57 >  void AtomNameVisitor::visitAtom(Atom* atom) {
58 >    AtomData* atomData;
59 >    GenericData* data;    
60 >    bool haveAtomData;
61 >    
62 >    data = atom->getPropertyByName("ATOMDATA");
63 >    if(data != NULL){
64 >      atomData = dynamic_cast<AtomData*>(data);  
65 >      if(atomData == NULL){
66 >        std::cerr << "can not get Atom Data from " << atom->getType() << std::endl;
67 >        atomData = new AtomData;
68 >        haveAtomData = false;      
69 >      } else {
70 >        haveAtomData = true;
71 >      }
72 >    } else {
73 >      atomData = new AtomData;
74 >      haveAtomData = false;
75 >    }
76 >    
77 >    std::vector<AtomInfo*>::iterator i;
78 >    for (AtomInfo* atomInfo = atomData->beginAtomInfo(i);
79 >         atomInfo != NULL;
80 >         atomInfo = atomData->nextAtomInfo(i)) {
81 >      
82 >      // query the force field for the AtomType associated with this
83 >      // atomTypeName:
84 >      AtomType* at = ff_->getAtomType(atomInfo->atomTypeName);
85 >      // get the chain of base types for this atom type:
86 >      std::vector<AtomType*> ayb = at->allYourBase();
87 >      // use the last type in the chain of base types for the name:
88 >      std::string bn = ayb[ayb.size()-1]->getName();
89 >      
90 >      atomInfo->atomTypeName = bn;      
91 >    }
92 >  }
93 >  
94 >  void AtomNameVisitor::visit(RigidBody* rb) {
95 >    std::vector<Atom*>::iterator i;
96 >    
97 >    for (Atom* atom = rb->beginAtom(i); atom != NULL; atom = rb->nextAtom(i)) {
98 >      visit(atom);
99 >    }
100 >  }
101 >  
102 >  
103 >  const std::string AtomNameVisitor::toString() {
104 >    char   buffer[65535];
105 >    std::string result;
106 >    
107 >    sprintf(buffer,
108 >            "------------------------------------------------------------------\n");
109 >    result += buffer;
110 >    
111 >    sprintf(buffer, "Visitor name: %s\n", visitorName.c_str());
112 >    result += buffer;
113 >    
114 >    sprintf(buffer,
115 >            "Visitor Description: print base atom types\n");
116 >    result += buffer;
117 >    
118 >    sprintf(buffer,
119 >            "------------------------------------------------------------------\n");
120 >    result += buffer;
121 >    
122 >    return result;
123 >  }
124 >  
125 > }

Comparing:
trunk/src/visitors/AtomNameVisitor.cpp (property svn:keywords), Revision 1390 by gezelter, Wed Nov 25 20:02:06 2009 UTC vs.
branches/development/src/visitors/AtomNameVisitor.cpp (property svn:keywords), Revision 1465 by chuckv, Fri Jul 9 23:08:25 2010 UTC

# Line 0 | Line 1
1 + Author Id Revision Date

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines