#include <fstream>
#include <string>
#include <vector>
//Function prototypes
int readVec(char *fToGo,vector<double> *valVec,vector<double> *errVec);

void fitFracHist(void){
  char fString[120];

  //1225
  cout<<"1225:"<<endl;
  vector<double> valVec1225,errVec1225;
  sprintf(fString,"./outFit/frac_A10_m1225.txt");
  readVec(fString,&valVec1225,&errVec1225);

  //1235
  cout<<"1235:"<<endl;
  vector<double> valVec1235,errVec1235;
  sprintf(fString,"./outFit/frac_A10_m1235.txt");
  readVec(fString,&valVec1235,&errVec1235);

  //1245
  cout<<"1245:"<<endl;
  vector<double> valVec1245,errVec1245;
  sprintf(fString,"./outFit/frac_A10_m1245.txt");
  readVec(fString,&valVec1245,&errVec1245);

  //1255
  cout<<"1255:"<<endl;
  vector<double> valVec1255,errVec1255;
  sprintf(fString,"./outFit/frac_A10_m1255.txt");
  readVec(fString,&valVec1255,&errVec1255);

  //1265
  cout<<"1265:"<<endl;
  vector<double> valVec1265,errVec1265;
  sprintf(fString,"./outFit/frac_A10_m1265.txt");
  readVec(fString,&valVec1265,&errVec1265);

  //1275
  cout<<"1275:"<<endl;
  vector<double> valVec1275,errVec1275;
  sprintf(fString,"./outFit/frac_A10_m1275.txt");
  readVec(fString,&valVec1275,&errVec1275);

  //1285
  cout<<"1285:"<<endl;
  vector<double> valVec1285,errVec1285;
  sprintf(fString,"./outFit/frac_A10_m1285.txt");
  readVec(fString,&valVec1285,&errVec1285);

  //1295
  cout<<"1295:"<<endl;
  vector<double> valVec1295,errVec1295;
  sprintf(fString,"./outFit/frac_A10_m1295.txt");
  readVec(fString,&valVec1295,&errVec1295);

  //1305
  cout<<"1305:"<<endl;
  vector<double> valVec1305,errVec1305;
  sprintf(fString,"./outFit/frac_A10_m1305.txt");
  readVec(fString,&valVec1305,&errVec1305);

  //1315
  cout<<"1315:"<<endl;
  vector<double> valVec1315,errVec1315;
  sprintf(fString,"./outFit/frac_A10_m1315.txt");
  readVec(fString,&valVec1315,&errVec1315);



  TH2D *hFitFrac = new TH2D("hFitFrac","",10,1.220,1.320,21,0.5,21.5);

  int nFrac = valVec1315.size();
  if (nFrac != 11) cout<<"!!!  hFitFrac WRONG SIZE  !!!"<<endl; 
  
  for (int i=0; i< nFrac; i++){
    double val1225 = valVec1225[i];
    double err1225 = errVec1225[i];

    hFitFrac->SetBinContent(1,i+1,val1225);
    hFitFrac->SetBinError(1,i+1,err1225);

    //////////
    double val1235 = valVec1235[i];
    double err1235 = errVec1235[i];

    hFitFrac->SetBinContent(2,i+1,val1235);
    hFitFrac->SetBinError(2,i+1,err1235);

    //////////
    double val1245 = valVec1245[i];
    double err1245 = errVec1245[i];

    hFitFrac->SetBinContent(3,i+1,val1245);
    hFitFrac->SetBinError(3,i+1,err1245);

    //////////
    double val1255 = valVec1255[i];
    double err1255 = errVec1255[i];

    hFitFrac->SetBinContent(4,i+1,val1255);
    hFitFrac->SetBinError(4,i+1,err1255);

    //////////
    double val1265 = valVec1265[i];
    double err1265 = errVec1265[i];

    hFitFrac->SetBinContent(5,i+1,val1265);
    hFitFrac->SetBinError(5,i+1,err1265);

    //////////
    double val1275 = valVec1275[i];
    double err1275 = errVec1275[i];

    hFitFrac->SetBinContent(6,i+1,val1275);
    hFitFrac->SetBinError(6,i+1,err1275);

    //////////
    double val1285 = valVec1285[i];
    double err1285 = errVec1285[i];

    hFitFrac->SetBinContent(7,i+1,val1285);
    hFitFrac->SetBinError(7,i+1,err1285);

    //////////
    double val1295 = valVec1295[i];
    double err1295 = errVec1295[i];

    hFitFrac->SetBinContent(8,i+1,val1295);
    hFitFrac->SetBinError(8,i+1,err1295);

    //////////
    double val1305 = valVec1305[i];
    double err1305 = errVec1305[i];

    hFitFrac->SetBinContent(9,i+1,val1305);
    hFitFrac->SetBinError(9,i+1,err1305);

    //////////
    double val1315 = valVec1315[i];
    double err1315 = errVec1315[i];

    hFitFrac->SetBinContent(10,i+1,val1315);
    hFitFrac->SetBinError(10,i+1,err1315);
    
  }
  
  hFitFrac->Draw("colz");

  //Setup the output file
  TFile *outFile = new TFile("./outFit/ff.root","RECREATE");
  hFitFrac->Write();
  outFile->Close();

  
}

int readVec(char *fToGo,vector<double> *valVec,vector<double> *errVec)
{
  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) {
            if (i%2 == 0){
	      valVec->push_back(atof(temp.c_str()));
	      cout<<atof(temp.c_str());
	    }else{
	      errVec->push_back(atof(temp.c_str()));
	      cout<<" +/- "<<atof(temp.c_str())<<endl;
	    }
            i++;
          }
          j++;
        }
      
      myfile.close();
    }
  else cout << "Unable to open file";
  return 0;
}
