From 4ab79a8892fc861da8f7a70230451351e8741283 Mon Sep 17 00:00:00 2001 From: ext-calvo_p <pedro.calvo@ciemat.es> Date: Tue, 10 Oct 2023 16:03:07 +0200 Subject: [PATCH] Resolve "Unused degrader attributes" --- src/Classic/AbsBeamline/Degrader.cpp | 41 ++++++++++++++++------- src/Classic/AbsBeamline/Degrader.h | 31 +++++++++-------- src/Classic/Solvers/ScatteringPhysics.cpp | 2 +- src/Elements/OpalDegrader.cpp | 14 +++++--- src/Elements/OpalDegrader.h | 4 +-- 5 files changed, 56 insertions(+), 36 deletions(-) diff --git a/src/Classic/AbsBeamline/Degrader.cpp b/src/Classic/AbsBeamline/Degrader.cpp index e62033359..232f9b923 100644 --- a/src/Classic/AbsBeamline/Degrader.cpp +++ b/src/Classic/AbsBeamline/Degrader.cpp @@ -2,7 +2,7 @@ // Class Degrader // Defines the abstract interface for a beam degrader. // -// Copyright (c) 2000 - 2021, Paul Scherrer Institut, Villigen PSI, Switzerland +// Copyright (c) 2000 - 2023, Paul Scherrer Institut, Villigen PSI, Switzerland // All rights reserved. // // This file is part of OPAL. @@ -23,10 +23,10 @@ #include "Solvers/ParticleMatterInteractionHandler.h" #include "Utilities/Options.h" +#include <cmath> #include <memory> -#include <string> -extern Inform *gmsg; +extern Inform* gmsg; Degrader::Degrader(): @@ -42,12 +42,16 @@ Degrader::Degrader(const Degrader& right): MomentumY_m(right.MomentumY_m), MomentumZ_m(right.MomentumZ_m), time_m(right.time_m), - id_m(right.id_m) + id_m(right.id_m), + width_m(right.width_m), + height_m(right.height_m) {} Degrader::Degrader(const std::string& name): - Component(name) -{} + Component(name), + width_m(0.0), + height_m(0.0) +{ } Degrader::~Degrader() { if(online_m) @@ -58,11 +62,22 @@ void Degrader::accept(BeamlineVisitor& visitor) const { visitor.visitDegrader(*this); } -inline bool Degrader::isInMaterial(double z) { - /** - check if the particle is in the degarder material - */ - return ((z > 0.0) && (z <= getElementLength())); +void Degrader::setDimensions(double xsize, double ysize) { + width_m = xsize; + height_m = ysize; +} + + +bool Degrader::isInside(const Vector_t& R) const { + /** + check if the particle is in the degrader material + */ + bool hit = false; + if ( R(2) > 0.0 && R(2) <= getElementLength() && + (4 * (std::pow(R(0) / width_m, 2) + std::pow(R(1) / height_m, 2)) <= 1) ) { + hit = true; + } + return hit; } bool Degrader::apply(const size_t& i, const double& t, Vector_t& /*E*/, Vector_t& /*B*/) { @@ -70,7 +85,7 @@ bool Degrader::apply(const size_t& i, const double& t, Vector_t& /*E*/, Vector_t const Vector_t& R = RefPartBunch_m->R[i]; const Vector_t& P = RefPartBunch_m->P[i]; - if (isInMaterial(R(2))) { + if ( isInside(R) ) { //if particle was already marked as -1 (it means it should have gone into degrader but didn't) //set the label to -2 (will not go into degrader and will be deleted when particles per core > 2) if (RefPartBunch_m->Bin[i] < 0) { @@ -99,7 +114,7 @@ bool Degrader::applyToReferenceParticle(const Vector_t& R, const double& /*t*/, Vector_t& E, Vector_t& /*B*/) { - if (!isInMaterial(R(2))) return false; + if ( !isInside(R) ) return false; Vector_t updatedP = P; bool isDead = getParticleMatterInteraction()->computeEnergyLoss(RefPartBunch_m, updatedP, RefPartBunch_m->getdT(), false); diff --git a/src/Classic/AbsBeamline/Degrader.h b/src/Classic/AbsBeamline/Degrader.h index 925bd2777..ef8f27838 100644 --- a/src/Classic/AbsBeamline/Degrader.h +++ b/src/Classic/AbsBeamline/Degrader.h @@ -2,7 +2,7 @@ // Class Degrader // Defines the abstract interface for a beam degrader. // -// Copyright (c) 2000 - 2021, Paul Scherrer Institut, Villigen PSI, Switzerland +// Copyright (c) 2000 - 2023, Paul Scherrer Institut, Villigen PSI, Switzerland // All rights reserved. // // This file is part of OPAL. @@ -28,7 +28,6 @@ class Degrader: public Component { public: - /// Plane selection. enum Plane { /// Monitor is off (inactive). @@ -49,36 +48,37 @@ public: virtual ~Degrader(); /// Apply visitor to Degrader. - virtual void accept(BeamlineVisitor&) const; + virtual void accept(BeamlineVisitor&) const override; - virtual bool apply(const size_t& i, const double& t, Vector_t& E, Vector_t& B); + virtual bool apply(const size_t& i, const double& t, Vector_t& E, Vector_t& B) override; virtual bool applyToReferenceParticle(const Vector_t& R, const Vector_t& P, const double& t, Vector_t& E, - Vector_t& B); + Vector_t& B) override; - virtual void initialise(PartBunchBase<double, 3>* bunch, double& startField, double& endField); + virtual void initialise(PartBunchBase<double, 3>* bunch, double& startField, double& endField) override; virtual void initialise(PartBunchBase<double, 3>* bunch); - virtual void finalise(); + virtual void finalise() override; - virtual bool bends() const; + virtual bool bends() const override; - virtual void goOnline(const double& kineticEnergy); + virtual void goOnline(const double& kineticEnergy) override; - virtual void goOffline(); + virtual void goOffline() override; - virtual ElementType getType() const; + virtual ElementType getType() const override; - virtual void getDimensions(double& zBegin, double& zEnd) const; + virtual void getDimensions(double& zBegin, double& zEnd) const override; - virtual bool isInMaterial(double z); + virtual bool isInside(const Vector_t& R) const override; -private: + void setDimensions(double xsize, double ysize); +private: // Not implemented. void operator=(const Degrader&); @@ -90,6 +90,9 @@ private: std::vector<double> MomentumZ_m; std::vector<double> time_m; std::vector<int> id_m; + + double width_m; + double height_m; }; #endif // CLASSIC_Degrader_HH diff --git a/src/Classic/Solvers/ScatteringPhysics.cpp b/src/Classic/Solvers/ScatteringPhysics.cpp index a7a54153d..834b4b02a 100644 --- a/src/Classic/Solvers/ScatteringPhysics.cpp +++ b/src/Classic/Solvers/ScatteringPhysics.cpp @@ -54,7 +54,7 @@ namespace { deg_m = static_cast<Degrader*>(el); } bool checkHit(const Vector_t& R) override { - return deg_m->isInMaterial(R(2)); + return deg_m->isInside(R); } private: Degrader* deg_m; diff --git a/src/Elements/OpalDegrader.cpp b/src/Elements/OpalDegrader.cpp index cc088c88d..bf8657d76 100644 --- a/src/Elements/OpalDegrader.cpp +++ b/src/Elements/OpalDegrader.cpp @@ -2,7 +2,7 @@ // Class OpalDegrader // The DEGRADER element. // -// Copyright (c) 200x - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland +// Copyright (c) 200x - 2023, Paul Scherrer Institut, Villigen PSI, Switzerland // All rights reserved // // This file is part of OPAL. @@ -26,9 +26,10 @@ OpalDegrader::OpalDegrader(): "The \"DEGRADER\" element defines a degrader."), parmatint_m(nullptr) { itsAttr[XSIZE] = Attributes::makeReal - ("XSIZE", "not used",0.0); + ("XSIZE", "Horizontal axis of the transverse elliptical shape [m]", 1E6); + itsAttr[YSIZE] = Attributes::makeReal - ("YSIZE", "not used",0.0); + ("YSIZE", "Vertical axis of the transverse elliptical shape [m]", 1E6); registerOwnership(); @@ -57,11 +58,14 @@ OpalDegrader* OpalDegrader::clone(const std::string& name) { void OpalDegrader::update() { OpalElement::update(); - DegraderRep* deg = - dynamic_cast<DegraderRep*>(getElement()); + DegraderRep* deg = dynamic_cast<DegraderRep*>(getElement()); double length = Attributes::getReal(itsAttr[LENGTH]); + double xsize = Attributes::getReal(itsAttr[XSIZE]); + double ysize = Attributes::getReal(itsAttr[YSIZE]); + deg->setElementLength(length); + deg->setDimensions(xsize, ysize); if (itsAttr[PARTICLEMATTERINTERACTION] && parmatint_m == nullptr) { const std::string matterDescriptor = Attributes::getString(itsAttr[PARTICLEMATTERINTERACTION]); diff --git a/src/Elements/OpalDegrader.h b/src/Elements/OpalDegrader.h index 40e15e0f9..a164ddcdb 100644 --- a/src/Elements/OpalDegrader.h +++ b/src/Elements/OpalDegrader.h @@ -2,7 +2,7 @@ // Class OpalDegrader // The DEGRADER element. // -// Copyright (c) 200x - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland +// Copyright (c) 200x - 2023, Paul Scherrer Institut, Villigen PSI, Switzerland // All rights reserved // // This file is part of OPAL. @@ -25,7 +25,6 @@ class ParticleMatterInteraction; class OpalDegrader: public OpalElement { public: - /// The attributes of class OpalDegrader. enum { XSIZE = COMMON, // not used @@ -45,7 +44,6 @@ public: virtual void update(); private: - // Not implemented. OpalDegrader(const OpalDegrader&); void operator=(const OpalDegrader&); -- GitLab