class  MyFitFun1 {
public:
  double Evaluate(double *xPtr, double *parPtr) {
    double fitVal = 0.0;
    double xVal = *xPtr;


    double mag1   = parPtr[0];
    double center1 = parPtr[1];
    double gamma1  = parPtr[2];
    double bw1 = mag1/(pow(xVal*xVal - center1*center1,2) + center1*center1*gamma1*gamma1);

    //double mag2   = parPtr[3];
    //double center2 = parPtr[4];
    //double gamma2  = parPtr[5];
    //double bw2 = mag2/(pow(xVal*xVal - center2*center2,2) + center2*center2*gamma2*gamma2);

    //double bg = parPtr[3] + 0*parPtr[4]*xVal;
    fitVal =  bw1;// + bg;

    return fitVal;
  }
};




void makePics(int iShow){

  gROOT->Reset();
  gROOT->SetStyle("Plain");
  gStyle->SetOptStat(0);

  TFile *fFF = new TFile("./outFit/ff.root");
  TFile *fA  = new TFile("./A.root");

  TH1D *hReal1; fA->GetObject("hMassKpKmPi0Course1",hReal1);
  TH1D *hReal3; fA->GetObject("hMassKpKmPi0Course3",hReal3);

  TH2D *hFitFrac; fFF->GetObject("hFitFrac",hFitFrac);

  TH1D * hJ0 = (TH1D*)hFitFrac->ProjectionX("hJ0",1,2);
  TH1D * hJ1 = (TH1D*)hFitFrac->ProjectionX("hJ1",3,11);
  //TH1D * hJ1 = (TH1D*)hFitFrac->ProjectionX("hJ1",2,4);
  //TH1D * hJ1 = (TH1D*)hFitFrac->ProjectionX("hJ1",5,10);


  TH1D * hRealJ0 = (TH1D *)hReal3->Clone("hRealJ0");
  TH1D * hRealJ1 = (TH1D *) hReal3->Clone("hRealJ1");
  
  hRealJ0->Multiply(hRealJ0,hJ0);
  hRealJ0->SetLineWidth(2);
  hRealJ0->SetLineColor(2);
  hRealJ0->SetFillStyle(1001);
  hRealJ0->SetFillColor(2);

  hRealJ1->Multiply(hRealJ1,hJ1);
  hRealJ1->SetLineWidth(2);
  hRealJ1->SetLineColor(3);
  hRealJ1->SetFillStyle(1001);
  hRealJ1->SetFillColor(3);

  MyFitFun1 * fptr1 = new MyFitFun1();
  int nPar = 3;
  TF1 *f1 = new TF1("f1",fptr1,&MyFitFun1::Evaluate,0.0,4.0,nPar,
		    "MyFitFun1","Evaluate");

  TF1 *f2 = new TF1("f2",fptr1,&MyFitFun1::Evaluate,0.0,4.0,nPar,
		    "MyFitFun1","Evaluate");

  //TF1 *fg1 = new TF1("fg1","gaus+pol1",0.0,3.0);
  //TF1 *fg2a0 = new TF1("fg2a0","gaus+pol1",0.0,3.0);

  f1->SetParameter(0,300);
  f1->SetParameter(1,1.295);
  f1->SetParameter(2,0.1);

  f2->SetParameter(0,300);
  f2->SetParameter(1,1.280);
  f2->SetParameter(2,0.05);

  //fg1->SetParameter(3,0);
  //fg1->SetParameter(4,0);

  f1->SetLineColor(2);
  f2->SetLineColor(3);

  double fLow = 1.24;
  double fHigh = 1.31;

  hRealJ0->Fit("f1","R","",fLow,fHigh);

  //  return;
  hRealJ1->Fit("f2","R","",fLow,fHigh);

  cout<<"----------"<<endl;
  double cJ0 = 1000*f1->GetParameter(1);
  double cJ0Err = 1000*f1->GetParError(1);
  cout<<"cJ0 = "<<cJ0<<" +/- "<<cJ0Err<<endl;

  double wJ0 = 1000*f1->GetParameter(2);
  double wJ0Err = 1000*f1->GetParError(2);
  cout<<"wJ0 = "<<wJ0<<" +/- "<<wJ0Err<<endl;

  //cout<<"----------"<<endl;
  double cJ1 = 1000*f2->GetParameter(1);
  double cJ1Err = 1000*f2->GetParError(1);
  cout<<"cJ1 = "<<cJ1<<" +/- "<<cJ1Err<<endl;

  double wJ1 = 1000*f2->GetParameter(2);
  double wJ1Err = 1000*f2->GetParError(2);
  cout<<"wJ1 = "<<wJ1<<" +/- "<<wJ1Err<<endl;

  hReal3->SetMarkerStyle(21);
  hReal3->GetXaxis()->SetTitle("Mass(K^{+}K^{-}#pi^{0})/GeV");
  hReal3->GetYaxis()->SetTitle("Counts");

  hReal1->SetMarkerStyle(20);
  hReal1->GetXaxis()->SetTitle("Mass(K^{+}K^{-}#pi^{0})/GeV");
  hReal1->GetYaxis()->SetTitle("Counts");

  hRealJ0->GetXaxis()->SetTitle("Mass(K^{+}K^{-}#pi^{0})/GeV");
  hRealJ0->GetYaxis()->SetTitle("Counts");

  hReal3->GetXaxis()->SetRangeUser(1.24,1.31);
  hReal3->SetLineWidth(2);

  if (iShow == 0) {
    hReal3->Draw("e1");
  }


  if (iShow == 1) {
    hReal3->Draw("e1");
    hRealJ0->Draw("same");
    hRealJ1->Draw("same");

    Double_t xl1=0.13, yl1 = 0.73, xl2=xl1+0.23, yl2=yl1+0.12;
    TLegend *legend = new TLegend(xl1,yl1,xl2,yl2);
    legend->SetFillColor(0);
    legend->SetLineColor(0);
    legend->SetTextSize(0.04);
    legend->AddEntry(hRealJ0,"J=0^{-}","f");
    legend->AddEntry(hRealJ1,"J=1^{+}","f");

    legend->Draw();

  }
  if (iShow == 11) {
    hReal3->Draw("e1");
    hRealJ0->Draw("same");
    //hRealJ1->Draw("same");

    Double_t xl1=0.13, yl1 = 0.73+0.06, xl2=xl1+0.23, yl2=yl1+0.06;
    TLegend *legend = new TLegend(xl1,yl1,xl2,yl2);
    legend->SetFillColor(0);
    legend->SetLineColor(0);
    legend->SetTextSize(0.04);
    legend->AddEntry(hRealJ0,"J=0^{-}","f");
    //legend->AddEntry(hRealJ1,"J=1","f");

    legend->Draw();

  }

  Double_t xl1=0.12, yl1 = 0.8, xl2=xl1+0.23, yl2=yl1+0.06;
  TLegend *legend = new TLegend(xl1,yl1,xl2,yl2);
  legend->SetFillColor(0);
  legend->SetLineColor(0);
  legend->SetTextSize(0.04);
 
  if (iShow == 2) {
    hRealJ0->Draw("e");
    legend->AddEntry(hRealJ0,"J=0","f");
    legend->Draw();
  }
  if (iShow == 3) {
    //hRealJ1L1S0->Draw("e");
    //legend->AddEntry(hRealJ1L1S0,"J=1,L=1,S=0","f");
    //legend->Draw();
  }
  if (iShow == 4) {
    //hRealJ1->Draw("e");
    //legend->AddEntry(hRealJ1,"J=1,L=1,S=0 a0","f");
    //legend->Draw();
  }
  if (iShow == 5) {
    //hRealJ1L0S1->Draw("e");
    //legend->AddEntry(hRealJ1L0S1,"J=1,L=0,S=1","f");
    //legend->Draw();
  }
  if (iShow == 6) {
    //hRealJ1L1S1->Draw("e");
    //legend->AddEntry(hRealJ1L1S1,"J=1,L=1,S=1","f");
    //legend->Draw();
  }
}
