#ifndef _atm_AirflyFluorescenceModel_h_
#define _atm_AirflyFluorescenceModel_h_

/**
   \file 
   Declaration of AirFlyFluorescenceModel

   \author Pedro Facal
   \date Jan 2007
*/

#include <atm/VFluorescenceModel.h>
#include <utl/TabulatedFunction.h>

static const char CVSId_atm_AirflyFluorescenceModel[] = 
  "$Id$";


namespace utl {
  class TabulatedFunction;
}


namespace atm {

  /**
     \class AirflyFluorescenceModel AirflyFluorescenceModel.h 
           "atm/AirflyFluorescenceModel.h"

     \brief Fluorescence yields from AIRFLY

     This model uses AIRFLY data (see .xml)

     \author Pedro Facal
     \date Jan 2007
     \version $Id$
     \ingroup atm_models
  */

  class AirflyFluorescenceModel :public atm::VFluorescenceModel {

  public: 
    AirflyFluorescenceModel() { }
  
    virtual ~AirflyFluorescenceModel() { }
    
    void Init();
    
    const utl::TabulatedFunction&
    EvaluateFluorescenceYield(const double heightAboveSeaLevel) const; 
    
    const std::vector<double>& GetWavelengths() const
    { return fWavelength; }

    double GetdEdX0() const;

    bool HasData() const { return true; }

  private:

    /* Extension of module from B. Keilhauer, Sep. 2009 according to 
       NIM A597 (2008) 50 and presentation from M. Bohacova at 6th Fl.
       Workshop in L'Aquila:
    */
    enum TemperatureParameterization { eAIRFLYtemp, eNoTempParam };
    enum HumidityParameterization { eAIRFLYhum, eNoHumParam };
   
    TemperatureParameterization fTempParam;
    HumidityParameterization fHumParam;

    //end of Extension

    mutable utl::TabulatedFunction fFluorescenceSpectrum;

    std::vector<double> fWavelength;
    std::vector<double> fRelativeIntensity;
    std::vector<double> fPPrime;
    std::vector<double> fRelativeIntensityError;
    std::vector<double> fPPrimeErrorUncorrelated;
    std::vector<double> fPPrimeErrorCorrelated;

    double  fTemperature0;
    double  fPressure0;
    double  fYield337;

    REGISTER_MODEL(atm::VFluorescenceModel, "Airfly", AirflyFluorescenceModel);
  };

}


#endif // _atm_AirflyFluorescenceModel_h_

// Configure (x)emacs for this file ...
// Local Variables:
// mode: c++
// compile-command: "make -C .. -k"
// End: