OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
Split.h
Go to the documentation of this file.
1 #ifndef OPAL_Split_HH
2 #define OPAL_Split_HH
3 
4 
7 #include "FixedAlgebra/FMatrix.h"
8 #include "FixedAlgebra/FVector.h"
10 #include "Beamlines/TBeamline.h"
11 #include "Tables/Twiss.h"
12 #include <cmath>
13 #include <vector>
14 #include <iosfwd>
15 
16 class MSplit: public DefaultVisitor, public Table {
17 protected:
18 
19  //Properties of the optic element
20  struct Data {
21  double kq, k0s, e1, e2, l, phi, courb;
22  std::string type;
23  } data;
24 
25 public:
26 
27  class A_row: public FlaggedElmPtr {
28  friend class MSplit;
29 
30  public:
31 
32  A_row() {};
33  A_row(const A_row &a);
34  A_row(ElementBase *elem, int occur): FlaggedElmPtr(elem) {
35  setCounter(occur);
36  }
37  A_row(const FlaggedElmPtr &rhs, int order):
38  FlaggedElmPtr(rhs), Interpol(order)
39  {}
40  inline double getBeta_x(int ind) ;
41  inline double getBeta_y(int ind) ;
42  inline double getAlpha_x(int ind) ;
43  inline double getAlpha_y(int ind) ;
44  inline double getDisp_x(int ind) ;
45  inline double getDisp_y(int ind) ;
46  inline double getDisp_x_prim(int ind) ;
47  inline double getDisp_y_prim(int ind) ;
48  private:
49 
50  struct pt_interpol {
51  double Beta_x, Beta_y;
52  double Alpha_x, Alpha_y;
55  double delta_x, delta_y;
56  };
57 
58  //Vector of pt_interpol of size "nslice" containing the different values of Beta
59  //and Disp... inside the optic element pointed by p.
60  std::vector<pt_interpol> Interpol;
61 
62  };
64 
65  MSplit();
66  MSplit(const std::string &name, MSplit *parent);
67  virtual ~MSplit() {};
68 
69  //return the maximum of the betax(y) function in the elm
70  double getBETXMAX(const A_row &, int i1 = 0, int i2 = 0) const;
71  double getBETYMAX(const A_row &, int i1 = 0, int i2 = 0) const;
72 
73  //return the lenght of the table
74  virtual double getLength();
75 
76  virtual double getCell(const PlaceRep &place, const std::string &colName);
77 
78  //return the beamline used
79  virtual const Beamline *getLine() const;
80  //comments in Twiss class
81  virtual CellArray getDefault() const;
82  virtual std::vector<double> getColumn(const RangeRep &rng, const std::string
83  &colName);
84  virtual std::vector<double> getRow(const PlaceRep &pos, const
85  std::vector<std::string> &cols);
86  virtual bool isDependent(const std::string &name) const;
87  virtual bool matches(Table *rhs) const;
88  virtual Expressions::PtrToScalar<double> makeColumnExpression(const std::string &colname) const;
89  virtual Object *clone(const std::string &name);
90  virtual void printTable(std::ostream &, const CellArray &)const;
91  virtual void fill();
92 
93  A_Tline::const_iterator begin() const;
95  A_Tline::const_iterator end() const;
97 
98  const A_row &getCurrent() const;
99 
100  //functions in charge of catching the properties of optic elements
101  virtual void visitMultipole(const Multipole &);
102  virtual void visitRBend(const RBend &);
103  virtual void visitSBend(const SBend &);
104  virtual void visitCyclotron(const Cyclotron &);
105  virtual void applyDefault(const ElementBase &);
106 
107  //call of the split command
108  void execute();
109  //execution of the split command
110  void run();
111 
112  void calcul(Twiss::TLine::iterator i, A_row &a, int order, Twiss *tp);
113 
114 protected:
115 
116  enum {
123  };
124 
127  const Beam *beam;
130 
131  //Transformation matrix for optic elements
133 
134  //vector alpha,beta,gamma
137 
138  //Variable for dispersion
141 
142 private:
143  A_row &findRow(const PlaceRep &row);
144  mutable A_Tline::const_iterator current;
145  //line name
146  std::string itsLine;
147 };
148 
149 
150 
151 #endif //OPAL_SPLIT_HH
virtual ~MSplit()
Definition: Split.h:67
double phi
Definition: Split.h:21
std::vector< Cell > CellArray
An array of cell descriptors.
Definition: Table.h:63
Twiss::TLine::iterator i
Definition: Split.h:129
Interface for basic beam line object.
Definition: ElementBase.h:128
double getBETYMAX(const A_row &, int i1=0, int i2=0) const
Definition: Split.cpp:246
virtual std::vector< double > getColumn(const RangeRep &rng, const std::string &colName)
Return column [b]col[/b] of this table, limited by [b]range[/b].
Definition: Split.cpp:701
virtual Expressions::PtrToScalar< double > makeColumnExpression(const std::string &colname) const
Definition: Split.cpp:752
const Beam * beam
Definition: Split.h:127
Interface for a Cyclotron.
Definition: Cyclotron.h:91
double getBeta_y(int ind)
Definition: Split.cpp:200
virtual bool matches(Table *rhs) const
Check that [b]rhs[/b] is of same type as [b]this[/b].
Definition: Split.cpp:751
virtual void applyDefault(const ElementBase &)
Definition: Split.cpp:322
std::string itsLine
Definition: Split.h:146
virtual std::vector< double > getRow(const PlaceRep &pos, const std::vector< std::string > &cols)
Return a table row.
Definition: Split.cpp:718
A_row(const FlaggedElmPtr &rhs, int order)
Definition: Split.h:37
A_Tline::const_iterator end() const
Definition: Split.cpp:232
A_row(ElementBase *elem, int occur)
Definition: Split.h:34
Definition: RBend.h:73
virtual bool isDependent(const std::string &name) const
Find out if table depends on the object identified by [b]name[/b].
Definition: Split.cpp:739
Default algorithms.
Interface for general multipole.
Definition: Multipole.h:46
MSplit()
Definition: Split.cpp:174
Representation of a place within a beam line or sequence.
Definition: PlaceRep.h:41
virtual double getLength()
Return the length of the table.
Definition: Split.cpp:680
virtual void printTable(std::ostream &, const CellArray &) const
Print list for the table.
Definition: Split.cpp:760
A_Tline::const_iterator begin() const
Definition: Split.cpp:226
double getAlpha_y(int ind)
Definition: Split.cpp:206
virtual Object * clone(const std::string &name)
Return a clone.
Definition: Split.cpp:756
double courb
Definition: Split.h:21
FVector< double, 3 > Euler_y
Definition: Split.h:136
TBeamline< A_row > A_Tline
Definition: Split.h:63
virtual CellArray getDefault() const
Return the default print columns.
Definition: Split.cpp:692
FVector< double, 3 > Euler_x
Definition: Split.h:135
double k0s
Definition: Split.h:21
void setCounter(int) const
Set clone counter.
double getBeta_x(int ind)
Definition: Split.cpp:197
double getDisp_x(int ind)
Definition: Split.cpp:209
FVector< double, 2 > Dispy
Definition: Split.h:140
virtual void visitRBend(const RBend &)
Apply the algorithm to a rectangular bend.
Definition: Split.cpp:274
Definition: SBend.h:68
Twiss * tp
Definition: Split.h:128
std::string type
Definition: Split.h:22
Representation of a range within a beam line or sequence.
Definition: RangeRep.h:34
Class Twiss.
Definition: Twiss.h:41
An abstract sequence of beam line components.
Definition: Beamline.h:37
std::vector< pt_interpol > Interpol
Definition: Split.h:60
double getAlpha_x(int ind)
Definition: Split.cpp:203
Definition: Split.h:16
virtual void fill()
Refill the buffer.
Definition: Split.cpp:619
virtual void visitMultipole(const Multipole &)
Apply the algorithm to a multipole.
Definition: Split.cpp:257
A_Tline::iterator n
Definition: Split.h:126
A_row & findRow(const PlaceRep &row)
Definition: Split.cpp:762
double getBETXMAX(const A_row &, int i1=0, int i2=0) const
Definition: Split.cpp:236
virtual void visitSBend(const SBend &)
Apply the algorithm to a sector bend.
Definition: Split.cpp:301
A_Tline::const_iterator current
Definition: Split.h:144
void calcul(Twiss::TLine::iterator i, A_row &a, int order, Twiss *tp)
Definition: Split.cpp:332
The base class for all OPAL objects.
Definition: Object.h:48
virtual void visitCyclotron(const Cyclotron &)
Apply the algorithm to an cyclotron.
Definition: Split.cpp:297
The BEAM definition.
Definition: Beam.h:35
FVector< double, 2 > Dispx
Definition: Split.h:139
void execute()
Apply the algorithm to the top-level beamline.
Definition: Split.cpp:612
double getDisp_x_prim(int ind)
Definition: Split.cpp:212
const std::string name
virtual double getCell(const PlaceRep &place, const std::string &colName)
Return value in selected table cell.
Definition: Split.cpp:684
double e2
Definition: Split.h:21
virtual const Beamline * getLine() const
Return embedded CLASSIC beamline.
Definition: Split.cpp:689
void run()
Definition: Split.cpp:624
double getDisp_y(int ind)
Definition: Split.cpp:215
A_Tline itsTable
Definition: Split.h:125
const A_row & getCurrent() const
Definition: Split.cpp:676
std::string::iterator iterator
Definition: MSLang.h:16
double e1
Definition: Split.h:21
double getDisp_y_prim(int ind)
Definition: Split.cpp:218
The base class for all OPAL tables.
Definition: Table.h:42
double l
Definition: Split.h:21
FMatrix< double, 6, 6 > Transf_mat
Definition: Split.h:132
double kq
Definition: Split.h:21
struct MSplit::Data data
A section of a beam line.
Definition: FlaggedElmPtr.h:36