[1360] | 1 | #ifndef _H_Aperture_
|
---|
| 2 | #define _H_Aperture_
|
---|
| 3 |
|
---|
| 4 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
---|
| 5 | * *
|
---|
| 6 | * --<--<-- A fast simulator --<--<-- *
|
---|
| 7 | * / --<--<-- of particle --<--<-- *
|
---|
| 8 | * ----HECTOR----< *
|
---|
| 9 | * \ -->-->-- transport through -->-->-- *
|
---|
| 10 | * -->-->-- generic beamlines -->-->-- *
|
---|
| 11 | * *
|
---|
| 12 | * JINST 2:P09005 (2007) *
|
---|
| 13 | * X Rouby, J de Favereau, K Piotrzkowski (CP3) *
|
---|
| 14 | * http://www.fynu.ucl.ac.be/hector.html *
|
---|
| 15 | * *
|
---|
| 16 | * Center for Cosmology, Particle Physics and Phenomenology *
|
---|
| 17 | * Universite catholique de Louvain *
|
---|
| 18 | * Louvain-la-Neuve, Belgium *
|
---|
| 19 | * *
|
---|
| 20 | * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
---|
| 21 |
|
---|
| 22 | /// \file H_Aperture.h
|
---|
| 23 | /// \brief Defines the aperture of beamline elements.
|
---|
| 24 |
|
---|
| 25 | // C++ #defines
|
---|
| 26 | #include <string>
|
---|
| 27 | #include <iostream>
|
---|
| 28 | using namespace std;
|
---|
| 29 |
|
---|
| 30 | // local #defines
|
---|
| 31 | enum {NONE=0, RECTANGULAR, ELLIPTIC, CIRCULAR, RECTELLIPSE};
|
---|
| 32 | #define NONENAME "None "
|
---|
| 33 | #define RECTANGULARNAME "Rectangle "
|
---|
| 34 | #define ELLIPTICNAME "Ellipse "
|
---|
| 35 | #define CIRCULARNAME "Circle "
|
---|
| 36 | #define RECTELLIPSENAME "Rectellipse"
|
---|
| 37 |
|
---|
| 38 | /// Defines the aperture of any optics element.
|
---|
| 39 | class H_Aperture {
|
---|
| 40 |
|
---|
| 41 | public:
|
---|
| 42 | /// Constructors, destructor and operators
|
---|
| 43 | //@{
|
---|
| 44 | H_Aperture();
|
---|
| 45 | H_Aperture(const int, const float, const float, const float, const float, const float, const float);
|
---|
| 46 | H_Aperture(const H_Aperture&);
|
---|
| 47 | H_Aperture& operator=(const H_Aperture&);
|
---|
| 48 | virtual ~H_Aperture() { };
|
---|
| 49 | virtual H_Aperture* clone() const { return new H_Aperture(type_,x1,x2,x3,x4,fx,fy); };
|
---|
| 50 | //@}
|
---|
| 51 |
|
---|
| 52 | /// Prints the aperture features
|
---|
| 53 | //virtual void printProperties() const;
|
---|
| 54 | void printProperties() const;
|
---|
| 55 | /// Draws the aperture shape
|
---|
| 56 | virtual void draw(const float) const {return;};
|
---|
| 57 | /// Sets the (x,y) position in [m]
|
---|
| 58 | void setPosition(const float,const float);
|
---|
| 59 | /// Checks whether the point is inside the aperture or not
|
---|
| 60 | virtual bool isInside(const float, const float) const;
|
---|
| 61 | /// Returns the (int) type of aperture
|
---|
| 62 | inline int getType() const {return type_;};
|
---|
| 63 | /// Returns the (string) type of the aperture
|
---|
| 64 | inline const string getTypeString() const { return aptypestring; }
|
---|
| 65 |
|
---|
| 66 |
|
---|
| 67 | protected:
|
---|
| 68 | /// Aperture shape (either RECTANGULAR or ELLIPTIC or ...)
|
---|
| 69 | int type_;
|
---|
| 70 | /// Aperture geometrical sizes (length/width or great/small radii) [m]
|
---|
| 71 | //@{
|
---|
| 72 | float x1, x2, x3, x4;
|
---|
| 73 | //@}
|
---|
| 74 | /// Horizontal coordinate of the aperture center [m] (from the nominal beam position).
|
---|
| 75 | //@{
|
---|
| 76 | float fx, fy;
|
---|
| 77 | //@}
|
---|
| 78 | /// Aperture shape string
|
---|
| 79 | string aptypestring;
|
---|
| 80 | // Sets the name of the aperture from its type.
|
---|
| 81 | //void setApertureString();
|
---|
| 82 | /// Gets the name of the aperture from its type.
|
---|
| 83 | const string getApertureString() const;
|
---|
| 84 |
|
---|
| 85 | friend std::ostream& operator<< (std::ostream& os, const H_Aperture& ap);
|
---|
| 86 | };
|
---|
| 87 |
|
---|
| 88 |
|
---|
| 89 | #endif
|
---|