#ifndef __weather_tools__ #define __weather_tools__ #include #include #include class WeatherData { private: vector _UTC; vector _QualityLevel; vector _P, _Rho, _RhoDaily; int Index(unsigned int); protected: double _RefP, _RefRho; double *_AlphaP[NARRAY], *_ErrAlphaP[NARRAY]; double *_AlphaRho[NARRAY], *_ErrAlphaRho[NARRAY]; double *_BetaRho[NARRAY], *_ErrBetaRho[NARRAY]; double *_Decay[NARRAY], *_ErrDecay[NARRAY]; unsigned int _NData; unsigned int _NSecThetaBins; public: WeatherData(int); ~WeatherData(); double Pressure(unsigned int utc, int quality=100); double Density(unsigned int utc, int quality=100); double DailyDensity(unsigned int utc, int quality=100); void SetAlphaP(int, double *); void SetAlphaRho(int, double *); void SetBetaRho(int, double *); }; class WeatherCoeffFitter : public WeatherData { protected: unsigned int _UTCStart, _UTCEnd; ENUMARRAY _Array; unsigned int _HCrit1, _HCrit2; unsigned int _NTotEvents; unsigned int **_NEvents; unsigned int _CurrentSecTheta; unsigned int _NSecPerHour, _NHours; double _B, _Gamma; double _NHexagonsMin; public: WeatherCoeffFitter(ENUMARRAY, unsigned int, unsigned int, double, const vector&, int, double eMax=1000.0, bool useW=false); ~WeatherCoeffFitter(); double FitFCN(double*); void Run(); void Dump(int); double *P, *Rho, *RhoDaily, *NHexagons; }; class WeatherCorrector : public WeatherData { private: public: WeatherCorrector(); ~WeatherCorrector(); void CorrectSRef(HeraldEvent &event, int quality); double CorrectSRef(double theta, double sRef, unsigned int utc, ENUMARRAY array, int quality); double ObservedEnergy(ENUMARRAY, double, unsigned int); }; class EventRate : public WeatherCoeffFitter { private: unsigned int _NSamplingTimes; double _EThreshold, _EMax; double *_DiurneMu, *_DiurneNObs, *_DiurneNHexa, *_DiurneErrNObs; double _ParEff[kNParEffEventRate], _ErrParEff[kNParEffEventRate]; public: EventRate(ENUMARRAY, unsigned int, unsigned int, double, const vector&, double eMax=1000.0, bool useW=false); ~EventRate(); double ExpectedRate(unsigned int, double *par=NULL); void Compute(); void Fit(vector&,int); double FitFCN(double *); void Dump(int); }; #endif