00001
00002
00003 #ifndef ALBEDO_P_SPECTRUM_H
00004 #define ALBEDO_P_SPECTRUM_H
00005
00033 #include "Spectrum.h"
00034 #include "facilities/Observer.h"
00035 #include <string>
00036
00037
00038 class AlbedoPSpectrum : public Spectrum
00039 {
00040
00041 public:
00042 AlbedoPSpectrum(const std::string& params);
00043
00044 virtual double calculate_rate(double old_rate);
00045
00047 virtual double flux(double) const;
00048
00050 virtual double solidAngle()const;
00051
00053 virtual float flux(float lat, float lon) const;
00054 virtual float flux(std::pair<double, double> coords) const;
00055
00057 virtual float operator() (float)const;
00058
00060 virtual void setPosition(float lat, float lon);
00061 virtual void setPosition(std::pair<double,double> coords);
00062 int askGPS();
00063
00065 virtual std::pair<float,float> dir(float energy)const;
00066
00067 virtual std::string title() const;
00068 virtual const char * particleName() const;
00069 inline const char * nameOf() const {return "AlbedoPSpectrum";}
00070
00071
00073 void setParticleName(std::string name);
00074
00075
00076 private:
00077
00078 void init(const std::vector<float>& params);
00079
00081 float m_flux;
00082
00083 std::string m_particle_name;
00084 ObserverAdapter< AlbedoPSpectrum > m_observer;
00085 void fitParams(const double lat, const double lon, double& alf1,
00086 double& alf2, double& emin, double& emax, double& v1, double& v2,
00087 double& Ejoin) const;
00088 };
00089
00090 #endif // ALBEDO_P_SPECTRUM_H
00091