OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
Monitor.h
Go to the documentation of this file.
1//
2// Class Monitor
3// Defines the abstract interface for a beam position monitor.
4//
5// Copyright (c) 2000 - 2021, 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//
18#ifndef CLASSIC_Monitor_HH
19#define CLASSIC_Monitor_HH
20
24
25#include <map>
26#include <string>
27
28template <class T, unsigned Dim>
29class PartBunchBase;
30class BeamlineVisitor;
31
32class Monitor: public Component {
33
34public:
35
37 enum Plane {
45 XY
46 };
47
49 explicit Monitor(const std::string &name);
50
51 Monitor();
52 Monitor(const Monitor &);
53 virtual ~Monitor();
54
56 virtual void accept(BeamlineVisitor &) const override;
57
59 virtual StraightGeometry &getGeometry() override = 0;
60
62 virtual const StraightGeometry &getGeometry() const override = 0;
63
65 virtual Plane getPlane() const = 0;
66
67 virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override;
68
69 virtual bool applyToReferenceParticle(const Vector_t &R,
70 const Vector_t &P,
71 const double &t,
72 Vector_t &E,
73 Vector_t &B) override;
74
75 virtual void initialise(PartBunchBase<double, 3> *bunch, double &startField, double &endField) override;
76
77 virtual void finalise() override;
78
79 virtual bool bends() const override;
80
81 virtual void goOnline(const double &kineticEnergy) override;
82
83 virtual void goOffline() override;
84
85 virtual ElementType getType() const override;
86
87 virtual void getDimensions(double &zBegin, double &zEnd) const override;
88
90
91 static void writeStatistics();
92
93 virtual int getRequiredNumberOfTimeSteps() const override;
94
95 virtual bool isInside(const Vector_t &r) const override;
96private:
97
98 void driftToCorrectPositionAndSave(const Vector_t& R, const Vector_t& P);
99
100 // Not implemented.
101 void operator=(const Monitor &);
102 std::string filename_m;
105 unsigned int numPassages_m;
106
107 std::unique_ptr<LossDataSink> lossDs_m;
108
109 static std::map<double, SetStatistics> statFileEntries_sm;
110 static const double halfLength_s;
111};
112
113inline
115 type_m = type;
116}
117
118inline
120{
121 return 1;
122}
123
124inline
125bool Monitor::isInside(const Vector_t &r) const
126{
127 const double length = getElementLength();
128 return std::abs(r(2)) <= 0.5 * length && isInsideTransverse(r);
129}
130
131
132#endif // CLASSIC_Monitor_HH
ElementType
Definition: ElementBase.h:88
CollectionType
Definition: LossDataSink.h:72
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
const std::string name
boost::function< boost::tuple< double, bool >(arguments_t)> type
Definition: function.hpp:21
Interface for a single beam element.
Definition: Component.h:50
virtual double getElementLength() const
Get design length.
Definition: ElementBase.h:414
bool isInsideTransverse(const Vector_t &r) const
CollectionType type_m
Definition: Monitor.h:104
static void writeStatistics()
Definition: Monitor.cpp:215
virtual void accept(BeamlineVisitor &) const override
Apply visitor to Monitor.
Definition: Monitor.cpp:66
std::string filename_m
Definition: Monitor.h:102
virtual void goOnline(const double &kineticEnergy) override
Definition: Monitor.cpp:186
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
Definition: Monitor.cpp:108
Plane
Plane selection.
Definition: Monitor.h:37
@ XY
Monitor acts on both planes.
Definition: Monitor.h:45
@ Y
Monitor acts on y-plane.
Definition: Monitor.h:43
@ OFF
Monitor is off (inactive).
Definition: Monitor.h:39
@ X
Monitor acts on x-plane.
Definition: Monitor.h:41
virtual ElementType getType() const override
Get element type std::string.
Definition: Monitor.cpp:211
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
Definition: Monitor.cpp:151
virtual void goOffline() override
Definition: Monitor.cpp:190
std::unique_ptr< LossDataSink > lossDs_m
Definition: Monitor.h:107
virtual void getDimensions(double &zBegin, double &zEnd) const override
Definition: Monitor.cpp:205
Monitor()
Definition: Monitor.cpp:39
virtual ~Monitor()
Definition: Monitor.cpp:62
Plane plane_m
Definition: Monitor.h:103
static std::map< double, SetStatistics > statFileEntries_sm
Definition: Monitor.h:109
virtual void finalise() override
Definition: Monitor.cpp:182
unsigned int numPassages_m
Definition: Monitor.h:105
void operator=(const Monitor &)
virtual Plane getPlane() const =0
Get plane on which monitor observes.
virtual int getRequiredNumberOfTimeSteps() const override
Definition: Monitor.h:119
static const double halfLength_s
Definition: Monitor.h:110
virtual const StraightGeometry & getGeometry() const override=0
Get geometry. Version for const object.
virtual bool bends() const override
Definition: Monitor.cpp:201
virtual StraightGeometry & getGeometry() override=0
Get geometry.
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
Definition: Monitor.cpp:70
void setCollectionType(CollectionType type)
Definition: Monitor.h:114
virtual bool isInside(const Vector_t &r) const override
Definition: Monitor.h:125
void driftToCorrectPositionAndSave(const Vector_t &R, const Vector_t &P)
Definition: Monitor.cpp:93
A geometry representing a straight line.