#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,"./outFitToRun/frac_C10_m1225.txt");
  readVec(fString,&valVec1225,&errVec1225);

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

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

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

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

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

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

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

  ////////////////////

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

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

  //1325
  cout<<"1325:"<<endl;
  vector<double> valVec1325,errVec1325;
  sprintf(fString,"./outFitToRun/frac_C10_m1325.txt");
  readVec(fString,&valVec1325,&errVec1325);

  //1335
  cout<<"1335:"<<endl;
  vector<double> valVec1335,errVec1335;
  sprintf(fString,"./outFitToRun/frac_C10_m1335.txt");
  readVec(fString,&valVec1335,&errVec1335);

  //1345
  cout<<"1345:"<<endl;
  vector<double> valVec1345,errVec1345;
  sprintf(fString,"./outFitToRun/frac_C10_m1345.txt");
  readVec(fString,&valVec1345,&errVec1345);

  //1355
  cout<<"1355:"<<endl;
  vector<double> valVec1355,errVec1355;
  sprintf(fString,"./outFitToRun/frac_C10_m1355.txt");
  readVec(fString,&valVec1355,&errVec1355);

  //1365
  cout<<"1365:"<<endl;
  vector<double> valVec1365,errVec1365;
  sprintf(fString,"./outFitToRun/frac_C10_m1365.txt");
  readVec(fString,&valVec1365,&errVec1365);

  //1375
  cout<<"1375:"<<endl;
  vector<double> valVec1375,errVec1375;
  sprintf(fString,"./outFitToRun/frac_C10_m1375.txt");
  readVec(fString,&valVec1375,&errVec1375);

  //1385
  cout<<"1385:"<<endl;
  vector<double> valVec1385,errVec1385;
  sprintf(fString,"./outFitToRun/frac_C10_m1385.txt");
  readVec(fString,&valVec1385,&errVec1385);

  //1395
  cout<<"1395:"<<endl;
  vector<double> valVec1395,errVec1395;
  sprintf(fString,"./outFitToRun/frac_C10_m1395.txt");
  readVec(fString,&valVec1395,&errVec1395);

  ///////////////////////////////

  //1405
  cout<<"1405:"<<endl;
  vector<double> valVec1405,errVec1405;
  sprintf(fString,"./outFitToRun/frac_C10_m1405.txt");
  readVec(fString,&valVec1405,&errVec1405);

  //1415
  cout<<"1415:"<<endl;
  vector<double> valVec1415,errVec1415;
  sprintf(fString,"./outFitToRun/frac_C10_m1415.txt");
  readVec(fString,&valVec1415,&errVec1415);

  //1425
  cout<<"1425:"<<endl;
  vector<double> valVec1425,errVec1425;
  sprintf(fString,"./outFitToRun/frac_C10_m1425.txt");
  readVec(fString,&valVec1425,&errVec1425);

  //1435
  cout<<"1435:"<<endl;
  vector<double> valVec1435,errVec1435;
  sprintf(fString,"./outFitToRun/frac_C10_m1435.txt");
  readVec(fString,&valVec1435,&errVec1435);


  //1445
  cout<<"1445:"<<endl;
  vector<double> valVec1445,errVec1445;
  sprintf(fString,"./outFitToRun/frac_C10_m1445.txt");
  readVec(fString,&valVec1445,&errVec1445);

  
  //1455
  cout<<"1455:"<<endl;
  vector<double> valVec1455,errVec1455;
  sprintf(fString,"./outFitToRun/frac_C10_m1455.txt");
  readVec(fString,&valVec1455,&errVec1455);

  //1465
  cout<<"1465:"<<endl;
  vector<double> valVec1465,errVec1465;
  sprintf(fString,"./outFitToRun/frac_C10_m1465.txt");
  readVec(fString,&valVec1465,&errVec1465);

  //1475
  cout<<"1475:"<<endl;
  vector<double> valVec1475,errVec1475;
  sprintf(fString,"./outFitToRun/frac_C10_m1475.txt");
  readVec(fString,&valVec1475,&errVec1475);

  //1485
  cout<<"1485:"<<endl;
  vector<double> valVec1485,errVec1485;
  sprintf(fString,"./outFitToRun/frac_C10_m1485.txt");
  readVec(fString,&valVec1485,&errVec1485);

  //1495
  cout<<"1495:"<<endl;
  vector<double> valVec1495,errVec1495;
  sprintf(fString,"./outFitToRun/frac_C10_m1495.txt");
  readVec(fString,&valVec1495,&errVec1495);

  ///////////////////////////////

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

  int nFrac = valVec1315.size();
  //if (nFrac != 11) cout<<"!!!  hFitFrac WRONG SIZE  !!!"<<endl; 

  cout<<"nFrac = "<<nFrac<<endl;
  
  for (int i=0; i< nFrac; i++){
    cout<<"i = "<<i<<endl;
    double val1225 = valVec1225[i];
    double err1225 = errVec1225[i];

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

    cout<<"Done:1225"<<endl;
    //////////
    double val1235 = valVec1235[i];
    double err1235 = errVec1235[i];

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

    cout<<"Done:1235"<<endl;
    //////////
    double val1245 = valVec1245[i];
    double err1245 = errVec1245[i];

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

    cout<<"Done:1245"<<endl;
    //////////
    double val1255 = valVec1255[i];
    double err1255 = errVec1255[i];

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

    cout<<"Done:1255"<<endl;
    //////////
    double val1265 = valVec1265[i];
    double err1265 = errVec1265[i];

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

    cout<<"Done:1265"<<endl;
    //////////
    double val1275 = valVec1275[i];
    double err1275 = errVec1275[i];

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

    cout<<"Done:1275"<<endl;
    //////////
    double val1285 = valVec1285[i];
    double err1285 = errVec1285[i];

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

    cout<<"Done:1285"<<endl;
    //////////
    double val1295 = valVec1295[i];
    double err1295 = errVec1295[i];

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

    cout<<"Done:1295"<<endl;
    ////////////////////////
    double val1305 = valVec1305[i];
    double err1305 = errVec1305[i];

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

    cout<<"Done:1305"<<endl;
    //////////
    double val1315 = valVec1315[i];
    double err1315 = errVec1315[i];

    hFitFrac->SetBinContent(10,i+1,val1315);
    hFitFrac->SetBinError(10,i+1,err1315);

    cout<<"Done:1315"<<endl;
    //////////
    double val1325 = valVec1325[i];
    double err1325 = errVec1325[i];

    hFitFrac->SetBinContent(11,i+1,val1325);
    hFitFrac->SetBinError(11,i+1,err1325);

    cout<<"Done:1325"<<endl;
    //////////
    double val1335 = valVec1335[i];
    double err1335 = errVec1335[i];

    hFitFrac->SetBinContent(12,i+1,val1335);
    hFitFrac->SetBinError(12,i+1,err1335);

    cout<<"Done:1335"<<endl;
    //////////
    double val1345 = valVec1345[i];
    double err1345 = errVec1345[i];

    hFitFrac->SetBinContent(13,i+1,val1345);
    hFitFrac->SetBinError(13,i+1,err1345);

    cout<<"Done:1345"<<endl;
    //////////
    double val1355 = valVec1355[i];
    double err1355 = errVec1355[i];

    hFitFrac->SetBinContent(14,i+1,val1355);
    hFitFrac->SetBinError(14,i+1,err1355);

    cout<<"Done:1355"<<endl;
    //////////
    double val1365 = valVec1365[i];
    double err1365 = errVec1365[i];

    hFitFrac->SetBinContent(15,i+1,val1365);
    hFitFrac->SetBinError(15,i+1,err1365);

    cout<<"Done:1365"<<endl;
    //////////
    double val1375 = valVec1375[i];
    double err1375 = errVec1375[i];

    hFitFrac->SetBinContent(16,i+1,val1375);
    hFitFrac->SetBinError(16,i+1,err1375);

    cout<<"Done:1375"<<endl;
    //////////
    double val1385 = valVec1385[i];
    double err1385 = errVec1385[i];

    hFitFrac->SetBinContent(17,i+1,val1385);
    hFitFrac->SetBinError(17,i+1,err1385);

    cout<<"Done:1385"<<endl;
    //////////
    double val1395 = valVec1395[i];
    double err1395 = errVec1395[i];

    hFitFrac->SetBinContent(18,i+1,val1395);
    hFitFrac->SetBinError(18,i+1,err1395);

    cout<<"Done:1395"<<endl;
    ///////////////////////

    double val1405 = valVec1405[i];
    double err1405 = errVec1405[i];

    hFitFrac->SetBinContent(19,i+1,val1405);
    hFitFrac->SetBinError(19,i+1,err1405);

    cout<<"Done:1405"<<endl;
    //////////
    double val1415 = valVec1415[i];
    double err1415 = errVec1415[i];

    hFitFrac->SetBinContent(20,i+1,val1415);
    hFitFrac->SetBinError(20,i+1,err1415);

    cout<<"Done:1415"<<endl;
    //////////
    double val1425 = valVec1425[i];
    double err1425 = errVec1425[i];

    hFitFrac->SetBinContent(21,i+1,val1425);
    hFitFrac->SetBinError(21,i+1,err1425);

    cout<<"Done:1425"<<endl;
    //////////
    cout<<"t:1"<<endl;
    double val1435 = valVec1435[i];
    cout<<"t:2"<<endl;
    double err1435 = errVec1435[i];
    cout<<"t:3"<<endl;
    hFitFrac->SetBinContent(22,i+1,val1435);
    cout<<"t:4"<<endl;
    hFitFrac->SetBinError(22,i+1,err1435);

    cout<<"Done:1435"<<endl;
    //////////
    double val1445 = valVec1445[i];
    double err1445 = errVec1445[i];

    hFitFrac->SetBinContent(23,i+1,val1445);
    hFitFrac->SetBinError(23,i+1,err1445);

    cout<<"Done:1445"<<endl;
    //////////
    double val1455 = valVec1455[i];
    double err1455 = errVec1455[i];

    hFitFrac->SetBinContent(24,i+1,val1455);
    hFitFrac->SetBinError(24,i+1,err1455);

    cout<<"Done:1455"<<endl;
    //////////
    double val1465 = valVec1465[i];
    double err1465 = errVec1465[i];

    hFitFrac->SetBinContent(25,i+1,val1465);
    hFitFrac->SetBinError(25,i+1,err1465);

    cout<<"Done:1465"<<endl;
    //////////
    double val1475 = valVec1475[i];
    double err1475 = errVec1475[i];

    hFitFrac->SetBinContent(26,i+1,val1475);
    hFitFrac->SetBinError(26,i+1,err1475);

    cout<<"Done:1475"<<endl;
    //////////
    double val1485 = valVec1485[i];
    double err1485 = errVec1485[i];

    hFitFrac->SetBinContent(27,i+1,val1485);
    hFitFrac->SetBinError(27,i+1,err1485);

    cout<<"Done:1485"<<endl;
    //////////
    double val1495 = valVec1495[i];
    double err1495 = errVec1495[i];

    hFitFrac->SetBinContent(28,i+1,val1495);
    hFitFrac->SetBinError(28,i+1,err1495);
    cout<<"Done:1495"<<endl;
  }
  
  hFitFrac->Draw("colz");

  //Setup the output file
  TFile *outFile = new TFile("./outFitToRun/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;
}
