OPALX (Object Oriented Parallel Accelerator Library for Exascal) MINIorX
OPALX
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
22#include "PartBunch/PartBunch.h"
25
26#include <map>
27#include <string>
28
29class BeamlineVisitor;
30
31class Monitor : public Component {
32public:
34 enum Plane {
43 };
44
46 explicit Monitor(const std::string& name);
47
48 Monitor();
49 Monitor(const Monitor&);
50 virtual ~Monitor();
51
53 virtual void accept(BeamlineVisitor&) const override;
54
56 virtual StraightGeometry& getGeometry() override = 0;
57
59 virtual const StraightGeometry& getGeometry() const override = 0;
60
62 virtual Plane getPlane() const = 0;
63
64 virtual bool apply(
65 const size_t& i, const double& t, Vector_t<double, 3>& E, Vector_t<double, 3>& B) override;
66
67 virtual bool apply(
68 const Vector_t<double, 3>& R, const Vector_t<double, 3>& P, const double& t,
70
71 virtual bool applyToReferenceParticle(
72 const Vector_t<double, 3>& R, const Vector_t<double, 3>& P, const double& t,
74
75 virtual void initialise(PartBunch_t* 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<double, 3>& r) const override;
96
97private:
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
114 type_m = type;
115}
116
118 return 1;
119}
120
121inline bool Monitor::isInside(const Vector_t<double, 3>& r) const {
122 const double length = getElementLength();
123 return std::abs(r(2)) <= 0.5 * length && isInsideTransverse(r);
124}
125
126#endif // CLASSIC_Monitor_HH
ElementType
Definition ElementBase.h:88
PartBunch< PLayout_t< double, 3 >, double, 3 > PartBunch_t
ippl::Vector< T, Dim > Vector_t
CollectionType
Component(const std::string &name)
Constructor with given name.
Definition Component.cpp:44
virtual double getElementLength() const
Get design length.
bool isInsideTransverse(const Vector_t< double, 3 > &r) const
CollectionType type_m
Definition Monitor.h:104
static void writeStatistics()
Definition Monitor.cpp:217
virtual void accept(BeamlineVisitor &) const override
Apply visitor to Monitor.
Definition Monitor.cpp:60
std::string filename_m
Definition Monitor.h:102
virtual void goOnline(const double &kineticEnergy) override
Definition Monitor.cpp:188
Plane
Plane selection.
Definition Monitor.h:34
@ XY
Monitor acts on both planes.
Definition Monitor.h:42
@ Y
Monitor acts on y-plane.
Definition Monitor.h:40
@ OFF
Monitor is off (inactive).
Definition Monitor.h:36
@ X
Monitor acts on x-plane.
Definition Monitor.h:38
virtual ElementType getType() const override
Get element type std::string.
Definition Monitor.cpp:212
virtual bool isInside(const Vector_t< double, 3 > &r) const override
Definition Monitor.h:121
virtual void goOffline() override
Definition Monitor.cpp:192
std::unique_ptr< LossDataSink > lossDs_m
Definition Monitor.h:107
virtual void getDimensions(double &zBegin, double &zEnd) const override
Definition Monitor.cpp:207
Monitor(const std::string &name)
Constructor with given name.
Definition Monitor.cpp:49
Monitor()
Definition Monitor.cpp:38
virtual ~Monitor()
Definition Monitor.cpp:57
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:185
unsigned int numPassages_m
Definition Monitor.h:105
virtual bool applyToReferenceParticle(const Vector_t< double, 3 > &R, const Vector_t< double, 3 > &P, const double &t, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) override
Definition Monitor.cpp:113
virtual void initialise(PartBunch_t *bunch, double &startField, double &endField) override
Definition Monitor.cpp:153
virtual bool apply(const size_t &i, const double &t, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) override
Definition Monitor.cpp:64
void operator=(const Monitor &)
virtual Plane getPlane() const =0
Get plane on which monitor observes.
virtual int getRequiredNumberOfTimeSteps() const override
Definition Monitor.h:117
static const double halfLength_s
Definition Monitor.h:110
virtual const StraightGeometry & getGeometry() const override=0
Get geometry. Version for const object.
void driftToCorrectPositionAndSave(const Vector_t< double, 3 > &R, const Vector_t< double, 3 > &P)
Definition Monitor.cpp:92
virtual bool bends() const override
Definition Monitor.cpp:203
virtual StraightGeometry & getGeometry() override=0
Get geometry.
void setCollectionType(CollectionType type)
Definition Monitor.h:113
A geometry representing a straight line.