OpenMD 3.2
Molecular Dynamics in the Open
Loading...
Searching...
No Matches
TokenMap.cpp
1/*
2 * Copyright (c) 2004-present, The University of Notre Dame. All rights
3 * reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
32 * research, please cite the following paper when you publish your work:
33 *
34 * [1] Drisko et al., J. Open Source Softw. 9, 7004 (2024).
35 *
36 * Good starting points for code and simulation methodology are:
37 *
38 * [2] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
39 * [3] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
40 * [4] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).
41 * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
42 * [6] Kuang & Gezelter, Mol. Phys., 110, 691-701 (2012).
43 * [7] Lamichhane, Gezelter & Newman, J. Chem. Phys. 141, 134109 (2014).
44 * [8] Bhattarai, Newman & Gezelter, Phys. Rev. B 99, 094106 (2019).
45 * [9] Drisko & Gezelter, J. Chem. Theory Comput. 20, 4986-4997 (2024).
46 */
47
48#include "selection/TokenMap.hpp"
49
50namespace OpenMD {
51
52 // Complete selection-language vocabulary in one place.
53 // Each entry: { keyword, token-type }
54 // Aliases (e.g. "&" for "and") map to the same token type.
55 struct TokenEntry {
56 const char* keyword;
57 int tok;
58 };
59
60 static const TokenEntry tokenTable[] = {
61 // commands
62 {"define", Token::define},
63 {"select", Token::select},
64
65 // grouping
66 {"(", Token::leftparen},
67 {")", Token::rightparen},
68
69 // boolean operators (with aliases)
70 {"and", Token::opAnd},
71 {"&", Token::opAnd},
72 {"&&", Token::opAnd},
73 {"or", Token::opOr},
74 {",", Token::opOr},
75 {"|", Token::opOr},
76 {"||", Token::opOr},
77 {"not", Token::opNot},
78 {"!", Token::opNot},
79
80 // comparison operators
81 {"<", Token::opLT},
82 {"<=", Token::opLE},
83 {">=", Token::opGE},
84 {">", Token::opGT},
85 {"==", Token::opEQ},
86 {"!=", Token::opNE},
87
88 // keywords
89 {"within", Token::within},
90 {".", Token::dot},
91 {"to", Token::to},
92 {"all", Token::all},
93 {"none", Token::none},
94
95 // atom properties
96 {"mass", Token::mass},
97 {"charge", Token::charge},
98 {"x", Token::x},
99 {"y", Token::y},
100 {"z", Token::z},
101 {"wrappedx", Token::wrappedX},
102 {"wrappedy", Token::wrappedY},
103 {"wrappedz", Token::wrappedZ},
104 {"r", Token::r},
105 {"atomno", Token::atomno},
106
107 // geometric selectors
108 {"hull", Token::hull},
109 {"alphahull", Token::alphahull},
110 };
111
112 TokenMap::TokenMap() {
113 for (const auto& entry : tokenTable) {
114 std::string key(entry.keyword);
115 tokenMap_.insert({key, Token(entry.tok, key)});
116 }
117 }
118
119 Token* TokenMap::getToken(const std::string& ident) {
120 auto i = tokenMap_.find(ident);
121 return i != tokenMap_.end() ? &(i->second) : NULL;
122 }
123} // namespace OpenMD
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.