// $Id: LinsleyAtmosphere.hh,v 1.20 2005/10/02 14:17:07 thea Exp $ // S. Moreggia created 27 October 2003 #ifndef __LINSLEYATMOSPHERE_HH__ #define __LINSLEYATMOSPHERE_HH__ /***************************************************************************** * ESAF: Euso Simulation and Analysis Framework * * * * Id: LinsleyAtmosphere * * Package: atmosphere * * Coordinator: S. Moreggia * * * *****************************************************************************/ //////////////////////////////////////////////////////////////////////////////////////////// // // // LinsleyAtmosphere // // // // Description of the atmosphere using Linsley parametrization of air density // // Config files give the type of atmosphere and the number of layers // // // // Type of atmosphere used within Corsika // // // //////////////////////////////////////////////////////////////////////////////////////////// #include "Atmosphere.hh" #include "EsafMsgSource.hh" class LinsleyAtmosphereData; class LinsleyAtmosphere : public Atmosphere { public: // create the single atmosphere instance as a LinsleyAtmosphere object static void CreateInstance(); // To get specific parameters of Linsley atmosphere from the interface virtual Double_t GetValue(const string& parname) const {return 0;} // get date and geographic atmosphere parameters virtual Double_t GetLatitude() const {return HUGE;} // from -90 (south) to 90 (north) virtual Double_t GetLongitude() const {return HUGE;} // from 0 to 360 (east) virtual Double_t GetDate() const {return HUGE;} // in sec UT, from 1st Jan 00:00:00 (year not taken into account) // Following methods give relevant densities, pressure, temperature virtual Double_t Pressure(Double_t h) const; virtual Double_t Temperature(Double_t h) const; virtual Double_t AbsoluteHumidity(Double_t h) const; virtual Double_t Air_Density(Double_t h) const; virtual Double_t O_Density(Double_t h) const; virtual Double_t O2_Density(Double_t h) const; virtual Double_t O3_Density(Double_t h) const; virtual Double_t N2_Density(Double_t h) const; virtual Double_t Aerosols_Density(string& type,Double_t h) const; // Index as a function of altitude (base class methods are substituted) long double Index(Double_t h, Double_t wl = 350*sou::nm) const; long double Index(const EarthVector& v, Double_t wl = 350*sou::nm) const {return Index(v.Zv(),wl);} Double_t Index_Minus1(Double_t h, Double_t wl = 350*sou::nm) const; private: // default ctor (not used) LinsleyAtmosphere() {} // ctor LinsleyAtmosphere(string); // dtor virtual ~LinsleyAtmosphere(); // instance, get it by Atmosphere* Atmosphere::Get() static Atmosphere* fMe; // build the AtmosphereData object virtual void Build(); // Calculate interpolations (from tables of parameter) Double_t Interpolate(string&,string&,Double_t) const; LinsleyAtmosphereData* fData; // for linsley parametrization handling ClassDef(LinsleyAtmosphere,0) }; #endif /* __LINSLEYATMOSPHERE_HH__ */