#ifndef MARS_MMultiDimDistCalc
#define MARS_MMultiDimDistCalc

#ifndef MARS_MTask
#include "MTask.h"
#endif

class MHMatrix;
class MParList;
class MHadroness;
class MDataArray;

class MMultiDimDistCalc : public MTask
{
private:
    Int_t  fNum;            // number of distances used for an avarage
    Bool_t fUseKernel;      // Flag whether kernel method should be used

    MHMatrix   *fMGammas;   //! Gammas describing matrix
    MHMatrix   *fMHadrons;  //! Hadrons (non gammas) describing matrix

    MHadroness *fHadroness; //! Output container for calculated hadroness

    MDataArray *fData;      //! Used to store the MDataChains to get the event values

    void StreamPrimitive(ofstream &out) const;

public:
    MMultiDimDistCalc(const char *name=NULL, const char *title=NULL);
    ~MMultiDimDistCalc();

    void SetUseNumRows(UShort_t n=0) { fNum = n; }
    void SetUseKernelMethod(Bool_t k=kTRUE) { fUseKernel = k; }

    Bool_t PreProcess(MParList *plist);
    Bool_t Process();

    ClassDef(MMultiDimDistCalc, 0) // Task to calculate multidimensional distances
};

#endif
