#include <fstream>
#include <string>
#include <vector>
#include "Fit/Fitter.h"
#include "Fit/BinData.h"
#include "Fit/Chi2FCN.h"
#include "TH1.h"
#include "TList.h"
#include "Math/WrappedMultiTF1.h"
#include "HFitInterface.h"

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

    double smearVal = 0.00926;

    double mag1   = fabs(parPtr[0]);
    double r1     = fabs(parPtr[1]);
    double center1 = parPtr[2];
    double gamma1  = parPtr[3];
    double bw1 = TMath::Voigt(xVal-center1,smearVal,gamma1)*mag1*r1;

    double mag2   = fabs(parPtr[4]);
    double r2     = fabs(parPtr[5]);
    double center2 = parPtr[6];
    double gamma2  = parPtr[7];
    double bw2 = TMath::Voigt(xVal-center2,smearVal,gamma2)*mag2*r2;

    double mag3   = fabs(parPtr[8]);
    double r3     = fabs(parPtr[9]);
    double center3 = parPtr[10];
    double gamma3  = parPtr[11];
    double bw3 = TMath::Voigt(xVal-center3,smearVal,gamma3)*mag3*r3;

    double mag4   = fabs(parPtr[12]);
    double r4     = fabs(parPtr[13]);
    double center4 = parPtr[14];
    double gamma4  = parPtr[15];
    double bw4 = TMath::Voigt(xVal-center4,smearVal,gamma4)*mag4*r4;

    double mag5   = fabs(parPtr[16]);
    double r5     = fabs(parPtr[17]);
    double center5 = parPtr[18];
    double gamma5  = parPtr[19];
    double bw5 = TMath::Voigt(xVal-center5,smearVal,gamma5)*mag5*r5;

    double mag6   = fabs(parPtr[20]);
    double r6     = fabs(parPtr[21]);
    double center6 = parPtr[22];
    double gamma6  = parPtr[23];
    double bw6 = TMath::Voigt(xVal-center6,smearVal,gamma6)*mag6*r6;

    double mag7   = fabs(parPtr[24]);
    double r7     = fabs(parPtr[25]);
    double center7 = parPtr[26];
    double gamma7  = parPtr[27];
    double bw7 = TMath::Voigt(xVal-center7,smearVal,gamma7)*mag7*r7;

    double bg = fabs(parPtr[28]) + parPtr[29]*xVal;// + parPtr[8]*pow(xVal,2);  \
                                                                                


    fitVal =  bw1 + bw2 + bw3 + bw4 + bw5 + bw6 + bw7 + bg;

    return fitVal;
  }
};

//SimFit                                                                        
int nParj01 = 30;
int iparj01[30] = { 0,//mag1
		    1,//r1
                    2,//Shared (c1)
                    3,//Shared (Gamma1)
		    4,//mag2
		    5,//r2
                    6,//Shared (c2)
                    7,//Shared (Gamma2)
		    8,//mag3
		    9,//r3
                    10,//Shared (c3)
                    11,//Shared (Gamma3)
		    12,//mag4
		    13,//r4
                    14,//Shared (c4)
                    15,//Shared (Gamma4)
		    16,//mag5
		    17,//r5
                    18,//Shared (c5)
                    19,//Shared (Gamma5)
		    20,//mag6
		    21,//r6
                    22,//Shared (c6)
                    23,//Shared (Gamma6)
		    24,//mag7
		    25,//r7
                    26,//Shared (c7)
                    27,//Shared (Gamma7)
		    28,//pol0
		    29//pol1
};
int nParj02 = 30;
int iparj02[30] = { 30,//mag1
		    31,//r1
                    2,//Shared (c1)
                    3,//Shared (Gamma1)
		    32,//mag2
		    33,//r2
                    6,//Shared (c2)
                    7,//Shared (Gamma2)
		    34,//mag3
		    35,//r3
                    10,//Shared (c3)
                    11,//Shared (Gamma3)
		    36,//mag4
		    37,//r4
                    14,//Shared (c4)
                    15,//Shared (Gamma4)
		    38,//mag5
		    39,//r5
                    18,//Shared (c5)
                    19,//Shared (Gamma5)
		    40,//mag6
		    41,//r6
                    22,//Shared (c6)
                    23,//Shared (Gamma6)
		    42,//mag7
		    43,//r7
                    26,//Shared (c7)
                    27,//Shared (Gamma7)
		    44,//pol0
		    45//pol1
};
int nParj03 = 30;
int iparj03[30] = {46,//mag1
		   47,//r1
                    2,//Shared (c1)
                    3,//Shared (Gamma1)
		    48,//mag2
		    49,//r2
                    6,//Shared (c2)
                    7,//Shared (Gamma2)
		    50,//mag3
		    51,//r3
                    10,//Shared (c3)
                    11,//Shared (Gamma3)
		    52,//mag4
		    53,//r4
                    14,//Shared (c4)
                    15,//Shared (Gamma4)
		    54,//mag5
		    55,//r5
                    18,//Shared (c5)
                    19,//Shared (Gamma5)
		    56,//mag6
		    57,//r6
                    22,//Shared (c6)
                    23,//Shared (Gamma6)
		    58,//mag7
		    59,//r7
                    26,//Shared (c7)
                    27,//Shared (Gamma7)
		    60,//pol0
		    61//pol1
};

//xxxxxxxxxxxxxxx

int nParj11 = 30;
int iparj11[30] = { 62,//mag1
		    63,//r1
                    2,//Shared (c1)
                    3,//Shared (Gamma1)
		    64,//mag2
		    65,//r2
                    6,//Shared (c2)
                    7,//Shared (Gamma2)
		    66,//mag3
		    67,//r3
                    10,//Shared (c3)
                    11,//Shared (Gamma3)
		    68,//mag4
		    69,//r4
                    14,//Shared (c4)
                    15,//Shared (Gamma4)
		    70,//mag5
		    71,//r5
                    18,//Shared (c5)
                    19,//Shared (Gamma5)
		    72,//mag6
		    73,//r6
                    22,//Shared (c6)
                    23,//Shared (Gamma6)
		    74,//mag7
		    75,//r7
                    26,//Shared (c7)
                    27,//Shared (Gamma7)
		    76,//pol0
		    77//pol1
};


int nParj12 = 30;
int iparj12[30] = { 78,//mag1
		    79,//r1
                    2,//Shared (c1)
                    3,//Shared (Gamma1)
		    80,//mag2
		    81,//r2
                    6,//Shared (c2)
                    7,//Shared (Gamma2)
		    82,//mag3
		    83,//r3
                    10,//Shared (c3)
                    11,//Shared (Gamma3)
		    84,//mag4
		    85,//r4
                    14,//Shared (c4)
                    15,//Shared (Gamma4)
		    86,//mag5
		    87,//r5
                    18,//Shared (c5)
                    19,//Shared (Gamma5)
		    88,//mag6
		    89,//r6
                    22,//Shared (c6)
                    23,//Shared (Gamma6)
		    90,//mag7
		    91,//r7
                    26,//Shared (c7)
                    27,//Shared (Gamma7)
		    92,//pol0
		    93//pol1
};

int nParj13 = 30;
int iparj13[30] = { 94,//mag1
		    95,//r1
                    2,//Shared (c1)
                    3,//Shared (Gamma1)
		    96,//mag2
		    97,//r2
                    6,//Shared (c2)
                    7,//Shared (Gamma2)
		    98,//mag3
		    99,//r3
                    10,//Shared (c3)
                    11,//Shared (Gamma3)
		    100,//mag4
		    101,//r4
                    14,//Shared (c4)
                    15,//Shared (Gamma4)
		    102,//mag5
		    103,//r5
                    18,//Shared (c5)
                    19,//Shared (Gamma5)
		    104,//mag6
		    105,//r6
                    22,//Shared (c6)
                    23,//Shared (Gamma6)
		    106,//mag7
		    107,//r7
                    26,//Shared (c7)
                    27,//Shared (Gamma7)
		    108,//pol0
		    109//pol1
};
//xxxxxxxxxxxxxxx
const int Npar = 110;

//f1(1285)
double amp1a  = 26;
double r1a    = 1;
double c1     = 1.2819;
double Gamma1 = 0.0227;

//f1(1420)
double amp2a  = 300;
double r2a    = 1;
double c2     = 1.4263;
double Gamma2 = 0.0545;

//h1(1415)
double amp3a  = 100;
double r3a    = 1;
double c3     = 1.409;
double Gamma3 = 0.078;

//f1(1510)
double amp4a  = 5000;
double r4a    = 1;
double c4     = 1.518;
double Gamma4 = 0.073;

//eta(1295)
double amp5a  = 20;
double r5a    = 1;
double c5     = 1.294;
double Gamma5 = 0.055;

//eta(1405)
double amp6a  = 50;
double r6a    = 1;
double c6     = 1.4139;
double Gamma6 = 0.051;

//eta(1475)
double amp7a  = 2000;
double r7a    = 1;
double c7     = 1.475;
double Gamma7 = 0.090;
double p0a    = 0.0;
double p1a    = 0.0;

//j02
double amp1b  = 20;
double r1b    = 1;
double amp2b  = 20;
double r2b    = 1;
double amp3b  = 20;
double r3b    = 1;
double amp4b  = 20;
double r4b    = 1;
double amp5b  = 20;
double r5b    = 1;
double amp6b  = 20;
double r6b    = 1;
double amp7b  = 20;
double r7b    = 1;
double p0b    = 0.0;
double p1b    = 0.0;

//j03
double amp1c  = 20;
double r1c    = 1;
double amp2c  = 20;
double r2c    = 1;
double amp3c  = 20;
double r3c    = 1;
double amp4c  = 20;
double r4c    = 1;
double amp5c  = 20;
double r5c    = 1;
double amp6c  = 20;
double r6c    = 1;
double amp7c  = 20;
double r7c    = 1;
double p0c    = 0.0;
double p1c    = 0.0;

//j11
double amp1d  = 20;
double r1d    = 1;
double amp2d  = 20;
double r2d    = 1;
double amp3d  = 20;
double r3d    = 1;
double amp4d  = 20;
double r4d    = 1;
double amp5d  = 20;
double r5d    = 0;
double amp6d  = 0;
double r6d    = 0;
double amp7d  = 0;
double r7d    = 0;
double p0d    = 0.0;
double p1d    = 0.0;

//j12
double amp1e  = 20;
double r1e    = 1;
double amp2e  = 20;
double r2e    = 1;
double amp3e  = 0;
double r3e    = 1;
double amp4e  = 20;
double r4e    = 1;
double amp5e  = 20;
double r5e    = 0;
double amp6e  = 0;
double r6e    = 0;
double amp7e  = 0;
double r7e    = 0;
double p0e    = 0.0;
double p1e    = 0.0;

//j13
double amp1f  = 20;
double r1f    = 1;
double amp2f  = 20;
double r2f    = 1;
double amp3f  = 20;
double r3f    = 1;
double amp4f  = 20;
double r4f    = 1;
double amp5f  = 0;
double r5f    = 0;
double amp6f  = 0;
double r6f    = 0;
double amp7f  = 0;
double r7f    = 0;
double p0f    = 0.0;
double p1f    = 0.0;

double simPars[Npar] = {amp1a,r1a,c1,Gamma1,
			amp2a,r2a,c2,Gamma2,
			amp3a,r3a,c3,Gamma3,
			amp4a,r4a,c4,Gamma4,
			amp5a,r5a,c5,Gamma5,
			amp6a,r6a,c6,Gamma6,
			amp7a,r7a,c7,Gamma7,p0a,p1a,
			amp1b,r1b,amp2b,r2b,amp3b,r3b,amp4b,r4b,amp5b,r5b,amp6b,r6b,amp7b,r7b,p0b,p1b,
			amp1c,r1d,amp2c,r2c,amp3c,r3c,amp4c,r4c,amp5c,r5c,amp6c,r6c,amp7c,r7c,p0c,p1c,
			amp1d,r1d,amp2d,r2d,amp3d,r3d,amp4d,r4d,amp5d,r5d,amp6d,r6d,amp7d,r7d,p0d,p1d,
			amp1e,r1e,amp2e,r2e,amp3e,r3e,amp4e,r4e,amp5e,r5e,amp6e,r6e,amp7e,r7e,p0e,p1e,
			amp1f,r1f,amp2f,r2f,amp3f,r3f,amp4f,r4f,amp5f,r5f,amp6f,r6f,amp7f,r7f,p0f,p1f
};

// Create the GlobalCHi2 structure
struct GlobalChi2 {
  GlobalChi2(  ROOT::Math::IMultiGenFunction & f1,
               ROOT::Math::IMultiGenFunction & f2,
               ROOT::Math::IMultiGenFunction & f3,
               ROOT::Math::IMultiGenFunction & f4,
               ROOT::Math::IMultiGenFunction & f5,
               ROOT::Math::IMultiGenFunction & f6) :
    fChi2_1(&f1), fChi2_2(&f2), fChi2_3(&f3), fChi2_4(&f4),fChi2_5(&f5),fChi2_6(&f6) {}

  double operator() (const double *par) const {
    double p1[nParj01];
    for (int i = 0; i < nParj01; ++i) p1[i] = par[iparj01[i] ];

    double p2[nParj02];
    for (int i = 0; i < nParj02; ++i) p2[i] = par[iparj02[i] ];

    double p3[nParj03];
    for (int i = 0; i < nParj03; ++i) p3[i] = par[iparj03[i] ];

    double p4[nParj11];
    for (int i = 0; i < nParj11; ++i) p4[i] = par[iparj11[i] ];

    double p5[nParj12];
    for (int i = 0; i < nParj12; ++i) p5[i] = par[iparj12[i] ];

    double p6[nParj13];
    for (int i = 0; i < nParj13; ++i) p6[i] = par[iparj13[i] ];

    return (*fChi2_1)(p1) + (*fChi2_2)(p2) + (*fChi2_3)(p3) + (*fChi2_4)(p4) + (*fChi2_5)(p5) + (*fChi2_6)(p6);
  }

  const  ROOT::Math::IMultiGenFunction * fChi2_1;
  const  ROOT::Math::IMultiGenFunction * fChi2_2;
  const  ROOT::Math::IMultiGenFunction * fChi2_3;
  const  ROOT::Math::IMultiGenFunction * fChi2_4;
  const  ROOT::Math::IMultiGenFunction * fChi2_5;
  const  ROOT::Math::IMultiGenFunction * fChi2_6;
};

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


  TFile *inFile = new TFile("./hOut.root");

  TH1D *hj01; inFile->GetObject("h2",hj01);//j0
  TH1D *hj02; inFile->GetObject("h4",hj02);//j0 a0
  TH1D *hj03; inFile->GetObject("h6",hj03);//j0 ks
  TH1D *hj0Tmp; inFile->GetObject("h5",hj0Tmp);//j0 kkpi

  hj03->Add(hj0Tmp);

  //hj02->SetBinError(8,0);

  TH1D *hj11; inFile->GetObject("h3",hj11);//j1
  TH1D *hj12; inFile->GetObject("h7",hj12);//j1 a0
  TH1D *hj13; inFile->GetObject("h9",hj13);//j1 ks
  
  double rangeLow = 1.23;
  double rangeHigh = 1.50;

  MyFitFun1 * fptr1 = new MyFitFun1();

  int nPar = 30;
  //Fit functions for the actual fitting of the 6 histograms
  TF1 *fj01 = new TF1("fj01",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj02 = new TF1("fj02",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj03 = new TF1("fj03",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj11 = new TF1("fj11",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj12 = new TF1("fj12",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj13 = new TF1("fj13",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");

  //To show on top of plots for individual components
  TF1 *fj01a = new TF1("fj01a",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj02a = new TF1("fj02a",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj03a = new TF1("fj03a",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj11a = new TF1("fj11a",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj12a = new TF1("fj12a",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj13a = new TF1("fj13a",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");

  TF1 *fj01b = new TF1("fj01b",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj02b = new TF1("fj02b",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj03b = new TF1("fj03b",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj11b = new TF1("fj11b",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj12b = new TF1("fj12b",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj13b = new TF1("fj13b",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");

  TF1 *fj01c = new TF1("fj01c",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj02c = new TF1("fj02c",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj03c = new TF1("fj03c",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj11c = new TF1("fj11c",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj12c = new TF1("fj12c",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj13c = new TF1("fj13c",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");

  TF1 *fj01d = new TF1("fj01d",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj02d = new TF1("fj02d",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj03d = new TF1("fj03d",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj11d = new TF1("fj11d",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj12d = new TF1("fj12d",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj13d = new TF1("fj13d",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");

  TF1 *fj01e = new TF1("fj01f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj02e = new TF1("fj02f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj03e = new TF1("fj03f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj11e = new TF1("fj11f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj12e = new TF1("fj12f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj13e = new TF1("fj13f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");

  TF1 *fj01f = new TF1("fj01f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj02f = new TF1("fj02f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj03f = new TF1("fj03f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj11f = new TF1("fj11f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj12f = new TF1("fj12f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj13f = new TF1("fj13f",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");

  TF1 *fj01g = new TF1("fj01g",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj02g = new TF1("fj02g",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj03g = new TF1("fj03g",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj11g = new TF1("fj11g",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj12g = new TF1("fj12g",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");
  TF1 *fj13g = new TF1("fj13g",fptr1,&MyFitFun1::Evaluate,rangeLow,rangeHigh,nPar,"MyFitFun1","Evaluate");



  ROOT::Math::WrappedMultiTF1 wfj01(*fj01,1);
  ROOT::Math::WrappedMultiTF1 wfj02(*fj02,1);
  ROOT::Math::WrappedMultiTF1 wfj03(*fj03,1);
  ROOT::Math::WrappedMultiTF1 wfj11(*fj11,1);
  ROOT::Math::WrappedMultiTF1 wfj12(*fj12,1);
  ROOT::Math::WrappedMultiTF1 wfj13(*fj13,1);

  ROOT::Fit::DataOptions opt;

  ROOT::Fit::DataRange rangej01;
  rangej01.SetRange(rangeLow,rangeHigh);
  ROOT::Fit::BinData dataj01(opt,rangej01);
  ROOT::Fit::FillData(dataj01, hj01);

  ROOT::Fit::DataRange rangej02;
  rangej02.SetRange(rangeLow,rangeHigh);
  ROOT::Fit::BinData dataj02(opt,rangej02);
  ROOT::Fit::FillData(dataj02, hj02);

  ROOT::Fit::DataRange rangej03;
  rangej03.SetRange(rangeLow,rangeHigh);
  ROOT::Fit::BinData dataj03(opt,rangej03);
  ROOT::Fit::FillData(dataj03, hj03);

  ROOT::Fit::DataRange rangej11;
  rangej11.SetRange(rangeLow,rangeHigh);
  ROOT::Fit::BinData dataj11(opt,rangej11);
  ROOT::Fit::FillData(dataj11, hj11);

  ROOT::Fit::DataRange rangej12;
  rangej12.SetRange(rangeLow,rangeHigh);
  ROOT::Fit::BinData dataj12(opt,rangej12);
  ROOT::Fit::FillData(dataj12, hj12);

  ROOT::Fit::DataRange rangej13;
  rangej13.SetRange(rangeLow,rangeHigh);
  ROOT::Fit::BinData dataj13(opt,rangej13);
  ROOT::Fit::FillData(dataj13, hj13);

  ROOT::Fit::Chi2Function chi2_j01(dataj01, wfj01);
  ROOT::Fit::Chi2Function chi2_j02(dataj02, wfj02);
  ROOT::Fit::Chi2Function chi2_j03(dataj03, wfj03);
  ROOT::Fit::Chi2Function chi2_j11(dataj11, wfj11);
  ROOT::Fit::Chi2Function chi2_j12(dataj12, wfj12);
  ROOT::Fit::Chi2Function chi2_j13(dataj13, wfj13);

  GlobalChi2 globalChi2(chi2_j01, chi2_j02, chi2_j03, chi2_j11, chi2_j12, chi2_j13);

  ROOT::Fit::Fitter fitter;

  // create before the parameter settings in order to fix or set range on them
  fitter.Config().SetParamsSettings(Npar,simPars);

  //eta(1285)                                                                                              
  fitter.Config().ParSettings(0).SetLimits(0,100000);
  fitter.Config().ParSettings(0).SetStepSize(1);
  fitter.Config().ParSettings(1).Fix();
  fitter.Config().ParSettings(2).SetLimits(1.2819-0.01,1.2819+0.01);
  fitter.Config().ParSettings(2).SetStepSize(0.0001);// 0.1 MeV                                            
  fitter.Config().ParSettings(3).SetLimits(0.0227-0.01,0.0227+0.05);
  fitter.Config().ParSettings(3).SetStepSize(0.0001);// 0.1 MeV           

  //f1(1420)                                                                                               
  fitter.Config().ParSettings(4).SetLimits(0,100000);
  fitter.Config().ParSettings(4).SetStepSize(1);
  fitter.Config().ParSettings(5).Fix();
  fitter.Config().ParSettings(6).SetLimits(1.4263-0.005,1.4263+0.005);
  fitter.Config().ParSettings(6).SetStepSize(0.0001);// 0.1 MeV                                            
  fitter.Config().ParSettings(7).SetLimits(0.0545-0.0026,0.0545+0.0026);
  fitter.Config().ParSettings(7).SetStepSize(0.0001);// 0.1 MeV         

  //h1(1415)                                    
  fitter.Config().ParSettings(8).SetLimits(0,100000);
  fitter.Config().ParSettings(8).SetStepSize(1);
  fitter.Config().ParSettings(9).Fix();
  fitter.Config().ParSettings(10).SetLimits(1.416-0.04,1.419);
  fitter.Config().ParSettings(10).SetStepSize(0.0001);// 0.1 MeV                                            
  fitter.Config().ParSettings(11).SetLimits(0.078-0.06,0.078+0.05);
  fitter.Config().ParSettings(11).SetStepSize(0.0001);// 0.1 MeV        

  //f1(1510)
  //fitter.Config().ParSettings(12).Fix();
  fitter.Config().ParSettings(12).SetLimits(0,100000);
  fitter.Config().ParSettings(12).SetStepSize(1);
  fitter.Config().ParSettings(13).Fix();
  //fitter.Config().ParSettings(14).Fix();
  //fitter.Config().ParSettings(15).Fix();
  fitter.Config().ParSettings(14).SetLimits(1.518-0.005,1.518+0.005);
  fitter.Config().ParSettings(14).SetLimits(1.5,1.7);
  fitter.Config().ParSettings(14).SetStepSize(0.0001);// 0.1 MeV                                           
  fitter.Config().ParSettings(15).SetLimits(0.02,0.1);
  fitter.Config().ParSettings(15).SetStepSize(0.0001);// 0.1 MeV                                           

  //eta(1295)
  fitter.Config().ParSettings(16).SetLimits(0,100000);
  fitter.Config().ParSettings(16).SetStepSize(1);
  fitter.Config().ParSettings(17).Fix();
  fitter.Config().ParSettings(18).SetLimits(1.294-0.004,1.294+0.004);
  fitter.Config().ParSettings(18).SetStepSize(0.0001);// 0.1 MeV
  fitter.Config().ParSettings(19).SetLimits(0.055-0.005,0.055+0.005);
  fitter.Config().ParSettings(19).SetStepSize(0.0001);// 0.1 MeV

  //eta(1405)
  fitter.Config().ParSettings(20).SetLimits(0,100000);
  fitter.Config().ParSettings(20).SetStepSize(1);
  fitter.Config().ParSettings(21).Fix();
  fitter.Config().ParSettings(22).SetLimits(1.4139-0.0019,1.4139+0.0019);
  fitter.Config().ParSettings(22).SetStepSize(0.001);// 0.1 MeV
  fitter.Config().ParSettings(23).SetLimits(0.048-0.004,0.48+0.004);
  //fitter.Config().ParSettings(23).SetLimits(0.048-0.04,0.48+0.114);
  fitter.Config().ParSettings(23).SetStepSize(0.001);// 0.1 MeV

  //eta(1475)
  fitter.Config().ParSettings(24).SetLimits(0,100000);
  fitter.Config().ParSettings(24).SetStepSize(1);
  fitter.Config().ParSettings(25).Fix();
  fitter.Config().ParSettings(26).SetLimits(1.475-0.004,1.475+0.004);
  //fitter.Config().ParSettings(26).SetLimits(1.47,1.7);
  fitter.Config().ParSettings(26).SetStepSize(0.001);// 0.1 MeV
  fitter.Config().ParSettings(27).SetLimits(0.09+0.009,0.09-0.009);
  //fitter.Config().ParSettings(27).SetLimits(0.02,0.19);
  fitter.Config().ParSettings(27).SetStepSize(0.001);// 0.1 MeV

  fitter.Config().ParSettings(28).Fix(); //p0
  fitter.Config().ParSettings(29).Fix();//p1

  ///j02
  fitter.Config().ParSettings(44).Fix(); //p0
  fitter.Config().ParSettings(45).Fix();//p1

  ///j03
  fitter.Config().ParSettings(60).Fix(); //p0
  fitter.Config().ParSettings(61).Fix();//p1

  ///j11
  fitter.Config().ParSettings(70).Fix();//amp5
  fitter.Config().ParSettings(71).Fix();//r5
  fitter.Config().ParSettings(72).Fix();//amp6
  fitter.Config().ParSettings(73).Fix();//r6
  fitter.Config().ParSettings(74).Fix();//amp7
  fitter.Config().ParSettings(75).Fix();//r7
  fitter.Config().ParSettings(76).Fix(); //p0
  fitter.Config().ParSettings(77).Fix();//p1
 
  ///j12
  fitter.Config().ParSettings(86).Fix();//amp5
  fitter.Config().ParSettings(87).Fix();//r5
  fitter.Config().ParSettings(88).Fix();//amp6
  fitter.Config().ParSettings(89).Fix();//r6
  fitter.Config().ParSettings(90).Fix();//amp7
  fitter.Config().ParSettings(91).Fix();//r7
  fitter.Config().ParSettings(92).Fix(); //p0
  fitter.Config().ParSettings(93).Fix();//p1

  fitter.Config().ParSettings(82).SetStepSize(0.001);
  fitter.Config().ParSettings(83).SetStepSize(0.001);

  ///j13
  fitter.Config().ParSettings(102).Fix();//amp5
  fitter.Config().ParSettings(103).Fix();//r5
  fitter.Config().ParSettings(104).Fix();//amp6
  fitter.Config().ParSettings(105).Fix();//r6
  fitter.Config().ParSettings(106).Fix();//amp7
  fitter.Config().ParSettings(107).Fix();//r7
  fitter.Config().ParSettings(108).Fix(); //p0
  fitter.Config().ParSettings(109).Fix();//p1
  

  fitter.Config().MinimizerOptions().SetPrintLevel(0);
  fitter.Config().SetMinimizer("Minuit","Migrad");
  fitter.FitFCN(Npar,globalChi2,0,dataj01.Size()+dataj02.Size()+dataj03.Size()+
		dataj11.Size()+dataj12.Size()+dataj13.Size(),true);
  ROOT::Fit::FitResult result = fitter.Result();
  result.Print(std::cout);



  //Set fit results
  fj01a->SetFitResult( result, iparj01);
  fj02a->SetFitResult( result, iparj02);
  fj03a->SetFitResult( result, iparj03);
  fj11a->SetFitResult( result, iparj11);
  fj12a->SetFitResult( result, iparj12);
  fj13a->SetFitResult( result, iparj13);

  //r =    1,         5,        9,         13,        17,          21,         25
  //    f1(1285)  f1(1420)   h1(1415)   f1(1510)   eta(1295)   eta(1405)   eta(1475)

  //a-> Keep r=1
  fj01a->SetParameter(5,0);fj01a->SetParameter(9,0);fj01a->SetParameter(13,0);fj01a->SetParameter(17,0);fj01a->SetParameter(21,0);fj01a->SetParameter(25,0);
  fj02a->SetParameter(5,0);fj02a->SetParameter(9,0);fj02a->SetParameter(13,0);fj02a->SetParameter(17,0);fj02a->SetParameter(21,0);fj02a->SetParameter(25,0);
  fj03a->SetParameter(5,0);fj03a->SetParameter(9,0);fj03a->SetParameter(13,0);fj03a->SetParameter(17,0);fj03a->SetParameter(21,0);fj03a->SetParameter(25,0);
  fj11a->SetParameter(5,0);fj11a->SetParameter(9,0);fj11a->SetParameter(13,0);fj11a->SetParameter(17,0);fj11a->SetParameter(21,0);fj11a->SetParameter(25,0);
  fj12a->SetParameter(5,0);fj12a->SetParameter(9,0);fj12a->SetParameter(13,0);fj12a->SetParameter(17,0);fj12a->SetParameter(21,0);fj12a->SetParameter(25,0);
  fj13a->SetParameter(5,0);fj13a->SetParameter(9,0);fj13a->SetParameter(13,0);fj13a->SetParameter(17,0);fj13a->SetParameter(21,0);fj13a->SetParameter(25,0);

  fj01a->SetLineColor(2);fj02a->SetLineColor(2);fj03a->SetLineColor(2);fj11a->SetLineColor(2);fj12a->SetLineColor(2);fj13a->SetLineColor(2);

  //Set fit results
  fj01b->SetFitResult( result, iparj01);
  fj02b->SetFitResult( result, iparj02);
  fj03b->SetFitResult( result, iparj03);
  fj11b->SetFitResult( result, iparj11);
  fj12b->SetFitResult( result, iparj12);
  fj13b->SetFitResult( result, iparj13);

  //r =    1,         5,        9,         13,        17,          21,         25
  //    f1(1285)  f1(1420)   h1(1415)   f1(1510)   eta(1295)   eta(1405)   eta(1475)

  //b-> Keep r=5
  fj01b->SetParameter(1,0);fj01b->SetParameter(9,0);fj01b->SetParameter(13,0);fj01b->SetParameter(17,0);fj01b->SetParameter(21,0);fj01b->SetParameter(25,0);
  fj02b->SetParameter(1,0);fj02b->SetParameter(9,0);fj02b->SetParameter(13,0);fj02b->SetParameter(17,0);fj02b->SetParameter(21,0);fj02b->SetParameter(25,0);
  fj03b->SetParameter(1,0);fj03b->SetParameter(9,0);fj03b->SetParameter(13,0);fj03b->SetParameter(17,0);fj03b->SetParameter(21,0);fj03b->SetParameter(25,0);
  fj11b->SetParameter(1,0);fj11b->SetParameter(9,0);fj11b->SetParameter(13,0);fj11b->SetParameter(17,0);fj11b->SetParameter(21,0);fj11b->SetParameter(25,0);
  fj12b->SetParameter(1,0);fj12b->SetParameter(9,0);fj12b->SetParameter(13,0);fj12b->SetParameter(17,0);fj12b->SetParameter(21,0);fj12b->SetParameter(25,0);
  fj13b->SetParameter(1,0);fj13b->SetParameter(9,0);fj13b->SetParameter(13,0);fj13b->SetParameter(17,0);fj13b->SetParameter(21,0);fj13b->SetParameter(25,0);

  fj01b->SetLineColor(3);fj02b->SetLineColor(3);fj03b->SetLineColor(3);fj11b->SetLineColor(3);fj12b->SetLineColor(3);fj13b->SetLineColor(3);

  //Set fit results
  fj01c->SetFitResult( result, iparj01);
  fj02c->SetFitResult( result, iparj02);
  fj03c->SetFitResult( result, iparj03);
  fj11c->SetFitResult( result, iparj11);
  fj12c->SetFitResult( result, iparj12);
  fj13c->SetFitResult( result, iparj13);

  //r =    1,         5,        9,         13,        17,          21,         25
  //    f1(1285)  f1(1420)   h1(1415)   f1(1510)   eta(1295)   eta(1405)   eta(1475)

  //c-> Keep r=9
  fj01c->SetParameter(1,0);fj01c->SetParameter(5,0);fj01c->SetParameter(13,0);fj01c->SetParameter(17,0);fj01c->SetParameter(21,0);fj01c->SetParameter(25,0);
  fj02c->SetParameter(1,0);fj02c->SetParameter(5,0);fj02c->SetParameter(13,0);fj02c->SetParameter(17,0);fj02c->SetParameter(21,0);fj02c->SetParameter(25,0);
  fj03c->SetParameter(1,0);fj03c->SetParameter(5,0);fj03c->SetParameter(13,0);fj03c->SetParameter(17,0);fj03c->SetParameter(21,0);fj03c->SetParameter(25,0);
  fj11c->SetParameter(1,0);fj11c->SetParameter(5,0);fj11c->SetParameter(13,0);fj11c->SetParameter(17,0);fj11c->SetParameter(21,0);fj11c->SetParameter(25,0);
  fj12c->SetParameter(1,0);fj12c->SetParameter(5,0);fj12c->SetParameter(13,0);fj12c->SetParameter(17,0);fj12c->SetParameter(21,0);fj12c->SetParameter(25,0);
  fj13c->SetParameter(1,0);fj13c->SetParameter(5,0);fj13c->SetParameter(13,0);fj13c->SetParameter(17,0);fj13c->SetParameter(21,0);fj13c->SetParameter(25,0);

  fj01c->SetLineColor(4);fj02c->SetLineColor(4);fj03c->SetLineColor(4);fj11c->SetLineColor(4);fj12c->SetLineColor(4);fj13c->SetLineColor(4);

  //Set fit results
  fj01d->SetFitResult( result, iparj01);
  fj02d->SetFitResult( result, iparj02);
  fj03d->SetFitResult( result, iparj03);
  fj11d->SetFitResult( result, iparj11);
  fj12d->SetFitResult( result, iparj12);
  fj13d->SetFitResult( result, iparj13);

  //r =    1,         5,        9,         13,        17,          21,         25
  //    f1(1285)  f1(1420)   h1(1415)   f1(1510)   eta(1295)   eta(1405)   eta(1475)

  //d-> Keep r=13
  fj01d->SetParameter(1,0);fj01d->SetParameter(5,0);fj01d->SetParameter(9,0);fj01d->SetParameter(17,0);fj01d->SetParameter(21,0);fj01d->SetParameter(25,0);
  fj02d->SetParameter(1,0);fj02d->SetParameter(5,0);fj02d->SetParameter(9,0);fj02d->SetParameter(17,0);fj02d->SetParameter(21,0);fj02d->SetParameter(25,0);
  fj03d->SetParameter(1,0);fj03d->SetParameter(5,0);fj03d->SetParameter(9,0);fj03d->SetParameter(17,0);fj03d->SetParameter(21,0);fj03d->SetParameter(25,0);
  fj11d->SetParameter(1,0);fj11d->SetParameter(5,0);fj11d->SetParameter(9,0);fj11d->SetParameter(17,0);fj11d->SetParameter(21,0);fj11d->SetParameter(25,0);
  fj12d->SetParameter(1,0);fj12d->SetParameter(5,0);fj12d->SetParameter(9,0);fj12d->SetParameter(17,0);fj12d->SetParameter(21,0);fj12d->SetParameter(25,0);
  fj13d->SetParameter(1,0);fj13d->SetParameter(5,0);fj13d->SetParameter(9,0);fj13d->SetParameter(17,0);fj13d->SetParameter(21,0);fj13d->SetParameter(25,0);

  fj01d->SetLineColor(6);fj02d->SetLineColor(6);fj03d->SetLineColor(6);fj11d->SetLineColor(6);fj12d->SetLineColor(6);fj13d->SetLineColor(6);

  //Set fit results
  fj01e->SetFitResult( result, iparj01);
  fj02e->SetFitResult( result, iparj02);
  fj03e->SetFitResult( result, iparj03);
  fj11e->SetFitResult( result, iparj11);
  fj12e->SetFitResult( result, iparj12);
  fj13e->SetFitResult( result, iparj13);

  //r =    1,         5,        9,         13,        17,          21,         25
  //    f1(1285)  f1(1420)   h1(1415)   f1(1510)   eta(1295)   eta(1405)   eta(1475)

  //e-> Keep r=17
  fj01e->SetParameter(1,0);fj01e->SetParameter(5,0);fj01e->SetParameter(9,0);fj01e->SetParameter(13,0);fj01e->SetParameter(21,0);fj01e->SetParameter(25,0);
  fj02e->SetParameter(1,0);fj02e->SetParameter(5,0);fj02e->SetParameter(9,0);fj02e->SetParameter(13,0);fj02e->SetParameter(21,0);fj02e->SetParameter(25,0);
  fj03e->SetParameter(1,0);fj03e->SetParameter(5,0);fj03e->SetParameter(9,0);fj03e->SetParameter(13,0);fj03e->SetParameter(21,0);fj03e->SetParameter(25,0);
  fj11e->SetParameter(1,0);fj11e->SetParameter(5,0);fj11e->SetParameter(9,0);fj11e->SetParameter(13,0);fj11e->SetParameter(21,0);fj11e->SetParameter(25,0);
  fj12e->SetParameter(1,0);fj12e->SetParameter(5,0);fj12e->SetParameter(9,0);fj12e->SetParameter(13,0);fj12e->SetParameter(21,0);fj12e->SetParameter(25,0);
  fj13e->SetParameter(1,0);fj13e->SetParameter(5,0);fj13e->SetParameter(9,0);fj13e->SetParameter(13,0);fj13e->SetParameter(21,0);fj13e->SetParameter(25,0);

  fj01e->SetLineColor(14);fj02e->SetLineColor(14);fj03e->SetLineColor(14);fj11e->SetLineColor(14);fj12e->SetLineColor(14);fj13e->SetLineColor(14);

  //Set fit results
  fj01f->SetFitResult( result, iparj01);
  fj02f->SetFitResult( result, iparj02);
  fj03f->SetFitResult( result, iparj03);
  fj11f->SetFitResult( result, iparj11);
  fj12f->SetFitResult( result, iparj12);
  fj13f->SetFitResult( result, iparj13);

  //r =    1,         5,        9,         13,        17,          21,         25
  //    f1(1285)  f1(1420)   h1(1415)   f1(1510)   eta(1295)   eta(1405)   eta(1475)

  //f-> Keep r=21
  fj01f->SetParameter(1,0);fj01f->SetParameter(5,0);fj01f->SetParameter(9,0);fj01f->SetParameter(13,0);fj01f->SetParameter(17,0);fj01f->SetParameter(25,0);
  fj02f->SetParameter(1,0);fj02f->SetParameter(5,0);fj02f->SetParameter(9,0);fj02f->SetParameter(13,0);fj02f->SetParameter(17,0);fj02f->SetParameter(25,0);
  fj03f->SetParameter(1,0);fj03f->SetParameter(5,0);fj03f->SetParameter(9,0);fj03f->SetParameter(13,0);fj03f->SetParameter(17,0);fj03f->SetParameter(25,0);
  fj11f->SetParameter(1,0);fj11f->SetParameter(5,0);fj11f->SetParameter(9,0);fj11f->SetParameter(13,0);fj11f->SetParameter(17,0);fj11f->SetParameter(25,0);
  fj12f->SetParameter(1,0);fj12f->SetParameter(5,0);fj12f->SetParameter(9,0);fj12f->SetParameter(13,0);fj12f->SetParameter(17,0);fj12f->SetParameter(25,0);
  fj13f->SetParameter(1,0);fj13f->SetParameter(5,0);fj13f->SetParameter(9,0);fj13f->SetParameter(13,0);fj13f->SetParameter(17,0);fj13f->SetParameter(25,0);

  fj01f->SetLineColor(7);fj02f->SetLineColor(7);fj03f->SetLineColor(7);fj11f->SetLineColor(7);fj12f->SetLineColor(7);fj13f->SetLineColor(7);

  //r =    1,         5,        9,         13,        17,          21,         25
  //    f1(1285)  f1(1420)   h1(1415)   f1(1510)   eta(1295)   eta(1405)   eta(1475)

  //g-> Keep r=25
  fj01g->SetParameter(1,0);fj01g->SetParameter(5,0);fj01g->SetParameter(9,0);fj01g->SetParameter(13,0);fj01g->SetParameter(17,0);fj01g->SetParameter(21,0);
  fj02g->SetParameter(1,0);fj02g->SetParameter(5,0);fj02g->SetParameter(9,0);fj02g->SetParameter(13,0);fj02g->SetParameter(17,0);fj02g->SetParameter(21,0);
  fj03g->SetParameter(1,0);fj03g->SetParameter(5,0);fj03g->SetParameter(9,0);fj03g->SetParameter(13,0);fj03g->SetParameter(17,0);fj03g->SetParameter(21,0);
  fj11g->SetParameter(1,0);fj11g->SetParameter(5,0);fj11g->SetParameter(9,0);fj11g->SetParameter(13,0);fj11g->SetParameter(17,0);fj11g->SetParameter(21,0);
  fj12g->SetParameter(1,0);fj12g->SetParameter(5,0);fj12g->SetParameter(9,0);fj12g->SetParameter(13,0);fj12g->SetParameter(17,0);fj12g->SetParameter(21,0);
  fj13g->SetParameter(1,0);fj13g->SetParameter(5,0);fj13g->SetParameter(9,0);fj13g->SetParameter(13,0);fj13g->SetParameter(17,0);fj13g->SetParameter(21,0);

  fj01g->SetLineColor(9);fj02g->SetLineColor(9);fj03g->SetLineColor(9);fj11g->SetLineColor(9);fj12g->SetLineColor(9);fj13g->SetLineColor(9);

  //PLOT
  TCanvas * c1 = new TCanvas("Simfit","Simultaneous fit of four histograms",
                             0,0,750*2,900);
  c1->Divide(2,3);

  ////////////////
  hj01->SetMinimum(0);
  hj01->SetLineColor(1);
  hj01->SetMarkerStyle(21);
  hj01->SetMarkerColor(1);
  hj01->GetXaxis()->SetTitle("Mass(K^{+}K^{-}#pi^{0})/GeV");
  hj01->GetYaxis()->SetTitle("Y/#epsilon");

  c1->cd(1);
  gStyle->SetOptFit(1111);
  hj01->GetXaxis()->SetRangeUser(rangeLow,rangeHigh);
  hj01->Draw("e1");
  fj01->Draw("same");
  fj01a->Draw("same");
  fj01b->Draw("same");
  fj01c->Draw("same");
  fj01d->Draw("same");
  fj01e->Draw("same");
  fj01f->Draw("same");
  fj01g->Draw("same");

  ////////////////
  hj02->SetMinimum(0);
  hj02->SetLineColor(1);
  hj02->SetMarkerStyle(21);
  hj02->SetMarkerColor(1);
  hj02->GetXaxis()->SetTitle("Mass(K^{+}K^{-}#pi^{0})/GeV");
  hj02->GetYaxis()->SetTitle("Y/#epsilon");

  c1->cd(3);
  gStyle->SetOptFit(1111);
  hj02->GetXaxis()->SetRangeUser(rangeLow,rangeHigh);
  hj02->Draw("e1");
  fj02->Draw("same");
  fj02a->Draw("same");
  fj02b->Draw("same");
  fj02c->Draw("same");
  fj02d->Draw("same");
  fj02e->Draw("same");
  fj02f->Draw("same");
  fj02g->Draw("same");

  ////////////////
  hj03->SetMinimum(0);
  hj03->SetLineColor(1);
  hj03->SetMarkerStyle(21);
  hj03->SetMarkerColor(1);
  hj03->GetXaxis()->SetTitle("Mass(K^{+}K^{-}#pi^{0})/GeV");
  hj03->GetYaxis()->SetTitle("Y/#epsilon");

  c1->cd(5);
  gStyle->SetOptFit(1111);
  hj03->GetXaxis()->SetRangeUser(rangeLow,rangeHigh);
  hj03->Draw("e1");
  fj03->Draw("same");
  fj03a->Draw("same");
  fj03b->Draw("same");
  fj03c->Draw("same");
  fj03d->Draw("same");
  fj03e->Draw("same");
  fj03f->Draw("same");
  fj03g->Draw("same");

  ////////////////
  hj11->SetMinimum(0);
  hj11->SetLineColor(1);
  hj11->SetMarkerStyle(21);
  hj11->SetMarkerColor(1);
  hj11->GetXaxis()->SetTitle("Mass(K^{+}K^{-}#pi^{0})/GeV");
  hj11->GetYaxis()->SetTitle("Y/#epsilon");

  c1->cd(2);
  gStyle->SetOptFit(1111);
  hj11->GetXaxis()->SetRangeUser(rangeLow,rangeHigh);
  hj11->Draw("e1");
  fj11->Draw("same");
  fj11a->Draw("same");
  fj11b->Draw("same");
  fj11c->Draw("same");
  fj11d->Draw("same");
  fj11e->Draw("same");
  fj11f->Draw("same");
  fj11g->Draw("same");

  ////////////////
  hj12->SetMinimum(0);
  hj12->SetLineColor(1);
  hj12->SetMarkerStyle(21);
  hj12->SetMarkerColor(1);
  hj12->GetXaxis()->SetTitle("Mass(K^{+}K^{-}#pi^{0})/GeV");
  hj12->GetYaxis()->SetTitle("Y/#epsilon");

  c1->cd(4);
  gStyle->SetOptFit(1111);
  hj12->GetXaxis()->SetRangeUser(rangeLow,rangeHigh);
  hj12->Draw("e1");
  fj12->Draw("same");
  fj12a->Draw("same");
  fj12b->Draw("same");
  fj12c->Draw("same");
  fj12d->Draw("same");
  fj12e->Draw("same");
  fj12f->Draw("same");
  fj12g->Draw("same");

  ////////////////
  hj13->SetMinimum(0);
  hj13->SetLineColor(1);
  hj13->SetMarkerStyle(21);
  hj13->SetMarkerColor(1);
  hj13->GetXaxis()->SetTitle("Mass(K^{+}K^{-}#pi^{0})/GeV");
  hj13->GetYaxis()->SetTitle("Y/#epsilon");

  c1->cd(6);
  gStyle->SetOptFit(1111);
  hj13->GetXaxis()->SetRangeUser(rangeLow,rangeHigh);
  hj13->Draw("e1");
  fj13->Draw("same");
  fj13a->Draw("same");
  fj13b->Draw("same");
  fj13c->Draw("same");
  fj13d->Draw("same");
  fj13e->Draw("same");
  fj13f->Draw("same");
  fj13g->Draw("same");



}
