//Function prototypes                                                           

int readVec(char *fToGo,vector<double> *vec);

void plotBugg(int iShow){
  gROOT->Reset();
  gROOT->SetStyle("Plain");
  gStyle->SetOptStat(0);

  vector<double> vecIEtaPi;
  vector<double> vecREtaPi;
  vector<double> vecIEtaPrimePi;
  vector<double> vecREtaPrimePi;
  vector<double> vecIKK;
  vector<double> vecRKK;
  char  fString[120];
  //READ eta-pi
  sprintf(fString,"./dat/buggI-EtaPiC2.txt");
  readVec(fString,&vecIEtaPi);
  sprintf(fString,"./dat/buggR-EtaPiC2.txt");
  readVec(fString,&vecREtaPi);
  cout<<"n = "<<vecIEtaPi.size()<<endl;
  //READ etaPrime-pi
  sprintf(fString,"./dat/buggI-EtaPrimePiC2.txt");
  readVec(fString,&vecIEtaPrimePi);
  sprintf(fString,"./dat/buggR-EtaPrimePiC2.txt");
  readVec(fString,&vecREtaPrimePi);
  //READ KK
  sprintf(fString,"./dat/buggI-KKC2.txt");
  readVec(fString,&vecIKK);
  sprintf(fString,"./dat/buggR-KKC2.txt");
  readVec(fString,&vecRKK);

  int nBins = 350;
  TH1D *hBIEtaPi = new TH1D("hBIEtaPi","",nBins,0.5,4.0);
  TH1D *hBIKK = new TH1D("hBIKK","",350,0.5,4.0);
  TH1D *hBIEtaPrimePi = new TH1D("hBIEtaPrimePi","",350,0.5,4.0);

  TH1D *hBREtaPi = new TH1D("hBREtaPi","",350,0.5,4.0);
  TH1D *hBRKK = new TH1D("hBRKK","",350,0.5,4.0);
  TH1D *hBREtaPrimePi = new TH1D("hBREtaPrimePi","",350,0.5,4.0);

  for (int i = 0; i < 350; ++i) hBIEtaPi->SetBinContent(i+1,vecIEtaPi.at(i));
  for (int i = 0; i < 350; ++i) hBREtaPi->SetBinContent(i+1,vecREtaPi.at(i));

  for (int i = 0; i < 350; ++i) hBIEtaPrimePi->SetBinContent(i+1,vecIEtaPrimePi.at(i));
  for (int i = 0; i < 350; ++i) hBREtaPrimePi->SetBinContent(i+1,vecREtaPrimePi.at(i));

  for (int i = 0; i < 350; ++i) hBIKK->SetBinContent(i+1,vecIKK.at(i));
  for (int i = 0; i < 350; ++i) hBRKK->SetBinContent(i+1,vecRKK.at(i));


  //START TEST
  if (iShow == 99) {
    double sVal = 1.31;

    double sStart = 0.5;
    double sEnd = 4.0;
    int nBins = 350;
    double sDelta = (sEnd-sStart)/nBins;
    int nTest = floor((sVal - sStart)/sDelta)+1;
    

    
    
    int binNumber = hBIKK->GetXaxis()->FindBin(sVal);
    cout<<"nTest:binNumber = "<<nTest<<" : "<<binNumber<<endl;
  }
  //END TEST

  if (iShow == 1) {
    hBIKK->GetXaxis()->SetTitle("s[GeV^{2}/c^{4}]");
    hBIKK->SetLineColor(2);
    hBIEtaPrimePi->SetLineColor(4);
    hBIKK->SetMaximum(0.44);
    hBIKK->Draw();
    hBIEtaPrimePi->Draw("same");
  }
  if (iShow == 2) {
    hBRKK->GetXaxis()->SetTitle("s[GeV^{2}/c^{4}]");
    hBRKK->SetLineColor(2);
    hBREtaPrimePi->SetLineColor(4);
    hBRKK->Draw();
    hBREtaPrimePi->Draw("same");
  }
  if (iShow == 3){
    cout<<"Centers ->"<<endl;
    for (int iBin = 1; iBin <= nBins; iBin++) {
      cout<<hBIKK->GetBinCenter(iBin)<<", ";
      if (iBin%10 == 0) cout<<endl;
    }
  } 
  if (iShow == 4){ 
    cout<<"BIKK"<<endl;
    for (int iBin = 1; iBin <= nBins; iBin++) {
      cout<<hBIKK->GetBinContent(iBin)<<", ";
      if (iBin%10 == 0) cout<<endl;
    }
    cout<<"BRKK"<<endl;
    for (int iBin = 1; iBin <= nBins; iBin++) {
      cout<<hBRKK->GetBinContent(iBin)<<", ";
      if (iBin%10 == 0) cout<<endl;
    }
  }
  if (iShow == 5){ 
    cout<<"BIEtaPi"<<endl;
    for (int iBin = 1; iBin <= nBins; iBin++) {
      cout<<hBIEtaPi->GetBinContent(iBin)<<", ";
      if (iBin%10 == 0) cout<<endl;
    }
    cout<<"BREtaPi"<<endl;
    for (int iBin = 1; iBin <= nBins; iBin++) {
      cout<<hBREtaPi->GetBinContent(iBin)<<", ";
      if (iBin%10 == 0) cout<<endl;
    }
  }
  if (iShow == 6){ 
    cout<<"BIEtaPrimePi"<<endl;
    for (int iBin = 1; iBin <= nBins; iBin++) {
      cout<<hBIEtaPrimePi->GetBinContent(iBin)<<", ";
      if (iBin%10 == 0) cout<<endl;
    }
    cout<<"BREtaPrimePi"<<endl;
    for (int iBin = 1; iBin <= nBins; iBin++) {
      cout<<hBREtaPrimePi->GetBinContent(iBin)<<", ";
      if (iBin%10 == 0) cout<<endl;
    }
  }


}


int readVec(char *fToGo,vector<double> *vec)
{
  string line;
  stringstream os(line);
  string temp;
  ifstream myfile (fToGo);
  if (myfile.is_open())
    {
      int j = 0;
      while ( myfile.good() )
        {
          int i = 0;
          getline(myfile,line);
          stringstream os(line);
          while (os >> temp) {
            vec->push_back(atof(temp.c_str()));
            i++;
          }
          j++;
        }
      myfile.close();
    }
  else cout << "Unable to open file";
  return 0;
}


