OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
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) 2026, 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 OPALX_Monitor_HH
19#define OPALX_Monitor_HH
20
23#include "PartBunch/PartBunch.h"
25
26#include <cmath>
27#include <map>
28#include <memory>
29#include <string>
30
31class BeamlineVisitor;
32
33class Monitor : public Component {
34public:
36 enum Plane {
44 XY
45 };
46
48 explicit Monitor(const std::string& name);
49
50 Monitor();
51 Monitor(const Monitor&);
52 ~Monitor() override;
53
55 void accept(BeamlineVisitor&) const override;
56
58 virtual StraightGeometry& getGeometry() override = 0;
59
61 virtual const StraightGeometry& getGeometry() const override = 0;
62
64 virtual Plane getPlane() const = 0;
65
66 virtual bool apply(const std::shared_ptr<ParticleContainer_t>& pc) override;
67
68 virtual bool apply(
69 const size_t& i, const double& t, Vector_t<double, 3>& E,
70 Vector_t<double, 3>& B) override;
71
72 virtual bool apply(
73 const Vector_t<double, 3>& R, const Vector_t<double, 3>& P, const double& t,
75
76 virtual bool applyToReferenceParticle(
77 const Vector_t<double, 3>& R, const Vector_t<double, 3>& P, const double& t,
79
80 virtual void initialise(PartBunch_t* bunch, double& startField, double& endField) override;
81
82 virtual void finalise() override;
83
84 virtual bool bends() const override;
85
86 virtual void goOnline(const double& kineticEnergy) override;
87
88 virtual void goOffline() override;
89
90 virtual ElementType getType() const override;
91
92 virtual void getFieldExtend(double& zBegin, double& zEnd) const override;
93
95
96 static void writeStatistics();
97
98 virtual int getRequiredNumberOfTimeSteps() const override;
99
100 virtual bool isInside(const Vector_t<double, 3>& r) const override;
101
102private:
104
105 Monitor& operator=(const Monitor&) = delete;
106
107 std::string filename_m;
110 unsigned int numPassages_m;
111
112 std::unique_ptr<LossDataSink> lossDs_m;
113
114 static std::map<double, SetStatistics> statFileEntries_sm;
115 static const double halfLength_s;
116};
117
119
120inline int Monitor::getRequiredNumberOfTimeSteps() const { return 1; }
121
122inline bool Monitor::isInside(const Vector_t<double, 3>& r) const {
123 const double length = getElementLength();
124 return std::abs(r(2)) <= 0.5 * length && isInsideTransverse(r);
125}
126
127#endif // OPALX_Monitor_HH
Defines the abstract interface for a single beamline component in the accelerator model.
ippl::Vector< T, Dim > Vector_t
ElementType
Definition ElementBase.h:94
CollectionType
Template PIC bunch: IPPL PicManager, shared field mesh/solver, and multiple particle containers.
virtual double getElementLength() const
Get design length.
bool isInsideTransverse(const Vector_t< double, 3 > &r) const
CollectionType type_m
Definition Monitor.h:109
static void writeStatistics()
Definition Monitor.cpp:385
void accept(BeamlineVisitor &) const override
Apply visitor to Monitor.
Definition Monitor.cpp:56
std::string filename_m
Definition Monitor.h:107
virtual void goOnline(const double &kineticEnergy) override
Definition Monitor.cpp:358
~Monitor() override
Definition Monitor.cpp:54
Plane
Plane selection.
Definition Monitor.h:36
@ XY
Monitor acts on both planes.
Definition Monitor.h:44
@ Y
Monitor acts on y-plane.
Definition Monitor.h:42
@ OFF
Monitor is off (inactive).
Definition Monitor.h:38
@ X
Monitor acts on x-plane.
Definition Monitor.h:40
virtual ElementType getType() const override
Definition Monitor.cpp:383
virtual bool isInside(const Vector_t< double, 3 > &r) const override
Definition Monitor.h:122
virtual void goOffline() override
Definition Monitor.cpp:360
std::unique_ptr< LossDataSink > lossDs_m
Definition Monitor.h:112
Monitor()
Definition Monitor.cpp:38
Plane plane_m
Definition Monitor.h:108
static std::map< double, SetStatistics > statFileEntries_sm
Definition Monitor.h:114
virtual void finalise() override
Definition Monitor.cpp:356
unsigned int numPassages_m
Definition Monitor.h:110
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
Apply to reference particle with position R and momemtum P.
Definition Monitor.cpp:259
virtual void initialise(PartBunch_t *bunch, double &startField, double &endField) override
Definition Monitor.cpp:323
virtual Plane getPlane() const =0
Get plane on which monitor observes.
virtual int getRequiredNumberOfTimeSteps() const override
Definition Monitor.h:120
static const double halfLength_s
Definition Monitor.h:115
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:188
virtual bool bends() const override
Definition Monitor.cpp:375
virtual void getFieldExtend(double &zBegin, double &zEnd) const override
Return the field-support extent of the component.
Definition Monitor.cpp:377
virtual StraightGeometry & getGeometry() override=0
Get geometry.
void setCollectionType(CollectionType type)
Definition Monitor.h:118
virtual bool apply(const std::shared_ptr< ParticleContainer_t > &pc) override
Apply to all particles. Kernel launch moved inside the function.
Definition Monitor.cpp:58
Monitor & operator=(const Monitor &)=delete
A geometry representing a straight line.