OPALX (Object Oriented Parallel Accelerator Library for Exascal) MINIorX
OPALX
RFCavityRep.cpp
Go to the documentation of this file.
1//
2// Class RFCavityRep
3// Representation for a RF cavity.
4//
5// Copyright (c) 200x - 2020, 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//
20
21
23
24namespace {
25 struct Entry {
26 const char *name;
27 double(RFCavityRep::*get)() const;
28 void (RFCavityRep::*set)(double);
29 };
30
31 static const Entry entries[] = {
32 {
33 "L",
36 },
37 {
38 "AMPLITUDE",
41 },
42 {
43 "FREQUENCY",
46 },
47 {
48 "PHASE",
51 },
52 { 0, 0, 0 }
53 };
54}
55
56
60
61
63 RFCavity(right),
64 geometry(right.geometry)
65{}
66
67
68RFCavityRep::RFCavityRep(const std::string &name):
69 RFCavity(name)
70{}
71
72
75
76
78 return new RFCavityRep(*this);
79}
80
81
82Channel *RFCavityRep::getChannel(const std::string &aKey, bool create) {
83 for(const Entry *entry = entries; entry->name != 0; ++entry) {
84 if(aKey == entry->name) {
85 return new IndirectChannel<RFCavityRep>(*this, entry->get, entry->set);
86 }
87 }
88
89 return ElementBase::getChannel(aKey, create);
90}
91
92
96
98 return field;
99}
100
101
105
107 return geometry;
108}
109
110
112 return ignoreCavities ? 0.0 : field.getEz();
113}
114
115
117 return field.getFrequency();
118}
119
120
121double RFCavityRep::getPhase() const {
122 return field.getPhase();
123}
124
125
126void RFCavityRep::setAmplitude(double amplitude) {
127 field.setEz(amplitude);
128}
129
130
131void RFCavityRep::setFrequency(double frequency) {
132 field.setFrequency(frequency);
133}
134
135
136void RFCavityRep::setPhase(double phase) {
137 field.setPhase(phase);
138}
139
140void RFCavityRep::setIgnore(bool ignore) {
141 ignoreCavities = ignore;
142}
OscillatingField< ConstEzField > AcceleratingField
The electromagnetic field of an RF cavity.
virtual Channel * getChannel(const std::string &aKey, bool create=false)
Construct a read/write channel.
virtual double getElementLength() const
Get design length.
virtual void setElementLength(double length)
Set design length.
ElementBase(const std::string &name)
Constructor with given name.
RFCavity(const std::string &name)
Constructor with given name.
Definition RFCavity.cpp:81
RFCavityRep(const std::string &name)
Constructor with given name.
virtual void setPhase(double phi)
Set phase.
virtual void setFrequency(double f)
Set frequency.
virtual Channel * getChannel(const std::string &aKey, bool=false)
Construct a read/write channel.
virtual StraightGeometry & getGeometry()
Get geometry.
virtual double getPhase() const
Get phase.
virtual ElementBase * clone() const
Return clone.
virtual double getAmplitude() const
Get amplitude.
StraightGeometry geometry
The cavity's geometry.
Definition RFCavityRep.h:99
virtual void setAmplitude(double V)
Set amplitude.
static bool ignoreCavities
Cavities are ignored (amplitude = 0) when this switch is set.
static void setIgnore(bool ignore=false)
Set ignore switch.
virtual AcceleratingField & getField()
Get field.
AcceleratingField field
The cavity's field.
virtual double getFrequency() const
Get frequency.
virtual ~RFCavityRep()
A geometry representing a straight line.
Abstract interface for read/write access to variable.
Definition Channel.h:32
Access to a [b]double[/b] data member.