OPAL (Object Oriented Parallel Accelerator Library)  2021.1.99
OPAL
Vacuum.h
Go to the documentation of this file.
1 //
2 // Class Vacuum
3 // Defines the abstract interface environment for
4 // beam stripping physics.
5 //
6 // Copyright (c) 2018-2019, Pedro Calvo, CIEMAT, Spain
7 // All rights reserved
8 //
9 // Implemented as part of the PhD thesis
10 // "Optimizing the radioisotope production of the novel AMIT
11 // superconducting weak focusing cyclotron"
12 //
13 // This file is part of OPAL.
14 //
15 // OPAL is free software: you can redistribute it and/or modify
16 // it under the terms of the GNU General Public License as published by
17 // the Free Software Foundation, either version 3 of the License, or
18 // (at your option) any later version.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
22 //
23 #ifndef CLASSIC_Vacuum_HH
24 #define CLASSIC_Vacuum_HH
25 
26 #include "AbsBeamline/Component.h"
27 
28 #include <string>
29 #include <vector>
30 
31 class BeamlineVisitor;
32 class Cyclotron;
33 
34 struct PFieldData {
35  std::string filename;
36  // pressure field known from file
37  std::vector<double> pfld;
38 
39  // Grid-Size
40  //need to be read from inputfile.
41  int nrad, ntet;
42 
43  // one more grid line is stored in azimuthal direction:
44  int ntetS;
45 
46  // total grid points number.
47  int ntot;
48 };
49 
50 struct PPositions {
51  // these 4 parameters are need to be read from field file.
52  double rmin, delr;
53  double tetmin, dtet;
54 
55  // Radii and step width of initial Grid
56  std::vector<double> rarr;
57 
58  double Pfact; // MULTIPLICATION FACTOR FOR PRESSURE MAP
59 };
60 
61 enum class ResidualGas:short {
62  NOGAS = -1,
63  AIR = 0,
64  H2 = 1
65 };
66 
67 class Vacuum: public Component {
68 
69 public:
70 
72  explicit Vacuum(const std::string& name);
73 
74  Vacuum();
75  Vacuum(const Vacuum& rhs);
76  virtual ~Vacuum();
77 
79  virtual void accept(BeamlineVisitor&) const;
80 
81  virtual bool checkVacuum(PartBunchBase<double, 3>* bunch,
82  Cyclotron* cycl);
83 
84  virtual void initialise(PartBunchBase<double, 3>* bunch,
85  double& startField, double& endField);
86 
87  virtual void initialise(PartBunchBase<double, 3>* bunch,
88  const double& scaleFactor);
89 
90  virtual void finalise();
91 
92  virtual bool bends() const;
93 
94  virtual void goOnline(const double& kineticEnergy);
95  virtual void goOffline();
96 
97  virtual ElementBase::ElementType getType() const;
98 
99  virtual void getDimensions(double& zBegin, double& zEnd) const;
100 
101  std::string getVacuumShape();
102 
103  int checkPoint(const double& x, const double& y, const double& z);
104 
105  double checkPressure(const double& x, const double& y);
106 
107  void setPressure(double pressure);
108  double getPressure() const;
109 
110  void setTemperature(double temperature);
111  double getTemperature() const;
112 
113  void setPressureMapFN(std::string pmapfn);
114  virtual std::string getPressureMapFN() const;
115 
116  void setPScale(double ps);
117  virtual double getPScale() const;
118 
119  void setResidualGas(std::string gas);
120  ResidualGas getResidualGas() const;
121  std::string getResidualGasName();
122 
123  void setStop(bool stopflag);
124  virtual bool getStop() const;
125 
126 protected:
127 
128  void initR(double rmin, double dr, int nrad);
129 
130  void getPressureFromFile(const double &scaleFactor);
131 
132  inline int idx(int irad, int ktet) {return (ktet + PField.ntetS * irad);}
133 
134 private:
135 
138  double pressure_m;
139  std::string pmapfn_m;
140  double pscale_m;
141  double temperature_m;
142  bool stop_m;
144 
146  double minr_m;
147  double maxr_m;
148  double minz_m;
149  double maxz_m;
151 
153 
154 protected:
155  // object of Matrices including pressure field map and its derivates
157 
158  // object of parameters about the map grid
160 };
161 
162 #endif // CLASSIC_Vacuum_HH
ResidualGas
Definition: Vacuum.h:61
const std::string name
Interface for a single beam element.
Definition: Component.h:50
int ntet
Definition: Vacuum.h:41
int ntetS
Definition: Vacuum.h:44
int ntot
Definition: Vacuum.h:47
std::string filename
Definition: Vacuum.h:35
std::vector< double > pfld
Definition: Vacuum.h:37
int nrad
Definition: Vacuum.h:41
std::vector< double > rarr
Definition: Vacuum.h:56
double Pfact
Definition: Vacuum.h:58
double rmin
Definition: Vacuum.h:52
double tetmin
Definition: Vacuum.h:53
double dtet
Definition: Vacuum.h:53
double delr
Definition: Vacuum.h:52
Definition: Vacuum.h:67
PFieldData PField
Definition: Vacuum.h:156
double minr_m
Flag if particles should be stripped or stopped.
Definition: Vacuum.h:146
virtual ElementBase::ElementType getType() const
Get element type std::string.
Definition: Vacuum.cpp:253
double pressure_m
Definition: Vacuum.h:138
void setPScale(double ps)
Definition: Vacuum.cpp:127
bool stop_m
K.
Definition: Vacuum.h:142
double pscale_m
stores the filename of the pressure map
Definition: Vacuum.h:140
double getPressure() const
Definition: Vacuum.cpp:97
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField)
Definition: Vacuum.cpp:206
virtual std::string getPressureMapFN() const
Definition: Vacuum.cpp:123
void initR(double rmin, double dr, int nrad)
Definition: Vacuum.cpp:345
void setTemperature(double temperature)
Definition: Vacuum.cpp:106
virtual ~Vacuum()
Definition: Vacuum.cpp:83
double minz_m
mm
Definition: Vacuum.h:148
virtual void goOffline()
Definition: Vacuum.cpp:243
int idx(int irad, int ktet)
Definition: Vacuum.h:132
double temperature_m
a scale factor for the P-field
Definition: Vacuum.h:141
ResidualGas getResidualGas() const
Definition: Vacuum.cpp:148
virtual double getPScale() const
Definition: Vacuum.cpp:131
virtual void getDimensions(double &zBegin, double &zEnd) const
Definition: Vacuum.cpp:251
virtual void finalise()
Definition: Vacuum.cpp:234
double checkPressure(const double &x, const double &y)
Definition: Vacuum.cpp:272
PPositions PP
Definition: Vacuum.h:159
void setPressureMapFN(std::string pmapfn)
Definition: Vacuum.cpp:119
std::string getVacuumShape()
Definition: Vacuum.cpp:257
virtual void accept(BeamlineVisitor &) const
Apply visitor to Vacuum.
Definition: Vacuum.cpp:89
virtual void goOnline(const double &kineticEnergy)
Definition: Vacuum.cpp:240
void setPressure(double pressure)
Definition: Vacuum.cpp:93
virtual bool checkVacuum(PartBunchBase< double, 3 > *bunch, Cyclotron *cycl)
Definition: Vacuum.cpp:176
ParticleMatterInteractionHandler * parmatint_m
mm
Definition: Vacuum.h:152
std::string pmapfn_m
mbar
Definition: Vacuum.h:139
double getTemperature() const
Definition: Vacuum.cpp:110
void setResidualGas(std::string gas)
Definition: Vacuum.cpp:140
void getPressureFromFile(const double &scaleFactor)
Definition: Vacuum.cpp:354
std::string getResidualGasName()
Definition: Vacuum.cpp:152
double maxr_m
mm
Definition: Vacuum.h:147
int checkPoint(const double &x, const double &y, const double &z)
Definition: Vacuum.cpp:261
Vacuum()
Definition: Vacuum.cpp:49
virtual bool getStop() const
Definition: Vacuum.cpp:171
double maxz_m
mm
Definition: Vacuum.h:149
virtual bool bends() const
Definition: Vacuum.cpp:247
ResidualGas gas_m
parameters for Vacuum
Definition: Vacuum.h:137
void setStop(bool stopflag)
Definition: Vacuum.cpp:167