GRALE
ellipticalsource.h
1 /*
2 
3  This file is a part of GRALE, a library to facilitate the simulation
4  and inversion of gravitational lenses.
5 
6  Copyright (C) 2008-2012 Jori Liesenborgs
7 
8  Contact: jori.liesenborgs@gmail.com
9 
10  This program 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 2 of the License, or
13  (at your option) any later version.
14 
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with this program; if not, write to the Free Software
22  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23 
24 */
25 
26 #ifndef GRALE_ELLIPTICALSOURCE_H
27 
28 #define GRALE_ELLIPTICALSOURCE_H
29 
30 #include "graleconfig.h"
31 #include "sourceimage.h"
32 #include "constants.h"
33 
34 namespace grale
35 {
36 
37 class GRALE_IMPORTEXPORT EllipticalSource : public SourceImage
38 {
39 public:
40  EllipticalSource(Vector2D<double> angularpos, double angular_axis, double excentricity, double rotangle, double brightnessScale);
41  ~EllipticalSource();
42  void setFade(bool f) { fade = f; }
43  SourceImage *createCopy() const;
44  bool isSerializable() const { return true; }
45 protected:
46  EllipticalSource();
47 
48  bool writeInternal(serut::SerializationInterface &si) const;
49  bool readInternal(serut::SerializationInterface &si);
50  double getIntensityInternal(Vector2D<double> diff) const;
51  double getMaxRadius() const { return A; }
52 private:
53  double A,B,e;
54  bool fade;
55 
56  friend class SourceImage;
57 };
58 
59 inline double EllipticalSource::getIntensityInternal(Vector2D<double> diff) const
60 {
61  // rescale
62  Vector2D<double> diff3(diff.getX()/A,diff.getY()/B);
63 
64  if (diff3.getLengthSquared() <= 1.0)
65  {
66  double val = 32768.0L;
67 
68  if (fade)
69  val *= (1.0L-(diff3.getLengthSquared()));
70 
71  return val;
72  }
73  return 0;
74 }
75 
76 } // end namespace
77 
78 #endif // GRALE_ELLIPTICALSOURCE_H
79