Index: trunk/Mars/mhist/MHCamera.cc
===================================================================
--- trunk/Mars/mhist/MHCamera.cc	(revision 13000)
+++ trunk/Mars/mhist/MHCamera.cc	(revision 13001)
@@ -1359,5 +1359,5 @@
 // Call this function to add a MCamEvent on top of the present contents.
 //
-void MHCamera::AddMeanShift(const MCamEvent &event, Int_t type)
+void MHCamera::AddMeanShift(const MCamEvent &event, Int_t type, Stat_t w)
 {
     if (fNcells<=1 || IsFreezed())
@@ -1373,5 +1373,5 @@
         {
             SetUsed(idx);
-            Fill(idx, val-mean); // FIXME: Slow!
+            Fill(idx, (val-mean)*w); // FIXME: Slow!
         }
     }
@@ -1383,5 +1383,5 @@
 // Call this function to add a MCamEvent on top of the present contents.
 //
-void MHCamera::AddMedianShift(const MCamEvent &event, Int_t type)
+void MHCamera::AddMedianShift(const MCamEvent &event, Int_t type, Stat_t w)
 {
     if (fNcells<=1 || IsFreezed())
@@ -1397,5 +1397,5 @@
         {
             SetUsed(idx);
-            Fill(idx, val-median); // FIXME: Slow!
+            Fill(idx, (val-median)*w); // FIXME: Slow!
         }
     }
@@ -1407,5 +1407,5 @@
 // Call this function to add a MCamEvent on top of the present contents.
 //
-void MHCamera::AddCamContent(const MCamEvent &event, Int_t type)
+void MHCamera::AddCamContent(const MCamEvent &event, Int_t type, Stat_t w)
 {
     if (fNcells<=1 || IsFreezed())
@@ -1419,6 +1419,30 @@
         {
             SetUsed(idx);
-            Fill(idx, val); // FIXME: Slow!
+            Fill(idx, val*w); // FIXME: Slow!
         }
+    }
+    fEntries++;
+}
+
+// ------------------------------------------------------------------------
+//
+void MHCamera::AddCamDifference(const MCamEvent &event1, const MCamEvent &event2, Int_t type)
+{
+    if (fNcells<=1 || IsFreezed())
+        return;
+
+    // FIXME: Security check missing!
+    for (Int_t idx=0; idx<fNcells-2; idx++)
+    {
+        Double_t val1=0;
+        if (!event1.GetPixelContent(val1, idx, *fGeomCam, type))
+            continue;
+
+        Double_t val2=0;
+        if (!event2.GetPixelContent(val2, idx, *fGeomCam, type))
+            continue;
+
+        SetUsed(idx);
+        Fill(idx, val1-val2); // FIXME: Slow!
     }
     fEntries++;
Index: trunk/Mars/mhist/MHCamera.h
===================================================================
--- trunk/Mars/mhist/MHCamera.h	(revision 13000)
+++ trunk/Mars/mhist/MHCamera.h	(revision 13001)
@@ -163,5 +163,6 @@
 
     virtual Double_t GetPixContent(Int_t idx) const { return GetBinContent(idx+1); }
-    virtual void     AddCamContent(const MCamEvent &evt, Int_t type=0);
+    virtual void     AddCamDifference(const MCamEvent &evt, const MCamEvent &evt2, Int_t type=0);
+    virtual void     AddCamContent(const MCamEvent &evt, Int_t type=0, Stat_t weight=1);
     virtual void     AddCamContent(const MHCamera &evt, Int_t type=0);
     virtual void     AddCamContent(const TArrayD &arr, const TArrayC *used=NULL);
@@ -175,6 +176,6 @@
     virtual void     SetUsed(const TArrayC &arr);
 
-    virtual void     AddMedianShift(const MCamEvent &evt, Int_t type=0);
-    virtual void     AddMeanShift(const MCamEvent &evt, Int_t type=0);
+    virtual void     AddMedianShift(const MCamEvent &evt, Int_t type=0, Stat_t weight=1);
+    virtual void     AddMeanShift(const MCamEvent &evt, Int_t type=0, Stat_t weight=1);
 
     virtual void     CntCamContent(const MCamEvent &evt, Double_t threshold, Int_t type=0, Bool_t isabove=kTRUE);
