179 |
|
public: |
180 |
|
typedef std::map<string, IntegratorCreator*> CreatorMapType; |
181 |
|
|
182 |
< |
bool registerIntegrator(IntegratorCreator* creator); |
182 |
> |
bool registerIntegrator(IntegratorCreator* creator) { |
183 |
> |
return creatorMap_.insert(creator->getIdent(), creator).second; |
184 |
> |
} |
185 |
|
|
186 |
< |
Integrator* createIntegrator(const string& id, SimInfo* info); |
186 |
> |
Integrator* createIntegrator(const string& id, SimInfo* info) { |
187 |
> |
Integrator* result = NULL; |
188 |
> |
CreatorMapType::iterator i = creatorMap_.find(id); |
189 |
> |
if (i != creatorMap_.end()) { |
190 |
> |
result = (i->second)->create(info); |
191 |
> |
} |
192 |
> |
return result; |
193 |
> |
} |
194 |
|
|
195 |
|
private: |
196 |
|
CreatorMapType creatorMap_; |
197 |
|
}; |
189 |
– |
|
198 |
|
\end{lstlisting} |
199 |
< |
|
192 |
< |
\begin{lstlisting}[float,caption={[The implementation of Factory pattern (II)].},label={appendixScheme:factoryDeclarationImplementation}] |
193 |
< |
|
194 |
< |
bool IntegratorFactory::unregisterIntegrator(const string& id) { |
195 |
< |
return creatorMap_.erase(id) == 1; |
196 |
< |
} |
197 |
< |
|
198 |
< |
Integrator* IntegratorFactory::createIntegrator(const string& id, |
199 |
< |
SimInfo* info) { |
200 |
< |
CreatorMapType::iterator i = creatorMap_.find(id); |
201 |
< |
if (i != creatorMap_.end()) { |
202 |
< |
return (i->second)->create(info); |
203 |
< |
} else { |
204 |
< |
return NULL; |
205 |
< |
} |
206 |
< |
} |
207 |
< |
|
208 |
< |
\end{lstlisting} |
209 |
< |
|
210 |
< |
\begin{lstlisting}[float,caption={[The implementation of Factory pattern (III)].},label={appendixScheme:integratorCreator}] |
199 |
> |
\begin{lstlisting}[float,caption={[The implementation of Factory pattern (III)]Souce code of creator classes.},label={appendixScheme:integratorCreator}] |
200 |
|
|
201 |
|
class IntegratorCreator { |
202 |
|
public: |
279 |
|
}; |
280 |
|
|
281 |
|
\end{lstlisting} |
282 |
+ |
|
283 |
|
\section{\label{appendixSection:concepts}Concepts} |
284 |
|
|
285 |
|
OOPSE manipulates both traditional atoms as well as some objects |
286 |
|
that {\it behave like atoms}. These objects can be rigid |
287 |
|
collections of atoms or atoms which have orientational degrees of |
288 |
< |
freedom. Here is a diagram of the class heirarchy: |
289 |
< |
|
288 |
> |
freedom. A diagram of the class heirarchy is illustrated in |
289 |
> |
Fig.~\ref{oopseFig:heirarchy}. Every Molecule, Atom and |
290 |
> |
DirectionalAtom in {\sc OOPSE} have their own names which are |
291 |
> |
specified in the {\tt .md} file. In contrast, RigidBodies are |
292 |
> |
denoted by their membership and index inside a particular molecule: |
293 |
> |
[MoleculeName]\_RB\_[index] (the contents inside the brackets depend |
294 |
> |
on the specifics of the simulation). The names of rigid bodies are |
295 |
> |
generated automatically. For example, the name of the first rigid |
296 |
> |
body in a DMPC molecule is DMPC\_RB\_0. |
297 |
|
\begin{figure} |
298 |
|
\centering |
299 |
< |
\includegraphics[width=3in]{heirarchy.eps} |
300 |
< |
\caption[Class heirarchy for StuntDoubles in {\sc oopse}-3.0]{ \\ |
301 |
< |
The class heirarchy of StuntDoubles in {\sc oopse}-3.0. The |
305 |
< |
selection syntax allows the user to select any of the objects that |
306 |
< |
are descended from a StuntDouble.} \label{oopseFig:heirarchy} |
307 |
< |
\end{figure} |
308 |
< |
|
299 |
> |
\includegraphics[width=\linewidth]{heirarchy.eps} |
300 |
> |
\caption[Class heirarchy for ojects in {\sc OOPSE}]{ A diagram of |
301 |
> |
the class heirarchy. |
302 |
|
\begin{itemize} |
303 |
|
\item A {\bf StuntDouble} is {\it any} object that can be manipulated by the |
304 |
|
integrators and minimizers. |
307 |
|
\item A {\bf RigidBody} is a collection of {\bf Atom}s or {\bf |
308 |
|
DirectionalAtom}s which behaves as a single unit. |
309 |
|
\end{itemize} |
310 |
< |
|
311 |
< |
Every Molecule, Atom and DirectionalAtom in {\sc OOPSE} have their |
319 |
< |
own names which are specified in the {\tt .md} file. In contrast, |
320 |
< |
RigidBodies are denoted by their membership and index inside a |
321 |
< |
particular molecule: [MoleculeName]\_RB\_[index] (the contents |
322 |
< |
inside the brackets depend on the specifics of the simulation). The |
323 |
< |
names of rigid bodies are generated automatically. For example, the |
324 |
< |
name of the first rigid body in a DMPC molecule is DMPC\_RB\_0. |
310 |
> |
} \label{oopseFig:heirarchy} |
311 |
> |
\end{figure} |
312 |
|
|
313 |
|
\section{\label{appendixSection:syntax}Syntax of the Select Command} |
314 |
|
|