ROOT logo
//____________________________________________________________________
//
// $Id$
//
// Script that contains a class to draw eloss from hits, versus ADC
// counts from digits, using the AliFMDInputHits class in the util library. 
//
// It draws the energy loss versus the p/(mq^2).  It can be overlayed
// with the Bethe-Bloc curve to show how the simulation behaves
// relative to the expected. 
//
// Use the script `Compile.C' to compile this class using ACLic. 
//
#include <TH1D.h>
#include <AliFMDHit.h>
#include <AliFMDDigit.h>
#include <AliFMDInput.h>
#include <AliFMDUShortMap.h>
#include <AliFMDFloatMap.h>
#include <AliFMDRecPoint.h>
#include <AliESDFMD.h>
#include <AliLog.h>
#include <iostream>
#include <TStyle.h>
#include <TArrayF.h>
#include <TCanvas.h>
#include <TMath.h>
#include <TF1.h>
#include <TSpectrum.h>
#include <TLegend.h>
#include <TLatex.h>
#include <TLine.h>
#include <TPolyMarker.h>
#include <TSpectrum.h>
#include <TList.h>
#include <TGraph.h>

Double_t landau(Double_t* xp, Double_t* pp)
{
  Double_t x     = xp[0];
  Double_t A     = pp[0];
  Double_t mpv   = pp[1];
  Double_t w     = pp[2];

  Double_t v     = mpv; //  + w * 0.22278;
  return A * TMath::Landau(x, v, w); 
}

Double_t foldLandau(Double_t* xp, Double_t* pp)
{
  Double_t x     = xp[0];
  Double_t A     = pp[0];
  Double_t mpv   = pp[1];
  Double_t w     = pp[2];
  Double_t B     = pp[3];
  Double_t sigma = pp[4];
  
  return A * (TMath::Landau(x,mpv,w) + B * TMath::Gaus(x, mpv, sigma));
}

/** @class DrawESD
    @brief Draw digit ADC versus Rec point mult
    @code 
    Root> .L Compile.C
    Root> Compile("DrawESD.C")
    Root> DrawESD c
    Root> c.Run();
    @endcode
    @ingroup FMD_script
 */
class DrawESD : public AliFMDInput
{
private:
  TH1D* fMult; // Histogram 
  const Double_t fCorr;
  TList fCleanup;
public:
  //__________________________________________________________________
  DrawESD(Int_t n=2000, Double_t mmin=-0.5, Double_t mmax=15.5) 
    : fCorr(1) // 0.68377 / 1.1)
  { 
    AddLoad(kESD);
    fMult = new TH1D("mult", "#DeltaE/#DeltaE_{MIP)", n, mmin, mmax);
    fMult->Sumw2();
    fMult->SetFillColor(kRed+1);
    fMult->SetFillStyle(3001);
    fMult->SetXTitle("#DeltaE/#DeltaE_{MIP}");
    fCleanup.Add(fMult);
  }
  ~DrawESD() 
  {
    fCleanup.Delete();
  }
  //__________________________________________________________________
  /** Begining of event
      @param ev Event number
      @return @c false on error */
  Bool_t Begin(Int_t ev) 
  {
    return AliFMDInput::Begin(ev);
  }
  //__________________________________________________________________
  Bool_t ProcessESD(UShort_t /* det */, 
		    Char_t   /* rng */, 
		    UShort_t /* sec */, 
		    UShort_t /* str */, 
		    Float_t  eta, 
		    Float_t  mult)
  {
    // Cache the energy loss 
    // if (mult > 0) 
    //   Info("ProcessESD", "FMD%d%c[%2d,%3d]=%f", det, rng, sec, str, mult);
    if (mult <= 0 || mult == AliESDFMD::kInvalidMult) return kTRUE;
    Double_t x = mult;
    if (!fESD->IsAngleCorrected()) {
      Double_t theta = 2 * TMath::ATan(TMath::Exp(-eta));
      Double_t corr  = TMath::Abs(TMath::Cos(theta));
      Double_t cmult = corr * mult;
      x = cmult;
    }
    if (x > 0.001) fMult->Fill(x);
    return kTRUE;
  }
  //__________________________________________________________________
  Bool_t ProcessESDs()
  {
    if (!AliFMDInput::ProcessESDs()) return kFALSE;
    // Info("ProcessESDs", "ESD is %sangle corrected", 
    //      fESD->IsAngleCorrected() ? "" : "not ");
    return kTRUE;
  }
  //__________________________________________________________________
  TF1* FitPeak(Int_t n, TH1D* hist, Double_t min, Double_t& max)
  {
    if (TMath::Abs(max-min) < .25) return 0;
    std::cout << "Fit peak in range " << min << " to " << max << std::endl;
    TF1* l = new TF1(Form("l%02d", n), "landau", min, max);
    hist->GetXaxis()->SetRangeUser(0, 4);
    hist->Fit(l, "0Q", "", min, max);
    Double_t mpv   = l->GetParameter(1);
    Double_t empv  = l->GetParError(1);
    Double_t sigma = l->GetParameter(2);
    l->SetRange(mpv-empv, mpv+3*sigma);
    hist->Fit(l, "EMQ0", "", mpv-3*empv, mpv+3*sigma);
    std::cout << "Peak # " << n << " [" << min << "," << max << "]\n"
	      << " MPV: " << l->GetParameter(1) 
	      << " +/- "  << l->GetParError(1) 
	      << " Var: " << l->GetParameter(2) 
	      << " +/- "  << l->GetParError(2)
	      << " Chi^2/NDF: " << l->GetChisquare() / l->GetNDF() 
	      << std::endl;
    mpv   = l->GetParameter(1);
    sigma = l->GetParameter(2);
    min   = mpv - sigma * 2; // (n==1 ? 3 : 2);
    max   = mpv + sigma * 3;
    // l->SetRange(min, max);
    l->Draw("same");
    return  l;
  }
  //__________________________________________________________________
  void MaxInRange(TH1D* hist, Double_t min, Double_t& mean, Double_t& var)
  {
    hist->GetXaxis()->SetRangeUser(min, 4);
    mean = hist->GetMean();
    var  = hist->GetRMS();
  }

  //__________________________________________________________________
  const char* PrettyFloat(float x)
  {
    if (x == 0) return Form("%9.4f", x);
    float e = TMath::Floor(TMath::Log10(TMath::Abs(x)));
    if (TMath::Abs(e) < 4) {
      return Form("%9.4f", x);
    }
    float f = x / TMath::Power(10,e);
    return Form("%4.2f#times10^{%d}", f, int(e));
  }
  //__________________________________________________________________
  void ShowFit(Double_t x1, Double_t y1, const char* title, 
	       TF1* f, Double_t dx=0, Double_t dy=0.05)
  {
    Double_t x = x1, y = y1;
    TLatex* latex = new TLatex(x, y, title);
    latex->SetTextFont(132);
    latex->SetTextSize(0.8*dy);
    latex->SetNDC();
    latex->Draw();
    x -= dx;
    y -= dy;
    const Double_t eqDx=0.1;
    Double_t chi2 = f->GetChisquare();
    Int_t    ndf  = f->GetNDF();
    Double_t prob = f->GetProb();
    latex->DrawLatex(x, y, "#chi^{2}/NDF");
    latex->DrawLatex(x+eqDx, y, Form("= %7.4f/%3d=%5.2f (%7.3f%%)", 
				     chi2, ndf, chi2/ndf, 100*prob));
    Int_t     n = f->GetNpar();
    Double_t* p = f->GetParameters();
    Double_t* e = f->GetParErrors();
    for (int i = 0; i < n; i++) { 
      x -= dx;
      y -= dy;
      latex->DrawLatex(x, y, f->GetParName(i));
      latex->DrawLatex(x+eqDx, y, Form("= %s", PrettyFloat(p[i])));
      latex->DrawLatex(x+2.2*eqDx, y, Form("#pm %s", PrettyFloat(e[i])));
    }
  }      
  //__________________________________________________________________
  Bool_t Finish()
  {
    Info("Finish", "Will draw results");
    gStyle->SetPalette(1);
    gStyle->SetOptTitle(0);
    gStyle->SetOptFit(1111111);
    gStyle->SetCanvasColor(0);
    gStyle->SetCanvasBorderSize(0);
    gStyle->SetPadColor(0);
    gStyle->SetPadBorderSize(0);
    
    if (fMult->GetEntries() <= 0) return kFALSE;
    
    TCanvas* c = new TCanvas("c", "C", 1200, 800);
    fCleanup.Add(c);
    c->cd();
    c->SetLogy();
    c->SetTopMargin(0.05);
    c->SetRightMargin(0.05);
    c->SetFillColor(0);
    c->SetBorderMode(0);

    TLegend* leg = new TLegend(.1, .1, .4, .2);
    leg->SetFillColor(0);
    leg->SetBorderSize(1);

    DrawMult(c, leg);

    Double_t xmax=0, xmin=0, ymax=0;
    FindMinMax(xmin, xmax, ymax);

    FitLandau(xmin, xmax, ymax, leg);
    DrawResponse(xmax, ymax, leg);
    
    // TF1* f = FitMultiLandau(xmin, xmax, leg);
    // DrawLandaus(f);

    c->cd();
    leg->Draw();

    c->Modified();
    c->Update();
    c->cd();
    c->SaveAs("esd_eloss.png");

    fCleanup.Add(leg);

    return kTRUE;
    
  }
  //__________________________________________________________________
  /** 
   * Draw the multiplicity distribution
   * 
   */
  void DrawMult(TCanvas* /* c */, TLegend* leg) 
  {
    fMult->GetXaxis()->SetRangeUser(0.2,20);
    Double_t integral = fMult->Integral();
    Info("DrawMult", "Integral in range [0.2,20]=%f (%f entries)", 
	 integral, fMult->GetEntries());
    fMult->Scale(1. / integral);
    Info("DrawMult", "Integral in range [0.2,20]=%f (%f entries)", 
	 fMult->Integral(), fMult->GetEntries());
    Double_t max = 1.5 * fMult->GetMaximum();
    fMult->GetXaxis()->SetRangeUser(0,4);
    fMult->SetMaximum(max);
    fMult->SetStats(kFALSE);
    fMult->Draw("e same");
    leg->AddEntry(fMult, "Strip signal", "lf");

  }
  //__________________________________________________________________
  /** 
   * Find the minimum and maximum values in range
   * 
   * @param xmin 
   * @param xmax 
   * @param ymax 
   */
  void FindMinMax(Double_t& xmin, Double_t& xmax, Double_t& ymax)
  {
    fMult->GetXaxis()->SetRangeUser(0.1,4); 
    TSpectrum    s(10);
    Int_t        nPeak  = s.Search(fMult);
    fMult->GetXaxis()->SetRangeUser(0.1, 4);
    Int_t        bmax   = fMult->GetMaximumBin();
    xmax                = fMult->GetBinCenter(bmax);
    fMult->GetXaxis()->SetRangeUser(0.1, xmax);
    Double_t     bmin   = fMult->GetMinimumBin();
    xmin                = fMult->GetBinCenter(bmin);
    ymax                = fMult->GetBinContent(bmax);
    Info("Finish", "Simple peak finding found x_max=%f, x_min=%f y_max=%g", 
	 xmax, xmin, ymax);

    if (nPeak > 1) {
      TPolyMarker* pm = static_cast<TPolyMarker*>(fMult->GetListOfFunctions()
						  ->FindObject("TPolyMarker"));

      // Peaks are ordered by size 
      Double_t* peakX = pm->GetX();
      Double_t* peakY = pm->GetY();
      Double_t  xlmax = peakX[1];
      xmax            = peakX[0];
      ymax            = peakY[0];
      if (xmax < xlmax) { 
	xmax  = xlmax; 
	xlmax = peakX[0]; 
	ymax  = peakY[1];
      }

      fMult->GetXaxis()->SetRangeUser(xlmax, xmax);
      bmin  = fMult->GetMinimumBin();
      xmin  = fMult->GetBinCenter(bmin);
      Info("Finish", "Spectrum peak finding found x_max=%f, x_min=%f y_max=%g", 
	   xmax, xmin, ymax);
    }
  }
  //__________________________________________________________________
  /** 
   * Fit a landau and a landau+gaussian to the data
   * 
   * @param xmin  Minimum of peak range
   * @param xmax  Maximum of peak range
   * @param ymax  Y value in MIP peak
   * @param leg   Legend
   */
  void FitLandau(Double_t xmin, Double_t xmax, Double_t& ymax, TLegend* leg)
  {
    fMult->GetXaxis()->SetRangeUser(xmin, xmax+(xmax-xmin));
    Double_t mean = fMult->GetMean();
    Double_t var  = fMult->GetRMS();
    Info("Finish", "Peak range [%f,%f] mean=%f, var=%f", 
	 xmin, xmax+(xmax-xmin), mean, var);
    Double_t lowCut = mean-var;
    Double_t hiCut  = 4; // 2*mean;
    Info("Finish", "Low cut set to %f", lowCut);
    fMult->GetXaxis()->SetRangeUser(0, hiCut);
    
    TF1* pl = MakeLandau(lowCut, hiCut, xmax, var/2);
    fMult->Fit(pl, "NEM", "", lowCut, hiCut);
    ymax = pl->GetMaximum();
    Info("Finish", "Maximum of landau is at %f (y_max=%g)", 
	 pl->GetMaximumX(), ymax);

    TF1* gl  = MakeFoldLandau(lowCut, hiCut, pl, xmax, var/2);
    gl->SetLineColor(kRed+1);
    // gl->SetParLimits(1, xmax-var, xmax+var);
    fMult->Fit(gl, "NEM", "", lowCut, hiCut);
    TF1* l  = MakeLandau(lowCut, hiCut, xmax, var/2);
    l->SetLineColor(kGreen+1);
    l->SetParameters(gl->GetParameter(0),
		     gl->GetParameter(1),
		     gl->GetParameter(2));
    TF1* g  = new TF1("g", "gaus", lowCut, hiCut);
    g->SetParNames("A", "#mu", "#sigma");
    g->SetLineColor(kBlue+1);
    g->SetParameters(gl->GetParameter(3)*gl->GetParameter(0),
		     gl->GetParameter(1),
		     gl->GetParameter(2));
    fMult->GetXaxis()->SetRangeUser(0,4);
    fMult->DrawCopy("E");
    fMult->DrawCopy("HIST SAME");
    pl->Draw("same");
    gl->Draw("same");
    g->Draw("Same");
    l->Draw("Same");
    fCleanup.Add(pl);
    fCleanup.Add(l);
    fCleanup.Add(g);
    fCleanup.Add(gl);

    ShowFit(.5, .90, "Landau", pl);
    ShowFit(.5, .65, "Landau+Gaussian", gl);

    leg->AddEntry(pl, Form("Landau fit - #chi^{2}/NDF=%f", 
			   pl->GetChisquare()/pl->GetNDF()), "l");
    leg->AddEntry(gl, Form("Landau+Gaussian fit - #chi^{2}/NDF=%f", 
			   gl->GetChisquare()/gl->GetNDF()), "l");
    leg->AddEntry(l, "Landau part", "l");
    leg->AddEntry(g, "Gaussian part", "l");
  }
  
  //__________________________________________________________________
  /** 
   * Superimpose the response graph from the RPP 
   * 
   * @param ymax Y value of multiplicity spectra in the landau peak
   * @param leg  Legend
   */  
  void DrawResponse(Double_t xmax, Double_t ymax, TLegend* leg) 
  {
    TGraph*   resp = GetResp();
    // TGraph*   corr = GetCorr();
    Double_t* x    = resp->GetX();
    Double_t* y    = resp->GetY(); // [MeV cm^2/g]
    TGraph*   gr   = new TGraph(resp->GetN());
    gr->SetName(Form("%sCorr", resp->GetName()));
    gr->SetTitle(resp->GetTitle());
    gr->SetLineStyle(resp->GetLineStyle());
    gr->SetLineColor(kMagenta+1);
    gr->SetLineWidth(2);
    TGraph*   gr2   = new TGraph(resp->GetN());
    gr2->SetName(Form("%sCorr", resp->GetName()));
    gr2->SetTitle(resp->GetTitle());
    gr2->SetLineStyle(resp->GetLineStyle());
    gr2->SetLineColor(kCyan+1);
    gr2->SetLineWidth(2);
    // const Double_t rho = 2.33;   // [g/cm^3] 
    // const Double_t thk = 0.320;  // [cm]
    const Double_t mip = 1.664;  // [MeV cm^2/g]
    // const Double_t bgm = 3.4601; // beta*gamma of a MIP
    // Double_t  xs2 = corr->Eval(bgm); // [1]
    // Double_t  xss = 1.1;
    Double_t  xs  = 1/mip;
    Double_t xxmax = 0;
    Double_t yymax = 0;
    for (Int_t i = 0; i < gr->GetN(); i++) {
      if (y[i] > yymax) { 
	yymax = y[i];
	xxmax = xs * x[i];
      }
      gr->SetPoint(i, x[i] * xs, y[i] * ymax);
    }
    Info("DrawResponse", "Maximum at x=%f (xmax=%f)", xxmax, xmax);
    Double_t xs2 = xmax / xxmax;
    Info("DrawResponse", "Correction factor: %f", xs2);
    for (Int_t i = 0; i < gr->GetN(); i++) {
      gr2->SetPoint(i, x[i] * xs * xs2, y[i] * ymax);
    }
    gr->Draw("C same");
    gr2->Draw("C same");

    leg->AddEntry(gr, "Response", "l");
    leg->AddEntry(gr2, "Response", "l");
  }
  //__________________________________________________________________
  /** 
   * Fit sum of landaus to the multiplicity distribution
   * 
   * @param xmin Minimum of range 
   * @param xmax Maximum of range 
   * @param leg  Legend
   * 
   * @return Fitted function 
   */    
  TF1* FitMultiLandau(Double_t xmin, Double_t xmax, TLegend* leg)
  {
    fMult->GetXaxis()->SetRangeUser(xmin, xmax+(xmax-xmin));
    Double_t mean = fMult->GetMean();
    Double_t rms  = fMult->GetRMS();

    Double_t x1   = mean-rms/2; // .75; // .8;  // .65 / fCorr;
    Double_t x2   = mean+rms/2; // 1.3; // 1.7; // fCorr;
    TF1*     l1   = FitPeak(1, fMult, x1, x2);
    x2            = TMath::Max(mean+rms/2, x2);
    MaxInRange(fMult, x2, mean, rms);
    Double_t x3   = mean + rms;
    TF1*     l2   = FitPeak(2, fMult, x2, x3);
    TF1*     f    = 0;
    Double_t diff = 0;
    if (l2) {
      diff          = l2->GetParameter(1)-l1->GetParameter(1);
      f             = new TF1("user", "landau(0)+landau(3)", x1, x3);
      f->SetParNames("A_{1}", "Mpv_{1}", "#sigma_{1}",
		     "A_{2}", "Mpv_{2}", "#sigma_{2}",
		     "A_{3}", "Mpv_{3}", "#sigma_{3}");
      f->SetParameters(l1->GetParameter(0), 
		       l1->GetParameter(1), 
		       l1->GetParameter(2), 
		       l2 ? l2->GetParameter(0) : 0, 
		       l2 ? l2->GetParameter(1) : 0, 
		       l2 ? l2->GetParameter(2) : 0,
		       l2->GetParameter(0)/10, 
		       l2->GetParameter(1) + diff, 
		       l2->GetParameter(2));
    }
    else { 
      x3 = x2;
      f  = new TF1("usr", "landau", x1, x3);
    }
    
    std::cout << "Range: " << x1 << "-" << x3 << std::endl;
    
    fMult->GetXaxis()->SetRangeUser(0, 4);
    fMult->Fit(f, "NQR", "", x1, x3);
    fMult->Fit(f, "NMER", "E1", x1, x3);

    l1->SetLineColor(3);
    l1->SetLineWidth(2);
    l1->SetRange(0, 4);
    l1->Draw("same");
    if (l2) {
      l2->SetLineColor(4);
      l2->SetLineWidth(2);
      l2->SetRange(0, 4);
      l2->Draw("same");
    }
    f->SetLineWidth(2);
    f->SetRange(0, 4);
    f->Draw("same");

    fCleanup.Add(l1);
    if (l2) fCleanup.Add(l2);
    fCleanup.Add(f);


    leg->AddEntry(l1, "1 particle Landau", "l");
    if (l2) leg->AddEntry(l2, "2 particle Landau", "l");
    leg->AddEntry(f,  "1+2 particle Landau", "l");

    return f;
  }
  //__________________________________________________________________
  /** 
   * Draw landau functions in a separate canvas 
   * 
   * @param f Multi-landau function 
   */  
  void DrawLandaus(TF1* f)
  {
    TCanvas* c = new TCanvas("c2", "Landaus");
    // c->SetLogy();
    fMult->DrawClone("axis");
    f->Draw("same");
    Double_t* p1 = f->GetParameters();
    Double_t* p2 = &(p1[3]);
    TF1* ll1 = new TF1("ll1", "landau", 0, 4);
    ll1->SetParameters(p1);
    ll1->SetLineColor(3);
    ll1->Draw("same");
    TF1* ll2 = new TF1("ll2", "landau", 0, 4);
    ll2->SetParameters(p2);
    ll2->SetLineColor(4);
    ll2->Draw("same");

    Double_t diff = ll2->GetParameter(1)-ll1->GetParameter(1);
    Double_t y1   = fMult->GetMinimum() * 1.1;
    Double_t y2   = fMult->GetMaximum() * .9;
    Double_t xc1  = p1[1]-3*p1[2];
    Double_t xc2  = p2[1]-2*p2[2];
    Double_t xc3  = p2[1]-2*p2[2]+diff;
    TLine* c1 = new TLine(xc1, y1, xc1, y2);
    c1->Draw("same");
    TLine* c2 = new TLine(xc2, y1, xc2, y2);
    c2->Draw("same");
    TLine* c3 = new TLine(xc3, y1, xc3, y2);
    c3->Draw("same");

    TLegend* l = new TLegend(0.6, 0.6, .89, .89);
    l->AddEntry(ll1, "1 particle Landau", "l");
    l->AddEntry(ll2, "2 particle Landau", "l");
    l->AddEntry(f,  "1+2 particle Landau", "l");
    l->SetFillColor(0);
    l->Draw("same");

    c->Modified();
    c->Update();
    c->cd();
  }

  //__________________________________________________________________
  /** 
   * Get the response functin @f$ f(\Delta_p/x)@f$ from Review of
   * Particle Physics (fig. 27.7).  It is scaled to the value at MPV.
   *
   * @return Graph of response 
   */ 
  TGraph* GetResp()
  {
    static TGraph*  graph = 0;
    if (!graph) {
      graph = new TGraph;
      graph->SetName("si_resp");
      graph->SetTitle("f(#Delta/x) scaled to the MPV value ");
      graph->GetHistogram()->SetXTitle("#Delta/x (MeVcm^{2}/g)");
      graph->GetHistogram()->SetYTitle("f(#Delta/x)");
      graph->SetLineColor(kBlue+1);
      graph->SetLineWidth(2);
      graph->SetFillColor(kBlue+1);
      graph->SetMarkerStyle(21);
      graph->SetMarkerSize(0.6);
#if 0
      // Figure 27.7 or Review of Particle physics - Straggeling function in 
      // silicon of 500 MeV Pions, normalised to unity at the most probable 
      // value.   
      graph->SetPoint(0,0.808094,0.00377358);
      graph->SetPoint(1,0.860313,0.0566038);
      graph->SetPoint(2,0.891645,0.116981);
      graph->SetPoint(3,0.912533,0.181132);
      graph->SetPoint(4,0.928198,0.260377);
      graph->SetPoint(5,0.938642,0.320755);
      graph->SetPoint(6,0.954308,0.377358);
      graph->SetPoint(7,0.964752,0.433962);
      graph->SetPoint(8,0.975196,0.490566);
      graph->SetPoint(9,0.98564,0.550943);
      graph->SetPoint(10,0.996084,0.611321);
      graph->SetPoint(11,1.00653,0.667925);
      graph->SetPoint(12,1.02219,0.732075);
      graph->SetPoint(13,1.03264,0.784906);
      graph->SetPoint(14,1.0483,0.845283);
      graph->SetPoint(15,1.06397,0.901887);
      graph->SetPoint(16,1.09008,0.958491);
      graph->SetPoint(17,1.10574,0.984906);
      graph->SetPoint(18,1.13708,1);
      graph->SetPoint(19,1.13708,1);
      graph->SetPoint(20,1.15796,0.988679);
      graph->SetPoint(21,1.17363,0.966038);
      graph->SetPoint(22,1.19974,0.916981);
      graph->SetPoint(23,1.2154,0.89434);
      graph->SetPoint(24,1.23629,0.837736);
      graph->SetPoint(25,1.2624,0.784906);
      graph->SetPoint(26,1.28329,0.724528);
      graph->SetPoint(27,1.3094,0.664151);
      graph->SetPoint(28,1.32507,0.611321);
      graph->SetPoint(29,1.3564,0.550943);
      graph->SetPoint(30,1.41384,0.445283);
      graph->SetPoint(31,1.44517,0.392453);
      graph->SetPoint(32,1.48695,0.335849);
      graph->SetPoint(33,1.52872,0.286792);
      graph->SetPoint(34,1.58094,0.237736);
      graph->SetPoint(35,1.63838,0.196226);
      graph->SetPoint(36,1.68016,0.169811);
      graph->SetPoint(37,1.75326,0.135849);
      graph->SetPoint(38,1.81593,0.113208);
      graph->SetPoint(39,1.89426,0.0981132);
      graph->SetPoint(40,1.96214,0.0830189);
      graph->SetPoint(41,2.0718,0.0641509);
      graph->SetPoint(42,2.19191,0.0490566);
      graph->SetPoint(43,2.31723,0.0415094);
      graph->SetPoint(44,2.453,0.0301887);
      graph->SetPoint(45,2.53133,0.0264151);
      graph->SetPoint(46,2.57833,0.0264151);
#else
      graph->SetPoint(0,0.8115124,0.009771987);
      graph->SetPoint(1,0.9198646,0.228013);
      graph->SetPoint(2,0.996614,0.5895765);
      graph->SetPoint(3,1.041761,0.8241042);
      graph->SetPoint(4,1.059819,0.8794788);
      graph->SetPoint(5,1.077878,0.9348534);
      graph->SetPoint(6,1.100451,0.980456);
      graph->SetPoint(7,1.141084,0.9967427);
      graph->SetPoint(8,1.204289,0.9153094);
      graph->SetPoint(9,1.276524,0.742671);
      graph->SetPoint(10,1.402935,0.465798);
      graph->SetPoint(11,1.515801,0.3029316);
      graph->SetPoint(12,1.73702,0.1465798);
      graph->SetPoint(13,1.985327,0.08143322);
      graph->SetPoint(14,2.301354,0.04234528);
      graph->SetPoint(15,2.56772,0.02931596);
#endif
    }
    return graph;
  }
  //__________________________________________________________________
  /** 
   * Get the correction to Bethe-Bloc from Review of Particle Physics
   * (fig 27.8).
   *
   * @return correction graph
   */
  TGraph* GetCorr() 
  {
    static TGraph* graph = 0;
    if (!graph) {
      graph = new TGraph(14);
      graph->SetName("graph");
      graph->SetTitle("(#Delta_{p}/x)/(dE/dx)|_{mip} for 320#mu Si");
      graph->GetHistogram()->SetXTitle("#beta#gamma = p/m");
      graph->GetHistogram()->SetYTitle("#frac{#Delta_{p}/x)}{(dE/dx)|_{mip}}");
      graph->SetFillColor(1);
      graph->SetLineColor(7);
      graph->SetMarkerStyle(21);
      graph->SetMarkerSize(0.6);
      graph->SetPoint(0,1.196058,0.9944915);
      graph->SetPoint(1,1.28502,0.9411017);
      graph->SetPoint(2,1.484334,0.8559322);
      graph->SetPoint(3,1.984617,0.7491525);
      graph->SetPoint(4,2.658367,0.6983051);
      graph->SetPoint(5,3.780227,0.6779661);
      graph->SetPoint(6,4.997358,0.6741525);
      graph->SetPoint(7,8.611026,0.684322);
      graph->SetPoint(8,15.28296,0.6995763);
      graph->SetPoint(9,41.54516,0.7186441);
      graph->SetPoint(10,98.91461,0.7288136);
      graph->SetPoint(11,203.2734,0.7326271);
      graph->SetPoint(12,505.6421,0.7338983);
      graph->SetPoint(13,896.973,0.7338983);
    }
    return graph;
  }
  //__________________________________________________________________
  /** 
   * Make a Landau function object. 
   * 
   * @param min  Minimum of fit range 
   * @param max  Maximum of fit range
   * @param p    Peak position
   * @param v    Variance around peak
   * 
   * @return Landau function object
   */
  TF1* MakeLandau(Double_t min, Double_t max, Double_t p, Double_t v)
  {
    TF1* f = new TF1("l", "landau", min, max);
    f->SetParNames("A", "#delta", "#xi");
    f->SetParameters(1, p, p/10);
    if      (false) f->FixParameter(1,p);
    else if (false) f->SetParLimits(1, p-v, p+v);
    return f;
  }
  //__________________________________________________________________
  /** 
   * Make a Landau, folded with a gaussian, function object
   * 
   * @param min  Minimum of fit range 
   * @param max  Maximum of fit range
   * @param l    Seed Landau function object
   * @param p    Peak position
   * @param v    Variance around peak
   * 
   * @return Landau+Gaus function object
   */
  TF1* MakeFoldLandau(Double_t min, Double_t max, TF1* l, 
		      Double_t p, Double_t v)
  {
    TF1* f = new TF1("gl", &foldLandau, min, max, 5);
    f->SetParNames("A", "#delta", "#xi", "B", "#sigma");
    f->SetParameters(l->GetParameter(0), 
		     l->GetParameter(1),
		     l->GetParameter(2),
		     l->GetParameter(0)/1000,
		     l->GetParameter(2));
    f->SetParLimits(3, 1e-7, 1e-1);
    if      (false) f->FixParameter(1,p);
    else if (true)  f->SetParLimits(1, p-2*v, p+2*v);
    return f;
  }

  ClassDef(DrawESD,0);
  
};

//____________________________________________________________________
//
// EOF
//
 DrawESD.C:1
 DrawESD.C:2
 DrawESD.C:3
 DrawESD.C:4
 DrawESD.C:5
 DrawESD.C:6
 DrawESD.C:7
 DrawESD.C:8
 DrawESD.C:9
 DrawESD.C:10
 DrawESD.C:11
 DrawESD.C:12
 DrawESD.C:13
 DrawESD.C:14
 DrawESD.C:15
 DrawESD.C:16
 DrawESD.C:17
 DrawESD.C:18
 DrawESD.C:19
 DrawESD.C:20
 DrawESD.C:21
 DrawESD.C:22
 DrawESD.C:23
 DrawESD.C:24
 DrawESD.C:25
 DrawESD.C:26
 DrawESD.C:27
 DrawESD.C:28
 DrawESD.C:29
 DrawESD.C:30
 DrawESD.C:31
 DrawESD.C:32
 DrawESD.C:33
 DrawESD.C:34
 DrawESD.C:35
 DrawESD.C:36
 DrawESD.C:37
 DrawESD.C:38
 DrawESD.C:39
 DrawESD.C:40
 DrawESD.C:41
 DrawESD.C:42
 DrawESD.C:43
 DrawESD.C:44
 DrawESD.C:45
 DrawESD.C:46
 DrawESD.C:47
 DrawESD.C:48
 DrawESD.C:49
 DrawESD.C:50
 DrawESD.C:51
 DrawESD.C:52
 DrawESD.C:53
 DrawESD.C:54
 DrawESD.C:55
 DrawESD.C:56
 DrawESD.C:57
 DrawESD.C:58
 DrawESD.C:59
 DrawESD.C:60
 DrawESD.C:61
 DrawESD.C:62
 DrawESD.C:63
 DrawESD.C:64
 DrawESD.C:65
 DrawESD.C:66
 DrawESD.C:67
 DrawESD.C:68
 DrawESD.C:69
 DrawESD.C:70
 DrawESD.C:71
 DrawESD.C:72
 DrawESD.C:73
 DrawESD.C:74
 DrawESD.C:75
 DrawESD.C:76
 DrawESD.C:77
 DrawESD.C:78
 DrawESD.C:79
 DrawESD.C:80
 DrawESD.C:81
 DrawESD.C:82
 DrawESD.C:83
 DrawESD.C:84
 DrawESD.C:85
 DrawESD.C:86
 DrawESD.C:87
 DrawESD.C:88
 DrawESD.C:89
 DrawESD.C:90
 DrawESD.C:91
 DrawESD.C:92
 DrawESD.C:93
 DrawESD.C:94
 DrawESD.C:95
 DrawESD.C:96
 DrawESD.C:97
 DrawESD.C:98
 DrawESD.C:99
 DrawESD.C:100
 DrawESD.C:101
 DrawESD.C:102
 DrawESD.C:103
 DrawESD.C:104
 DrawESD.C:105
 DrawESD.C:106
 DrawESD.C:107
 DrawESD.C:108
 DrawESD.C:109
 DrawESD.C:110
 DrawESD.C:111
 DrawESD.C:112
 DrawESD.C:113
 DrawESD.C:114
 DrawESD.C:115
 DrawESD.C:116
 DrawESD.C:117
 DrawESD.C:118
 DrawESD.C:119
 DrawESD.C:120
 DrawESD.C:121
 DrawESD.C:122
 DrawESD.C:123
 DrawESD.C:124
 DrawESD.C:125
 DrawESD.C:126
 DrawESD.C:127
 DrawESD.C:128
 DrawESD.C:129
 DrawESD.C:130
 DrawESD.C:131
 DrawESD.C:132
 DrawESD.C:133
 DrawESD.C:134
 DrawESD.C:135
 DrawESD.C:136
 DrawESD.C:137
 DrawESD.C:138
 DrawESD.C:139
 DrawESD.C:140
 DrawESD.C:141
 DrawESD.C:142
 DrawESD.C:143
 DrawESD.C:144
 DrawESD.C:145
 DrawESD.C:146
 DrawESD.C:147
 DrawESD.C:148
 DrawESD.C:149
 DrawESD.C:150
 DrawESD.C:151
 DrawESD.C:152
 DrawESD.C:153
 DrawESD.C:154
 DrawESD.C:155
 DrawESD.C:156
 DrawESD.C:157
 DrawESD.C:158
 DrawESD.C:159
 DrawESD.C:160
 DrawESD.C:161
 DrawESD.C:162
 DrawESD.C:163
 DrawESD.C:164
 DrawESD.C:165
 DrawESD.C:166
 DrawESD.C:167
 DrawESD.C:168
 DrawESD.C:169
 DrawESD.C:170
 DrawESD.C:171
 DrawESD.C:172
 DrawESD.C:173
 DrawESD.C:174
 DrawESD.C:175
 DrawESD.C:176
 DrawESD.C:177
 DrawESD.C:178
 DrawESD.C:179
 DrawESD.C:180
 DrawESD.C:181
 DrawESD.C:182
 DrawESD.C:183
 DrawESD.C:184
 DrawESD.C:185
 DrawESD.C:186
 DrawESD.C:187
 DrawESD.C:188
 DrawESD.C:189
 DrawESD.C:190
 DrawESD.C:191
 DrawESD.C:192
 DrawESD.C:193
 DrawESD.C:194
 DrawESD.C:195
 DrawESD.C:196
 DrawESD.C:197
 DrawESD.C:198
 DrawESD.C:199
 DrawESD.C:200
 DrawESD.C:201
 DrawESD.C:202
 DrawESD.C:203
 DrawESD.C:204
 DrawESD.C:205
 DrawESD.C:206
 DrawESD.C:207
 DrawESD.C:208
 DrawESD.C:209
 DrawESD.C:210
 DrawESD.C:211
 DrawESD.C:212
 DrawESD.C:213
 DrawESD.C:214
 DrawESD.C:215
 DrawESD.C:216
 DrawESD.C:217
 DrawESD.C:218
 DrawESD.C:219
 DrawESD.C:220
 DrawESD.C:221
 DrawESD.C:222
 DrawESD.C:223
 DrawESD.C:224
 DrawESD.C:225
 DrawESD.C:226
 DrawESD.C:227
 DrawESD.C:228
 DrawESD.C:229
 DrawESD.C:230
 DrawESD.C:231
 DrawESD.C:232
 DrawESD.C:233
 DrawESD.C:234
 DrawESD.C:235
 DrawESD.C:236
 DrawESD.C:237
 DrawESD.C:238
 DrawESD.C:239
 DrawESD.C:240
 DrawESD.C:241
 DrawESD.C:242
 DrawESD.C:243
 DrawESD.C:244
 DrawESD.C:245
 DrawESD.C:246
 DrawESD.C:247
 DrawESD.C:248
 DrawESD.C:249
 DrawESD.C:250
 DrawESD.C:251
 DrawESD.C:252
 DrawESD.C:253
 DrawESD.C:254
 DrawESD.C:255
 DrawESD.C:256
 DrawESD.C:257
 DrawESD.C:258
 DrawESD.C:259
 DrawESD.C:260
 DrawESD.C:261
 DrawESD.C:262
 DrawESD.C:263
 DrawESD.C:264
 DrawESD.C:265
 DrawESD.C:266
 DrawESD.C:267
 DrawESD.C:268
 DrawESD.C:269
 DrawESD.C:270
 DrawESD.C:271
 DrawESD.C:272
 DrawESD.C:273
 DrawESD.C:274
 DrawESD.C:275
 DrawESD.C:276
 DrawESD.C:277
 DrawESD.C:278
 DrawESD.C:279
 DrawESD.C:280
 DrawESD.C:281
 DrawESD.C:282
 DrawESD.C:283
 DrawESD.C:284
 DrawESD.C:285
 DrawESD.C:286
 DrawESD.C:287
 DrawESD.C:288
 DrawESD.C:289
 DrawESD.C:290
 DrawESD.C:291
 DrawESD.C:292
 DrawESD.C:293
 DrawESD.C:294
 DrawESD.C:295
 DrawESD.C:296
 DrawESD.C:297
 DrawESD.C:298
 DrawESD.C:299
 DrawESD.C:300
 DrawESD.C:301
 DrawESD.C:302
 DrawESD.C:303
 DrawESD.C:304
 DrawESD.C:305
 DrawESD.C:306
 DrawESD.C:307
 DrawESD.C:308
 DrawESD.C:309
 DrawESD.C:310
 DrawESD.C:311
 DrawESD.C:312
 DrawESD.C:313
 DrawESD.C:314
 DrawESD.C:315
 DrawESD.C:316
 DrawESD.C:317
 DrawESD.C:318
 DrawESD.C:319
 DrawESD.C:320
 DrawESD.C:321
 DrawESD.C:322
 DrawESD.C:323
 DrawESD.C:324
 DrawESD.C:325
 DrawESD.C:326
 DrawESD.C:327
 DrawESD.C:328
 DrawESD.C:329
 DrawESD.C:330
 DrawESD.C:331
 DrawESD.C:332
 DrawESD.C:333
 DrawESD.C:334
 DrawESD.C:335
 DrawESD.C:336
 DrawESD.C:337
 DrawESD.C:338
 DrawESD.C:339
 DrawESD.C:340
 DrawESD.C:341
 DrawESD.C:342
 DrawESD.C:343
 DrawESD.C:344
 DrawESD.C:345
 DrawESD.C:346
 DrawESD.C:347
 DrawESD.C:348
 DrawESD.C:349
 DrawESD.C:350
 DrawESD.C:351
 DrawESD.C:352
 DrawESD.C:353
 DrawESD.C:354
 DrawESD.C:355
 DrawESD.C:356
 DrawESD.C:357
 DrawESD.C:358
 DrawESD.C:359
 DrawESD.C:360
 DrawESD.C:361
 DrawESD.C:362
 DrawESD.C:363
 DrawESD.C:364
 DrawESD.C:365
 DrawESD.C:366
 DrawESD.C:367
 DrawESD.C:368
 DrawESD.C:369
 DrawESD.C:370
 DrawESD.C:371
 DrawESD.C:372
 DrawESD.C:373
 DrawESD.C:374
 DrawESD.C:375
 DrawESD.C:376
 DrawESD.C:377
 DrawESD.C:378
 DrawESD.C:379
 DrawESD.C:380
 DrawESD.C:381
 DrawESD.C:382
 DrawESD.C:383
 DrawESD.C:384
 DrawESD.C:385
 DrawESD.C:386
 DrawESD.C:387
 DrawESD.C:388
 DrawESD.C:389
 DrawESD.C:390
 DrawESD.C:391
 DrawESD.C:392
 DrawESD.C:393
 DrawESD.C:394
 DrawESD.C:395
 DrawESD.C:396
 DrawESD.C:397
 DrawESD.C:398
 DrawESD.C:399
 DrawESD.C:400
 DrawESD.C:401
 DrawESD.C:402
 DrawESD.C:403
 DrawESD.C:404
 DrawESD.C:405
 DrawESD.C:406
 DrawESD.C:407
 DrawESD.C:408
 DrawESD.C:409
 DrawESD.C:410
 DrawESD.C:411
 DrawESD.C:412
 DrawESD.C:413
 DrawESD.C:414
 DrawESD.C:415
 DrawESD.C:416
 DrawESD.C:417
 DrawESD.C:418
 DrawESD.C:419
 DrawESD.C:420
 DrawESD.C:421
 DrawESD.C:422
 DrawESD.C:423
 DrawESD.C:424
 DrawESD.C:425
 DrawESD.C:426
 DrawESD.C:427
 DrawESD.C:428
 DrawESD.C:429
 DrawESD.C:430
 DrawESD.C:431
 DrawESD.C:432
 DrawESD.C:433
 DrawESD.C:434
 DrawESD.C:435
 DrawESD.C:436
 DrawESD.C:437
 DrawESD.C:438
 DrawESD.C:439
 DrawESD.C:440
 DrawESD.C:441
 DrawESD.C:442
 DrawESD.C:443
 DrawESD.C:444
 DrawESD.C:445
 DrawESD.C:446
 DrawESD.C:447
 DrawESD.C:448
 DrawESD.C:449
 DrawESD.C:450
 DrawESD.C:451
 DrawESD.C:452
 DrawESD.C:453
 DrawESD.C:454
 DrawESD.C:455
 DrawESD.C:456
 DrawESD.C:457
 DrawESD.C:458
 DrawESD.C:459
 DrawESD.C:460
 DrawESD.C:461
 DrawESD.C:462
 DrawESD.C:463
 DrawESD.C:464
 DrawESD.C:465
 DrawESD.C:466
 DrawESD.C:467
 DrawESD.C:468
 DrawESD.C:469
 DrawESD.C:470
 DrawESD.C:471
 DrawESD.C:472
 DrawESD.C:473
 DrawESD.C:474
 DrawESD.C:475
 DrawESD.C:476
 DrawESD.C:477
 DrawESD.C:478
 DrawESD.C:479
 DrawESD.C:480
 DrawESD.C:481
 DrawESD.C:482
 DrawESD.C:483
 DrawESD.C:484
 DrawESD.C:485
 DrawESD.C:486
 DrawESD.C:487
 DrawESD.C:488
 DrawESD.C:489
 DrawESD.C:490
 DrawESD.C:491
 DrawESD.C:492
 DrawESD.C:493
 DrawESD.C:494
 DrawESD.C:495
 DrawESD.C:496
 DrawESD.C:497
 DrawESD.C:498
 DrawESD.C:499
 DrawESD.C:500
 DrawESD.C:501
 DrawESD.C:502
 DrawESD.C:503
 DrawESD.C:504
 DrawESD.C:505
 DrawESD.C:506
 DrawESD.C:507
 DrawESD.C:508
 DrawESD.C:509
 DrawESD.C:510
 DrawESD.C:511
 DrawESD.C:512
 DrawESD.C:513
 DrawESD.C:514
 DrawESD.C:515
 DrawESD.C:516
 DrawESD.C:517
 DrawESD.C:518
 DrawESD.C:519
 DrawESD.C:520
 DrawESD.C:521
 DrawESD.C:522
 DrawESD.C:523
 DrawESD.C:524
 DrawESD.C:525
 DrawESD.C:526
 DrawESD.C:527
 DrawESD.C:528
 DrawESD.C:529
 DrawESD.C:530
 DrawESD.C:531
 DrawESD.C:532
 DrawESD.C:533
 DrawESD.C:534
 DrawESD.C:535
 DrawESD.C:536
 DrawESD.C:537
 DrawESD.C:538
 DrawESD.C:539
 DrawESD.C:540
 DrawESD.C:541
 DrawESD.C:542
 DrawESD.C:543
 DrawESD.C:544
 DrawESD.C:545
 DrawESD.C:546
 DrawESD.C:547
 DrawESD.C:548
 DrawESD.C:549
 DrawESD.C:550
 DrawESD.C:551
 DrawESD.C:552
 DrawESD.C:553
 DrawESD.C:554
 DrawESD.C:555
 DrawESD.C:556
 DrawESD.C:557
 DrawESD.C:558
 DrawESD.C:559
 DrawESD.C:560
 DrawESD.C:561
 DrawESD.C:562
 DrawESD.C:563
 DrawESD.C:564
 DrawESD.C:565
 DrawESD.C:566
 DrawESD.C:567
 DrawESD.C:568
 DrawESD.C:569
 DrawESD.C:570
 DrawESD.C:571
 DrawESD.C:572
 DrawESD.C:573
 DrawESD.C:574
 DrawESD.C:575
 DrawESD.C:576
 DrawESD.C:577
 DrawESD.C:578
 DrawESD.C:579
 DrawESD.C:580
 DrawESD.C:581
 DrawESD.C:582
 DrawESD.C:583
 DrawESD.C:584
 DrawESD.C:585
 DrawESD.C:586
 DrawESD.C:587
 DrawESD.C:588
 DrawESD.C:589
 DrawESD.C:590
 DrawESD.C:591
 DrawESD.C:592
 DrawESD.C:593
 DrawESD.C:594
 DrawESD.C:595
 DrawESD.C:596
 DrawESD.C:597
 DrawESD.C:598
 DrawESD.C:599
 DrawESD.C:600
 DrawESD.C:601
 DrawESD.C:602
 DrawESD.C:603
 DrawESD.C:604
 DrawESD.C:605
 DrawESD.C:606
 DrawESD.C:607
 DrawESD.C:608
 DrawESD.C:609
 DrawESD.C:610
 DrawESD.C:611
 DrawESD.C:612
 DrawESD.C:613
 DrawESD.C:614
 DrawESD.C:615
 DrawESD.C:616
 DrawESD.C:617
 DrawESD.C:618
 DrawESD.C:619
 DrawESD.C:620
 DrawESD.C:621
 DrawESD.C:622
 DrawESD.C:623
 DrawESD.C:624
 DrawESD.C:625
 DrawESD.C:626
 DrawESD.C:627
 DrawESD.C:628
 DrawESD.C:629
 DrawESD.C:630
 DrawESD.C:631
 DrawESD.C:632
 DrawESD.C:633
 DrawESD.C:634
 DrawESD.C:635
 DrawESD.C:636
 DrawESD.C:637
 DrawESD.C:638
 DrawESD.C:639
 DrawESD.C:640
 DrawESD.C:641
 DrawESD.C:642
 DrawESD.C:643
 DrawESD.C:644
 DrawESD.C:645
 DrawESD.C:646
 DrawESD.C:647
 DrawESD.C:648
 DrawESD.C:649
 DrawESD.C:650
 DrawESD.C:651
 DrawESD.C:652
 DrawESD.C:653
 DrawESD.C:654
 DrawESD.C:655
 DrawESD.C:656
 DrawESD.C:657
 DrawESD.C:658
 DrawESD.C:659
 DrawESD.C:660
 DrawESD.C:661
 DrawESD.C:662
 DrawESD.C:663
 DrawESD.C:664
 DrawESD.C:665
 DrawESD.C:666
 DrawESD.C:667
 DrawESD.C:668
 DrawESD.C:669
 DrawESD.C:670
 DrawESD.C:671
 DrawESD.C:672
 DrawESD.C:673
 DrawESD.C:674
 DrawESD.C:675
 DrawESD.C:676
 DrawESD.C:677
 DrawESD.C:678
 DrawESD.C:679
 DrawESD.C:680
 DrawESD.C:681
 DrawESD.C:682
 DrawESD.C:683
 DrawESD.C:684
 DrawESD.C:685
 DrawESD.C:686
 DrawESD.C:687
 DrawESD.C:688
 DrawESD.C:689
 DrawESD.C:690
 DrawESD.C:691
 DrawESD.C:692
 DrawESD.C:693
 DrawESD.C:694
 DrawESD.C:695
 DrawESD.C:696
 DrawESD.C:697
 DrawESD.C:698
 DrawESD.C:699
 DrawESD.C:700
 DrawESD.C:701
 DrawESD.C:702
 DrawESD.C:703
 DrawESD.C:704
 DrawESD.C:705
 DrawESD.C:706
 DrawESD.C:707
 DrawESD.C:708
 DrawESD.C:709
 DrawESD.C:710
 DrawESD.C:711
 DrawESD.C:712
 DrawESD.C:713
 DrawESD.C:714
 DrawESD.C:715
 DrawESD.C:716
 DrawESD.C:717
 DrawESD.C:718
 DrawESD.C:719
 DrawESD.C:720
 DrawESD.C:721
 DrawESD.C:722
 DrawESD.C:723
 DrawESD.C:724
 DrawESD.C:725
 DrawESD.C:726
 DrawESD.C:727
 DrawESD.C:728
 DrawESD.C:729
 DrawESD.C:730
 DrawESD.C:731
 DrawESD.C:732
 DrawESD.C:733
 DrawESD.C:734
 DrawESD.C:735
 DrawESD.C:736
 DrawESD.C:737
 DrawESD.C:738
 DrawESD.C:739
 DrawESD.C:740
 DrawESD.C:741
 DrawESD.C:742
 DrawESD.C:743
 DrawESD.C:744
 DrawESD.C:745
 DrawESD.C:746
 DrawESD.C:747
 DrawESD.C:748
 DrawESD.C:749
 DrawESD.C:750
 DrawESD.C:751
 DrawESD.C:752
 DrawESD.C:753
 DrawESD.C:754
 DrawESD.C:755
 DrawESD.C:756
 DrawESD.C:757