OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
CSRWakeFunction.hh
Go to the documentation of this file.
1 #ifndef CSRWAKEFUNCTION_HH
2 #define CSRWAKEFUNCTION_HH
3 
5 
6 #include <memory>
7 #include <vector>
8 #include <string>
9 
10 class Filter;
11 class ElementBase;
12 
14 public:
15  CSRWakeFunction(const std::string &name, ElementBase *element, std::vector<Filter *> filters, const unsigned int &N);
16 
17  void apply(PartBunchBase<double, 3> *bunch);
18 
19  void initialize(const ElementBase * ref);
20 
21  virtual const std::string getType() const;
22 
23 private:
24  void calculateLineDensity(PartBunchBase<double, 3> *bunch, std::pair<double, double> &meshInfo);
25 
26  void calculateContributionInside(size_t sliceNumber, double angleOfSlice, double meshSpacing);
27  void calculateContributionAfter(size_t sliceNumber, double angleOfSlice, double meshSpacing);
28  double calcPsi(const double &psiInitial, const double &x, const double &Ds) const;
29 
30  std::vector<Filter *> filters_m;
31  std::shared_ptr<Filter> defaultFilter_m;
33 
36 
37  // Longitudinal CSR field.
38  std::vector<double> Ez_m;
39 
40  // Retarded angle Psi;
41  std::vector<double> Psi_m;
42 
43  // Start position of CSR wake.
44  double Begin_m;
45 
46  // Start position of equivalent hard edge dipole that approximates actual
47  // dipole.
48  double FieldBegin_m;
49 
50  // Effective length of dipole.
51  double Length_m;
52 
53  // Radius of curvature of effective dipole.
54  double bendRadius_m;
55 
56  std::string bendName_m;
57 
59 
60 };
61 
62 #endif //CSRWAKEFUNCTION_HH
void calculateContributionInside(size_t sliceNumber, double angleOfSlice, double meshSpacing)
Interface for basic beam line object.
Definition: ElementBase.h:128
Definition: Filter.h:8
CSRWakeFunction(const std::string &name, ElementBase *element, std::vector< Filter * > filters, const unsigned int &N)
std::shared_ptr< Filter > defaultFilter_m
void initialize(const ElementBase *ref)
std::vector< Filter * > filters_m
std::vector< double > Psi_m
std::string bendName_m
void calculateContributionAfter(size_t sliceNumber, double angleOfSlice, double meshSpacing)
std::vector< double > Ez_m
double calcPsi(const double &psiInitial, const double &x, const double &Ds) const
LineDensity dlineDensitydz_m
void calculateLineDensity(PartBunchBase< double, 3 > *bunch, std::pair< double, double > &meshInfo)
const std::string name
LineDensity lineDensity_m
virtual const std::string getType() const
void apply(PartBunchBase< double, 3 > *bunch)