Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 1131)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 1132)
@@ -1,3 +1,35 @@
                                                                   -*-*- END -*-*-
+ 2001/12/19: Thomas Bretz
+ 
+   * mbase/MEvtLoop.cc:
+     - added #ifdef directive to make it work on older root also
+     
+   * mbase/MReadTree.cc:
+     - added #ifdef directive to get rid of the memory leak in prior
+       root 3.02/* versions
+
+   * macros/MagicHillas.C, macros/readMagic.C, meventdisp/MGCamDisplay.cc,
+     mmain/MAnalysis.cc:
+     - changes MMcPedestalNSB to MMcPedestalNSBAdd
+     
+   * manalysis/MMcPedestalCopy.[h,cc], manalysis/MMcPedestalNSBAdd.[h,cc]:
+     - reorganized ReInit, PreProcess.
+     - moved some code from ReInit to PreProcess to make the code
+       simpler. At the moment we don't intend to change the 
+       objects in the parlist while runtime.
+
+   * manalysis/MMcPedestalNSB.[h,cc]:
+     - removed
+
+   * mbase/MReadMarsFile.cc:
+     - read the first run header twice. To make it available in the
+       PreProcess of all tasks
+   
+   * mbase/MTaskList.cc:
+     - fixed a bug in the ReInit function. The ReInits where calles with 
+       a NULL-pointer
+
+
+
  2001/12/18: Oscar Blanch
 								 
@@ -26,13 +58,4 @@
      - remove fNumLoGainFadcSlices and fNumHiGainFadcSlices members
      - fix bug of Pedestal and Pedestal fluctuaions correspondence.
-
- 2001/12/19: Thomas Bretz
- 
-   * mbase/MEvtLoop.cc:
-     - added #ifdef directive to make it work on older root also
-     
-   * mbase/MReadTree.cc:
-     - added #ifdef directive to get rid of the memory leak in prior
-       root 3.02/* versions
 
 
Index: /trunk/MagicSoft/Mars/manalysis/MMcPedestalCopy.h
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MMcPedestalCopy.h	(revision 1131)
+++ /trunk/MagicSoft/Mars/manalysis/MMcPedestalCopy.h	(revision 1132)
@@ -23,4 +23,10 @@
 class MMcPedestalCopy : public MTask
 {
+private:
+    const MMcFadcHeader *fMcPed;
+    MPedestalCam *fPedCam;
+
+    Bool_t CheckRunType(MParList *pList) const;
+
 public:
     MMcPedestalCopy(const char *name=NULL, const char *title=NULL);
Index: unk/MagicSoft/Mars/manalysis/MMcPedestalNSB.cc
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSB.cc	(revision 1131)
+++ 	(revision )
@@ -1,134 +1,0 @@
-/* ======================================================================== *\
-!
-! *
-! * This file is part of MARS, the MAGIC Analysis and Reconstruction
-! * Software. It is distributed to you in the hope that it can be a useful
-! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
-! * It is distributed WITHOUT ANY WARRANTY.
-! *
-! * Permission to use, copy, modify and distribute this software and its
-! * documentation for any purpose is hereby granted without fee,
-! * provided that the above copyright notice appear in all copies and
-! * that both that copyright notice and this permission notice appear
-! * in supporting documentation. It is provided "as is" without express
-! * or implied warranty.
-! *
-!
-!
-!   Author(s): Oscar Blanch  11/2001 < mailto:blanch@ifae.es>
-!
-!   Copyright: MAGIC Software Development, 2000-2001
-!
-!
-\* ======================================================================== */
-
-/////////////////////////////////////////////////////////////////////////////
-//                                                                         //
-//  MMcPedestalNSB                                                        //
-//                                                                         //
-//  Input Containers:                                                      //
-//   MMcFadcHeader                                                         //
-//   MMcRunHeader                                                          //
-//   MRawRunHeader                                                         //
-//                                                                         //
-//  Output Containers:                                                     //
-//   MPedestalCam                                                          //
-//                                                                         //
-/////////////////////////////////////////////////////////////////////////////
-
-#include "MMcPedestalNSB.h"
-
-#include "MParList.h"
-
-#include "MLog.h"
-#include "MLogManip.h"
-
-#include "MPedestalCam.h"
-#include "MRawRunHeader.h"
-#include "MMcRunHeader.hxx"
-#include "MMcFadcHeader.hxx"
-
-ClassImp(MMcPedestalNSB);
-
-MMcPedestalNSB::MMcPedestalNSB(const float difnsb,
-			       const char *name, const char *title)
-{
-    fName  = name  ? name  : "MMcPedestalNSB";
-    fTitle = title ? title : "Task to copy monte carlo pedestals into MPedestal Container";
-
-    AddToBranchList("fPedestalMean");
-    AddToBranchList("fElecNoise");
-
-    fdnsb_pixel = difnsb;
-}
-
-Bool_t MMcPedestalNSB::ReInit(MParList *pList)
-{
-    MRawRunHeader *run = (MRawRunHeader*)pList->FindObject("MRawRunHeader");
-    if (!run)
-    {
-        *fLog << err << dbginf << "MRawRunHeader not found... aborting." << endl;
-	return kFALSE;
-    }
-
-    if (run->GetRunType() != kRTMonteCarlo)
-    {
-        *fLog << warn << dbginf << "Warning - MMcPedestalNSB is for Monte Carlo files only... removing this task from list." << endl;
-        return kSKIP;
-    }
-
-    const MMcFadcHeader *mcped = (MMcFadcHeader*)pList->FindObject("MMcFadcHeader");
-    if (!mcped)
-    {
-        *fLog << err << dbginf << "MMcFadcHeader not found... aborting." << endl;
-        return kFALSE;
-    }
-
-    MMcRunHeader *mcrun = (MMcRunHeader*)pList->FindObject("MMcRunHeader");
-    if (!mcrun && fdnsb_pixel < 0)
-    {
-        *fLog << err << dbginf << "Using the default argument of MMcPedestalNSB::MMcPedestalNSB() ";
-        *fLog << "only allowed if MMcRunHeader is available... aborting." << endl;
-        return kFALSE;
-    }
-
-    if (mcrun)
-    {
-        if (fdnsb_pixel >= 0 && fdnsb_pixel != mcrun->GetNumPheFromDNSB())
-        {
-            *fLog << warn << dbginf << "The MC file has been generated with diffuse nsb " << mcrun->GetNumPheFromDNSB();
-            *fLog <<" but you set up the diffuse NSB to " << fdnsb_pixel << endl;
-        }
-
-        fdnsb_pixel = mcrun->GetNumPheFromDNSB();
-    }
-
-    fdnsb_pixel *= 50.0/15.0;
-
-    MPedestalCam *pedcam = (MPedestalCam*)pList->FindCreateObj("MPedestalCam");
-    if (!pedcam)
-        return kFALSE;
-
-    const int num = mcped->GetNumPixel();
-
-    pedcam->InitSize(num);
-
-    for (int i=0; i<num; i++)
-    {
-        MPedestalPix &pix = (*pedcam)[i];
-
-        const Float_t pedrms = mcped->GetPedestalRms(i);
-        const Float_t sigrms = pedrms/sqrt(run->GetNumSamplesHiGain()*2);
-        const Float_t ampl   = mcped->GetAmplitud();
-
-        //
-        // check for central pixel (i<397)
-        //
-
-        const Double_t value = pedrms*pedrms + fdnsb_pixel*ampl*ampl;
-
-        pix.SetPedestalRms(sqrt(i<397 ? value : value*4), sigrms);
-    }
-
-    return kTRUE;
-}
Index: /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSB.h
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSB.h	(revision 1131)
+++ /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSB.h	(revision 1132)
@@ -27,5 +27,5 @@
 		   const char *name=NULL, const char *title=NULL);
 
-    Bool_t PreProcess(MParList *pList);
+    Bool_t ReInit(MParList *pList);
 
     ClassDef(MMcPedestalNSB, 0)   // Task which adds the NSB fluctuations to the pedestals rms
Index: /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSBAdd.cc
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSBAdd.cc	(revision 1131)
+++ /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSBAdd.cc	(revision 1132)
@@ -71,5 +71,6 @@
 //
 MMcPedestalNSBAdd::MMcPedestalNSBAdd(const Float_t difnsb,
-			       const char *name, const char *title)
+                                     const char *name, const char *title)
+    : fDnsbPixel(difnsb)
 {
     fName  = name  ? name  : "MMcPedestalNSBAdd";
@@ -82,6 +83,16 @@
     AddToBranchList("fPedesMean");
     AddToBranchList("fElecNoise");
-
-    fDnsbPixel=difnsb;
+}
+
+Bool_t MMcPedestalNSBAdd::CheckRunType(MParList *pList) const
+{
+    MRawRunHeader *runheader = (MRawRunHeader*)pList->FindObject("MRawRunHeader");
+    if (!runheader)
+    {
+        *fLog << warn << dbginf << "Warning - cannot check file type, MRawRunHeader not found." << endl;
+        return kTRUE;
+    }
+
+    return runheader->GetRunType() == kRTMonteCarlo;
 }
 
@@ -97,5 +108,35 @@
    // implemented then this line should be removed.
 
-    ReInit(pList);    
+    if (!CheckRunType(pList))
+    {
+        *fLog << warn << dbginf << "Warning - MMcPedestalNSB is for Monte Carlo files only... removing this task from list." << endl;
+        return kSKIP;
+    }
+
+    fFadc = (MMcFadcHeader*)pList->FindObject("MMcFadcHeader");
+    if (!fFadc)
+    {
+        *fLog << err << dbginf << "MMcFadcHeader not found... aborting." << endl;
+	return kFALSE;
+    }
+
+    fGeom = (MGeomCam*)pList->FindObject("MGeomCam");
+    if (!fGeom)
+    {
+        *fLog << err << dbginf << "MGeomCam not found... aborting." << endl;
+	return kFALSE;
+    }
+
+    fPedCam = (MPedestalCam*)pList->FindCreateObj("MPedestalCam");
+    if (!fPedCam)
+	return kFALSE;
+
+    MMcRunHeader *mcrunheader = (MMcRunHeader*)pList->FindObject("MMcRunHeader");
+    if (!mcrunheader && fDnsbPixel < 0 )
+    {
+        *fLog << err << dbginf << "Using the default argument of MMcPedestalNSB::MMcPedestalNSB() ";
+        *fLog << "only allowed if MMcRunHeader is available... aborting." << endl;
+        return kFALSE;
+    }
 
     return kTRUE;
@@ -117,28 +158,6 @@
 //   - MPedestalCam
 //
-Bool_t MMcPedestalNSBAdd::ReInit(MParList *pList)
-{
-
-    MRawRunHeader *runheader = (MRawRunHeader*)pList->FindObject("MRawRunHeader");
-    if (runheader)
-    {
-        if (runheader->GetRunType() != kRTMonteCarlo)
-        {
-            *fLog << warn << dbginf << "Warning - MMcPedestalNSB is for Monte Carlo files only... removing this task from list." << endl;
-            return kSKIP;
-        }
-    }	
-    else
-        *fLog << warn << dbginf << "Warning - cannot check file type, MRawRunHeader not found." << endl;
-
-
-    MMcFadcHeader *fadc = (MMcFadcHeader*)pList->FindObject("MMcFadcHeader");
-    if (!fadc)
-    {
-        *fLog << err << dbginf << "MMcFadcHeader not found... aborting." << endl;
-	return kFALSE;
-    }
-
-
+Float_t MMcPedestalNSBAdd::GetDnsb(MParList *pList) const
+{
     MMcRunHeader *mcrunheader = (MMcRunHeader*)pList->FindObject("MMcRunHeader");
     if (!mcrunheader && fDnsbPixel < 0 )
@@ -146,51 +165,48 @@
         *fLog << err << dbginf << "Using the default argument of MMcPedestalNSB::MMcPedestalNSB() ";
         *fLog << "only allowed if MMcRunHeader is available... aborting." << endl;
+        return -1;
+    }
+
+    if (!mcrunheader)
+        return fDnsbPixel;
+
+    if (fDnsbPixel >= 0 && fDnsbPixel != mcrunheader->GetNumPheFromDNSB())
+    {
+        *fLog << warn << dbginf << "The MC file has been generated with diffuse nsb " << mcrunheader->GetNumPheFromDNSB();
+        *fLog <<" but you set up the diffuse NSB to " << fDnsbPixel << endl;
+
+        return fDnsbPixel;
+    }
+
+    return mcrunheader->GetNumPheFromDNSB();
+}
+
+Bool_t MMcPedestalNSBAdd::ReInit(MParList *pList)
+{
+    if (!CheckRunType(pList))
         return kFALSE;
-    }
-
-    if (mcrunheader)
-    {
-        if (fDnsbPixel >= 0 && fDnsbPixel != mcrunheader->GetNumPheFromDNSB())
-        {
-            *fLog << warn << dbginf << "The MC file has been generated with diffuse nsb " << mcrunheader->GetNumPheFromDNSB();
-            *fLog <<" but you set up the diffuse NSB to " << fDnsbPixel << endl;
-        }
-	else
-	    fDnsbPixel = mcrunheader->GetNumPheFromDNSB();
-    }
-
-    fDnsbPixel *= 50.0/15.0;
-
-
-    MGeomCam *geometry = (MGeomCam*)pList->FindObject("MGeomCam");
-    if (!geometry)
-    {
-        *fLog << err << dbginf << "MGeomCam not found... aborting." << endl;
-	return kFALSE;
-    }
-
-
-    MPedestalCam *pedestals = (MPedestalCam*)pList->FindCreateObj("MPedestalCam");
-    if (!pedestals)
-	return kFALSE;
-
-
-    const int num = fadc->GetNumPixel();
+
+    Float_t dnsbpix = GetDnsb(pList) * 50.0/15.0;
+
+    if (dnsbpix < 0)
+        return kFALSE;
+
+    const int num = fFadc->GetNumPixel();
     
-    pedestals->InitSize(num);
-
-    const Float_t size0 = (*geometry)[0].GetR()*(*geometry)[0].GetR();
+    fPedCam->InitSize(num);
+
+    const Float_t size0 = (*fGeom)[0].GetR() * (*fGeom)[0].GetR();
 
     for (int i=0; i<num; i++)
     {
-        MPedestalPix &pix     = (*pedestals)[i];
-	MGeomPix     &pixgeom = (*geometry)[i];
+        MPedestalPix &pix     = (*fPedCam)[i];
+	MGeomPix     &pixgeom = (*fGeom)[i];
 
         const Float_t pedrms  = pix.GetSigma();
         const Float_t size    = pixgeom.GetR()*pixgeom.GetR()/size0;
 
-        const Float_t ampl    = fadc->GetAmplitud();
-
-	pix.SetSigma(sqrt(pedrms*pedrms + fDnsbPixel*ampl*ampl*size));
+        const Float_t ampl    = fFadc->GetAmplitud();
+
+	pix.SetSigma(sqrt(pedrms*pedrms + dnsbpix*ampl*ampl*size));
     }
 
Index: /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSBAdd.h
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSBAdd.h	(revision 1131)
+++ /trunk/MagicSoft/Mars/manalysis/MMcPedestalNSBAdd.h	(revision 1132)
@@ -16,16 +16,22 @@
 
 class MMcFadcHeader;
+class MGeomCam;
 class MPedestalCam;
-class MRawRunHeader;
-class MMcRunHeader;
 
 class MMcPedestalNSBAdd : public MTask
 {
+private:
+    MMcFadcHeader *fFadc;
+    const MGeomCam *fGeom;
+    MPedestalCam *fPedCam;
 
     Float_t fDnsbPixel;
 
+    Bool_t CheckRunType(MParList *pList) const;
+    Float_t GetDnsb(MParList *pList) const;
+
 public:
     MMcPedestalNSBAdd(const Float_t difnsb = -1.0,
-		   const char *name=NULL, const char *title=NULL);
+                      const char *name=NULL, const char *title=NULL);
 
     Bool_t PreProcess(MParList *pList);
Index: /trunk/MagicSoft/Mars/mbase/MReadMarsFile.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MReadMarsFile.cc	(revision 1131)
+++ /trunk/MagicSoft/Mars/mbase/MReadMarsFile.cc	(revision 1132)
@@ -138,4 +138,9 @@
         return kFALSE;
 
+    if (!fRun->Process())
+        return kFALSE;
+
+    fRun->SetEventNum(0);
+
     return MReadTree::PreProcess(pList);
 }
Index: /trunk/MagicSoft/Mars/mbase/MTaskList.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 1131)
+++ /trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 1132)
@@ -234,5 +234,5 @@
         *fLog << all << task->GetName() << "... " << flush;
 
-        if (!task->ReInit(pList?fParList:pList))
+        if (!task->ReInit(pList?pList:fParList))
             return kFALSE;
     }
Index: /trunk/MagicSoft/Mars/meventdisp/MGCamDisplay.cc
===================================================================
--- /trunk/MagicSoft/Mars/meventdisp/MGCamDisplay.cc	(revision 1131)
+++ /trunk/MagicSoft/Mars/meventdisp/MGCamDisplay.cc	(revision 1132)
@@ -25,23 +25,23 @@
 #include "MGCamDisplay.h"
 
-#include <TList.h>            // TList::Add
-#include <TCanvas.h>          // TCanvas::cd
-#include <TGButton.h>         // TGPictureButton
-#include <TGButtonGroup.h>    // TGVButtonGroup
-
-#include "MGTask.h"           // MGTask::CreateGui
-#include "MClone.h"           // MClone
-#include "MHillas.h"          // MHillas
-#include "MParList.h"         // MParList::AddToList
-#include "MEvtLoop.h"         // MEvtLoop::GetParList
-#include "MTaskList.h"        // MTaskList::AddToList
-#include "MCamDisplay.h"      // MCamDisplay
-#include "MHillasCalc.h"      // MHillasCalc
-#include "MPedestalCam.h"     // MPedestalCam
-#include "MCerPhotCalc.h"     // MCerPhotCalc
-#include "MMcPedestalCopy.h"  // MMcPedestalCopy
-#include "MMcPedestalNSB.h"   // MMcPedestalNSB
-#include "MImgCleanStd.h"     // MImgCleanStd
-#include "MGeomCamMagic.h"    // MGeomMagicCam
+#include <TList.h>               // TList::Add
+#include <TCanvas.h>             // TCanvas::cd
+#include <TGButton.h>            // TGPictureButton
+#include <TGButtonGroup.h>       // TGVButtonGroup
+
+#include "MGTask.h"              // MGTask::CreateGui
+#include "MClone.h"              // MClone
+#include "MHillas.h"             // MHillas
+#include "MParList.h"            // MParList::AddToList
+#include "MEvtLoop.h"            // MEvtLoop::GetParList
+#include "MTaskList.h"           // MTaskList::AddToList
+#include "MCamDisplay.h"         // MCamDisplay
+#include "MHillasCalc.h"         // MHillasCalc
+#include "MPedestalCam.h"        // MPedestalCam
+#include "MCerPhotCalc.h"        // MCerPhotCalc
+#include "MMcPedestalCopy.h"     // MMcPedestalCopy
+#include "MMcPedestalNSBAdd.h"   // MMcPedestalNSBAdd
+#include "MImgCleanStd.h"        // MImgCleanStd
+#include "MGeomCamMagic.h"       // MGeomMagicCam
 
 ClassImp(MGCamDisplay);
@@ -115,10 +115,10 @@
     MParList  *plist = GetParList();
 
-    MMcPedestalCopy *pcopy = new MMcPedestalCopy;
-    MMcPedestalNSB  *pdnsb = new MMcPedestalNSB;
-    MCerPhotCalc    *ncalc = new MCerPhotCalc;
-    MClone          *clone = new MClone("MCerPhotEvt");
-    MImgCleanStd    *clean = new MImgCleanStd;
-    MHillasCalc     *hcalc = new MHillasCalc;
+    MMcPedestalCopy   *pcopy = new MMcPedestalCopy;
+    MMcPedestalNSBAdd *pdnsb = new MMcPedestalNSBAdd;
+    MCerPhotCalc      *ncalc = new MCerPhotCalc;
+    MClone            *clone = new MClone("MCerPhotEvt");
+    MImgCleanStd      *clean = new MImgCleanStd;
+    MHillasCalc       *hcalc = new MHillasCalc;
 
     tlist->AddToList(pcopy);
Index: /trunk/MagicSoft/Mars/mmain/MAnalysis.cc
===================================================================
--- /trunk/MagicSoft/Mars/mmain/MAnalysis.cc	(revision 1131)
+++ /trunk/MagicSoft/Mars/mmain/MAnalysis.cc	(revision 1132)
@@ -126,6 +126,6 @@
 #include "MHStarMap.h"
 #include "MReadMarsFile.h"
-#include "MMcPedestalCopy.h"  // MMcPedestalCopy
-#include "MMcPedestalNSB.h"   // MMcPedestalNSB
+#include "MMcPedestalCopy.h"     // MMcPedestalCopy
+#include "MMcPedestalNSBAdd.h"   // MMcPedestalNSB
 #include "MCerPhotCalc.h"
 #include "MImgCleanStd.h"
@@ -181,8 +181,8 @@
     MReadMarsFile read("Events", fInputFile);
 
-    MMcPedestalCopy pcopy;
-    MMcPedestalNSB  pdnsb;
-    MCerPhotCalc    ncalc;
-    MHillasCalc     hcalc;
+    MMcPedestalCopy    pcopy;
+    MMcPedestalNSBAdd  pdnsb;
+    MCerPhotCalc       ncalc;
+    MHillasCalc        hcalc;
 
     tlist.AddToList(&read);
