Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 3774)
+++ trunk/MagicSoft/Mars/Changelog	(revision 3775)
@@ -65,4 +65,8 @@
    * mcalib/MHPedestalPix.cc
      - fixed a bug which made normalization to values per slice not happen
+
+   * macros/pedestalstudies.C
+     - fixed and documented
+
 
  2004/04/15: Markus Gaug
Index: trunk/MagicSoft/Mars/macros/pedestalstudies.C
===================================================================
--- trunk/MagicSoft/Mars/macros/pedestalstudies.C	(revision 3774)
+++ trunk/MagicSoft/Mars/macros/pedestalstudies.C	(revision 3775)
@@ -22,298 +22,484 @@
 !
 \* ======================================================================== */
-
-//const TString pedfile = "/remote/home/pc2/operator/Crab20040214/20040215_16743_P_CrabOn_E.root";
-const TString pedfile = "../20040215_16770_P_OffCrab4_E.root";
-
-//const TString pedfile = "/mnt/users/mdoro/Mars/Data/20040201_14418_P_OffMrk421-1_E.root";
-//const TString pedfile = "/mnt/Data/rootdata/CrabNebula/2004_02_10/20040210_14607_P_CrabNebula_E.root";
-//const TString pedfile = "/mnt/Data/rootdata/CrabNebula/2004_01_26/20040125_10412_P_Crab-On_E.root";
-//const TString pedfile = "/mnt/Data/rootdata/Miscellaneous/2003_12_19/20031218_03522_P_Park_E.root";
-
-void pedestalstudies(TString pedname=pedfile)
+//////////////////////////////////////////////////////////////////////////////
+//
+// pedestalstudies.C
+//
+// macro to observe the pedestals and pedestalRMS with the number of FADC 
+// slices summed up. 
+//
+// In order to use this macro, you have to uncomment the following 
+// line in MPedCalcPedRun (line 214):
+//
+// fNumHiGainSamples = runheader->GetNumSamplesHiGain() & ~1;
+//
+//
+/////////////////////////////////////////////////////////////////////////////////
+const TString pedfile = "./20040303_20123_P_NewCalBoxTestLidOpen_E.root";
+
+void pedestalstudies(const TString pedname=pedfile)
 {
 
-    gStyle->SetOptStat(1111);
-    gStyle->SetOptFit();
-
-    MStatusDisplay *display = new MStatusDisplay;
-    display->SetUpdateTime(500);
-    display->Resize(850,700);
-
-    //
-    // Create a empty Parameter List and an empty Task List
-    // The tasklist is identified in the eventloop by its name
-    //
-    MParList  plist;
-    MTaskList tlist;
-    plist.AddToList(&tlist);
-
-    //
-    // Now setup the tasks and tasklist for the pedestals:
-    // ---------------------------------------------------
-    //
-
-    MReadMarsFile read("Events", pedname);
-    read.DisableAutoScheme();
-
-    MGeomApply      geomapl;
-    MExtractSignal  sigcalc;
-
-    //
-    // Set the extraction range higher:
-    //		
-    //sigcalc.SetRange(1,14,1,14);
-
-    MPedCalcPedRun pedcalc;
-
-    //
-    // Additionally to calculating the pedestals, 
-    // you can fill histograms and look at them
-    //
-    MFillH fill("MHPedestalCam", "MExtractedSignalCam");
-
-    tlist.AddToList(&read);
-    tlist.AddToList(&geomapl);
-    tlist.AddToList(&sigcalc);
-    tlist.AddToList(&pedcalc);
-    tlist.AddToList(&fill);
-
-    MGeomCamMagic  geomcam;
-    MPedestalCam   pedcam;
-    MHPedestalCam  hpedcam;
-    plist.AddToList(&geomcam);
-    plist.AddToList(&pedcam);
-    plist.AddToList(&hpedcam);
-
-    //
-    // Create and setup the eventloop
-    //
-    MEvtLoop evtloop;
-
-    evtloop.SetParList(&plist);
-    evtloop.SetDisplay(display);
- 
-    //
-    // Execute first analysis
-    //
-    if (!evtloop.Eventloop())
+  Int_t loops = 13;
+  Int_t stepsize = 2;
+
+  gStyle->SetOptStat(1111);
+  gStyle->SetOptFit();
+  
+  TArrayF *hmeandiffinn = new TArrayF(loops);
+  TArrayF *hrmsdiffinn  = new TArrayF(loops);
+  TArrayF *hmeandiffout = new TArrayF(loops);
+  TArrayF *hrmsdiffout  = new TArrayF(loops);
+  TArrayF *hmeaninn  = new TArrayF(loops);
+  TArrayF *hmeanout  = new TArrayF(loops);
+  TArrayF *hrmsinn   = new TArrayF(loops);
+  TArrayF *hrmsout   = new TArrayF(loops);
+  TArrayF *hmuinn    = new TArrayF(loops);
+  TArrayF *hmuout    = new TArrayF(loops);
+  TArrayF *hsigmainn = new TArrayF(loops);
+  TArrayF *hsigmaout = new TArrayF(loops);
+
+  TArrayF *hmeandiffinnerr = new TArrayF(loops);
+  TArrayF *hrmsdiffinnerr  = new TArrayF(loops);
+  TArrayF *hmeandiffouterr = new TArrayF(loops);
+  TArrayF *hrmsdiffouterr  = new TArrayF(loops);
+  TArrayF *hmeaninnerr  = new TArrayF(loops);
+  TArrayF *hmeanouterr  = new TArrayF(loops);
+  TArrayF *hrmsinnerr   = new TArrayF(loops);
+  TArrayF *hrmsouterr   = new TArrayF(loops);
+  TArrayF *hmuinnerr    = new TArrayF(loops);
+  TArrayF *hmuouterr    = new TArrayF(loops);
+  TArrayF *hsigmainnerr = new TArrayF(loops);
+  TArrayF *hsigmaouterr = new TArrayF(loops);
+
+
+  MStatusDisplay *display = new MStatusDisplay;
+  display->SetUpdateTime(500);
+  display->Resize(850,700);
+      
+  //
+  // Create a empty Parameter List and an empty Task List
+  // The tasklist is identified in the eventloop by its name
+  //
+  MParList  plist;
+  MTaskList tlist;
+  plist.AddToList(&tlist);
+
+  for (Int_t samples=2;samples<stepsize*loops+1;samples=samples+stepsize)
+    {
+
+      plist.Reset();
+      tlist.Reset();
+      
+      //
+      // Now setup the tasks and tasklist for the pedestals:
+      // ---------------------------------------------------
+      //
+      
+      MReadMarsFile read("Events", pedname);
+      read.DisableAutoScheme();
+      
+      MGeomApply      geomapl;
+      //
+      // Set the extraction range higher:
+      //		
+      //sigcalc.SetRange(1,14,1,14);
+      MPedCalcPedRun pedcalc;
+      pedcalc.SetNumHiGainSamples((Byte_t)samples);
+      
+      MExtractSignal  sigcalc;
+      sigcalc.SetRange(0,samples-1,0,samples-1);
+  
+      //
+      // Additionally to calculating the pedestals, 
+      // you can fill histograms and look at them
+      //
+      MFillH fill("MHPedestalCam", "MExtractedSignalCam");
+      fill.SetNameTab(Form("%s%2d","PedCam",samples));
+
+      tlist.AddToList(&read);
+      tlist.AddToList(&geomapl);
+      tlist.AddToList(&sigcalc);
+      tlist.AddToList(&pedcalc);
+      tlist.AddToList(&fill);
+      
+      MGeomCamMagic      geomcam;
+      MPedestalCam       pedcam;
+      MBadPixelsCam      badcam;
+      badcam.AsciiRead("badpixels.dat");  
+      
+      MHPedestalCam      hpedcam;
+      MCalibrationPedCam cpedcam;
+      
+      plist.AddToList(&geomcam);
+      plist.AddToList(&pedcam);
+      plist.AddToList(&hpedcam);
+      plist.AddToList(&cpedcam);
+      plist.AddToList(&badcam);
+      
+      //
+      // Create and setup the eventloop
+      //
+      MEvtLoop evtloop;
+      
+      evtloop.SetParList(&plist);
+      evtloop.SetDisplay(display);
+
+      //
+      // Execute first analysis
+      //
+      if (!evtloop.Eventloop())
         return;
-
-    tlist.PrintStatistics();
-
-    // 
-    // Look at one specific pixel, after all the histogram manipulations:
-    //
-//    hpedcam[9].DrawClone("fourierevents");
-
-
-    MHCamera dispped0  (geomcam, "Ped;Pedestal",               "Mean per Slice");
-    MHCamera dispped1  (geomcam, "Ped;PedestalErr",            "Mean Error per Slice");
-    MHCamera dispped2  (geomcam, "Ped;PedestalRms",            "RMS per Slice");
-    MHCamera dispped3  (geomcam, "Ped;PedestalRmsErr",         "RMS Error per Slice");
-
-    MHCamera dispped4  (geomcam, "Ped;Mean",                   "Fitted Mean per Slice");
-    MHCamera dispped5  (geomcam, "Ped;MeanErr",                "Fitted Error of Mean per Slice");
-    MHCamera dispped6  (geomcam, "Ped;Sigma",                  "Fitted Sigma per Slice");
-    MHCamera dispped7  (geomcam, "Ped;SigmaErr",               "Fitted Error of Sigma per Slice");
-    MHCamera dispped8  (geomcam, "Ped;Prob",                   "Probability of Fit");
-    MHCamera dispped9  (geomcam, "Ped;DeltaPedestalMean",      "Rel. Diff. Mean per Slice (Calc.-Fitte)");
-    MHCamera dispped10 (geomcam, "Ped;DeltaPedestalMeanError", "Rel. Diff. Mean Error per Slice (Calc.-Fitted)");
-    MHCamera dispped11  (geomcam, "Ped;DeltaRmsSigma",         "Rel. Diff. RMS per Slice (Calc.-Fitted)");
-    MHCamera dispped12  (geomcam, "Ped;DeltaRmsSigmaError",    "Rel. Diff. RMS Error per Slice (Calc.-Fitted)");
-    MHCamera dispped13  (geomcam, "Ped;FitOK",                 "Gaus Fit not OK");
-    MHCamera dispped14  (geomcam, "Ped;FourierOK",             "Fourier Analysis not OK");
-
-    dispped0.SetCamContent(  pedcam, 0);
-    dispped0.SetCamError(    pedcam, 1);
-    dispped1.SetCamContent(  pedcam, 1);
-    dispped2.SetCamContent(  pedcam, 2);
-    dispped2.SetCamError(    pedcam, 3);
-    dispped3.SetCamContent(  pedcam, 3);
-
-    dispped4.SetCamContent( hpedcam, 0);
-    dispped4.SetCamError(   hpedcam, 1);
-    dispped5.SetCamContent( hpedcam, 1);
-    dispped6.SetCamContent( hpedcam, 2);
-    dispped6.SetCamError(   hpedcam, 3);
-    dispped7.SetCamContent( hpedcam, 3);
-    dispped8.SetCamContent( hpedcam, 4);
-    dispped9.SetCamContent( hpedcam, 5);
-    dispped9.SetCamError(   hpedcam, 6);
-    dispped10.SetCamContent(hpedcam, 7);
-    dispped11.SetCamContent(hpedcam, 8);
-    dispped11.SetCamError(  hpedcam, 9);
-    dispped12.SetCamContent(hpedcam, 10);
-    dispped13.SetCamContent(hpedcam, 11);
-    dispped14.SetCamContent(hpedcam, 12);
-
-    dispped0.SetYTitle("Calc. Pedestal per slice [FADC counts]");
-    dispped1.SetYTitle("Calc. Pedestal Error per slice [FADC counts]");
-    dispped2.SetYTitle("Calc. Pedestal RMS per slice [FADC counts]");
-    dispped3.SetYTitle("Calc. Pedestal RMS Error per slice [FADC counts]");
-    dispped4.SetYTitle("Fitted Mean per slice [FADC counts]");
-    dispped5.SetYTitle("Error of Fitted Mean per slice [FADC counts]");
-    dispped6.SetYTitle("Fitted Sigma per slice [FADC counts]");
-    dispped7.SetYTitle("Error of Fitted Sigma per slice [FADC counts]");
-    dispped8.SetYTitle("Fit Probability [1]");
-    dispped9.SetYTitle("Rel. Diff. Pedestal Calc.-Fitted per slice [1]");
-    dispped10.SetYTitle("Rel. Diff. Pedestal Error Calc.-Fitted per slice [1]");
-    dispped11.SetYTitle("Rel. Diff. Pedestal RMS Calc.-Fitted per slice [1]");
-    dispped12.SetYTitle("Rel. Diff. Pedestal RMS Error Calc.-Fitted per slice [1]");
-    dispped13.SetYTitle("[1]");
-    dispped14.SetYTitle("[1]");
-    
-    // Histogram values
-    TCanvas &b1 = display->AddTab("Ped.Calc."); 
-    b1.Divide(4,3);
-
-    CamDraw(b1,dispped0,pedcam,1,4,1);
-    CamDraw(b1,dispped1,pedcam,2,4,2);
-    CamDraw(b1,dispped2,pedcam,3,4,2);
-    CamDraw(b1,dispped3,pedcam,4,4,2);
-
-    // Fitted values 
-    TCanvas &b2 = display->AddTab("Ped.Fit"); 
-    b2.Divide(4,3);
-
-    CamDraw(b2,dispped4,hpedcam,1,4,1);
-    CamDraw(b2,dispped5,hpedcam,2,4,2);
-    CamDraw(b2,dispped6,hpedcam,3,4,2);
-    CamDraw(b2,dispped7,hpedcam,4,4,2);
-
-
-    // Fits Probability
-    TCanvas &b3 = display->AddTab("Ped.Fit Prob.");
-    b3.Divide(1,3);
-
-    CamDraw(b3,dispped8,hpedcam,1,1,3);
-
-    // Differences
-    TCanvas &c4 = display->AddTab("Rel.Diff.Calc.-Fit");
-    c4.Divide(4,3);
-
-    CamDraw(c4,dispped9,hpedcam,1,4,1);
-    CamDraw(c4,dispped10,hpedcam,2,4,1);
-    CamDraw(c4,dispped11,hpedcam,3,4,1);
-    CamDraw(c4,dispped12,hpedcam,4,4,1);
-
-    // Defects
-    TCanvas &c5 = display->AddTab("Defects");
-    c5.Divide(2,2);
-
-    CamDraw(c5,dispped13,hpedcam,1,2,0);
-    CamDraw(c5,dispped14,hpedcam,2,2,0);
+      
+      // 
+      // Look at one specific pixel, after all the histogram manipulations:
+      //
+      /*
+      MHGausEvents &hpix = hpedcam.GetAverageHiGainArea(0);
+      hpix.DrawClone("fourierevents");
+      
+      MHGausEvents &lpix = hpedcam.GetAverageHiGainArea(1);
+      lpix.DrawClone("fourierevents");
+
+      hpedcam[170].DrawClone("fourierevents");
+  
+      */
+
+      MHCamera dispped0  (geomcam, "Ped;Pedestal",       "Mean per Slice");
+      MHCamera dispped2  (geomcam, "Ped;PedestalRms",    "RMS per Slice");
+      MHCamera dispped4  (geomcam, "Ped;Mean",           "Fitted Mean per Slice");
+      MHCamera dispped6  (geomcam, "Ped;Sigma",          "Fitted Sigma per Slice");
+      MHCamera dispped9  (geomcam, "Ped;DeltaPedMean",   "Rel. Diff. Mean per Slice (Fit-Calc.)");
+      MHCamera dispped11 (geomcam, "Ped;DeltaRmsSigma",  "Rel. Diff. RMS per Slice (Fit-Calc.)");
+  
+      dispped0.SetCamContent(  pedcam, 0);
+      dispped0.SetCamError(    pedcam, 1);
+      dispped2.SetCamContent(  pedcam, 2);
+      dispped2.SetCamError(    pedcam, 3);
+      
+      dispped4.SetCamContent( hpedcam, 0);
+      dispped4.SetCamError(   hpedcam, 1);
+      dispped6.SetCamContent( hpedcam, 2);
+      dispped6.SetCamError(   hpedcam, 3);
+      dispped9.SetCamContent( hpedcam, 5);
+      dispped9.SetCamError(   hpedcam, 6);
+      dispped11.SetCamContent(hpedcam, 8);
+      dispped11.SetCamError(  hpedcam, 9);
+  
+      dispped0.SetYTitle("Calc. Pedestal per slice [FADC counts]");
+      dispped2.SetYTitle("Calc. Pedestal RMS per slice [FADC counts]");
+      dispped4.SetYTitle("Fitted Mean per slice [FADC counts]");
+      dispped6.SetYTitle("Fitted Sigma per slice [FADC counts]");
+      dispped9.SetYTitle("Rel. Diff. Pedestal per slice Fit-Calc [1]");
+      dispped11.SetYTitle("Rel. Diff. Pedestal RMS per slice Fit-Calc [1]");
+
+
+      // Histogram values
+      TCanvas &b1 = display->AddTab(Form("%s%d","MeanRMS",samples));
+      b1.Divide(4,3);
+
+      CamDraw(b1,dispped0,1,4,*hmeaninn,*hmeanout,*hmeaninnerr,*hmeanouterr,samples,stepsize);
+      CamDraw(b1,dispped2,2,4,*hrmsinn,*hrmsout,*hrmsinnerr,*hrmsouterr,samples,stepsize);  
+      CamDraw(b1,dispped4,3,4,*hmuinn,*hmuout,*hmuinnerr,*hmuouterr,samples,stepsize);
+      CamDraw(b1,dispped6,4,4,*hsigmainn,*hsigmaout,*hsigmainnerr,*hsigmaouterr,samples,stepsize); 
+      
+      display->SaveAsGIF(3*((samples-1)/stepsize)+2,Form("%s%d","MeanRmsSamples",samples));
+
+      // Differences
+      TCanvas &c4 = display->AddTab(Form("%s%d","RelDiff",samples));
+      c4.Divide(2,3);
+      
+      CamDraw(c4,dispped9,1,2,*hmeandiffinn,*hmeandiffout,*hmeandiffinnerr,*hmeandiffouterr,samples,stepsize);
+      CamDraw(c4,dispped11,2,2,*hrmsdiffinn,*hrmsdiffout,*hrmsdiffinnerr,*hrmsdiffouterr,samples,stepsize); 
+
+      display->SaveAsGIF(3*((samples-1)/stepsize)+3,Form("%s%d","RelDiffSamples",samples));
+
+    }
+
+  TF1 *logg = new TF1("logg","[1]+TMath::Log(x-[0])",1.,30.,2);
+  logg->SetParameters(1.,3.5);
+  logg->SetParLimits(0,-1.,3.);
+  logg->SetParLimits(1,-1.,7.);
+  logg->SetLineColor(kRed);
+
+  TCanvas *canvas = new TCanvas("PedstudInner","Pedestal Studies Inner Pixels",600,900);
+  canvas->Divide(2,3);
+  canvas->cd(1);
+
+  TGraphErrors *gmeaninn = new TGraphErrors(hmeaninn->GetSize(),
+                                            CreateXaxis(hmeaninn->GetSize(),stepsize),hmeaninn->GetArray(),
+                                            CreateXaxisErr(hmeaninnerr->GetSize(),stepsize),hmeaninnerr->GetArray());
+  gmeaninn->Draw("A*");
+  gmeaninn->SetTitle("Calculated Mean per Slice Inner Pixels");
+  gmeaninn->GetXaxis()->SetTitle("Nr. added FADC slices");
+  gmeaninn->GetYaxis()->SetTitle("Calculated Mean per slice");
+  gmeaninn->Fit("pol0");
+  gmeaninn->GetFunction("pol0")->SetLineColor(kGreen);
+  //  gmeaninn->Fit(logg);
+
+  canvas->cd(2);
+
+  TGraphErrors *gmuinn = new TGraphErrors(hmuinn->GetSize(),
+                                          CreateXaxis(hmuinn->GetSize(),stepsize),hmuinn->GetArray(),
+                                          CreateXaxisErr(hmuinnerr->GetSize(),stepsize),hmuinnerr->GetArray());
+  gmuinn->Draw("A*");
+  gmuinn->SetTitle("Fitted Mean per Slice Inner Pixels");
+  gmuinn->GetXaxis()->SetTitle("Nr. added FADC slices");
+  gmuinn->GetYaxis()->SetTitle("Fitted Mean per Slice");
+  gmuinn->Fit("pol0");
+  gmuinn->GetFunction("pol0")->SetLineColor(kGreen);
+  //gmuinn->Fit(logg);
+
+
+  canvas->cd(3);
+
+  TGraphErrors *grmsinn = new TGraphErrors(hrmsinn->GetSize(),
+                                           CreateXaxis(hrmsinn->GetSize(),stepsize),hrmsinn->GetArray(),
+                                           CreateXaxisErr(hrmsinnerr->GetSize(),stepsize),hrmsinnerr->GetArray());
+  grmsinn->Draw("A*");
+  grmsinn->SetTitle("Calculated Rms per Slice Inner Pixels");
+  grmsinn->GetXaxis()->SetTitle("Nr. added FADC slices");
+  grmsinn->GetYaxis()->SetTitle("Calculated Rms per Slice");
+  //grmsinn->Fit("pol2");
+  //grmsinn->GetFunction("pol2")->SetLineColor(kRed);
+  grmsinn->Fit(logg);
+
+  canvas->cd(4);
+
+  TGraphErrors *gsigmainn = new TGraphErrors(hsigmainn->GetSize(),
+                                             CreateXaxis(hsigmainn->GetSize(),stepsize),hsigmainn->GetArray(),
+                                             CreateXaxisErr(hsigmainnerr->GetSize(),stepsize),hsigmainnerr->GetArray());
+  gsigmainn->Draw("A*");
+  gsigmainn->SetTitle("Fitted Sigma per Slice Inner Pixels");
+  gsigmainn->GetXaxis()->SetTitle("Nr. added FADC slices");
+  gsigmainn->GetYaxis()->SetTitle("Fitted Sigma per Slice");
+  //  gsigmainn->Fit("pol2");
+  //  gsigmainn->GetFunction("pol2")->SetLineColor(kRed);
+  gsigmainn->Fit(logg);
+
+  canvas->cd(5);
+
+  TGraphErrors *gmeandiffinn = new TGraphErrors(hmeandiffinn->GetSize(),
+                                                CreateXaxis(hmeandiffinn->GetSize(),stepsize),hmeandiffinn->GetArray(),
+                                                CreateXaxisErr(hmeandiffinnerr->GetSize(),stepsize),hmeandiffinnerr->GetArray());
+  gmeandiffinn->Draw("A*"); 
+  gmeandiffinn->SetTitle("Rel. Difference  Mean per Slice Inner Pixels");
+  gmeandiffinn->GetXaxis()->SetTitle("Nr. added FADC slices");
+  gmeandiffinn->GetYaxis()->SetTitle("Rel. Difference Mean per Slice");
+  //gmeandiffinn->Fit("pol2");
+  //gmeandiffinn->GetFunction("pol2")->SetLineColor(kBlue);
+  gmeandiffinn->Fit(logg);
+
+
+  canvas->cd(6);
+
+  TGraphErrors *grmsdiffinn = new TGraphErrors(hrmsdiffinn->GetSize(),
+                                               CreateXaxis(hrmsdiffinn->GetSize(),stepsize),hrmsdiffinn->GetArray(),
+                                               CreateXaxisErr(hrmsdiffinnerr->GetSize(),stepsize),hrmsdiffinnerr->GetArray());
+  grmsdiffinn->Draw("A*");
+  grmsdiffinn->SetTitle("Rel. Difference Sigma per Slice-RMS Inner Pixels");
+  grmsdiffinn->GetXaxis()->SetTitle("Nr. added FADC slices");
+  grmsdiffinn->GetYaxis()->SetTitle("Rel. Difference Sigma per Slice-RMS");
+  //grmsdiffinn->Fit("pol2");
+  //grmsdiffinn->GetFunction("pol2")->SetLineColor(kBlue);
+  grmsdiffinn->Fit(logg);
+
+
+  TCanvas *canvas2 = new TCanvas("PedstudOut","Pedestal Studies Outer Pixels",600,900);
+  canvas2->Divide(2,3);
+  canvas2->cd(1);
+
+
+  canvas2->cd(1);
+
+  TGraphErrors *gmeanout = new TGraphErrors(hmeanout->GetSize(),
+                                            CreateXaxis(hmeanout->GetSize(),stepsize),hmeanout->GetArray(),
+                                            CreateXaxisErr(hmeanouterr->GetSize(),stepsize),hmeanouterr->GetArray());
+  gmeanout->Draw("A*");
+  gmeanout->SetTitle("Calculated Mean per Slice Outer Pixels");
+  gmeanout->GetXaxis()->SetTitle("Nr. added FADC slices");
+  gmeanout->GetYaxis()->SetTitle("Calculated Mean per Slice");
+  gmeanout->Fit("pol0");
+  gmeanout->GetFunction("pol0")->SetLineColor(kGreen);
+  //gmeanout->Fit(logg);
+
+  canvas2->cd(2);
+
+  TGraphErrors *gmuout = new TGraphErrors(hmuout->GetSize(),
+                                          CreateXaxis(hmuout->GetSize(),stepsize),hmuout->GetArray(),
+                                          CreateXaxisErr(hmuouterr->GetSize(),stepsize),hmuouterr->GetArray());
+  gmuout->Draw("A*");
+  gmuout->SetTitle("Fitted Mean per Slice Outer Pixels");
+  gmuout->GetXaxis()->SetTitle("Nr. added FADC slices");
+  gmuout->GetYaxis()->SetTitle("Fitted Mean per Slice");
+  gmuout->Fit("pol0");
+  gmuout->GetFunction("pol0")->SetLineColor(kGreen);
+  //gmuout->Fit(logg);
+
+  canvas2->cd(3);
+
+  TGraphErrors *grmsout = new TGraphErrors(hrmsout->GetSize(),
+                                           CreateXaxis(hrmsout->GetSize(),stepsize),hrmsout->GetArray(),
+                                           CreateXaxisErr(hrmsouterr->GetSize(),stepsize),hrmsouterr->GetArray());
+  grmsout->Draw("A*");
+  grmsout->SetTitle("Calculated Rms per Slice Outer Pixels");
+  grmsout->GetXaxis()->SetTitle("Nr. added FADC slices");
+  grmsout->GetYaxis()->SetTitle("Calculated Rms per Slice");
+  //grmsout->Fit("pol2");
+  //grmsout->GetFunction("pol2")->SetLineColor(kRed);
+  grmsout->Fit(logg);
+
+  canvas2->cd(4);
+
+  TGraphErrors *gsigmaout = new TGraphErrors(hsigmaout->GetSize(),
+                                             CreateXaxis(hsigmaout->GetSize(),stepsize),hsigmaout->GetArray(),
+                                             CreateXaxisErr(hsigmaouterr->GetSize(),stepsize),hsigmaouterr->GetArray());
+  gsigmaout->Draw("A*");
+  gsigmaout->SetTitle("Fitted Sigma per Slice Outer Pixels");
+  gsigmaout->GetXaxis()->SetTitle("Nr. added FADC slices");
+  gsigmaout->GetYaxis()->SetTitle("Fitted Sigma per Slice");
+  //gsigmaout->Fit("pol2");
+  //gsigmaout->GetFunction("pol2")->SetLineColor(kRed);
+  gsigmaout->Fit(logg);
+
+
+  canvas2->cd(5);
+
+  TGraphErrors *gmeandiffout = new TGraphErrors(hmeandiffout->GetSize(),
+                                                CreateXaxis(hmeandiffout->GetSize(),stepsize),hmeandiffout->GetArray(),
+                                                CreateXaxisErr(hmeandiffouterr->GetSize(),stepsize),hmeandiffouterr->GetArray());
+  gmeandiffout->Draw("A*");
+  gmeandiffout->SetTitle("Rel. Difference  Mean per Slice Outer Pixels");
+  gmeandiffout->GetXaxis()->SetTitle("Nr. added FADC slices");
+  gmeandiffout->GetYaxis()->SetTitle("Rel. Difference Mean per Slice");
+  //gmeandiffout->Fit("pol2");
+  //gmeandiffout->GetFunction("pol2")->SetLineColor(kBlue);
+  gmeandiffout->Fit(logg);
+
+  canvas2->cd(6);
+
+  TGraphErrors *grmsdiffout = new TGraphErrors(hrmsdiffout->GetSize(),
+                                               CreateXaxis(hrmsdiffout->GetSize(),stepsize),hrmsdiffout->GetArray(),
+                                               CreateXaxisErr(hrmsdiffouterr->GetSize(),stepsize),hrmsdiffouterr->GetArray());
+  grmsdiffout->Draw("A*");
+  grmsdiffout->SetTitle("Rel. Difference Sigma per Slice-RMS Outer Pixels");
+  grmsdiffout->GetXaxis()->SetTitle("Nr. added FADC slices");
+  grmsdiffout->GetYaxis()->SetTitle("Rel. Difference Sigma per Slice-RMS");
+  //grmsdiffout->Fit("pol2");
+  //grmsdiffout->GetFunction("pol2")->SetLineColor(kBlue);
+  grmsdiffout->Fit(logg);
+
 
 }
 
-void CamDraw(TCanvas &c, MHCamera &cam, MCamEvent &evt, Int_t i, Int_t j, Int_t fit)
+
+void CamDraw(TCanvas &c, MHCamera &cam, Int_t i, Int_t j, TArrayF &a1, TArrayF &a2, 
+             TArrayF &a1err, TArrayF &a2err, Int_t samp, Int_t stepsize)
 {
 
   c.cd(i);
-  gPad->SetBorderMode(0);
   MHCamera *obj1=(MHCamera*)cam.DrawCopy("hist");
-  //  obj1->AddNotify(evt);
+  obj1->SetDirectory(NULL);
   
   c.cd(i+j);
-  gPad->SetBorderMode(0);
   obj1->Draw();
   ((MHCamera*)obj1)->SetPrettyPalette();
 
-  if (fit != 0)
+  c.cd(i+2*j);
+  TH1D *obj2 = (TH1D*)obj1->Projection();
+  obj2->SetDirectory(NULL);
+  
+  //      obj2->Sumw2();
+  obj2->Draw();
+  obj2->SetBit(kCanDelete);
+  
+  const Double_t min   = obj2->GetBinCenter(obj2->GetXaxis()->GetFirst());
+  const Double_t max   = obj2->GetBinCenter(obj2->GetXaxis()->GetLast());
+  const Double_t integ = obj2->Integral("width")/2.5066283;
+  const Double_t mean  = obj2->GetMean();
+  const Double_t rms   = obj2->GetRMS();
+  const Double_t width = max-min;
+  
+  if (rms == 0. || width == 0. )
+    return;
+  
+  TArrayI s0(6);
+  s0[0] = 6;
+  s0[1] = 1;
+  s0[2] = 2;
+  s0[3] = 3;
+  s0[4] = 4;
+  s0[5] = 5;
+  
+  TArrayI inner(1);
+  inner[0] = 0;
+  
+  TArrayI outer(1);
+  outer[0] = 1;
+      
+  // Just to get the right (maximum) binning
+  TH1D *half[2];
+  half[0] = obj1->ProjectionS(s0, inner, "Inner");
+  half[1] = obj1->ProjectionS(s0, outer, "Outer");
+
+  half[0]->SetDirectory(NULL);
+  half[1]->SetDirectory(NULL);
+  
+  for (int i=0; i<2; i++)
     {
-      c.cd(i+2*j);
-      gPad->SetBorderMode(0);
-      TH1D *obj2 = (TH1D*)obj1->Projection();
-      
-//      obj2->Sumw2();
-      obj2->Draw();
-      obj2->SetBit(kCanDelete);
-
-      const Double_t min   = obj2->GetBinCenter(obj2->GetXaxis()->GetFirst());
-      const Double_t max   = obj2->GetBinCenter(obj2->GetXaxis()->GetLast());
-      const Double_t integ = obj2->Integral("width")/2.5066283;
-      const Double_t mean  = obj2->GetMean();
-      const Double_t rms   = obj2->GetRMS();
-      const Double_t width = max-min;
-
-      if (rms == 0. || width == 0. )
-        return;
-      
-      switch (fit)
+      half[i]->SetLineColor(kRed+i);
+      half[i]->SetDirectory(0);
+      half[i]->SetBit(kCanDelete);
+      half[i]->Draw("same");
+      half[i]->Fit("gaus","Q+");
+
+      if (i==0)
         {
-        case 1:
-          TF1 *sgaus = new TF1("sgaus","gaus(0)",min,max);
-          sgaus->SetBit(kCanDelete);
-          sgaus->SetParNames("Area","#mu","#sigma");
-          sgaus->SetParameters(integ/rms,mean,rms);
-          sgaus->SetParLimits(0,0.,integ);
-          sgaus->SetParLimits(1,min,max);
-          sgaus->SetParLimits(2,0,width/1.5);
-          obj2->Fit("sgaus","QLR");
-          obj2->GetFunction("sgaus")->SetLineColor(kYellow);
-          break;
-
-        case 2:
-          TString dgausform = "([0]-[3])/[2]*exp(-0.5*(x-[1])*(x-[1])/[2]/[2])";
-          dgausform += "+[3]/[5]*exp(-0.5*(x-[4])*(x-[4])/[5]/[5])";
-          TF1 *dgaus = new TF1("dgaus",dgausform.Data(),min,max);
-          dgaus->SetBit(kCanDelete);
-          dgaus->SetParNames("A_{tot}","#mu_{1}","#sigma_{1}","A_{2}","#mu_{2}","#sigma_{2}");
-          dgaus->SetParameters(integ,(min+mean)/2.,width/4.,
-                               integ/width/2.,(max+mean)/2.,width/4.);
-          // The left-sided Gauss 
-          dgaus->SetParLimits(0,integ-1.5,integ+1.5);
-          dgaus->SetParLimits(1,min+(width/10.),mean);
-          dgaus->SetParLimits(2,0,width/2.);
-          // The right-sided Gauss 
-          dgaus->SetParLimits(3,0,integ);
-          dgaus->SetParLimits(4,mean,max-(width/10.));
-          dgaus->SetParLimits(5,0,width/2.);
-          obj2->Fit("dgaus","QLRM");
-          obj2->GetFunction("dgaus")->SetLineColor(kYellow);
-          break;
-          
-        case 3:
-          TString tgausform = "([0]-[3]-[6])/[2]*exp(-0.5*(x-[1])*(x-[1])/[2]/[2])";
-          tgausform += "+[3]/[5]*exp(-0.5*(x-[4])*(x-[4])/[5]/[5])";
-          tgausform += "+[6]/[8]*exp(-0.5*(x-[7])*(x-[7])/[8]/[8])";
-          TF1 *tgaus = new TF1("tgaus",tgausform.Data(),min,max);
-          tgaus->SetBit(kCanDelete);
-          tgaus->SetParNames("A_{tot}","#mu_{1}","#sigma_{1}",
-                             "A_{2}","#mu_{2}","#sigma_{2}",
-                             "A_{3}","#mu_{3}","#sigma_{3}");
-          tgaus->SetParameters(integ,(min+mean)/2,width/4.,
-                               integ/width/3.,(max+mean)/2.,width/4.,
-                               integ/width/3.,mean,width/2.);
-          // The left-sided Gauss 
-          tgaus->SetParLimits(0,integ-1.5,integ+1.5);
-          tgaus->SetParLimits(1,min+(width/10.),mean);
-          tgaus->SetParLimits(2,width/15.,width/2.);
-          // The right-sided Gauss 
-          tgaus->SetParLimits(3,0.,integ);
-          tgaus->SetParLimits(4,mean,max-(width/10.));
-          tgaus->SetParLimits(5,width/15.,width/2.);
-          // The Gauss describing the outliers
-          tgaus->SetParLimits(6,0.,integ);
-          tgaus->SetParLimits(7,min,max);
-          tgaus->SetParLimits(8,width/4.,width/1.5);
-          obj2->Fit("tgaus","QLRM");
-          obj2->GetFunction("tgaus")->SetLineColor(kYellow);
-          break;
-        case 4:
-          obj2->Fit("pol0","Q");
-          obj2->GetFunction("pol0")->SetLineColor(kYellow);
-          break;
-        case 9:
-          break;
-        default:
-          obj2->Fit("gaus","Q");
-          obj2->GetFunction("gaus")->SetLineColor(kYellow);
-          break;
+          a1[(samp-1)/stepsize] = half[i]->GetFunction("gaus")->GetParameter(1);
+          a1err[(samp-1)/stepsize] = half[i]->GetFunction("gaus")->GetParError(1);
+          if (a1err[(samp-1)/stepsize] > 3.)
+            a1err[(samp-1)/stepsize] = 1.;
         }
-      
-      gPad->Modified();
-      gPad->Update();
-      
+     if (i==1)
+       {
+         a2[(samp-1)/stepsize] = half[i]->GetFunction("gaus")->GetParameter(1);
+         a2err[(samp-1)/stepsize] = half[i]->GetFunction("gaus")->GetParError(1);
+          if (a2err[(samp-1)/stepsize] > 3.)
+            a2err[(samp-1)/stepsize] = 1.;
+       }
     }
+  
+  
 }
+
+// -----------------------------------------------------------------------------
+// 
+// Create the x-axis for the event graph
+//
+Float_t *CreateXaxis(Int_t n, Int_t step)
+{
+
+  Float_t *xaxis = new Float_t[n];
+
+  for (Int_t i=0;i<n;i++)
+    xaxis[i] = 2. + step*i;
+
+  return xaxis;
+                 
+}
+
+// -----------------------------------------------------------------------------
+// 
+// Create the x-axis for the event graph
+//
+Float_t *CreateXaxisErr(Int_t n, Int_t step)
+{
+
+  Float_t *xaxis = new Float_t[n];
+
+  for (Int_t i=0;i<n;i++)
+    xaxis[i] = step/2.;
+
+  return xaxis;
+                 
+}
Index: trunk/MagicSoft/Mars/manalysis/MPedCalcPedRun.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MPedCalcPedRun.cc	(revision 3774)
+++ trunk/MagicSoft/Mars/manalysis/MPedCalcPedRun.cc	(revision 3775)
@@ -118,4 +118,5 @@
     AddToBranchList("fHiGainFadcSamples");
 
+    fNumHiGainSamples = 0;
     Clear();
 }
@@ -123,9 +124,9 @@
 void MPedCalcPedRun::Clear(const Option_t *o)
 {
-    fNumHiGainSamples = 0;
-    fNumSamplesTot    = 0;
-
-    fRawEvt    = NULL;
-    fPedestals = NULL;
+
+  fNumSamplesTot    = 0;
+
+  fRawEvt    = NULL;
+  fPedestals = NULL;
 }
 
@@ -239,5 +240,5 @@
       UInt_t sum = 0;
       UInt_t sqr = 0;
-	
+
       do
         {
