#ifndef MHMCRATE_H
#define MHMCRATE_H

#ifndef MAGIC_H
#include "MAGIC.h"
#endif
#ifndef MPARCONTAINER_H
#include "MParContainer.h"
#endif

class MHMcRate : public MParContainer
{

private:
    UShort_t fPartId;           // Type of particle

    Float_t fEnergyMax;         // Maximum Energy in GeV
    Float_t fEnergyMin;         // Minimum Energy in GeV

    Float_t fThetaMax;          // Maximum theta angle of run
    Float_t fThetaMin;          // Minimum theta angle of run
    Float_t fPhiMax;            // Maximum phi angle of run
    Float_t fPhiMin;            // Minimum phi angle of run

    Float_t fImpactMax;         // Maximum impact parameter
    Float_t fImpactMin;         // Minimum impact parameter

    Float_t fBackTrig;          // Number of triggers from background
    Float_t fBackSim;           // Number of simulated showers for the background

    Float_t fSpecIndex;         // dn/dE = k * e^{- fSpecIndex}
    Float_t fFlux0;             // dn/dE = fFlux0 * E^{-a}

    Float_t fShowerRate;        // Showers rate in Hz
    Float_t fShowerRateError;   // Estimated error of shower rate in Hz

    Float_t fTriggerRate;       // Trigger rate in Hz
    Float_t fTriggerRateError;  // Estimated error for the trigger rate in Hz

    void Init(const char *name, const char *title);

public:

    MHMcRate(const char *name=NULL, const char *title=NULL);
    MHMcRate(Float_t showrate,
             const char *name=NULL, const char *title=NULL);
    MHMcRate(Float_t specindex, Float_t flux0,
             const char *name=NULL, const char *title=NULL);

    void SetParticle(UShort_t part);
    void SetBackground(Float_t showers, Float_t triggers);

    void UpdateBoundaries(Float_t energy, Float_t theta, Float_t phi, Float_t impact);

    void CalcRate(Float_t trig, Float_t anal, Float_t simu);

    void Print(Option_t *o=NULL);

    void Draw(Option_t *o=NULL);
    TObject *DrawClone(Option_t *o=NULL) const;

    ClassDef(MHMcRate, 1)  // Data Container to calculate Collection Area
};

#endif 
