OPAL (Object Oriented Parallel Accelerator Library) 2024.2
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
22
23#include <array>
24#include <memory>
25#include <string>
26#include <string_view>
27#include <vector>
28
29class Beam;
30class OpalData;
31class DataSink;
32class Distribution;
33class FieldSolver;
34class H5PartWrapper;
35class Inform;
37class Tracker;
38
39class TrackRun: public Action {
40
41public:
43 TrackRun();
44
45 virtual ~TrackRun();
46
48 virtual TrackRun* clone(const std::string& name);
49
51 virtual void execute();
52
53 using Action::print;
54 Inform& print(Inform& os) const;
55
56 static std::shared_ptr<Tracker> getTracker();
57
58private:
59 enum class RunMethod: unsigned short {
60 NONE,
63 THICK
64 };
65
66 static inline constexpr std::array<std::pair<RunMethod, std::string_view>, 5> runMethodMap {{
67 {TrackRun::RunMethod::PARALLELT, "PARALLEL-T"},
68 {TrackRun::RunMethod::CYCLOTRONT, "CYCLOTRON-T"},
70 }};
71
72 // Not implemented.
74 void operator=(const TrackRun&);
75
76 // Clone constructor.
77 TrackRun(const std::string& name, TrackRun* parent);
78
79 void setRunMethod();
80 std::string getRunMethodName() const;
81
82 void setupTTracker();
84 void setupThickTracker();
85 void setupFieldsolver();
86
87 void initPhaseSpaceSink();
88
89 void initDataSink(const int& numBunch = 1);
90
92
93 double setDistributionParallelT(Beam* beam);
94
95 /* itsTracker_m is a static object; this enables access to the last executed
96 * tracker object without excessive gymnastics, e.g. for access to the
97 * field maps in PyField
98 */
99 static std::shared_ptr<Tracker> itsTracker_m;
100
102 std::vector<Distribution*> distrs_m;
103
105
107
109
111
113
114 static const std::string defaultDistribution;
115
117
118 // macromass and charge for simulation particles
121};
122
123inline Inform& operator<<(Inform& os, const TrackRun& b) {
124 return b.print(os);
125}
126
127#endif // OPAL_TrackRun_HH
Inform & operator<<(Inform &os, const TrackRun &b)
Definition TrackRun.h:123
const std::string name
The base class for all OPAL actions.
Definition Action.h:30
virtual void print(std::ostream &) const
Print the object.
Definition Object.cpp:161
The global OPAL structure.
Definition OpalData.h:49
Definition Beam.h:31
RunMethod method_m
Definition TrackRun.h:116
DataSink * dataSink_m
Definition TrackRun.h:106
H5PartWrapper * phaseSpaceSink_m
Definition TrackRun.h:108
virtual void execute()
Execute the command.
Definition TrackRun.cpp:156
void setupTTracker()
Definition TrackRun.cpp:327
std::vector< Distribution * > distrs_m
Definition TrackRun.h:102
bool isFollowupTrack_m
Definition TrackRun.h:112
void setRunMethod()
Definition TrackRun.cpp:239
virtual ~TrackRun()
Definition TrackRun.cpp:148
static std::shared_ptr< Tracker > itsTracker_m
Definition TrackRun.h:99
FieldSolver * fieldSolver_m
Definition TrackRun.h:104
void operator=(const TrackRun &)
void initDataSink(const int &numBunch=1)
Definition TrackRun.cpp:594
TrackRun(const TrackRun &)
TrackRun()
Exemplar constructor.
Definition TrackRun.cpp:83
double macromass_m
Definition TrackRun.h:119
virtual TrackRun * clone(const std::string &name)
Make clone.
Definition TrackRun.cpp:152
static const std::string defaultDistribution
Definition TrackRun.h:114
double setDistributionParallelT(Beam *beam)
Definition TrackRun.cpp:621
std::string getRunMethodName() const
Definition TrackRun.cpp:248
void initPhaseSpaceSink()
Definition TrackRun.cpp:558
void setBoundaryGeometry()
Definition TrackRun.cpp:608
Distribution * dist_m
Definition TrackRun.h:101
void setupFieldsolver()
Definition TrackRun.cpp:525
void setupCyclotronTracker()
Definition TrackRun.cpp:411
double macrocharge_m
Definition TrackRun.h:120
static constexpr std::array< std::pair< RunMethod, std::string_view >, 5 > runMethodMap
Definition TrackRun.h:66
OpalData * opalData_m
Definition TrackRun.h:110
Inform & print(Inform &os) const
Definition TrackRun.cpp:692
void setupThickTracker()
Definition TrackRun.cpp:252
static std::shared_ptr< Tracker > getTracker()
Definition TrackRun.cpp:716