/*
 * CreateMicelle.def
 *
 *  Created on: Sept 29, 2010
 *      Author: dueck
 */

// all includes and forward declarations necessary for non-integral types below
#include <vector>
#include "LinearAlgebra/Vector.hpp"

class molecule;

// "undefine" if no parameters are required
#define paramtypes (int)(Vector)(double)(bool)
#define paramtokens ("create-micelle")("position")("radius")("DoRotate")
#define paramdescriptions ("number of molecules")("center of micelle in R^3 space")("radius of mcielle")("whether to mirror molecule perpendicular to z axis")
#define paramdefaults (NODEFAULT)(NODEFAULT)(NODEFAULT)("0")
#define paramreferences (N)(center)(radius)(DoRotate)

#define statetypes (std::vector<molecule *>)(molecule *)(std::vector<Vector>)
#define statereferences (CreatedMolecules)(stick)(stickPositions)

// some defines for all the names, you may use ACTION, STATE and PARAMS
#define CATEGORY Molecule
#define ACTIONNAME CreateMicelle
#define MENUNAME "molecule"
#define MENUPOSITION 2
#define TOKEN "create-micelle"

// finally the information stored in the ActionTrait specialization
#define DESCRIPTION "creates a micelle of molecules by aligning molecule along z axis and placing perpendicular to sphere\'s surface. Note that alignment has freedom with respect to z axis, use DoRotate to compensate."
#undef SHORTFORM
