Index: trunk/MagicSoft/Mars/mtools/MChisqEval.cc
===================================================================
--- trunk/MagicSoft/Mars/mtools/MChisqEval.cc	(revision 8644)
+++ trunk/MagicSoft/Mars/mtools/MChisqEval.cc	(revision 8679)
@@ -49,5 +49,6 @@
 const TString MChisqEval::gsDefTitle = "Evaluate a chisq";
 
-MChisqEval::MChisqEval(const char *name, const char *title) : fData0(NULL), fData1(NULL), fNameResult("MinimizationValue")
+MChisqEval::MChisqEval(const char *name, const char *title)
+    : fData0(NULL), fData1(NULL), fWeight(NULL), fNameResult("MinimizationValue")
 {
     fName  = name  ? name  : gsDefName.Data();
@@ -55,5 +56,6 @@
 }
 
-MChisqEval::MChisqEval(MData *y1, const char *name, const char *title) : fData0(NULL), fData1(NULL), fNameResult("MinimizationValue")
+MChisqEval::MChisqEval(MData *y1, const char *name, const char *title)
+: fData0(NULL), fData1(NULL), fWeight(NULL), fNameResult("MinimizationValue")
 {
     fName  = name  ? name  : gsDefName.Data();
@@ -62,5 +64,6 @@
 }
 
-MChisqEval::MChisqEval(MData *y1, MData *y2, const char *name, const char *title) : fData0(NULL), fData1(NULL), fNameResult("MinimizationValue")
+MChisqEval::MChisqEval(MData *y1, MData *y2, const char *name, const char *title)
+: fData0(NULL), fData1(NULL), fWeight(NULL), fNameResult("MinimizationValue")
 {
     fName  = name  ? name  : gsDefName.Data();
@@ -112,4 +115,5 @@
 {
     fChisq = 0;
+    fSumW  = 0;
 
     if (!fData0)
@@ -122,4 +126,11 @@
         if (!fData1->PreProcess(plist))
             return kFALSE;
+
+    if (!fNameWeight.IsNull())
+    {
+        fWeight = (MParameterD*)plist->FindObject(fNameWeight, "MParameterD");
+        if (!fWeight)
+            return kFALSE;
+    }
 
     fResult = (MParameterD*)plist->FindCreateObj("MParameterD", fNameResult);
@@ -138,5 +149,9 @@
     const Double_t err = fData1 ? y1*y2 : 1;
 
-    fChisq += dy*dy/err;
+    const Double_t w   = fWeight ? fWeight->GetVal() : 1;
+
+    fChisq += w*dy*dy/err;
+    fSumW  += w;
+
     return kTRUE;
 }
@@ -145,5 +160,5 @@
 {
     if (GetNumExecutions()>0)
-        fChisq /= GetNumExecutions();
+        fChisq /= fSumW;
 
     fResult->SetVal(fChisq);
Index: trunk/MagicSoft/Mars/mtools/MChisqEval.h
===================================================================
--- trunk/MagicSoft/Mars/mtools/MChisqEval.h	(revision 8644)
+++ trunk/MagicSoft/Mars/mtools/MChisqEval.h	(revision 8679)
@@ -15,11 +15,15 @@
     static const TString gsDefTitle;
 
-    Double_t     fChisq;  //! Evaluated chi square
-    MParameterD *fResult; //! Storage for result
-
     MData   *fData0; // Data Member one (monte carlo data or chisq function)
     MData   *fData1; // Data Member two (measured data)
 
+    MParameterD *fWeight;  //! Storage for weight
+    MParameterD *fResult;  //! Storage for result
+
     TString fNameResult;
+    TString fNameWeight;
+
+    Double_t     fChisq;   //! Evaluated chi square
+    Double_t     fSumW;    //! Sum of weights
 
     void StreamPrimitive(ostream &out) const;
@@ -43,4 +47,5 @@
 
     void SetOwner(Bool_t o=kTRUE) { o ? SetBit(kIsOwner) : ResetBit(kIsOwner); }
+    void SetNameWeight(TString w="MWeight") { fNameWeight=w; }
 
     Double_t GetChisq() const { return fChisq; }
