Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 2822)
+++ trunk/MagicSoft/Mars/Changelog	(revision 2823)
@@ -26,5 +26,4 @@
 
 
-
  2004/01/15: Markus Gaug
 
@@ -35,4 +34,5 @@
    * macros/calibration.C
      - replace MHCamera->Draw("proj") by MHCamera->Projection()
+     - produce better fits to the projection
 
    * manalysis/MSimulatedAnnealing.[h,cc], 
Index: trunk/MagicSoft/Mars/macros/calibration.C
===================================================================
--- trunk/MagicSoft/Mars/macros/calibration.C	(revision 2822)
+++ trunk/MagicSoft/Mars/macros/calibration.C	(revision 2823)
@@ -177,6 +177,6 @@
     disp9.SetCamContent(*cam, 8);
     disp9.SetCamError(*cam, 9);
+
     disp10.SetCamContent(*cam, 9);
-
     disp11.SetCamContent(*cam, 10);
 
@@ -215,318 +215,145 @@
     
     // Charges
-    TCanvas *c1 = &d3->AddTab("Fitted Charges"); 
-    c1->Divide(2,3);
-
-    TObject *obj1;
-
-    c1->cd(1);
-    obj1=disp1.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c1->cd(3);
-    gPad->SetBorderMode(0);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-
-    c1->cd(5);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    c1->cd(2);
-    obj1=disp3.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c1->cd(4);
-    gPad->SetBorderMode(0);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-
-    c1->cd(6);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
+    TCanvas &c1 = d3->AddTab("Fitted Charges"); 
+    c1.Divide(2,3);
+
+    CamDraw(c1,disp1,cam,1,2,1);
+    CamDraw(c1,disp3,cam,2,2,3);
 
     // Fit Probability
-    TCanvas *c12 = &d3->AddTab("Fit Prob."); 
-    c12->Divide(1, 3);
-
-    c12->cd(1);
-    obj1=disp5.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c12->cd(2);
-    gPad->SetBorderMode(0);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
+    TCanvas &c2 = d3->AddTab("Fit Prob."); 
+    c2.Divide(1,3);
+
+    CamDraw(c2,disp5,cam,1,1,3);
+
+    // Times
+    TCanvas &c3 = d3->AddTab("Fitted Times");
+    c3.Divide(3,3);
+
+    CamDraw(c3,disp6,cam,1,3,1);
+    CamDraw(c3,disp7,cam,2,3,0);
+    CamDraw(c3,disp8,cam,3,3,0);
+
+    // Pedestals
+    TCanvas &c4 = d3->AddTab("Pedestals");
+    c4.Divide(2,3);
+
+    CamDraw(c4,disp9,cam,1,2,0);
+    CamDraw(c4,disp10,cam,2,2,1);
+
+    // Reduced Sigmas
+    TCanvas &c5 = d3->AddTab("Reduced Sigmas");
+    c5.Divide(2,3);
+
+    CamDraw(c5,disp11,cam,1,2,2);
+    CamDraw(c5,disp16,cam,2,2,2);
+
+    // F-Factor Method
+    TCanvas &c6 = d3->AddTab("F-Factor Method");
+    c6.Divide(2,3);
+
+    CamDraw(c6,disp12,cam,1,2,1);
+    CamDraw(c6,disp13,cam,2,2,1);
+
+    // Blind Pixel Method
+    TCanvas &c7 = d3->AddTab("Blind Pixel Method");
+    c7.Divide(2, 3);
+
+    CamDraw(c7,disp14,cam,1,2,9);
+    CamDraw(c7,disp15,cam,2,2,1);
+
+}
+
+void CamDraw(TCanvas &c, MHCamera &cam, MCamEvent *evt, Int_t i, Int_t j, Int_t fit)
+{
+
+  c.cd(i);
+  gPad->SetBorderMode(0);
+  MHCamera *obj1=(MHCamera*)cam.DrawCopy("hist");
+  obj1->AddNotify(*evt);
+  
+  c.cd(i+j);
+  gPad->SetBorderMode(0);
+  obj1->Draw();
+  ((MHCamera*)obj1)->SetPrettyPalette();
+  
+  c.cd(i+2*j);
+  gPad->SetBorderMode(0);
+  Float_t he = gStyle->GetStatH();
+  Float_t wi = gStyle->GetStatH();
+  gStyle->SetStatH(0.4);
+  gStyle->SetStatW(0.25);
     
-    c12->cd(3);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    // Times
-    TCanvas *c2 = &d3->AddTab("Fitted Times");
-    c2->Divide(3, 3);
-
-    c2->cd(1);
-    obj1=disp6.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c2->cd(4);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-    
-    c2->cd(7);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    c2->cd(2);
-    obj1=disp7.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c2->cd(5);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-
-    c2->cd(8);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    c2->cd(3);
-    obj1=disp8.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c2->cd(6);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-    
-    c2->cd(9);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    // Pedestals
-    TCanvas *c3 = &d3->AddTab("Pedestals");
-    c3->Divide(2, 3);
-
-    c3->cd(1);
-    obj1=disp9.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c3->cd(3);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-    
-    c3->cd(5);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    c3->cd(2);
-    obj1=disp10.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c3->cd(4);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-
-    c3->cd(6);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    // Reduced Sigmas
-    TCanvas *c4 = &d3->AddTab("Reduced Sigmas");
-    c4->Divide(2,3);
-
-    c4->cd(1);
-    obj1=disp11.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c4->cd(3);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-    
-    c4->cd(5);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    c4->cd(2);
-    obj1=disp16.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c4->cd(4);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-    
-    c4->cd(6);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    // F-Factor Method
-    TCanvas *c5 = &d3->AddTab("F-Factor Method");
-    c5->Divide(2, 3);
-
-    c5->cd(1);
-    obj1=disp12.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c5->cd(3);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-    
-    c5->cd(5);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    c5->cd(2);
-    obj1=disp13.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c5->cd(4);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-    
-    c5->cd(6);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
-
-    // Blind Pixel Method
-    TCanvas *c6 = &d3->AddTab("Blind Pixel Method");
-    c6->Divide(2, 3);
-
-    c6->cd(1);
-    obj1=disp14.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c6->cd(3);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-    
-
-    c6->cd(2);
-    obj1=disp15.DrawCopy("hist");
-    ((MHCamera*)obj1)->AddNotify(*cam);
-
-    c6->cd(4);
-    obj1->Draw();
-    ((MHCamera*)obj1)->SetPrettyPalette();
-    
-    c6->cd(6);
-    gPad->SetBorderMode(0);
-    Float_t he = gStyle->GetStatH();
-    Float_t wi = gStyle->GetStatH();
-    gStyle->SetStatH(0.4);
-    gStyle->SetStatW(0.25);
-    TH1D *h2 = ((MHCamera*)obj1)->Projection(obj1->GetName());
-    h2->Fit("gaus","Q");
-    h2->GetFunction("gaus")->SetLineColor(kYellow);    
-    h2->Draw();
-    gStyle->SetStatH(he);      
-    gStyle->SetStatW(wi);      
+  TH1D *obj2 = (TH1D*)obj1->Projection();
+  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.5;
+  const Double_t mean  = obj2->GetMean();
+  const Double_t rms   = obj2->GetRMS();
+  const Double_t width = max-min;
+  
+  switch (fit)
+    {
+    case 0:
+      TF1 *sgaus = new TF1("sgaus","gaus(0)",min,max);
+      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 1:
+      TF1 *dgaus = new TF1("dgaus","gaus(0)+gaus(3)",min,max);
+      dgaus->SetParNames("A1","#mu1","#sigma1","A2","#mu2","#sigma2");
+      dgaus->SetParameters(integ/width,max-width/6.,width/4.,
+                           integ/width,min+width/6.,width/4.);
+      dgaus->SetParLimits(0,0,integ);
+      dgaus->SetParLimits(1,min,max);
+      dgaus->SetParLimits(2,0,width/3.);
+      dgaus->SetParLimits(3,0,integ);
+      dgaus->SetParLimits(4,min,max);
+      dgaus->SetParLimits(5,0,width/3.);
+      obj2->Fit("dgaus","QLR");
+      obj2->GetFunction("dgaus")->SetLineColor(kYellow);
+      break;
+
+    case 2:
+      TF1 *tgaus = new TF1("tgaus","gaus(0)+gaus(3)+gaus(6)",min,max);
+      tgaus->SetParNames("A1","#mu1","#sigma1","A2","#mu2","#sigma2","A3","#mu3","#sigma3");
+      tgaus->SetParameters(integ/width,max-width/6.,width/4.,
+                           integ/width,min+width/6.,width/4.,
+                           integ/width,min+width/6.,width/2.);
+      tgaus->SetParLimits(0,0,integ);
+      tgaus->SetParLimits(1,min,max);
+      tgaus->SetParLimits(2,0,width/4.);
+      tgaus->SetParLimits(3,0,integ);
+      tgaus->SetParLimits(4,min,max);
+      tgaus->SetParLimits(5,0,width/4.);
+      tgaus->SetParLimits(6,0,integ);
+      tgaus->SetParLimits(7,min,max);
+      tgaus->SetParLimits(8,0,width/2.);
+      obj2->Fit("tgaus","QLR");
+      obj2->GetFunction("tgaus")->SetLineColor(kYellow);
+      break;
+    case 3:
+      obj2->Fit("pol0","Q");
+      obj2->GetFunction("pol0")->SetLineColor(kYellow);
+      break;
+    case 9:
+      break;
+    default:
+      obj2->Fit("gaus","Q");
+      obj2->GetFunction("gaus")->SetLineColor(kYellow);
+      break;
+    }
+  
+  gStyle->SetStatH(he);      
+  gStyle->SetStatW(wi);      
 
 }
-
