OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
WakeFunction.hh
Go to the documentation of this file.
1 #ifndef WAKEFUNCTION_HH
2 #define WAKEFUNCTION_HH
3 
4 #include <string>
5 #include <vector>
6 
7 class ElementBase;
8 
9 template <class T, unsigned Dim>
10 class PartBunchBase;
11 
12 class WakeFunction {
13 public:
14  WakeFunction(std::string name, ElementBase *elref, unsigned int n):
15  nBins_m(n),
16  name_m(name) { };
17 
18  virtual ~WakeFunction(){ };
19  virtual void initialize(const ElementBase *ref){ };
20  virtual void apply(PartBunchBase<double, 3> *bunch) = 0;
21  virtual const std::string getType() const = 0;
22  const std::string & getName() const {
23  return name_m;
24  }
25 
26 protected:
27  const unsigned int nBins_m;
28 
29 private:
30  const std::string name_m;
31 };
32 
33 class LineDensity: public std::vector<double> {
34 public:
35  LineDensity(int size = 0, double defaultValue = 0.0) : std::vector<double>(size, defaultValue) {}
36  void getFirstDerivative(std::vector<double> &firstDerivative, const double &hz);
37 };
38 
39 inline void LineDensity::getFirstDerivative(std::vector<double> &firstDerivative, const double &hz) {
40  const size_t size = this->size();
41  if(firstDerivative.size() != size)
42  firstDerivative.resize(size, 0.0);
43 
44  firstDerivative[0] = ((*this)[1] - (*this)[0]) / hz;
45  for(unsigned int i = 1; i + 1 < size; ++i)
46  firstDerivative[i] = ((*this)[i + 1] - (*this)[i - 1]) / hz;
47  firstDerivative[size - 1] = ((*this)[size - 1] - (*this)[size - 2]) / hz;
48 }
49 
50 #endif // WAKEFUNCTION_HH
const unsigned int nBins_m
Definition: WakeFunction.hh:27
Interface for basic beam line object.
Definition: ElementBase.h:128
virtual const std::string getType() const =0
const std::string name_m
Definition: WakeFunction.hh:30
virtual ~WakeFunction()
Definition: WakeFunction.hh:18
const std::string & getName() const
Definition: WakeFunction.hh:22
virtual void apply(PartBunchBase< double, 3 > *bunch)=0
Class: DataSink.
Definition: OpalData.h:29
LineDensity(int size=0, double defaultValue=0.0)
Definition: WakeFunction.hh:35
virtual void initialize(const ElementBase *ref)
Definition: WakeFunction.hh:19
const std::string name
WakeFunction(std::string name, ElementBase *elref, unsigned int n)
Definition: WakeFunction.hh:14
void getFirstDerivative(std::vector< double > &firstDerivative, const double &hz)
Definition: WakeFunction.hh:39