OPAL (Object Oriented Parallel Accelerator Library)  2024.1
OPAL
Configure.cpp
Go to the documentation of this file.
1 //
2 // Namespace Configure
3 // The OPAL configurator.
4 // This class must be modified to configure the commands to be contained
5 // in an executable OPAL program. For each command an exemplar object
6 // is constructed and linked to the main directory. This exemplar is then
7 // available to the OPAL parser for cloning.
8 // This class could be part of the class OpalData. It is separated from
9 // that class and opale into a special module in order to reduce
10 // dependencies between modules.
11 //
12 // Copyright (c) 200x - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
13 // All rights reserved
14 //
15 // This file is part of OPAL.
16 //
17 // OPAL is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 // You should have received a copy of the GNU General Public License
23 // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
24 //
27 
29 
30 // Basic action commands.
31 #include "BasicActions/Call.h"
34 #include "BasicActions/Echo.h"
35 #include "BasicActions/Help.h"
36 #include "BasicActions/Option.h"
37 #include "BasicActions/Select.h"
38 #include "BasicActions/Stop.h"
39 #include "BasicActions/Quit.h"
40 #include "BasicActions/System.h"
41 #include "BasicActions/PSystem.h"
42 #include "BasicActions/Title.h"
43 #include "BasicActions/Value.h"
44 
45 // Macro command.
46 #include "OpalParser/MacroCmd.h"
47 
48 // Commands introducing a special mode.
49 #include "Track/TrackCmd.h"
50 
51 // Table-related commands.
52 #include "Structure/Beam.h"
53 #include "Structure/FieldSolver.h"
55 #include "Structure/OpalWake.h"
57 #include "Utilities/OpalFilter.h"
58 #include "TrimCoils/OpalTrimCoil.h"
59 #include "Tables/List.h"
60 
61 // Value definitions commands.
67 
68 // Element commands.
70 #include "Elements/OpalCavity.h"
72 #include "Elements/OpalCyclotron.h"
73 #include "Elements/OpalDegrader.h"
74 #include "Elements/OpalDrift.h"
76 #include "Elements/OpalEnge.h"
78 #include "Elements/OpalHKicker.h"
79 #include "Elements/OpalKicker.h"
80 #include "Elements/OpalMarker.h"
81 #include "Elements/OpalMonitor.h"
82 #include "Elements/OpalMultipole.h"
87 #include "Elements/OpalOctupole.h"
93 #include "Elements/OpalPepperPot.h"
95 #include "Elements/OpalProbe.h"
97 #include "Elements/OpalRBend.h"
98 #include "Elements/OpalRBend3D.h"
101 #include "Elements/OpalSBend.h"
102 #include "Elements/OpalSBend3D.h"
104 #include "Elements/OpalSeptum.h"
105 #include "Elements/OpalSextupole.h"
106 #include "Elements/OpalSlit.h"
107 #include "Elements/OpalSolenoid.h"
108 #include "Elements/OpalSource.h"
109 #include "Elements/OpalStripper.h"
111 #include "Elements/OpalVacuum.h"
115 #include "Elements/OpalVKicker.h"
116 
117 #ifdef ENABLE_OPAL_FEL
118 #include "Elements/OpalUndulator.h"
119 #endif
120 
121 // Structure-related commands.
122 #include "Lines/Line.h"
123 #include "Lines/Sequence.h"
124 
125 // Optimize command
126 #include "Optimize/OptimizeCmd.h"
127 #include "Optimize/DVar.h"
128 #include "Optimize/Objective.h"
129 #include "Optimize/Constraint.h"
130 
131 // Sample command
132 #include "Sample/SampleCmd.h"
133 #include "Sample/OpalSample.h"
134 
135 #include "changes.h"
136 
137 // Modify these methods to add new commands.
138 // ------------------------------------------------------------------------
139 
140 namespace {
141 
142  void makeActions() {
144  opal->create(new Call());
145  opal->create(new DumpFields());
146  opal->create(new DumpEMFields());
147  opal->create(new Echo());
148  opal->create(new Help());
149  opal->create(new List());
150  opal->create(new Option());
151  opal->create(new OptimizeCmd());
152  opal->create(new SampleCmd());
153  opal->create(new Select());
154  opal->create(new Stop());
155  opal->create(new Quit());
156  opal->create(new PSystem());
157  opal->create(new System());
158  opal->create(new Title());
159  opal->create(new TrackCmd());
160  opal->create(new Value());
161  }
162 
163  void makeDefinitions() {
165  // Must create the value definitions first.
166  opal->create(new BoolConstant());
167  opal->create(new RealConstant());
168  opal->create(new RealVariable());
169  opal->create(new RealVector());
170  opal->create(new StringConstant());
171 
172  opal->create(new Beam());
173  opal->create(new FieldSolver());
174  opal->create(new BoundaryGeometry());
175  opal->create(new OpalWake());
176  opal->create(new ParticleMatterInteraction());
177 
178  opal->create(new OpalFilter());
179  opal->create(new OpalTrimCoil());
180 
181  opal->create(new Distribution());
182 
183  opal->create(new MacroCmd());
184 
185  opal->create(new DVar());
186  opal->create(new Objective());
187  opal->create(new Constraint());
188 
189  opal->create(new OpalSample());
190  }
191 
192  void makeElements() {
194  opal->create(new OpalAsymmetricEnge());
195  opal->create(new OpalCavity());
196  opal->create(new OpalCCollimator());
197  opal->create(new OpalCyclotron());
198  opal->create(new OpalDegrader());
199  opal->create(new OpalDrift());
200  opal->create(new OpalECollimator());
201  opal->create(new OpalFlexibleCollimator());
202  opal->create(new OpalHKicker());
203  opal->create(new OpalKicker());
204  opal->create(new OpalMarker());
205  opal->create(new OpalMonitor());
206  opal->create(new OpalMultipole());
207  opal->create(new OpalMultipoleT());
208  opal->create(new OpalMultipoleTStraight());
211  opal->create(new OpalOctupole());
213 // opal->create(new OpalOffset::OpalLocalCylindricalOffset());
214 // opal->create(new OpalOffset::OpalGlobalCartesianOffset());
215 // opal->create(new OpalOffset::OpalGlobalCylindricalOffset());
216  opal->create(new OpalOutputPlane());
217  opal->create(new OpalPepperPot());
219  opal->create(new OpalProbe());
220  opal->create(new OpalQuadrupole());
221  opal->create(new OpalRBend());
222  opal->create(new OpalRBend3D());
223  opal->create(new OpalRCollimator());
224  opal->create(new OpalRingDefinition());
225  opal->create(new OpalSBend());
226  opal->create(new OpalSBend3D());
227  opal->create(new OpalScalingFFAMagnet());
228  opal->create(new OpalSeptum());
229  opal->create(new OpalSextupole());
230  opal->create(new OpalSlit());
231  opal->create(new OpalSolenoid());
232  opal->create(new OpalSource());
233  opal->create(new OpalStripper());
234  opal->create(new OpalTravelingWave());
235 #ifdef ENABLE_OPAL_FEL
236  opal->create(new OpalUndulator());
237 #endif
238  opal->create(new OpalVacuum());
239  opal->create(new OpalVariableRFCavity());
241  opal->create(new OpalVerticalFFAMagnet());
242  opal->create(new OpalVKicker());
243 
244  opal->create(new Line());
245  opal->create(new Sequence());
246  }
247 };
248 
249 namespace Configure {
250  void configure() {
251  makeDefinitions();
252  makeElements();
253  makeActions();
255  }
256 };
The global OPAL structure.
Definition: OpalData.h:49
static OpalData * getInstance()
Definition: OpalData.cpp:196
Definition: Call.h:24
The OPTIMIZE command.
Definition: OptimizeCmd.h:16
The MARKER element.
Definition: OpalMarker.h:28
Definition: DVar.h:6
void create(Object *newObject)
Create new object.
Definition: OpalData.cpp:476
Definition: Select.h:26
Definition: Echo.h:24
void configure()
Configure all commands.
Definition: Configure.cpp:250
Definition: Help.h:24
void fillChanges()
Definition: changes.cpp:9
Definition: Quit.h:24
Definition: System.h:24
Definition: Option.h:30
The LIST command.
Definition: List.h:32
Definition: Value.h:24
Definition: Title.h:24
Interface for output plane element.
Definition: Beam.h:31
Definition: Stop.h:24
Definition: Line.h:32