OPAL (Object Oriented Parallel Accelerator Library)  2024.1
OPAL
TrackRun.h
Go to the documentation of this file.
1 //
2 // Class TrackRun
3 // The RUN command.
4 //
5 // Copyright (c) 200x - 2023, Paul Scherrer Institut, Villigen PSI, Switzerland
6 // All rights reserved
7 //
8 // This file is part of OPAL.
9 //
10 // OPAL is free software: you can redistribute it and/or modify
11 // it under the terms of the GNU General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
17 //
18 #ifndef OPAL_TrackRun_HH
19 #define OPAL_TrackRun_HH
20 
21 #include "AbstractObjects/Action.h"
22 
23 #include <boost/bimap.hpp>
24 #include <memory>
25 #include <string>
26 #include <vector>
27 
28 class Beam;
29 class OpalData;
30 class DataSink;
31 class Distribution;
32 class FieldSolver;
33 class H5PartWrapper;
34 class Inform;
35 class ParallelTTracker;
36 class Tracker;
37 
38 class TrackRun: public Action {
39 
40 public:
42  TrackRun();
43 
44  virtual ~TrackRun();
45 
47  virtual TrackRun* clone(const std::string& name);
48 
50  virtual void execute();
51 
52  using Action::print;
53  Inform& print(Inform& os) const;
54 
55  static std::shared_ptr<Tracker> getTracker();
56 
57 private:
58  enum class RunMethod: unsigned short {
59  NONE,
60  PARALLELT,
61  CYCLOTRONT,
62  THICK
63  };
64 
65  // Not implemented.
66  TrackRun(const TrackRun&);
67  void operator=(const TrackRun&);
68 
69  // Clone constructor.
70  TrackRun(const std::string& name, TrackRun* parent);
71 
72  void setRunMethod();
73  std::string getRunMethodName() const;
74 
75  void setupTTracker();
76  void setupCyclotronTracker();
77  void setupThickTracker();
78  void setupFieldsolver();
79 
80  void initPhaseSpaceSink();
81 
82  void initDataSink(const int& numBunch = 1);
83 
84  void setBoundaryGeometry();
85 
86  double setDistributionParallelT(Beam* beam);
87 
88  /* itsTracker_m is a static object; this enables access to the last executed
89  * tracker object without excessive gymnastics, e.g. for access to the
90  * field maps in PyField
91  */
92  static std::shared_ptr<Tracker> itsTracker_m;
93 
95  std::vector<Distribution*> distrs_m;
96 
98 
100 
102 
104 
106 
107  static const std::string defaultDistribution;
108 
110  static const boost::bimap<RunMethod, std::string> stringMethod_s;
111 
112  // macromass and charge for simulation particles
113  double macromass_m;
115 };
116 
117 inline Inform& operator<<(Inform& os, const TrackRun& b) {
118  return b.print(os);
119 }
120 
121 #endif // OPAL_TrackRun_HH
The global OPAL structure.
Definition: OpalData.h:49
virtual void execute()
Execute the command.
Definition: TrackRun.cpp:170
void setupTTracker()
Definition: TrackRun.cpp:344
void initPhaseSpaceSink()
Definition: TrackRun.cpp:575
void setRunMethod()
Definition: TrackRun.cpp:253
std::ostream & operator<<(std::ostream &os, const Attribute &attr)
Definition: Attribute.cpp:169
bool isFollowupTrack_m
Definition: TrackRun.h:105
H5PartWrapper * phaseSpaceSink_m
Definition: TrackRun.h:101
static std::shared_ptr< Tracker > getTracker()
Definition: TrackRun.cpp:733
void setupFieldsolver()
Definition: TrackRun.cpp:542
static std::shared_ptr< Tracker > itsTracker_m
Definition: TrackRun.h:92
Distribution * dist_m
Definition: TrackRun.h:94
static const boost::bimap< RunMethod, std::string > stringMethod_s
Definition: TrackRun.h:110
void setupCyclotronTracker()
Definition: TrackRun.cpp:428
double macrocharge_m
Definition: TrackRun.h:114
Definition: Inform.h:42
FieldSolver * fieldSolver_m
Definition: TrackRun.h:97
RunMethod method_m
Definition: TrackRun.h:109
const std::string name
virtual void print(std::ostream &) const
Print the object.
Definition: Object.cpp:161
Inform & print(Inform &os) const
Definition: TrackRun.cpp:709
std::vector< Distribution * > distrs_m
Definition: TrackRun.h:95
void operator=(const TrackRun &)
double setDistributionParallelT(Beam *beam)
Definition: TrackRun.cpp:638
void setBoundaryGeometry()
Definition: TrackRun.cpp:625
DataSink * dataSink_m
Definition: TrackRun.h:99
OpalData * opalData_m
Definition: TrackRun.h:103
static const std::string defaultDistribution
Definition: TrackRun.h:107
virtual TrackRun * clone(const std::string &name)
Make clone.
Definition: TrackRun.cpp:165
void initDataSink(const int &numBunch=1)
Definition: TrackRun.cpp:611
void setupThickTracker()
Definition: TrackRun.cpp:269
Definition: Beam.h:31
std::string getRunMethodName() const
Definition: TrackRun.cpp:265
The base class for all OPAL actions.
Definition: Action.h:30
TrackRun()
Exemplar constructor.
Definition: TrackRun.cpp:93
virtual ~TrackRun()
Definition: TrackRun.cpp:160
double macromass_m
Definition: TrackRun.h:113