ROOT logo

#include <TFile.h>
#include <TH1.h>
#include <TProfile.h>
#include <TF1.h>
#include <TGraphErrors.h>
#include <TCanvas.h>
#include <TAxis.h>
#include <TLegend.h>
#include <TStyle.h>
#include <TGraphAsymmErrors.h>
#include <TList.h>
#include <TMath.h>
#include <TSystem.h>
#include <TLatex.h>
#include <TF1.h>
#include <TF2.h>

#include "AliHighPtDeDxData.h"

#include "my_tools.C"
#include "my_functions.C"

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

/*

  To use:
  =======
  root is enough
  
  gSystem->AddIncludePath("-I../lib")
  gSystem->AddIncludePath("-I../grid")
  gSystem->AddIncludePath("-I../macros")
  gROOT->SetMacroPath(".:../macros:../grid:../lib/")
  .L libMyDeDxAnalysis.so 
  .L my_functions.C+
  .L my_tools.C+
  .L fit_yields_final.C+

  Step 6: Extract ratios = Final real step!
  FitYields("data/7tev_b.root", 3.0, 20.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b.root", 0, "results/fits_final") 

  Step 7: Compare positive and negative tracks
  CompareYields("data/7tev_b.root", 0, 3.0, 20.0, 1, -1);

  Step 8: Check that extracted positions match with 
  FitYieldsV0("data/7tev_b.root", "data/7tev_b_v0_loose.root", "lambda", 3.0, 10.0) 
  FitYieldsV0("data/7tev_b.root", "data/7tev_b_v0_loose.root", "kaon", 3.0, 10.0) 

  Step 9: Check eta stability of fits

  FitYields("data/7tev_b.root", 3.0, 10.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b_86.root", "eta-8-6", "results/eta86") 
  FitYields("data/7tev_b.root", 3.0, 10.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b_64.root", "eta-6-4", "results/eta64") 
  FitYields("data/7tev_b.root", 3.0, 10.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b_42.root", "eta-4-2", "results/eta42") 
  FitYields("data/7tev_b.root", 3.0, 10.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b_20.root", "eta-20", "results/eta20") 
  FitYields("data/7tev_b.root", 3.0, 10.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b_02.root", "eta02", "results/eta02") 
  FitYields("data/7tev_b.root", 3.0, 10.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b_24.root", "eta24", "results/eta24") 
  FitYields("data/7tev_b.root", 3.0, 10.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b_46.root", "eta46", "results/eta46") 
  FitYields("data/7tev_b.root", 3.0, 10.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b_68.root", "eta68", "results/eta68") 

  Compare(3.1, "7tev_b");
  Compare(5.1, "7tev_b");
  Compare(7.1, "7tev_b");
  Compare(9.1, "7tev_b");

  There is a lot of other tests than can be done! One can have a look in an older version of this code in ../macros/fit_yields_old.C



  //
  // Test
  //

  Step 6: Extract ratios = Final real step!
  FitYields("data/7tev_b_test.root", 3.0, 10.0, 0, kTRUE, 0, 1, kTRUE, "7tev_b_test.root", 0, "results/fits_final") 

  Step 7: Check that extracted positions match with 
  FitYieldsV0("data/7tev_b_test.root", "data/7tev_b_test_v0_loose.root", "lambda", 3.0, 10.0) 
  FitYieldsV0("data/7tev_b_test.root", "data/7tev_b_test_v0_loose.root", "kaon", 3.0, 10.0) 

 */

void MakeRatios(const Char_t* file1Name, const Char_t* file2Name, 
		Bool_t drawFractionRatios,
		Bool_t drawYieldRatios);


//____________________________________________________________________________
void FitYields(const Char_t* dataFileName,
	       Double_t ptStart, Double_t ptStop,
	       Int_t charge,
	       Bool_t performFit = kFALSE,
	       Int_t run    = 0,
	       Int_t filter = 1,
	       Bool_t usePhiCut = kTRUE,
	       const Char_t* outFileName=0,
	       const Char_t* endName=0,
	       const Char_t* dirName="debugfits")
{
  gStyle->SetOptStat(0);

  
  TFile* dataFile = FindFileFresh(dataFileName);
  if(!dataFile)
    return;
  AliHighPtDeDxData* data = (AliHighPtDeDxData*)GetObject(dataFile, filter, usePhiCut, run, "filter", endName);
  data->Print();

  TH2D* hDeltaPiVsPt = data->GetHistDeltaPiVsPt(0, charge);
  hDeDxVsP = hDeltaPiVsPt; // for the 2d fit to pick up the right bin

  TH2D* hDeltaPiVsPtPiGen = data->GetHistDeltaPiVsPt(1, charge);
  TH2D* hDeltaPiVsPtKGen  = data->GetHistDeltaPiVsPt(2, charge);
  TH2D* hDeltaPiVsPtPGen  = data->GetHistDeltaPiVsPt(3, charge);
  TH2D* hDeltaPiVsPtEGen  = data->GetHistDeltaPiVsPt(4, charge);

  TH2D* hDeltaPiVsPtPi = 0;
  TH2D* hDeltaPiVsPtK  = 0;
  TH2D* hDeltaPiVsPtP  = 0;

  if(data->IsMc()) {

    hDeltaPiVsPtPi = data->GetHistDeltaPiVsPtMc(1, charge);
    hDeltaPiVsPtK  = data->GetHistDeltaPiVsPtMc(2, charge);
    hDeltaPiVsPtP  = data->GetHistDeltaPiVsPtMc(3, charge);
  }



  TProfile* hPiGenProfile = hDeltaPiVsPtPiGen->ProfileX();
  hPiGenProfile->SetMarkerStyle(29);
  TProfile* hKGenProfile = hDeltaPiVsPtKGen->ProfileX();
  hKGenProfile->SetMarkerStyle(29);
  TProfile* hPGenProfile = hDeltaPiVsPtPGen->ProfileX();
  hPGenProfile->SetMarkerStyle(29);
  TProfile* hEGenProfile = hDeltaPiVsPtEGen->ProfileX();
  hEGenProfile->SetMarkerStyle(29);

  TCanvas* cDeltaPiVsPt = new TCanvas("cDeltaPiVsPt", "dE/dx vs p", 400, 300);
  cDeltaPiVsPt->Clear();
  cDeltaPiVsPt->cd();
  cDeltaPiVsPt->SetLogz();
  hDeltaPiVsPt->Draw("COLZ");
  hPiGenProfile->Draw("SAME P");
  hKGenProfile->Draw("SAME P");
  hPGenProfile->Draw("SAME P");
  hEGenProfile->Draw("SAME P");
  gROOT->ProcessLine(".x drawText.C");
  CreateDir(dirName);
  cDeltaPiVsPt->SaveAs(Form("%s/deltapi_vs_pt.gif", dirName));
  cDeltaPiVsPt->SaveAs(Form("%s/deltapi_vs_pt.pdf", dirName));

  TCanvas* cDeltaPiVsPtLogX = new TCanvas("cDeltaPiVsPtLogX", "dE/dx vs p", 400, 300);
  cDeltaPiVsPtLogX->Clear();
  cDeltaPiVsPtLogX->cd();
  cDeltaPiVsPtLogX->SetLogz();
  cDeltaPiVsPtLogX->SetLogx();
  hDeltaPiVsPt->Draw("COLZ");
  hPiGenProfile->Draw("SAME P");
  hKGenProfile->Draw("SAME P");
  hPGenProfile->Draw("SAME P");
  hEGenProfile->Draw("SAME P");
  gROOT->ProcessLine(".x drawText.C");
  cDeltaPiVsPtLogX->SaveAs(Form("%s/deltapi_vs_pt_logx.gif", dirName));
  cDeltaPiVsPtLogX->SaveAs(Form("%s/deltapi_vs_pt_logx.pdf", dirName));

  // Root is a bit stupid with finidng bins so we have to add and subtract a
  // little to be sure we get the right bin as we typically put edges as
  // limits
  const Int_t binStart = hDeltaPiVsPt->GetXaxis()->FindBin(ptStart+0.01);
  ptStart = hDeltaPiVsPt->GetXaxis()->GetBinLowEdge(binStart);
  const Int_t binStop  = hDeltaPiVsPt->GetXaxis()->FindBin(ptStop-0.01);
  ptStop = hDeltaPiVsPt->GetXaxis()->GetBinUpEdge(binStop);
  //  const Int_t nBins    = binStop - binStart + 1;

  cout << "Doing fits from pTlow = " << ptStart << " (bin: " << binStart
       << ") to pThigh = " << ptStop << " (bin: " << binStop << ")" << endl;
  

  //cross check
  TCanvas* cFits = new TCanvas("cFits", "Fit comparison to data", 1200, 800);
  cFits->Clear();
  cFits->Divide(7, 4);

  // TF1* pionGen = new TF1("pionGen", "[0]/sqrt(6.2832*[2]*[2])*exp(-(x-[1])*(x-[1])/2.0/[2]/[2])", -30, 20);
  // pionGen->SetLineWidth(2);
  // pionGen->SetLineColor(kRed);

  TF1* pion = new TF1("pion", "gausn", -30, 30);
  pion->SetLineWidth(2);
  pion->SetLineColor(kRed);
  TF1* kaon = new TF1("kaon", "gausn", -30, 30);
  kaon->SetLineWidth(2);
  kaon->SetLineColor(kGreen);
  TF1* proton = new TF1("proton", "gausn", -30, 30);
  proton->SetLineWidth(2);
  proton->SetLineColor(kBlue);
  TF1* electron = new TF1("electron", "gausn", -30, 30);
  electron->SetLineWidth(2);
  electron->SetLineColor(kMagenta);
  //  TF1* total = new TF1("total", "gausn(0)+gausn(3)+gausn(6)+gausn(9)", -30, 30);
  TF1* total = new TF1("total", "([0]+[12])*gausn(1)+[4]*gausn(5)+[8]*gausn(9)+[12]*gausn(13)", -30, 30);
  total->SetLineColor(kBlack);
  total->SetLineWidth(2);
  total->SetLineStyle(2);
  
  TLegend* legend = new TLegend(0.11, 0.6, 0.35, 0.85);    
  legend->SetBorderSize(0);
  legend->SetFillColor(0);
  legend->AddEntry(total, "4-Gauss fit", "L");
  legend->AddEntry(pion, "#pi", "L");
  legend->AddEntry(kaon, "K", "L");
  legend->AddEntry(proton, "p", "L");
  legend->AddEntry(electron, "e", "L");

  TCanvas* cSingleFit = new TCanvas("cSingleFit", "single fit");
  //  cSingleFit->SetLogy();

  TH1D* hPionRatio =(TH1D*)hDeltaPiVsPt->ProjectionX("hPionRatio", 1, 1);
  hPionRatio->SetTitle("particle fractions; p_{T} [GeV/c]; particle fraction");
  hPionRatio->Reset();
  TH1D* hKaonRatio   = (TH1D*)hPionRatio->Clone("hKaonRatio");
  TH1D* hProtonRatio = (TH1D*)hPionRatio->Clone("hProtonRatio");
  TH1D* hElectronRatio = (TH1D*)hPionRatio->Clone("hElectronRatio");
  TH1D* hPionRatioMc = (TH1D*)hPionRatio->Clone("hPionRatioMc");
  TH1D* hKaonRatioMc = (TH1D*)hPionRatio->Clone("hKaonRatioMc");
  TH1D* hProtonRatioMc = (TH1D*)hPionRatio->Clone("hProtonRatioMc");

  TH1D* hPionYield =(TH1D*)hDeltaPiVsPt->ProjectionX("hPionYield", 1, 1);
  hPionYield->SetTitle("particle fractions; p_{T} [GeV/c]; particle fraction");
  hPionYield->Reset();
  TH1D* hKaonYield   = (TH1D*)hPionYield->Clone("hKaonYield");
  TH1D* hProtonYield = (TH1D*)hPionYield->Clone("hProtonYield");
  TH1D* hElectronYield = (TH1D*)hPionYield->Clone("hElectronYield");
  TH1D* hPionYieldMc = (TH1D*)hPionYield->Clone("hPionYieldMc");
  TH1D* hKaonYieldMc = (TH1D*)hPionYield->Clone("hKaonYieldMc");
  TH1D* hProtonYieldMc = (TH1D*)hPionYield->Clone("hProtonYieldMc");

  TF1* fElectronFraction = new TF1("fElectronFraction", "[0]+(x<10.0)*[1]*(x-10.0)", 0, ptStop);
  fElectronFraction->SetParameters(0.01, 0.0);

  for(Int_t bin = binStart; bin <= binStop; bin++){
    
    cout << "Making projection for bin: " << bin << endl;
    
    const Int_t j = bin-binStart;
    
    TH1D* hDeltaPiVsPtProj =(TH1D*)hDeltaPiVsPt->ProjectionY(Form("hDeltaPiVsPtProj%d", bin), bin, bin);
    //    hDeltaPiVsPtProj->GetXaxis()->SetRangeUser(-25, 20);
    hDeltaPiVsPtProj->GetXaxis()->SetRangeUser(-25, 30);
    hDeltaPiVsPtProj->SetTitle(Form("%.1f<p_{T}<%.1f GeV/c", 
				    hDeltaPiVsPt->GetXaxis()->GetBinLowEdge(bin),
				    hDeltaPiVsPt->GetXaxis()->GetBinUpEdge(bin)));
    
    Double_t all =  hDeltaPiVsPtProj->GetEntries();
    
    TH1D* hDeltaPiVsPtPiGenProj =(TH1D*)hDeltaPiVsPtPiGen->ProjectionY(Form("hDeltaPiVsPtPiGenProj%d", bin), bin, bin);
    TH1D* hDeltaPiVsPtKGenProj =(TH1D*)hDeltaPiVsPtKGen->ProjectionY(Form("hDeltaPiVsPtKGenProj%d", bin), bin, bin);
    TH1D* hDeltaPiVsPtPGenProj =(TH1D*)hDeltaPiVsPtPGen->ProjectionY(Form("hDeltaPiVsPtPGenProj%d", bin), bin, bin);
    TH1D* hDeltaPiVsPtEGenProj =(TH1D*)hDeltaPiVsPtEGen->ProjectionY(Form("hDeltaPiVsPtEGenProj%d", bin), bin, bin);
    

    const Int_t nPar = 16;
    Double_t gausParams[nPar] = { 
      0.59,
      all,
      hDeltaPiVsPtPiGenProj->GetMean(), 
      hDeltaPiVsPtPiGenProj->GetRMS(), 
      0.3,
      all,
      hDeltaPiVsPtKGenProj->GetMean(), 
      hDeltaPiVsPtKGenProj->GetRMS(), 
      0.1,
      all,
      hDeltaPiVsPtPGenProj->GetMean(), 
      hDeltaPiVsPtPGenProj->GetRMS(), 
      0.01,
      all,
      hDeltaPiVsPtEGenProj->GetMean(), 
      hDeltaPiVsPtEGenProj->GetRMS(), 
    };
    
    cFits->cd();
    cFits->cd(j + 1);
    
    total->SetParameters(gausParams);


    for(Int_t i = 0; i < nPar; i++) {
      
      if((i%4) > 0)
	total->FixParameter(i, gausParams[i]);
    }

    if(bin==50) {
      hElectronRatio->Fit(fElectronFraction, "N", "", 3.0, 10.0);
      fElectronFraction->SetRange(0, ptStop);
    }

    if(bin>=50) {
      total->FixParameter(12, fElectronFraction->Eval(hDeltaPiVsPt->GetXaxis()->GetBinCenter(bin)));
    }
    
    if(performFit) {
      
      hDeltaPiVsPtProj->Fit(total, "0L");
      
    } 
    
    hDeltaPiVsPtProj->Draw();
    total->DrawCopy("same");    
    
    Double_t parametersOut[nPar];
    total->GetParameters(parametersOut);
    const Double_t* parameterErrorsOut = total->GetParErrors();

    for(Int_t i = 0; i < nPar; i++) 
      cout << parametersOut[i] << ", ";
    cout << endl;


    pion->SetParameters(&parametersOut[1]);
    pion->SetParameter(0,all*(parametersOut[0]+parametersOut[12]));
    pion->DrawCopy("same");
    hPionRatio->SetBinContent(bin, parametersOut[0]);
    hPionRatio->SetBinError(bin, parameterErrorsOut[0]);
    hPionYield->SetBinContent(bin, parametersOut[0]*all);
    hPionYield->SetBinError(bin, parameterErrorsOut[0]*all);

    kaon->SetParameters(&parametersOut[5]);
    kaon->SetParameter(0,all*parametersOut[4]);
    kaon->DrawCopy("same");
    hKaonRatio->SetBinContent(bin, parametersOut[4]);
    hKaonRatio->SetBinError(bin, parameterErrorsOut[4]);
    hKaonYield->SetBinContent(bin, parametersOut[4]*all);
    hKaonYield->SetBinError(bin, parameterErrorsOut[4]*all);
    
    proton->SetParameters(&parametersOut[9]);
    proton->SetParameter(0,all*parametersOut[8]);
    proton->DrawCopy("same");
    hProtonRatio->SetBinContent(bin, parametersOut[8]);
    hProtonRatio->SetBinError(bin, parameterErrorsOut[8]);
    hProtonYield->SetBinContent(bin, parametersOut[8]*all);
    hProtonYield->SetBinError(bin, parameterErrorsOut[8]*all);

    electron->SetParameters(&parametersOut[13]);
    electron->SetParameter(0,all*parametersOut[12]);
    electron->DrawCopy("same");
    hElectronRatio->SetBinContent(bin, parametersOut[12]);
    hElectronRatio->SetBinError(bin, parameterErrorsOut[12]);
    hElectronYield->SetBinContent(bin, parametersOut[12]*all);
    hElectronYield->SetBinError(bin, parameterErrorsOut[12]*all);


    cSingleFit->cd();
    cSingleFit->Clear();
    //    cSingleFit->SetLogy();
    hDeltaPiVsPtProj->Draw();
    pion->DrawCopy("same");
    kaon->DrawCopy("same");
    proton->DrawCopy("same");
    electron->DrawCopy("same");
    total->DrawCopy("same");
    
    if(bin==42 || bin==49) {

      TFile* fileOut = new TFile(Form("%s/ptspectrum_bin%d.root", dirName, bin), "RECREATE");

      TH1D* hist = (TH1D*)hDeltaPiVsPtProj->Clone("hist");

      TF1* sumFit    = (TF1*)total->Clone("sumFit");
      TF1* pionFit   = (TF1*)pion->Clone("pionFit");
      TF1* kaonFit   = (TF1*)kaon->Clone("kaonFit");
      TF1* protonFit = (TF1*)proton->Clone("protonFit");
      TF1* electronFit = (TF1*)electron->Clone("electronFit");

      hist->Write();

      sumFit->Write();
      pionFit->Write();
      kaonFit->Write();
      protonFit->Write();
      electronFit->Write();

      fileOut->Close();
    }

    gROOT->ProcessLine(".x drawText.C");
    cSingleFit->SaveAs(Form("%s/ptspectrum_bin%d.gif", dirName, bin));
    cSingleFit->SaveAs(Form("%s/ptspectrum_bin%d.pdf", dirName, bin));
    //    legend->Draw();

    if(data->IsMc()) {

      cSingleFit->cd();
      cSingleFit->Clear();
      TH1D* hDeltaPiVsPtPiProj =(TH1D*)hDeltaPiVsPtPi->ProjectionY(Form("hDeltaPiVsPtPiProj%d", bin), bin, bin);
      hDeltaPiVsPtPiProj->SetMarkerStyle(20);
      hDeltaPiVsPtPiProj->SetMarkerColor(2);
      hDeltaPiVsPtPiProj->SetTitle(Form("%.1f<p_{T}<%.1f GeV/c", 
					hDeltaPiVsPt->GetXaxis()->GetBinLowEdge(bin),
					hDeltaPiVsPt->GetXaxis()->GetBinUpEdge(bin)));
      hDeltaPiVsPtPiProj->Draw("P");
      Double_t integral = hDeltaPiVsPtPiProj->Integral();
      hPionRatioMc->SetBinContent(bin, integral/all);
      hPionRatioMc->SetBinError(bin, TMath::Sqrt(integral)/all);
      hPionYieldMc->SetBinContent(bin, integral);
      hPionYieldMc->SetBinError(bin, TMath::Sqrt(integral));
      TH1D* hDeltaPiVsPtKProj =(TH1D*)hDeltaPiVsPtK->ProjectionY(Form("hDeltaPiVsPtKProj%d", bin), bin, bin);
      hDeltaPiVsPtKProj->SetMarkerStyle(21);
      hDeltaPiVsPtKProj->SetMarkerColor(3);
      hDeltaPiVsPtKProj->Draw("SAME P");
      integral = hDeltaPiVsPtKProj->Integral();
      hKaonRatioMc->SetBinContent(bin, integral/all);
      hKaonRatioMc->SetBinError(bin, TMath::Sqrt(integral)/all);
      hKaonYieldMc->SetBinContent(bin, integral);
      hKaonYieldMc->SetBinError(bin, TMath::Sqrt(integral));
      TH1D* hDeltaPiVsPtPProj =(TH1D*)hDeltaPiVsPtP->ProjectionY(Form("hDeltaPiVsPtPProj%d", bin), bin, bin);
      hDeltaPiVsPtPProj->SetMarkerStyle(22);
      hDeltaPiVsPtPProj->SetMarkerColor(4);
      hDeltaPiVsPtPProj->Draw("SAME P");
      integral = hDeltaPiVsPtPProj->Integral();
      hProtonRatioMc->SetBinContent(bin, integral/all);
      hProtonRatioMc->SetBinError(bin, TMath::Sqrt(integral)/all);
      hProtonYieldMc->SetBinContent(bin, integral);
      hProtonYieldMc->SetBinError(bin, TMath::Sqrt(integral));

      pion->DrawCopy("same");
      kaon->DrawCopy("same");
      proton->DrawCopy("same");
      cSingleFit->SaveAs(Form("debugfitsmc/ptspectrum_bin%d.gif", bin));
    }
  }

  TCanvas* cRatio = new TCanvas("cRatio", "ratios/all vs p", 600, 400);

  cRatio->Clear();
  cRatio->SetGridy();
  hElectronRatio->GetYaxis()->SetRangeUser(-0.05, 0.1);
  hElectronRatio->DrawCopy("P E");
  fElectronFraction->DrawCopy("SAME");

  gROOT->ProcessLine(".x drawText.C");
  cRatio->SaveAs(Form("%s/electron_ratio.gif", dirName));
  cRatio->SaveAs(Form("%s/electron_ratio.pdf", dirName));

  cRatio->Clear();
  cRatio->SetGridy(kFALSE);
  hPionRatio->SetMarkerStyle(20);
  hPionRatio->SetMarkerColor(2);
  hPionRatio->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
  hPionRatio->GetYaxis()->SetRangeUser(0.0, 1.0);
  hPionRatio->DrawCopy("P E");
  hPionYield->SetMarkerStyle(20);
  hPionYield->SetMarkerColor(2);
  hPionYield->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);

  hKaonRatio->SetMarkerStyle(20);
  hKaonRatio->SetMarkerColor(3);
  hKaonRatio->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
  hKaonRatio->DrawCopy("SAME P E");
  hKaonYield->SetMarkerStyle(20);
  hKaonYield->SetMarkerColor(3);
  hKaonYield->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);

  hProtonRatio->SetMarkerStyle(20);
  hProtonRatio->SetMarkerColor(4);
  hProtonRatio->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
  hProtonRatio->DrawCopy("SAME P E");
  hProtonYield->SetMarkerStyle(20);
  hProtonYield->SetMarkerColor(4);
  hProtonYield->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);

  hElectronRatio->SetMarkerStyle(20);
  hElectronRatio->SetMarkerColor(6);
  hElectronRatio->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
  hElectronRatio->DrawCopy("SAME P E");
  hElectronYield->SetMarkerStyle(20);
  hElectronYield->SetMarkerColor(6);
  hElectronYield->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);

  gROOT->ProcessLine(".x drawText.C");
  cRatio->SaveAs(Form("%s/particle_ratios.gif", dirName));
  cRatio->SaveAs(Form("%s/particle_ratios.pdf", dirName));

  if(data->IsMc()) {
    
    hPionRatioMc->SetMarkerStyle(24);
    hPionRatioMc->SetMarkerColor(2);
    hPionRatioMc->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
    hPionYieldMc->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
    hPionYieldMc->SetMarkerStyle(24);
    hPionYieldMc->SetMarkerColor(2);
    hPionRatioMc->DrawCopy("SAME P");
    
    hKaonRatioMc->SetMarkerStyle(24);
    hKaonRatioMc->SetMarkerColor(3);
    hKaonRatioMc->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
    hKaonYieldMc->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
    hKaonYieldMc->SetMarkerStyle(24);
    hKaonYieldMc->SetMarkerColor(3);
    hKaonRatioMc->DrawCopy("SAME P");
    
    hProtonRatioMc->SetMarkerStyle(24);
    hProtonRatioMc->SetMarkerColor(4);
    hProtonRatioMc->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
    hProtonYieldMc->GetXaxis()->SetRangeUser(0.0, ptStop-0.001);
    hProtonYieldMc->SetMarkerStyle(24);
    hProtonYieldMc->SetMarkerColor(4);
    hProtonRatioMc->DrawCopy("SAME P");

    cRatio->SaveAs("debugfitsmc/particle_ratios.gif");
  }

  if(outFileName) {

    CreateDir("fit_yields_results");
    TFile* fileOut = new TFile(Form("fit_yields_results/%s", outFileName), "RECREATE");

    // Histograms for normalization
    data->GetHistVtxStatus()->Write();
    TH1D* hPhiCutEff = data->GetHistNclVsPhiVsPtAfter()->ProjectionX("hPhiCutEff");
    TH1D* hHelp = data->GetHistNclVsPhiVsPtBefore()->ProjectionX("hHelp");
    hPhiCutEff->Divide(hPhiCutEff, hHelp, 1.0, 1.0, "B");
    hPhiCutEff->Write();
    delete hHelp;
    delete hPhiCutEff;

    hPionRatio->Write();
    hKaonRatio->Write();
    hProtonRatio->Write();
    hElectronRatio->Write();

    hPionYield->Write();
    hKaonYield->Write();
    hProtonYield->Write();
    hElectronYield->Write();

    fElectronFraction->Write();

    if(data->IsMc()) {
      hPionRatioMc->Write();
      hKaonRatioMc->Write();
      hProtonRatioMc->Write();

      hPionYieldMc->Write();
      hKaonYieldMc->Write();
      hProtonYieldMc->Write();			       
    }

    fileOut->Close();
  }
}

//____________________________________________________________________________
void FitYieldsV0(const Char_t* dataFileName,
		 const Char_t* v0FileName,
		 const Char_t* v0Name,
		 Double_t ptStart, Double_t ptStop,
		 Int_t charge = 0,
		 Bool_t performFit = kTRUE,
		 Int_t filter = 1,
		 Int_t run    = 0,
		 Bool_t usePhiCut = kTRUE,
		 const Char_t* endName=0)
{
  gStyle->SetOptStat(0);
  
  TFile* dataFile = FindFileFresh(dataFileName);
  if(!dataFile)
    return;
  AliHighPtDeDxData* data = (AliHighPtDeDxData*)GetObject(dataFile, filter, usePhiCut, run, "filter", endName);
  data->Print();

  TFile* v0File = FindFileFresh(v0FileName);
  if(!v0File)
    return;
  AliHighPtDeDxData* v0 = (AliHighPtDeDxData*)GetObject(v0File, 0, usePhiCut, run, v0Name, endName);
  v0->Print();

  TH2D* hDeltaPiVsPt = v0->GetHistDeltaPiVsPt(0, charge);
  hDeDxVsP = hDeltaPiVsPt; // for the 2d fit to pick up the right bin

  TH2D* hDeltaPiVsPtPiGen = data->GetHistDeltaPiVsPt(1, charge);
  TH2D* hDeltaPiVsPtKGen  = data->GetHistDeltaPiVsPt(2, charge);
  TH2D* hDeltaPiVsPtPGen  = data->GetHistDeltaPiVsPt(3, charge);

  TProfile* hPiGenProfile = hDeltaPiVsPtPiGen->ProfileX();
  hPiGenProfile->SetMarkerStyle(29);
  TProfile* hKGenProfile = hDeltaPiVsPtKGen->ProfileX();
  hKGenProfile->SetMarkerStyle(29);
  TProfile* hPGenProfile = hDeltaPiVsPtPGen->ProfileX();
  hPGenProfile->SetMarkerStyle(29);

  TCanvas* cDeltaPiVsPt = new TCanvas("cDeltaPiVsPt", "dE/dx vs p", 400, 300);
  cDeltaPiVsPt->Clear();
  cDeltaPiVsPt->cd();
  cDeltaPiVsPt->SetLogz();
  hDeltaPiVsPt->Draw("COLZ");
  hPiGenProfile->Draw("SAME P");
  hKGenProfile->Draw("SAME P");
  hPGenProfile->Draw("SAME P");

  TCanvas* cDeltaPiVsPtLogX = new TCanvas("cDeltaPiVsPtLogX", "dE/dx vs p", 400, 300);
  cDeltaPiVsPtLogX->Clear();
  cDeltaPiVsPtLogX->cd();
  cDeltaPiVsPtLogX->SetLogz();
  cDeltaPiVsPtLogX->SetLogx();
  hDeltaPiVsPt->Draw("COLZ");
  hPiGenProfile->Draw("SAME P");
  hKGenProfile->Draw("SAME P");
  hPGenProfile->Draw("SAME P");

  // Root is a bit stupid with finidng bins so we have to add and subtract a
  // little to be sure we get the right bin as we typically put edges as
  // limits
  const Int_t binStart = hDeltaPiVsPt->GetXaxis()->FindBin(ptStart+0.01);
  ptStart = hDeltaPiVsPt->GetXaxis()->GetBinLowEdge(binStart);
  const Int_t binStop  = hDeltaPiVsPt->GetXaxis()->FindBin(ptStop-0.01);
  ptStop = hDeltaPiVsPt->GetXaxis()->GetBinUpEdge(binStop);
  //  const Int_t nBins    = binStop - binStart + 1;

  cout << "Doing fits from pTlow = " << ptStart << " (bin: " << binStart
       << ") to pThigh = " << ptStop << " (bin: " << binStop << ")" << endl;
  

  //cross check
  TCanvas* cFits = new TCanvas("cFits", "Fit comparison to data", 1200, 800);
  cFits->Clear();
  cFits->Divide(7, 4);

  TF1* pion = new TF1("pion", "[0]/sqrt(6.2832*[2]*[2])*exp(-(x-[1])*(x-[1])/2.0/[2]/[2])", -30, 20);
    //  TF1* pion = new TF1("pion", "gausn", -30, 20);
  pion->SetLineWidth(2);
  pion->SetLineColor(kRed);
  // TF1* kaon = new TF1("kaon", "gausn", -30, 20);
  // kaon->SetLineWidth(2);
  // kaon->SetLineColor(kGreen);
  TF1* proton = new TF1("proton", "[0]/sqrt(6.2832*[2]*[2])*exp(-(x-[1])*(x-[1])/2.0/[2]/[2])", -30, 20);
  //  TF1* proton = new TF1("proton", "gausn", -30, 20);
  proton->SetLineWidth(2);
  proton->SetLineColor(kBlue);

  TLegend* legend = new TLegend(0.11, 0.6, 0.35, 0.85);    
  legend->SetBorderSize(0);
  legend->SetFillColor(0);
  legend->AddEntry(pion, "#pi", "L");
  //  legend->AddEntry(kaon, "K", "L");
  legend->AddEntry(proton, "p", "L");

  if(strstr(v0Name, "lambda")) {
    gSystem->Exec("mv debugfitslambda/* olddebugfitslambda/");
  } else {
    gSystem->Exec("mv debugfitskaon/* olddebugfitskaon/");
  }
  TCanvas* cSingleFit = new TCanvas("cSingleFit", "single fit");

  for(Int_t bin = binStart; bin <= binStop; bin++){
    
    cout << "Making projection for bin: " << bin << endl;
    
    const Int_t j = bin-binStart;
    
    TH1D* hDeltaPiVsPtProj =(TH1D*)hDeltaPiVsPt->ProjectionY(Form("hDeltaPiVsPtProj%d", bin), bin, bin);
    //    hDeltaPiVsPtProj->GetXaxis()->SetRangeUser(40, 85);
    hDeltaPiVsPtProj->SetTitle(Form("%.1f<p_{T}<%.1f GeV/c", 
  				hDeltaPiVsPt->GetXaxis()->GetBinLowEdge(bin),
  				hDeltaPiVsPt->GetXaxis()->GetBinUpEdge(bin)));

    Double_t all =  hDeltaPiVsPtProj->GetEntries();

    TH1D* hDeltaPiVsPtPiGenProj =(TH1D*)hDeltaPiVsPtPiGen->ProjectionY(Form("hDeltaPiVsPtPiGenProj%d", bin), bin, bin);
    //    TH1D* hDeltaPiVsPtKGenProj =(TH1D*)hDeltaPiVsPtKGen->ProjectionY(Form("hDeltaPiVsPtKGenProj%d", bin), bin, bin);
    TH1D* hDeltaPiVsPtPGenProj =(TH1D*)hDeltaPiVsPtPGen->ProjectionY(Form("hDeltaPiVsPtPGenProj%d", bin), bin, bin);
    
    cFits->cd();
    cFits->cd(j + 1);

    hDeltaPiVsPtProj->Draw();

    if(strstr(v0Name, "lambda")) {
    
      Double_t mean  = hDeltaPiVsPtPGenProj->GetMean();
      Double_t sigma = hDeltaPiVsPtPGenProj->GetRMS();

      cout << "Bin: " << bin 
	   <<   " (" << hDeltaPiVsPtProj->GetTitle()				
	   << "), sigma: " << sigma << endl;
      proton->SetParameters(all, mean, sigma);
      proton->FixParameter(1, mean);
      proton->FixParameter(2, sigma);

      if(performFit) {
	
      	hDeltaPiVsPtProj->Fit(proton, "L0", "", mean-sigma, mean+sigma);
	
      	cout << "Bin: " << bin 
      	     <<   " (" << hDeltaPiVsPtProj->GetTitle()				
      	     << "), sigma: " << proton->GetParameter(2) << endl;
      } 

      proton->DrawCopy("same");

      cSingleFit->cd();
      cSingleFit->Clear();
      hDeltaPiVsPtProj->Draw();
      proton->DrawCopy("same");
    } else {

      Double_t mean  = hDeltaPiVsPtPiGenProj->GetMean();
      Double_t sigma = hDeltaPiVsPtPiGenProj->GetRMS();
      cout << "Bin: " << bin 
	   <<   " (" << hDeltaPiVsPtProj->GetTitle()				
	   << "), sigma: " << sigma << endl;
      pion->SetParameters(all, mean, sigma);
      pion->FixParameter(1, mean);
      pion->FixParameter(2, sigma);
      
      if(performFit) {
	
      	hDeltaPiVsPtProj->Fit(pion, "L0", "", mean-sigma, mean+sigma);

      	cout << "Bin: " << bin 
      	     <<   " (" << hDeltaPiVsPtProj->GetTitle()				
      	     << "), sigma: " << pion->GetParameter(2) << endl;	
      } 
      pion->DrawCopy("same");

      cSingleFit->cd();
      cSingleFit->Clear();
      hDeltaPiVsPtProj->Draw();
      pion->DrawCopy("same");
    }
    
    //    cSingleFit->SetLogy();
    
    gROOT->ProcessLine(".x drawText.C");

    if(strstr(v0Name, "lambda")) {

      if(!endName) {
	CreateDir("results/lambda");
	cSingleFit->SaveAs(Form("results/lambda/ptspectrum_bin%d.gif", bin));
	cSingleFit->SaveAs(Form("results/lambda/ptspectrum_bin%d.pdf", bin));
      } else {
	CreateDir(Form("results%s/lambda", endName));
	cSingleFit->SaveAs(Form("results/lambda%s/ptspectrum_bin%d.gif", endName, bin));
	cSingleFit->SaveAs(Form("results/lambda%s/ptspectrum_bin%d.pdf", endName, bin));
      }
    } else {
      if(!endName) {
	CreateDir("results/kaon");
	cSingleFit->SaveAs(Form("results/kaon/ptspectrum_bin%d.gif", bin));
	cSingleFit->SaveAs(Form("results/kaon/ptspectrum_bin%d.pdf", bin));
      }else {
	CreateDir(Form("results%s/kaons", endName));
	cSingleFit->SaveAs(Form("results/kaon%s/ptspectrum_bin%d.gif", endName, bin));
	cSingleFit->SaveAs(Form("results/kaon%s/ptspectrum_bin%d.pdf", endName, bin));
      }
    }
    //    legend->Draw();
  }

}

//____________________________________________________________________________
void CompareYields(const Char_t* dataFileName1,
		   const Char_t* dataFileName2,
		   Double_t ptStart, Double_t ptStop,
		   Int_t charge1,
		   Int_t charge2,
		   const Char_t* endName1=0,
		   const Char_t* endName2=0,
		   Bool_t performFit = kFALSE,
		   Int_t run    = 0,
		   Int_t filter = 1,
		   Bool_t usePhiCut = kTRUE)
{
  gStyle->SetOptStat(0);

  
  TFile* dataFile1 = FindFileFresh(dataFileName1);
  if(!dataFile1)
    return;
  AliHighPtDeDxData* data1 = (AliHighPtDeDxData*)GetObject(dataFile1, filter, usePhiCut, run, "filter", endName1);
  data1->Print();

  gSystem->Exec("mv debugfits/* olddebugfits/");
  gSystem->Exec("mv debugfitsratio/* olddebugfitsratio/");
  // if(data1->IsMc())
  //   gSystem->Exec("mv debugfitsmc/* olddebugfitsmc/");


  TH2D* hDeltaPiVsPt1 = data1->GetHistDeltaPiVsPt(0, charge1);
  hDeDxVsP = hDeltaPiVsPt1; // for the 2d fit to pick up the right bin

  TH2D* hDeltaPiVsPtPiGen1 = data1->GetHistDeltaPiVsPt(1, charge1);
  TH2D* hDeltaPiVsPtKGen1  = data1->GetHistDeltaPiVsPt(2, charge1);
  TH2D* hDeltaPiVsPtPGen1  = data1->GetHistDeltaPiVsPt(3, charge1);

  // TH2D* hDeltaPiVsPtPi1 = 0;
  // TH2D* hDeltaPiVsPtK1  = 0;
  // TH2D* hDeltaPiVsPtP1  = 0;

  // if(data1->IsMc()) {

  //   hDeltaPiVsPtPi1 = data1->GetHistDeltaPiVsPtPiMc();
  //   hDeltaPiVsPtK1  = data1->GetHistDeltaPiVsPtKMc();
  //   hDeltaPiVsPtP1  = data1->GetHistDeltaPiVsPtPMc();
  // }

  AliHighPtDeDxData* data2 = data1;
  if(dataFileName2) {
    TFile* dataFile2 = FindFileFresh(dataFileName2);
    if(!dataFile2)
      return;
    data2 = (AliHighPtDeDxData*)GetObject(dataFile2, filter, usePhiCut, run, "filter", endName2);
    data2->Print();
  } else if (endName2) {

    data2 = (AliHighPtDeDxData*)GetObject(dataFile1, filter, usePhiCut, run, "filter", endName2);
  }

  TH2D* hDeltaPiVsPt2 = data2->GetHistDeltaPiVsPt(0, charge2);
  hDeDxVsP = hDeltaPiVsPt2; // for the 2d fit to pick up the right bin

  // TH2D* hDeltaPiVsPtPiGen2 = data2->GetHistDeltaPiVsPt(1, charge2);
  // TH2D* hDeltaPiVsPtKGen2  = data2->GetHistDeltaPiVsPt(2, charge2);
  // TH2D* hDeltaPiVsPtPGen2  = data2->GetHistDeltaPiVsPt(3, charge2);

  // TH2D* hDeltaPiVsPtPi2 = 0;
  // TH2D* hDeltaPiVsPtK2  = 0;
  // TH2D* hDeltaPiVsPtP2  = 0;

  // if(data2->IsMc()) {

  //   hDeltaPiVsPtPi2 = data2->GetHistDeltaPiVsPtPiMc();
  //   hDeltaPiVsPtK2  = data2->GetHistDeltaPiVsPtKMc();
  //   hDeltaPiVsPtP2  = data2->GetHistDeltaPiVsPtPMc();
  // }


  // Root is a bit stupid with finidng bins so we have to add and subtract a
  // little to be sure we get the right bin as we typically put edges as
  // limits
  const Int_t binStart = hDeltaPiVsPt1->GetXaxis()->FindBin(ptStart+0.01);
  ptStart = hDeltaPiVsPt1->GetXaxis()->GetBinLowEdge(binStart);
  const Int_t binStop  = hDeltaPiVsPt1->GetXaxis()->FindBin(ptStop-0.01);
  ptStop = hDeltaPiVsPt1->GetXaxis()->GetBinUpEdge(binStop);
  //  const Int_t nBins    = binStop - binStart + 1;

  cout << "Doing fits from pTlow = " << ptStart << " (bin: " << binStart
       << ") to pThigh = " << ptStop << " (bin: " << binStop << ")" << endl;
  

  //cross check
  TCanvas* cFits = new TCanvas("cFits", "Fit comparison to data", 1200, 800);
  cFits->Clear();
  cFits->Divide(7, 4);

  TF1* pion = new TF1("pion", "gausn", -30, 20);
  pion->SetLineWidth(2);
  pion->SetLineColor(kRed);
  TF1* kaon = new TF1("kaon", "gausn", -30, 20);
  kaon->SetLineWidth(2);
  kaon->SetLineColor(kGreen);
  TF1* proton = new TF1("proton", "gausn", -30, 20);
  proton->SetLineWidth(2);
  proton->SetLineColor(kBlue);
  TF1* total = new TF1("total", "gausn(0)+gausn(3)+gausn(6)", -30, 20);
  total->SetLineColor(kBlack);
  total->SetLineWidth(2);
  total->SetLineStyle(2);

  TLegend* legend = new TLegend(0.11, 0.6, 0.35, 0.85);    
  legend->SetBorderSize(0);
  legend->SetFillColor(0);
  legend->AddEntry(total, "3-Gauss fit", "L");
  legend->AddEntry(pion, "#pi", "L");
  legend->AddEntry(kaon, "K", "L");
  legend->AddEntry(proton, "p", "L");

  TCanvas* cSingleFit = new TCanvas("cSingleFit", "single fit");

  for(Int_t bin = binStart; bin <= binStop; bin++){
    
    cout << "Making projection for bin: " << bin << endl;
    
    const Int_t j = bin-binStart;
    
    TH1D* hDeltaPiVsPtProj1 =(TH1D*)hDeltaPiVsPt1->ProjectionY(Form("hDeltaPiVsPtProj1%d", bin), bin, bin);
    hDeltaPiVsPtProj1->GetXaxis()->SetRangeUser(-25, 20);
    hDeltaPiVsPtProj1->SetTitle(Form("%.1f<p_{T}<%.1f GeV/c", 
  				hDeltaPiVsPt1->GetXaxis()->GetBinLowEdge(bin),
  				hDeltaPiVsPt1->GetXaxis()->GetBinUpEdge(bin)));

    TH1D* hDeltaPiVsPtProj2 =(TH1D*)hDeltaPiVsPt2->ProjectionY(Form("hDeltaPiVsPtProj2%d", bin), bin, bin);

    Double_t all1 =  hDeltaPiVsPtProj1->GetEntries();

    TH1D* hDeltaPiVsPtPiGenProj1 =(TH1D*)hDeltaPiVsPtPiGen1->ProjectionY(Form("hDeltaPiVsPtPiGenProj1%d", bin), bin, bin);
    TH1D* hDeltaPiVsPtKGenProj1 =(TH1D*)hDeltaPiVsPtKGen1->ProjectionY(Form("hDeltaPiVsPtKGenProj1%d", bin), bin, bin);
    TH1D* hDeltaPiVsPtPGenProj1 =(TH1D*)hDeltaPiVsPtPGen1->ProjectionY(Form("hDeltaPiVsPtPGenProj1%d", bin), bin, bin);
    
    Double_t gausParams[9] = { 
      0.6*all1,
      hDeltaPiVsPtPiGenProj1->GetMean(), 
      hDeltaPiVsPtPiGenProj1->GetRMS(), 
      0.2*all1,
      hDeltaPiVsPtKGenProj1->GetMean(), 
      hDeltaPiVsPtKGenProj1->GetRMS(), 
      0.2*all1,
      hDeltaPiVsPtPGenProj1->GetMean(), 
      hDeltaPiVsPtPGenProj1->GetRMS(), 
    };

    cFits->cd();
    cFits->cd(j + 1);

    total->SetParameters(gausParams);
    for(Int_t i = 0; i < 9; i++) {

      if((i%3) > 0)
	total->FixParameter(i, gausParams[i]);
    }
    
    if(performFit) {

      hDeltaPiVsPtProj1->Fit(total, "0L");

    } 

    hDeltaPiVsPtProj1->SetLineColor(4);
    hDeltaPiVsPtProj2->SetLineColor(2);
    hDeltaPiVsPtProj1->DrawCopy();
    hDeltaPiVsPtProj2->DrawCopy("SAME");
    if(performFit)
      total->DrawCopy("same");    
    
    Double_t parametersOut[9];
    total->GetParameters(parametersOut);
    //    const Double_t* parameterErrorsOut = total->GetParErrors();

    for(Int_t i = 0; i < 9; i++) 
      cout << parametersOut[i] << ", ";
    cout << endl;


    if(performFit) {
      pion->SetParameters(&parametersOut[0]);
      pion->DrawCopy("same");
      
      kaon->SetParameters(&parametersOut[3]);
      kaon->DrawCopy("same");
      
      proton->SetParameters(&parametersOut[6]);
      proton->DrawCopy("same");
    }

    cSingleFit->cd();
    cSingleFit->Clear();
    //    cSingleFit->SetLogy();
    hDeltaPiVsPtProj1->DrawCopy();
    hDeltaPiVsPtProj2->DrawCopy("SAME");
    if(performFit) {
      pion->DrawCopy("same");
      kaon->DrawCopy("same");
      proton->DrawCopy("same");
      total->DrawCopy("same");
    }

    cSingleFit->SaveAs(Form("debugfits/ptspectrum_bin%d.gif", bin));

    cSingleFit->cd();
    cSingleFit->Clear();
    //    cSingleFit->SetLogy();
    hDeltaPiVsPtProj1->Divide(hDeltaPiVsPtProj2);
    hDeltaPiVsPtProj1->GetYaxis()->SetRangeUser(0.8, 1.2);
    hDeltaPiVsPtProj1->DrawCopy();

    cSingleFit->SaveAs(Form("debugfitsratio/ptspectrum_bin%d.gif", bin));
    //    legend->Draw();

    // if(data->IsMc()) {

    //   cSingleFit->cd();
    //   cSingleFit->Clear();
    //   TH1D* hDeltaPiVsPtPiProj =(TH1D*)hDeltaPiVsPtPi->ProjectionY(Form("hDeltaPiVsPtPiProj%d", bin), bin, bin);
    //   hDeltaPiVsPtPiProj->SetMarkerStyle(20);
    //   hDeltaPiVsPtPiProj->SetMarkerColor(2);
    //   hDeltaPiVsPtPiProj->SetTitle(Form("%.1f<p_{T}<%.1f GeV/c", 
    // 					hDeltaPiVsPt->GetXaxis()->GetBinLowEdge(bin),
    // 					hDeltaPiVsPt->GetXaxis()->GetBinUpEdge(bin)));
    //   hDeltaPiVsPtPiProj->Draw("P");
    //   hPionRatioMc->SetBinContent(bin, hDeltaPiVsPtPiProj->Integral()/all);
    //   hPionYieldMc->SetBinContent(bin, hDeltaPiVsPtPiProj->Integral());
    //   TH1D* hDeltaPiVsPtKProj =(TH1D*)hDeltaPiVsPtK->ProjectionY(Form("hDeltaPiVsPtKProj%d", bin), bin, bin);
    //   hDeltaPiVsPtKProj->SetMarkerStyle(21);
    //   hDeltaPiVsPtKProj->SetMarkerColor(3);
    //   hDeltaPiVsPtKProj->Draw("SAME P");
    //   hKaonRatioMc->SetBinContent(bin, hDeltaPiVsPtKProj->Integral()/all);
    //   hKaonYieldMc->SetBinContent(bin, hDeltaPiVsPtKProj->Integral());
    //   TH1D* hDeltaPiVsPtPProj =(TH1D*)hDeltaPiVsPtP->ProjectionY(Form("hDeltaPiVsPtPProj%d", bin), bin, bin);
    //   hDeltaPiVsPtPProj->SetMarkerStyle(22);
    //   hDeltaPiVsPtPProj->SetMarkerColor(4);
    //   hDeltaPiVsPtPProj->Draw("SAME P");
    //   hProtonRatioMc->SetBinContent(bin, hDeltaPiVsPtPProj->Integral()/all);
    //   hProtonYieldMc->SetBinContent(bin, hDeltaPiVsPtPProj->Integral());

    //   pion->DrawCopy("same");
    //   kaon->DrawCopy("same");
    //   proton->DrawCopy("same");
    //   cSingleFit->SaveAs(Form("debugfitsmc/ptspectrum_bin%d.gif", bin));
    // }
  }
}

//___________________________________________________________________________________________
void MakeRatios(const Char_t* file1Name, const Char_t* file2Name, 
		Bool_t drawFractionRatios,
		Bool_t drawYieldRatios)
{
  /*
    For yields we assume that file 1 is negative charge and file
    2 is positive charge.
   */
  
  TFile* file1 = FindFileFresh(file1Name);
  if(!file1)
    return;
  
  TH1D* hPionRatio1   = (TH1D*)file1->Get("hPionRatio");
  TH1D* hKaonRatio1   = (TH1D*)file1->Get("hKaonRatio");
  TH1D* hProtonRatio1 = (TH1D*)file1->Get("hProtonRatio");

  TH1D* hPionYield1   = (TH1D*)file1->Get("hPionYield");
  TH1D* hKaonYield1   = (TH1D*)file1->Get("hKaonYield");
  TH1D* hProtonYield1 = (TH1D*)file1->Get("hProtonYield");

  TH1D* hPionRatioMc1   = (TH1D*)file1->Get("hPionRatioMc");
  TH1D* hKaonRatioMc1   = (TH1D*)file1->Get("hKaonRatioMc");
  TH1D* hProtonRatioMc1 = (TH1D*)file1->Get("hProtonRatioMc");

  TH1D* hPionYieldMc1   = (TH1D*)file1->Get("hPionYieldMc");
  TH1D* hKaonYieldMc1   = (TH1D*)file1->Get("hKaonYieldMc");
  TH1D* hProtonYieldMc1 = (TH1D*)file1->Get("hProtonYieldMc");

  TFile* file2 = FindFileFresh(file2Name);
  if(!file2)
    return;
  
  TH1D* hPionRatio2   = (TH1D*)file2->Get("hPionRatio");
  TH1D* hKaonRatio2   = (TH1D*)file2->Get("hKaonRatio");
  TH1D* hProtonRatio2 = (TH1D*)file2->Get("hProtonRatio");

  TH1D* hPionYield2   = (TH1D*)file2->Get("hPionYield");
  TH1D* hKaonYield2   = (TH1D*)file2->Get("hKaonYield");
  TH1D* hProtonYield2 = (TH1D*)file2->Get("hProtonYield");

  TH1D* hPionRatioMc2   = (TH1D*)file2->Get("hPionRatioMc");
  TH1D* hKaonRatioMc2   = (TH1D*)file2->Get("hKaonRatioMc");
  TH1D* hProtonRatioMc2 = (TH1D*)file2->Get("hProtonRatioMc");

  TH1D* hPionYieldMc2   = (TH1D*)file2->Get("hPionYieldMc");
  TH1D* hKaonYieldMc2   = (TH1D*)file2->Get("hKaonYieldMc");
  TH1D* hProtonYieldMc2 = (TH1D*)file2->Get("hProtonYieldMc");
  
  hPionRatio1->Divide(hPionRatio2);
  hPionRatio1->GetYaxis()->SetRangeUser(0.8, 1.2);
  hPionRatio1->SetTitle("Xcheck: pion fraction ratios; p_{T} [GeV/c]; pion fraction ratio");

  hKaonRatio1->Divide(hKaonRatio2);
  hKaonRatio1->GetYaxis()->SetRangeUser(0.8, 1.2);
  hKaonRatio1->SetTitle("Xcheck: kaon fraction ratios; p_{T} [GeV/c]; kaon fraction ratio");

  hProtonRatio1->Divide(hProtonRatio2);
  hProtonRatio1->GetYaxis()->SetRangeUser(0.8, 1.2);
  hProtonRatio1->SetTitle("Xcheck: proton fraction ratios; p_{T} [GeV/c]; proton fraction ratio");

  hPionYield1->Divide(hPionYield2);
  hPionYield1->GetYaxis()->SetRangeUser(0.8, 1.2);
  hPionYield1->SetTitle("#pi^{-}/#pi^{+} vs p_{T}; p_{T} [GeV/c]; #pi^{-}/#pi^{+}");

  hKaonYield1->Divide(hKaonYield2);
  hKaonYield1->GetYaxis()->SetRangeUser(0.8, 1.2);
  hKaonYield1->SetTitle("K^{-}/K^{+} vs p_{T}; p_{T} [GeV/c]; K^{-}/K^{+}");

  hProtonYield1->Divide(hProtonYield2);
  hProtonYield1->GetYaxis()->SetRangeUser(0.8, 1.2);
  hProtonYield1->SetTitle("#bar{p}/p vs p_{T}; p_{T} [GeV/c]; #bar{p}/p");

  if(hPionRatioMc1) {
    hPionRatioMc1->Divide(hPionRatioMc2);
    hPionRatioMc1->GetYaxis()->SetRangeUser(0.8, 1.2);
    hPionRatioMc1->SetTitle("Xcheck: pion fraction ratios (MC TRUTH); p_{T} [GeV/c]; pion fraction ratio");
    
    hKaonRatioMc1->Divide(hKaonRatioMc2);
    hKaonRatioMc1->GetYaxis()->SetRangeUser(0.8, 1.2);
    hKaonRatioMc1->SetTitle("Xcheck: kaon fraction ratios (MC TRUTH); p_{T} [GeV/c]; kaon fraction ratio");
    
    hProtonRatioMc1->Divide(hProtonRatioMc2);
    hProtonRatioMc1->GetYaxis()->SetRangeUser(0.8, 1.2);
    hProtonRatioMc1->SetTitle("Xcheck: proton fraction ratios (MC TRUTH); p_{T} [GeV/c]; proton fraction ratio");
    
    hPionYieldMc1->Divide(hPionYieldMc2);
    hPionYieldMc1->GetYaxis()->SetRangeUser(0.8, 1.2);
    hPionYieldMc1->SetTitle("#pi^{-}/#pi^{+} vs p_{T} (MC TRUTH); p_{T} [GeV/c]; #pi^{-}/#pi^{+}");
    
    hKaonYieldMc1->Divide(hKaonYieldMc2);
    hKaonYieldMc1->GetYaxis()->SetRangeUser(0.8, 1.2);
    hKaonYieldMc1->SetTitle("K^{-}/K^{+} vs p_{T} (MC TRUTH); p_{T} [GeV/c]; K^{-}/K^{+}");
    
    hProtonYieldMc1->Divide(hProtonYieldMc2);
    hProtonYieldMc1->GetYaxis()->SetRangeUser(0.8, 1.2);
    hProtonYieldMc1->SetTitle("#bar{p}/p vs p_{T} (MC TRUTH); p_{T} [GeV/c]; #bar{p}/p");
  }

  if(drawFractionRatios) {
    TCanvas* cPionFractionRatio = new TCanvas("cPionFractionRatio", "pion fraction ratio", 400, 300);
    cPionFractionRatio->Clear();
    cPionFractionRatio->SetGridy();
    cPionFractionRatio->cd();
    hPionRatio1->Draw();
    cPionFractionRatio->SaveAs("results/fits_w_e/pion_frac_ratio.gif");

    TCanvas* cKaonFractionRatio = new TCanvas("cKaonFractionRatio", "kaon fraction ratio", 400, 300);
    cKaonFractionRatio->Clear();
    cKaonFractionRatio->SetGridy();
    cKaonFractionRatio->cd();
    hKaonRatio1->Draw();
    cKaonFractionRatio->SaveAs("kaon_frac_ratio.gif");

    TCanvas* cProtonFractionRatio = new TCanvas("cProtonFractionRatio", "proton fraction ratio", 400, 300);
    cProtonFractionRatio->Clear();
    cProtonFractionRatio->SetGridy();
    cProtonFractionRatio->cd();
    hProtonRatio1->Draw();
    cProtonFractionRatio->SaveAs("proton_frac_ratio.gif");

    if(hPionRatioMc1) {
      TCanvas* cPionFractionRatioMc = new TCanvas("cPionFractionRatioMc", "pion fraction ratio", 400, 300);
      cPionFractionRatioMc->Clear();
      cPionFractionRatioMc->SetGridy();
      cPionFractionRatioMc->cd();
      hPionRatioMc1->Draw();
      cPionFractionRatioMc->SaveAs("pion_frac_ratio_mc.gif");
      
      TCanvas* cKaonFractionRatioMc = new TCanvas("cKaonFractionRatioMc", "kaon fraction ratio", 400, 300);
      cKaonFractionRatioMc->Clear();
      cKaonFractionRatioMc->SetGridy();
      cKaonFractionRatioMc->cd();
      hKaonRatioMc1->Draw();
      cKaonFractionRatioMc->SaveAs("kaon_frac_ratio_mc.gif");
      
      TCanvas* cProtonFractionRatioMc = new TCanvas("cProtonFractionRatioMc", "proton fraction ratio", 400, 300);
      cProtonFractionRatioMc->Clear();
      cProtonFractionRatioMc->SetGridy();
      cProtonFractionRatioMc->cd();
      hProtonRatioMc1->Draw();
      cProtonFractionRatioMc->SaveAs("proton_frac_ratio_mc.gif");
    }
  }
  
  if(drawYieldRatios) {
    TCanvas* cPionRatio = new TCanvas("cPionRatio", "pion yields ratio", 400, 300);
    cPionRatio->Clear();
    cPionRatio->cd();
    cPionRatio->SetGridy();
    hPionYield1->Draw();
    cPionRatio->SaveAs("pion_ratio.gif");

    TCanvas* cKaonRatio = new TCanvas("cKaonRatio", "kaon yields ratio", 400, 300);
    cKaonRatio->Clear();
    cKaonRatio->cd();
    cKaonRatio->SetGridy();
    hKaonYield1->Draw();
    cKaonRatio->SaveAs("kaon_ratio.gif");

    TCanvas* cProtonRatio = new TCanvas("cProtonRatio", "proton yields ratio", 400, 300);
    cProtonRatio->Clear();
    cProtonRatio->cd();
    cProtonRatio->SetGridy();
    hProtonYield1->Draw();
    cProtonRatio->SaveAs("proton_ratio.gif");

    if(hPionRatioMc1) {
      
      TCanvas* cPionRatioMc = new TCanvas("cPionRatioMc", "pion yields ratio", 400, 300);
      cPionRatioMc->Clear();
      cPionRatioMc->cd();
      cPionRatioMc->SetGridy();
      hPionYieldMc1->Draw();
      cPionRatioMc->SaveAs("pion_ratio_mc.gif");
      
      TCanvas* cKaonRatioMc = new TCanvas("cKaonRatioMc", "kaon yields ratio", 400, 300);
      cKaonRatioMc->Clear();
      cKaonRatioMc->cd();
      cKaonRatioMc->SetGridy();
      hKaonYieldMc1->Draw();
      cKaonRatioMc->SaveAs("kaon_ratio_mc.gif");
      
      TCanvas* cProtonRatioMc = new TCanvas("cProtonRatioMc", "proton yields ratio", 400, 300);
      cProtonRatioMc->Clear();
      cProtonRatioMc->cd();
      cProtonRatioMc->SetGridy();
      hProtonYieldMc1->Draw();
      cProtonRatioMc->SaveAs("proton_ratio_mc.gif");
    }
  }
}

//___________________________________________________________________________________________
void Compare(const Char_t* file1Name, const Char_t* file2Name, const Char_t* file3Name, 
	     const Char_t* legend2, const Char_t* legend3, const Char_t* outfilename)
{
  /*
    filename1 is the default
   */
  
  TLegend* legend = new TLegend(0.11, 0.68, 0.35, 0.88);    
  legend->SetBorderSize(0);
  legend->SetFillColor(0);

  TFile* file1 = FindFileFresh(file1Name);
  if(!file1)
    return;
  
  TH1D* hPionRatio1   = (TH1D*)file1->Get("hPionRatio");
  hPionRatio1->SetMarkerStyle(29);
  TH1D* hPionRatio1Clone = (TH1D*)hPionRatio1->Clone("hPionsRatio1Clone");
  hPionRatio1Clone->SetMarkerColor(1);
  legend->AddEntry(hPionRatio1Clone, "default", "P");
  TH1D* hKaonRatio1   = (TH1D*)file1->Get("hKaonRatio");
  hKaonRatio1->SetMarkerStyle(29);
  TH1D* hProtonRatio1 = (TH1D*)file1->Get("hProtonRatio");
  hProtonRatio1->SetMarkerStyle(29);

  TFile* file2 = FindFileFresh(file2Name);
  if(!file2)
    return;
  
  TH1D* hPionRatio2   = (TH1D*)file2->Get("hPionRatio");
  hPionRatio2->SetMarkerStyle(20);
  TH1D* hPionRatio2Clone = (TH1D*)hPionRatio2->Clone("hPionsRatio2Clone");
  hPionRatio2Clone->SetMarkerColor(1);
  legend->AddEntry(hPionRatio2Clone, legend2, "P");
  TH1D* hKaonRatio2   = (TH1D*)file2->Get("hKaonRatio");
  hKaonRatio2->SetMarkerStyle(20);
  TH1D* hProtonRatio2 = (TH1D*)file2->Get("hProtonRatio");
  hProtonRatio2->SetMarkerStyle(20);

  TFile* file3 = FindFileFresh(file3Name);
  if(!file3)
    return;
  
  TH1D* hPionRatio3   = (TH1D*)file3->Get("hPionRatio");
  hPionRatio3->SetMarkerStyle(24);
  TH1D* hPionRatio3Clone = (TH1D*)hPionRatio3->Clone("hPionsRatio3Clone");
  hPionRatio3Clone->SetMarkerColor(1);
  legend->AddEntry(hPionRatio3Clone, legend3, "P");
  TH1D* hKaonRatio3   = (TH1D*)file3->Get("hKaonRatio");
  hKaonRatio3->SetMarkerStyle(24);
  TH1D* hProtonRatio3 = (TH1D*)file3->Get("hProtonRatio");
  hProtonRatio3->SetMarkerStyle(24);

  TCanvas* cRatios = new TCanvas("cRatios", "pion fraction ratio", 400, 300);
  cRatios->Clear();
  cRatios->SetGridy();
  cRatios->cd();
  hPionRatio1->Draw("EP");
  hKaonRatio1->Draw("SAME EP");
  hProtonRatio1->Draw("SAME EP");
  hPionRatio2->Draw("HIST SAME P");
  hKaonRatio2->Draw("HIST SAME P");
  hProtonRatio2->Draw("HIST SAME P");
  hPionRatio3->Draw("HIST SAME P");
  hKaonRatio3->Draw("HIST SAME P");
  hProtonRatio3->Draw("HIST SAME P");
  legend->Draw();
  gROOT->ProcessLine(".x drawText.C");
  cRatios->SaveAs(Form("%s.gif", outfilename));
  cRatios->SaveAs(Form("%s.pdf", outfilename));
  
}

//___________________________________________________________________________________________
void Compare(Double_t x, const Char_t* baseName)
{
  /*
    filename1 is the default
   */
  gStyle->SetOptStat(0);

  TCanvas* cRatios = new TCanvas("cRatios", "Ratios", 400, 300);

  const Int_t nEtaBins = 8;
  Double_t etaLimits[nEtaBins+1] = {-0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8};

  TGraphErrors* graphPionFractions = new TGraphErrors(nEtaBins);
  graphPionFractions->SetMarkerStyle(29);
  graphPionFractions->SetMarkerColor(2);

  TGraphErrors* graphKaonFractions = new TGraphErrors(nEtaBins);
  graphKaonFractions->SetMarkerStyle(29);
  graphKaonFractions->SetMarkerColor(3);

  TGraphErrors* graphProtonFractions = new TGraphErrors(nEtaBins);
  graphProtonFractions->SetMarkerStyle(29);
  graphProtonFractions->SetMarkerColor(4);

  TH1F* hHelp = new TH1F("hHelp", "particle fractions vs #eta; #eta; particle fraction",
			 nEtaBins, etaLimits[0], etaLimits[nEtaBins]);
  hHelp->SetMinimum(0.0);
  hHelp->SetMaximum(1.0);
  hHelp->SetDirectory(0);

  for(Int_t i = 0; i < nEtaBins; i++) {

    Double_t etaCenter = (etaLimits[i] + etaLimits[i+1])/2.0;
    Double_t etaWidth  = TMath::Abs(etaCenter - etaLimits[i]);

    Int_t etaLow  = Int_t(TMath::Abs(etaLimits[i]*10.0));
    Int_t etaHigh = Int_t(TMath::Abs(etaLimits[i+1]*10.0));

    cout << etaCenter << ", " << etaWidth << ", " << etaLow << ", " << etaHigh << endl;

    TFile* file = FindFileFresh(Form("fit_yields_results/%s_%d%d.root", 
				     baseName, etaLow, etaHigh));
    if(!file)
      return;
    
    TH1D* hPionRatio   = (TH1D*)file->Get("hPionRatio");

    Int_t bin = hPionRatio->FindBin(x);
    if(i==0)
      hHelp->SetTitle(Form("%s (%.1f<p_{T}<%.1f GeV/c)", 
			   hHelp->GetTitle(),
			   hPionRatio->GetXaxis()->GetBinLowEdge(bin),
			   hPionRatio->GetXaxis()->GetBinUpEdge(bin)));

    
    graphPionFractions->SetPoint(i, etaCenter, hPionRatio->GetBinContent(bin)); 
    graphPionFractions->SetPointError(i, etaWidth, hPionRatio->GetBinError(bin)); 
    
    TH1D* hKaonRatio   = (TH1D*)file->Get("hKaonRatio");
    graphKaonFractions->SetPoint(i, etaCenter, hKaonRatio->GetBinContent(bin)); 
    graphKaonFractions->SetPointError(i, etaWidth, hKaonRatio->GetBinError(bin)); 

    TH1D* hProtonRatio = (TH1D*)file->Get("hProtonRatio");
    graphProtonFractions->SetPoint(i, etaCenter, hProtonRatio->GetBinContent(bin)); 
    graphProtonFractions->SetPointError(i, etaWidth, hProtonRatio->GetBinError(bin));     
  }
  

  cRatios->Clear();
  cRatios->cd();
  hHelp->DrawCopy();
  graphPionFractions->Draw("P");
  graphKaonFractions->Draw("P");
  graphProtonFractions->Draw("P");
  gROOT->ProcessLine(".x drawText.C(2)");
  CreateDir("results/eta_fine");
  cRatios->SaveAs(Form("results/eta_fine/ratios_vs_eta_%d.gif", Int_t(x)));
  cRatios->SaveAs(Form("results/eta_fine/ratios_vs_eta_%d.pdf", Int_t(x)));
  
  delete hHelp;
}
 fit_yields_final.C:1
 fit_yields_final.C:2
 fit_yields_final.C:3
 fit_yields_final.C:4
 fit_yields_final.C:5
 fit_yields_final.C:6
 fit_yields_final.C:7
 fit_yields_final.C:8
 fit_yields_final.C:9
 fit_yields_final.C:10
 fit_yields_final.C:11
 fit_yields_final.C:12
 fit_yields_final.C:13
 fit_yields_final.C:14
 fit_yields_final.C:15
 fit_yields_final.C:16
 fit_yields_final.C:17
 fit_yields_final.C:18
 fit_yields_final.C:19
 fit_yields_final.C:20
 fit_yields_final.C:21
 fit_yields_final.C:22
 fit_yields_final.C:23
 fit_yields_final.C:24
 fit_yields_final.C:25
 fit_yields_final.C:26
 fit_yields_final.C:27
 fit_yields_final.C:28
 fit_yields_final.C:29
 fit_yields_final.C:30
 fit_yields_final.C:31
 fit_yields_final.C:32
 fit_yields_final.C:33
 fit_yields_final.C:34
 fit_yields_final.C:35
 fit_yields_final.C:36
 fit_yields_final.C:37
 fit_yields_final.C:38
 fit_yields_final.C:39
 fit_yields_final.C:40
 fit_yields_final.C:41
 fit_yields_final.C:42
 fit_yields_final.C:43
 fit_yields_final.C:44
 fit_yields_final.C:45
 fit_yields_final.C:46
 fit_yields_final.C:47
 fit_yields_final.C:48
 fit_yields_final.C:49
 fit_yields_final.C:50
 fit_yields_final.C:51
 fit_yields_final.C:52
 fit_yields_final.C:53
 fit_yields_final.C:54
 fit_yields_final.C:55
 fit_yields_final.C:56
 fit_yields_final.C:57
 fit_yields_final.C:58
 fit_yields_final.C:59
 fit_yields_final.C:60
 fit_yields_final.C:61
 fit_yields_final.C:62
 fit_yields_final.C:63
 fit_yields_final.C:64
 fit_yields_final.C:65
 fit_yields_final.C:66
 fit_yields_final.C:67
 fit_yields_final.C:68
 fit_yields_final.C:69
 fit_yields_final.C:70
 fit_yields_final.C:71
 fit_yields_final.C:72
 fit_yields_final.C:73
 fit_yields_final.C:74
 fit_yields_final.C:75
 fit_yields_final.C:76
 fit_yields_final.C:77
 fit_yields_final.C:78
 fit_yields_final.C:79
 fit_yields_final.C:80
 fit_yields_final.C:81
 fit_yields_final.C:82
 fit_yields_final.C:83
 fit_yields_final.C:84
 fit_yields_final.C:85
 fit_yields_final.C:86
 fit_yields_final.C:87
 fit_yields_final.C:88
 fit_yields_final.C:89
 fit_yields_final.C:90
 fit_yields_final.C:91
 fit_yields_final.C:92
 fit_yields_final.C:93
 fit_yields_final.C:94
 fit_yields_final.C:95
 fit_yields_final.C:96
 fit_yields_final.C:97
 fit_yields_final.C:98
 fit_yields_final.C:99
 fit_yields_final.C:100
 fit_yields_final.C:101
 fit_yields_final.C:102
 fit_yields_final.C:103
 fit_yields_final.C:104
 fit_yields_final.C:105
 fit_yields_final.C:106
 fit_yields_final.C:107
 fit_yields_final.C:108
 fit_yields_final.C:109
 fit_yields_final.C:110
 fit_yields_final.C:111
 fit_yields_final.C:112
 fit_yields_final.C:113
 fit_yields_final.C:114
 fit_yields_final.C:115
 fit_yields_final.C:116
 fit_yields_final.C:117
 fit_yields_final.C:118
 fit_yields_final.C:119
 fit_yields_final.C:120
 fit_yields_final.C:121
 fit_yields_final.C:122
 fit_yields_final.C:123
 fit_yields_final.C:124
 fit_yields_final.C:125
 fit_yields_final.C:126
 fit_yields_final.C:127
 fit_yields_final.C:128
 fit_yields_final.C:129
 fit_yields_final.C:130
 fit_yields_final.C:131
 fit_yields_final.C:132
 fit_yields_final.C:133
 fit_yields_final.C:134
 fit_yields_final.C:135
 fit_yields_final.C:136
 fit_yields_final.C:137
 fit_yields_final.C:138
 fit_yields_final.C:139
 fit_yields_final.C:140
 fit_yields_final.C:141
 fit_yields_final.C:142
 fit_yields_final.C:143
 fit_yields_final.C:144
 fit_yields_final.C:145
 fit_yields_final.C:146
 fit_yields_final.C:147
 fit_yields_final.C:148
 fit_yields_final.C:149
 fit_yields_final.C:150
 fit_yields_final.C:151
 fit_yields_final.C:152
 fit_yields_final.C:153
 fit_yields_final.C:154
 fit_yields_final.C:155
 fit_yields_final.C:156
 fit_yields_final.C:157
 fit_yields_final.C:158
 fit_yields_final.C:159
 fit_yields_final.C:160
 fit_yields_final.C:161
 fit_yields_final.C:162
 fit_yields_final.C:163
 fit_yields_final.C:164
 fit_yields_final.C:165
 fit_yields_final.C:166
 fit_yields_final.C:167
 fit_yields_final.C:168
 fit_yields_final.C:169
 fit_yields_final.C:170
 fit_yields_final.C:171
 fit_yields_final.C:172
 fit_yields_final.C:173
 fit_yields_final.C:174
 fit_yields_final.C:175
 fit_yields_final.C:176
 fit_yields_final.C:177
 fit_yields_final.C:178
 fit_yields_final.C:179
 fit_yields_final.C:180
 fit_yields_final.C:181
 fit_yields_final.C:182
 fit_yields_final.C:183
 fit_yields_final.C:184
 fit_yields_final.C:185
 fit_yields_final.C:186
 fit_yields_final.C:187
 fit_yields_final.C:188
 fit_yields_final.C:189
 fit_yields_final.C:190
 fit_yields_final.C:191
 fit_yields_final.C:192
 fit_yields_final.C:193
 fit_yields_final.C:194
 fit_yields_final.C:195
 fit_yields_final.C:196
 fit_yields_final.C:197
 fit_yields_final.C:198
 fit_yields_final.C:199
 fit_yields_final.C:200
 fit_yields_final.C:201
 fit_yields_final.C:202
 fit_yields_final.C:203
 fit_yields_final.C:204
 fit_yields_final.C:205
 fit_yields_final.C:206
 fit_yields_final.C:207
 fit_yields_final.C:208
 fit_yields_final.C:209
 fit_yields_final.C:210
 fit_yields_final.C:211
 fit_yields_final.C:212
 fit_yields_final.C:213
 fit_yields_final.C:214
 fit_yields_final.C:215
 fit_yields_final.C:216
 fit_yields_final.C:217
 fit_yields_final.C:218
 fit_yields_final.C:219
 fit_yields_final.C:220
 fit_yields_final.C:221
 fit_yields_final.C:222
 fit_yields_final.C:223
 fit_yields_final.C:224
 fit_yields_final.C:225
 fit_yields_final.C:226
 fit_yields_final.C:227
 fit_yields_final.C:228
 fit_yields_final.C:229
 fit_yields_final.C:230
 fit_yields_final.C:231
 fit_yields_final.C:232
 fit_yields_final.C:233
 fit_yields_final.C:234
 fit_yields_final.C:235
 fit_yields_final.C:236
 fit_yields_final.C:237
 fit_yields_final.C:238
 fit_yields_final.C:239
 fit_yields_final.C:240
 fit_yields_final.C:241
 fit_yields_final.C:242
 fit_yields_final.C:243
 fit_yields_final.C:244
 fit_yields_final.C:245
 fit_yields_final.C:246
 fit_yields_final.C:247
 fit_yields_final.C:248
 fit_yields_final.C:249
 fit_yields_final.C:250
 fit_yields_final.C:251
 fit_yields_final.C:252
 fit_yields_final.C:253
 fit_yields_final.C:254
 fit_yields_final.C:255
 fit_yields_final.C:256
 fit_yields_final.C:257
 fit_yields_final.C:258
 fit_yields_final.C:259
 fit_yields_final.C:260
 fit_yields_final.C:261
 fit_yields_final.C:262
 fit_yields_final.C:263
 fit_yields_final.C:264
 fit_yields_final.C:265
 fit_yields_final.C:266
 fit_yields_final.C:267
 fit_yields_final.C:268
 fit_yields_final.C:269
 fit_yields_final.C:270
 fit_yields_final.C:271
 fit_yields_final.C:272
 fit_yields_final.C:273
 fit_yields_final.C:274
 fit_yields_final.C:275
 fit_yields_final.C:276
 fit_yields_final.C:277
 fit_yields_final.C:278
 fit_yields_final.C:279
 fit_yields_final.C:280
 fit_yields_final.C:281
 fit_yields_final.C:282
 fit_yields_final.C:283
 fit_yields_final.C:284
 fit_yields_final.C:285
 fit_yields_final.C:286
 fit_yields_final.C:287
 fit_yields_final.C:288
 fit_yields_final.C:289
 fit_yields_final.C:290
 fit_yields_final.C:291
 fit_yields_final.C:292
 fit_yields_final.C:293
 fit_yields_final.C:294
 fit_yields_final.C:295
 fit_yields_final.C:296
 fit_yields_final.C:297
 fit_yields_final.C:298
 fit_yields_final.C:299
 fit_yields_final.C:300
 fit_yields_final.C:301
 fit_yields_final.C:302
 fit_yields_final.C:303
 fit_yields_final.C:304
 fit_yields_final.C:305
 fit_yields_final.C:306
 fit_yields_final.C:307
 fit_yields_final.C:308
 fit_yields_final.C:309
 fit_yields_final.C:310
 fit_yields_final.C:311
 fit_yields_final.C:312
 fit_yields_final.C:313
 fit_yields_final.C:314
 fit_yields_final.C:315
 fit_yields_final.C:316
 fit_yields_final.C:317
 fit_yields_final.C:318
 fit_yields_final.C:319
 fit_yields_final.C:320
 fit_yields_final.C:321
 fit_yields_final.C:322
 fit_yields_final.C:323
 fit_yields_final.C:324
 fit_yields_final.C:325
 fit_yields_final.C:326
 fit_yields_final.C:327
 fit_yields_final.C:328
 fit_yields_final.C:329
 fit_yields_final.C:330
 fit_yields_final.C:331
 fit_yields_final.C:332
 fit_yields_final.C:333
 fit_yields_final.C:334
 fit_yields_final.C:335
 fit_yields_final.C:336
 fit_yields_final.C:337
 fit_yields_final.C:338
 fit_yields_final.C:339
 fit_yields_final.C:340
 fit_yields_final.C:341
 fit_yields_final.C:342
 fit_yields_final.C:343
 fit_yields_final.C:344
 fit_yields_final.C:345
 fit_yields_final.C:346
 fit_yields_final.C:347
 fit_yields_final.C:348
 fit_yields_final.C:349
 fit_yields_final.C:350
 fit_yields_final.C:351
 fit_yields_final.C:352
 fit_yields_final.C:353
 fit_yields_final.C:354
 fit_yields_final.C:355
 fit_yields_final.C:356
 fit_yields_final.C:357
 fit_yields_final.C:358
 fit_yields_final.C:359
 fit_yields_final.C:360
 fit_yields_final.C:361
 fit_yields_final.C:362
 fit_yields_final.C:363
 fit_yields_final.C:364
 fit_yields_final.C:365
 fit_yields_final.C:366
 fit_yields_final.C:367
 fit_yields_final.C:368
 fit_yields_final.C:369
 fit_yields_final.C:370
 fit_yields_final.C:371
 fit_yields_final.C:372
 fit_yields_final.C:373
 fit_yields_final.C:374
 fit_yields_final.C:375
 fit_yields_final.C:376
 fit_yields_final.C:377
 fit_yields_final.C:378
 fit_yields_final.C:379
 fit_yields_final.C:380
 fit_yields_final.C:381
 fit_yields_final.C:382
 fit_yields_final.C:383
 fit_yields_final.C:384
 fit_yields_final.C:385
 fit_yields_final.C:386
 fit_yields_final.C:387
 fit_yields_final.C:388
 fit_yields_final.C:389
 fit_yields_final.C:390
 fit_yields_final.C:391
 fit_yields_final.C:392
 fit_yields_final.C:393
 fit_yields_final.C:394
 fit_yields_final.C:395
 fit_yields_final.C:396
 fit_yields_final.C:397
 fit_yields_final.C:398
 fit_yields_final.C:399
 fit_yields_final.C:400
 fit_yields_final.C:401
 fit_yields_final.C:402
 fit_yields_final.C:403
 fit_yields_final.C:404
 fit_yields_final.C:405
 fit_yields_final.C:406
 fit_yields_final.C:407
 fit_yields_final.C:408
 fit_yields_final.C:409
 fit_yields_final.C:410
 fit_yields_final.C:411
 fit_yields_final.C:412
 fit_yields_final.C:413
 fit_yields_final.C:414
 fit_yields_final.C:415
 fit_yields_final.C:416
 fit_yields_final.C:417
 fit_yields_final.C:418
 fit_yields_final.C:419
 fit_yields_final.C:420
 fit_yields_final.C:421
 fit_yields_final.C:422
 fit_yields_final.C:423
 fit_yields_final.C:424
 fit_yields_final.C:425
 fit_yields_final.C:426
 fit_yields_final.C:427
 fit_yields_final.C:428
 fit_yields_final.C:429
 fit_yields_final.C:430
 fit_yields_final.C:431
 fit_yields_final.C:432
 fit_yields_final.C:433
 fit_yields_final.C:434
 fit_yields_final.C:435
 fit_yields_final.C:436
 fit_yields_final.C:437
 fit_yields_final.C:438
 fit_yields_final.C:439
 fit_yields_final.C:440
 fit_yields_final.C:441
 fit_yields_final.C:442
 fit_yields_final.C:443
 fit_yields_final.C:444
 fit_yields_final.C:445
 fit_yields_final.C:446
 fit_yields_final.C:447
 fit_yields_final.C:448
 fit_yields_final.C:449
 fit_yields_final.C:450
 fit_yields_final.C:451
 fit_yields_final.C:452
 fit_yields_final.C:453
 fit_yields_final.C:454
 fit_yields_final.C:455
 fit_yields_final.C:456
 fit_yields_final.C:457
 fit_yields_final.C:458
 fit_yields_final.C:459
 fit_yields_final.C:460
 fit_yields_final.C:461
 fit_yields_final.C:462
 fit_yields_final.C:463
 fit_yields_final.C:464
 fit_yields_final.C:465
 fit_yields_final.C:466
 fit_yields_final.C:467
 fit_yields_final.C:468
 fit_yields_final.C:469
 fit_yields_final.C:470
 fit_yields_final.C:471
 fit_yields_final.C:472
 fit_yields_final.C:473
 fit_yields_final.C:474
 fit_yields_final.C:475
 fit_yields_final.C:476
 fit_yields_final.C:477
 fit_yields_final.C:478
 fit_yields_final.C:479
 fit_yields_final.C:480
 fit_yields_final.C:481
 fit_yields_final.C:482
 fit_yields_final.C:483
 fit_yields_final.C:484
 fit_yields_final.C:485
 fit_yields_final.C:486
 fit_yields_final.C:487
 fit_yields_final.C:488
 fit_yields_final.C:489
 fit_yields_final.C:490
 fit_yields_final.C:491
 fit_yields_final.C:492
 fit_yields_final.C:493
 fit_yields_final.C:494
 fit_yields_final.C:495
 fit_yields_final.C:496
 fit_yields_final.C:497
 fit_yields_final.C:498
 fit_yields_final.C:499
 fit_yields_final.C:500
 fit_yields_final.C:501
 fit_yields_final.C:502
 fit_yields_final.C:503
 fit_yields_final.C:504
 fit_yields_final.C:505
 fit_yields_final.C:506
 fit_yields_final.C:507
 fit_yields_final.C:508
 fit_yields_final.C:509
 fit_yields_final.C:510
 fit_yields_final.C:511
 fit_yields_final.C:512
 fit_yields_final.C:513
 fit_yields_final.C:514
 fit_yields_final.C:515
 fit_yields_final.C:516
 fit_yields_final.C:517
 fit_yields_final.C:518
 fit_yields_final.C:519
 fit_yields_final.C:520
 fit_yields_final.C:521
 fit_yields_final.C:522
 fit_yields_final.C:523
 fit_yields_final.C:524
 fit_yields_final.C:525
 fit_yields_final.C:526
 fit_yields_final.C:527
 fit_yields_final.C:528
 fit_yields_final.C:529
 fit_yields_final.C:530
 fit_yields_final.C:531
 fit_yields_final.C:532
 fit_yields_final.C:533
 fit_yields_final.C:534
 fit_yields_final.C:535
 fit_yields_final.C:536
 fit_yields_final.C:537
 fit_yields_final.C:538
 fit_yields_final.C:539
 fit_yields_final.C:540
 fit_yields_final.C:541
 fit_yields_final.C:542
 fit_yields_final.C:543
 fit_yields_final.C:544
 fit_yields_final.C:545
 fit_yields_final.C:546
 fit_yields_final.C:547
 fit_yields_final.C:548
 fit_yields_final.C:549
 fit_yields_final.C:550
 fit_yields_final.C:551
 fit_yields_final.C:552
 fit_yields_final.C:553
 fit_yields_final.C:554
 fit_yields_final.C:555
 fit_yields_final.C:556
 fit_yields_final.C:557
 fit_yields_final.C:558
 fit_yields_final.C:559
 fit_yields_final.C:560
 fit_yields_final.C:561
 fit_yields_final.C:562
 fit_yields_final.C:563
 fit_yields_final.C:564
 fit_yields_final.C:565
 fit_yields_final.C:566
 fit_yields_final.C:567
 fit_yields_final.C:568
 fit_yields_final.C:569
 fit_yields_final.C:570
 fit_yields_final.C:571
 fit_yields_final.C:572
 fit_yields_final.C:573
 fit_yields_final.C:574
 fit_yields_final.C:575
 fit_yields_final.C:576
 fit_yields_final.C:577
 fit_yields_final.C:578
 fit_yields_final.C:579
 fit_yields_final.C:580
 fit_yields_final.C:581
 fit_yields_final.C:582
 fit_yields_final.C:583
 fit_yields_final.C:584
 fit_yields_final.C:585
 fit_yields_final.C:586
 fit_yields_final.C:587
 fit_yields_final.C:588
 fit_yields_final.C:589
 fit_yields_final.C:590
 fit_yields_final.C:591
 fit_yields_final.C:592
 fit_yields_final.C:593
 fit_yields_final.C:594
 fit_yields_final.C:595
 fit_yields_final.C:596
 fit_yields_final.C:597
 fit_yields_final.C:598
 fit_yields_final.C:599
 fit_yields_final.C:600
 fit_yields_final.C:601
 fit_yields_final.C:602
 fit_yields_final.C:603
 fit_yields_final.C:604
 fit_yields_final.C:605
 fit_yields_final.C:606
 fit_yields_final.C:607
 fit_yields_final.C:608
 fit_yields_final.C:609
 fit_yields_final.C:610
 fit_yields_final.C:611
 fit_yields_final.C:612
 fit_yields_final.C:613
 fit_yields_final.C:614
 fit_yields_final.C:615
 fit_yields_final.C:616
 fit_yields_final.C:617
 fit_yields_final.C:618
 fit_yields_final.C:619
 fit_yields_final.C:620
 fit_yields_final.C:621
 fit_yields_final.C:622
 fit_yields_final.C:623
 fit_yields_final.C:624
 fit_yields_final.C:625
 fit_yields_final.C:626
 fit_yields_final.C:627
 fit_yields_final.C:628
 fit_yields_final.C:629
 fit_yields_final.C:630
 fit_yields_final.C:631
 fit_yields_final.C:632
 fit_yields_final.C:633
 fit_yields_final.C:634
 fit_yields_final.C:635
 fit_yields_final.C:636
 fit_yields_final.C:637
 fit_yields_final.C:638
 fit_yields_final.C:639
 fit_yields_final.C:640
 fit_yields_final.C:641
 fit_yields_final.C:642
 fit_yields_final.C:643
 fit_yields_final.C:644
 fit_yields_final.C:645
 fit_yields_final.C:646
 fit_yields_final.C:647
 fit_yields_final.C:648
 fit_yields_final.C:649
 fit_yields_final.C:650
 fit_yields_final.C:651
 fit_yields_final.C:652
 fit_yields_final.C:653
 fit_yields_final.C:654
 fit_yields_final.C:655
 fit_yields_final.C:656
 fit_yields_final.C:657
 fit_yields_final.C:658
 fit_yields_final.C:659
 fit_yields_final.C:660
 fit_yields_final.C:661
 fit_yields_final.C:662
 fit_yields_final.C:663
 fit_yields_final.C:664
 fit_yields_final.C:665
 fit_yields_final.C:666
 fit_yields_final.C:667
 fit_yields_final.C:668
 fit_yields_final.C:669
 fit_yields_final.C:670
 fit_yields_final.C:671
 fit_yields_final.C:672
 fit_yields_final.C:673
 fit_yields_final.C:674
 fit_yields_final.C:675
 fit_yields_final.C:676
 fit_yields_final.C:677
 fit_yields_final.C:678
 fit_yields_final.C:679
 fit_yields_final.C:680
 fit_yields_final.C:681
 fit_yields_final.C:682
 fit_yields_final.C:683
 fit_yields_final.C:684
 fit_yields_final.C:685
 fit_yields_final.C:686
 fit_yields_final.C:687
 fit_yields_final.C:688
 fit_yields_final.C:689
 fit_yields_final.C:690
 fit_yields_final.C:691
 fit_yields_final.C:692
 fit_yields_final.C:693
 fit_yields_final.C:694
 fit_yields_final.C:695
 fit_yields_final.C:696
 fit_yields_final.C:697
 fit_yields_final.C:698
 fit_yields_final.C:699
 fit_yields_final.C:700
 fit_yields_final.C:701
 fit_yields_final.C:702
 fit_yields_final.C:703
 fit_yields_final.C:704
 fit_yields_final.C:705
 fit_yields_final.C:706
 fit_yields_final.C:707
 fit_yields_final.C:708
 fit_yields_final.C:709
 fit_yields_final.C:710
 fit_yields_final.C:711
 fit_yields_final.C:712
 fit_yields_final.C:713
 fit_yields_final.C:714
 fit_yields_final.C:715
 fit_yields_final.C:716
 fit_yields_final.C:717
 fit_yields_final.C:718
 fit_yields_final.C:719
 fit_yields_final.C:720
 fit_yields_final.C:721
 fit_yields_final.C:722
 fit_yields_final.C:723
 fit_yields_final.C:724
 fit_yields_final.C:725
 fit_yields_final.C:726
 fit_yields_final.C:727
 fit_yields_final.C:728
 fit_yields_final.C:729
 fit_yields_final.C:730
 fit_yields_final.C:731
 fit_yields_final.C:732
 fit_yields_final.C:733
 fit_yields_final.C:734
 fit_yields_final.C:735
 fit_yields_final.C:736
 fit_yields_final.C:737
 fit_yields_final.C:738
 fit_yields_final.C:739
 fit_yields_final.C:740
 fit_yields_final.C:741
 fit_yields_final.C:742
 fit_yields_final.C:743
 fit_yields_final.C:744
 fit_yields_final.C:745
 fit_yields_final.C:746
 fit_yields_final.C:747
 fit_yields_final.C:748
 fit_yields_final.C:749
 fit_yields_final.C:750
 fit_yields_final.C:751
 fit_yields_final.C:752
 fit_yields_final.C:753
 fit_yields_final.C:754
 fit_yields_final.C:755
 fit_yields_final.C:756
 fit_yields_final.C:757
 fit_yields_final.C:758
 fit_yields_final.C:759
 fit_yields_final.C:760
 fit_yields_final.C:761
 fit_yields_final.C:762
 fit_yields_final.C:763
 fit_yields_final.C:764
 fit_yields_final.C:765
 fit_yields_final.C:766
 fit_yields_final.C:767
 fit_yields_final.C:768
 fit_yields_final.C:769
 fit_yields_final.C:770
 fit_yields_final.C:771
 fit_yields_final.C:772
 fit_yields_final.C:773
 fit_yields_final.C:774
 fit_yields_final.C:775
 fit_yields_final.C:776
 fit_yields_final.C:777
 fit_yields_final.C:778
 fit_yields_final.C:779
 fit_yields_final.C:780
 fit_yields_final.C:781
 fit_yields_final.C:782
 fit_yields_final.C:783
 fit_yields_final.C:784
 fit_yields_final.C:785
 fit_yields_final.C:786
 fit_yields_final.C:787
 fit_yields_final.C:788
 fit_yields_final.C:789
 fit_yields_final.C:790
 fit_yields_final.C:791
 fit_yields_final.C:792
 fit_yields_final.C:793
 fit_yields_final.C:794
 fit_yields_final.C:795
 fit_yields_final.C:796
 fit_yields_final.C:797
 fit_yields_final.C:798
 fit_yields_final.C:799
 fit_yields_final.C:800
 fit_yields_final.C:801
 fit_yields_final.C:802
 fit_yields_final.C:803
 fit_yields_final.C:804
 fit_yields_final.C:805
 fit_yields_final.C:806
 fit_yields_final.C:807
 fit_yields_final.C:808
 fit_yields_final.C:809
 fit_yields_final.C:810
 fit_yields_final.C:811
 fit_yields_final.C:812
 fit_yields_final.C:813
 fit_yields_final.C:814
 fit_yields_final.C:815
 fit_yields_final.C:816
 fit_yields_final.C:817
 fit_yields_final.C:818
 fit_yields_final.C:819
 fit_yields_final.C:820
 fit_yields_final.C:821
 fit_yields_final.C:822
 fit_yields_final.C:823
 fit_yields_final.C:824
 fit_yields_final.C:825
 fit_yields_final.C:826
 fit_yields_final.C:827
 fit_yields_final.C:828
 fit_yields_final.C:829
 fit_yields_final.C:830
 fit_yields_final.C:831
 fit_yields_final.C:832
 fit_yields_final.C:833
 fit_yields_final.C:834
 fit_yields_final.C:835
 fit_yields_final.C:836
 fit_yields_final.C:837
 fit_yields_final.C:838
 fit_yields_final.C:839
 fit_yields_final.C:840
 fit_yields_final.C:841
 fit_yields_final.C:842
 fit_yields_final.C:843
 fit_yields_final.C:844
 fit_yields_final.C:845
 fit_yields_final.C:846
 fit_yields_final.C:847
 fit_yields_final.C:848
 fit_yields_final.C:849
 fit_yields_final.C:850
 fit_yields_final.C:851
 fit_yields_final.C:852
 fit_yields_final.C:853
 fit_yields_final.C:854
 fit_yields_final.C:855
 fit_yields_final.C:856
 fit_yields_final.C:857
 fit_yields_final.C:858
 fit_yields_final.C:859
 fit_yields_final.C:860
 fit_yields_final.C:861
 fit_yields_final.C:862
 fit_yields_final.C:863
 fit_yields_final.C:864
 fit_yields_final.C:865
 fit_yields_final.C:866
 fit_yields_final.C:867
 fit_yields_final.C:868
 fit_yields_final.C:869
 fit_yields_final.C:870
 fit_yields_final.C:871
 fit_yields_final.C:872
 fit_yields_final.C:873
 fit_yields_final.C:874
 fit_yields_final.C:875
 fit_yields_final.C:876
 fit_yields_final.C:877
 fit_yields_final.C:878
 fit_yields_final.C:879
 fit_yields_final.C:880
 fit_yields_final.C:881
 fit_yields_final.C:882
 fit_yields_final.C:883
 fit_yields_final.C:884
 fit_yields_final.C:885
 fit_yields_final.C:886
 fit_yields_final.C:887
 fit_yields_final.C:888
 fit_yields_final.C:889
 fit_yields_final.C:890
 fit_yields_final.C:891
 fit_yields_final.C:892
 fit_yields_final.C:893
 fit_yields_final.C:894
 fit_yields_final.C:895
 fit_yields_final.C:896
 fit_yields_final.C:897
 fit_yields_final.C:898
 fit_yields_final.C:899
 fit_yields_final.C:900
 fit_yields_final.C:901
 fit_yields_final.C:902
 fit_yields_final.C:903
 fit_yields_final.C:904
 fit_yields_final.C:905
 fit_yields_final.C:906
 fit_yields_final.C:907
 fit_yields_final.C:908
 fit_yields_final.C:909
 fit_yields_final.C:910
 fit_yields_final.C:911
 fit_yields_final.C:912
 fit_yields_final.C:913
 fit_yields_final.C:914
 fit_yields_final.C:915
 fit_yields_final.C:916
 fit_yields_final.C:917
 fit_yields_final.C:918
 fit_yields_final.C:919
 fit_yields_final.C:920
 fit_yields_final.C:921
 fit_yields_final.C:922
 fit_yields_final.C:923
 fit_yields_final.C:924
 fit_yields_final.C:925
 fit_yields_final.C:926
 fit_yields_final.C:927
 fit_yields_final.C:928
 fit_yields_final.C:929
 fit_yields_final.C:930
 fit_yields_final.C:931
 fit_yields_final.C:932
 fit_yields_final.C:933
 fit_yields_final.C:934
 fit_yields_final.C:935
 fit_yields_final.C:936
 fit_yields_final.C:937
 fit_yields_final.C:938
 fit_yields_final.C:939
 fit_yields_final.C:940
 fit_yields_final.C:941
 fit_yields_final.C:942
 fit_yields_final.C:943
 fit_yields_final.C:944
 fit_yields_final.C:945
 fit_yields_final.C:946
 fit_yields_final.C:947
 fit_yields_final.C:948
 fit_yields_final.C:949
 fit_yields_final.C:950
 fit_yields_final.C:951
 fit_yields_final.C:952
 fit_yields_final.C:953
 fit_yields_final.C:954
 fit_yields_final.C:955
 fit_yields_final.C:956
 fit_yields_final.C:957
 fit_yields_final.C:958
 fit_yields_final.C:959
 fit_yields_final.C:960
 fit_yields_final.C:961
 fit_yields_final.C:962
 fit_yields_final.C:963
 fit_yields_final.C:964
 fit_yields_final.C:965
 fit_yields_final.C:966
 fit_yields_final.C:967
 fit_yields_final.C:968
 fit_yields_final.C:969
 fit_yields_final.C:970
 fit_yields_final.C:971
 fit_yields_final.C:972
 fit_yields_final.C:973
 fit_yields_final.C:974
 fit_yields_final.C:975
 fit_yields_final.C:976
 fit_yields_final.C:977
 fit_yields_final.C:978
 fit_yields_final.C:979
 fit_yields_final.C:980
 fit_yields_final.C:981
 fit_yields_final.C:982
 fit_yields_final.C:983
 fit_yields_final.C:984
 fit_yields_final.C:985
 fit_yields_final.C:986
 fit_yields_final.C:987
 fit_yields_final.C:988
 fit_yields_final.C:989
 fit_yields_final.C:990
 fit_yields_final.C:991
 fit_yields_final.C:992
 fit_yields_final.C:993
 fit_yields_final.C:994
 fit_yields_final.C:995
 fit_yields_final.C:996
 fit_yields_final.C:997
 fit_yields_final.C:998
 fit_yields_final.C:999
 fit_yields_final.C:1000
 fit_yields_final.C:1001
 fit_yields_final.C:1002
 fit_yields_final.C:1003
 fit_yields_final.C:1004
 fit_yields_final.C:1005
 fit_yields_final.C:1006
 fit_yields_final.C:1007
 fit_yields_final.C:1008
 fit_yields_final.C:1009
 fit_yields_final.C:1010
 fit_yields_final.C:1011
 fit_yields_final.C:1012
 fit_yields_final.C:1013
 fit_yields_final.C:1014
 fit_yields_final.C:1015
 fit_yields_final.C:1016
 fit_yields_final.C:1017
 fit_yields_final.C:1018
 fit_yields_final.C:1019
 fit_yields_final.C:1020
 fit_yields_final.C:1021
 fit_yields_final.C:1022
 fit_yields_final.C:1023
 fit_yields_final.C:1024
 fit_yields_final.C:1025
 fit_yields_final.C:1026
 fit_yields_final.C:1027
 fit_yields_final.C:1028
 fit_yields_final.C:1029
 fit_yields_final.C:1030
 fit_yields_final.C:1031
 fit_yields_final.C:1032
 fit_yields_final.C:1033
 fit_yields_final.C:1034
 fit_yields_final.C:1035
 fit_yields_final.C:1036
 fit_yields_final.C:1037
 fit_yields_final.C:1038
 fit_yields_final.C:1039
 fit_yields_final.C:1040
 fit_yields_final.C:1041
 fit_yields_final.C:1042
 fit_yields_final.C:1043
 fit_yields_final.C:1044
 fit_yields_final.C:1045
 fit_yields_final.C:1046
 fit_yields_final.C:1047
 fit_yields_final.C:1048
 fit_yields_final.C:1049
 fit_yields_final.C:1050
 fit_yields_final.C:1051
 fit_yields_final.C:1052
 fit_yields_final.C:1053
 fit_yields_final.C:1054
 fit_yields_final.C:1055
 fit_yields_final.C:1056
 fit_yields_final.C:1057
 fit_yields_final.C:1058
 fit_yields_final.C:1059
 fit_yields_final.C:1060
 fit_yields_final.C:1061
 fit_yields_final.C:1062
 fit_yields_final.C:1063
 fit_yields_final.C:1064
 fit_yields_final.C:1065
 fit_yields_final.C:1066
 fit_yields_final.C:1067
 fit_yields_final.C:1068
 fit_yields_final.C:1069
 fit_yields_final.C:1070
 fit_yields_final.C:1071
 fit_yields_final.C:1072
 fit_yields_final.C:1073
 fit_yields_final.C:1074
 fit_yields_final.C:1075
 fit_yields_final.C:1076
 fit_yields_final.C:1077
 fit_yields_final.C:1078
 fit_yields_final.C:1079
 fit_yields_final.C:1080
 fit_yields_final.C:1081
 fit_yields_final.C:1082
 fit_yields_final.C:1083
 fit_yields_final.C:1084
 fit_yields_final.C:1085
 fit_yields_final.C:1086
 fit_yields_final.C:1087
 fit_yields_final.C:1088
 fit_yields_final.C:1089
 fit_yields_final.C:1090
 fit_yields_final.C:1091
 fit_yields_final.C:1092
 fit_yields_final.C:1093
 fit_yields_final.C:1094
 fit_yields_final.C:1095
 fit_yields_final.C:1096
 fit_yields_final.C:1097
 fit_yields_final.C:1098
 fit_yields_final.C:1099
 fit_yields_final.C:1100
 fit_yields_final.C:1101
 fit_yields_final.C:1102
 fit_yields_final.C:1103
 fit_yields_final.C:1104
 fit_yields_final.C:1105
 fit_yields_final.C:1106
 fit_yields_final.C:1107
 fit_yields_final.C:1108
 fit_yields_final.C:1109
 fit_yields_final.C:1110
 fit_yields_final.C:1111
 fit_yields_final.C:1112
 fit_yields_final.C:1113
 fit_yields_final.C:1114
 fit_yields_final.C:1115
 fit_yields_final.C:1116
 fit_yields_final.C:1117
 fit_yields_final.C:1118
 fit_yields_final.C:1119
 fit_yields_final.C:1120
 fit_yields_final.C:1121
 fit_yields_final.C:1122
 fit_yields_final.C:1123
 fit_yields_final.C:1124
 fit_yields_final.C:1125
 fit_yields_final.C:1126
 fit_yields_final.C:1127
 fit_yields_final.C:1128
 fit_yields_final.C:1129
 fit_yields_final.C:1130
 fit_yields_final.C:1131
 fit_yields_final.C:1132
 fit_yields_final.C:1133
 fit_yields_final.C:1134
 fit_yields_final.C:1135
 fit_yields_final.C:1136
 fit_yields_final.C:1137
 fit_yields_final.C:1138
 fit_yields_final.C:1139
 fit_yields_final.C:1140
 fit_yields_final.C:1141
 fit_yields_final.C:1142
 fit_yields_final.C:1143
 fit_yields_final.C:1144
 fit_yields_final.C:1145
 fit_yields_final.C:1146
 fit_yields_final.C:1147
 fit_yields_final.C:1148
 fit_yields_final.C:1149
 fit_yields_final.C:1150
 fit_yields_final.C:1151
 fit_yields_final.C:1152
 fit_yields_final.C:1153
 fit_yields_final.C:1154
 fit_yields_final.C:1155
 fit_yields_final.C:1156
 fit_yields_final.C:1157
 fit_yields_final.C:1158
 fit_yields_final.C:1159
 fit_yields_final.C:1160
 fit_yields_final.C:1161
 fit_yields_final.C:1162
 fit_yields_final.C:1163
 fit_yields_final.C:1164
 fit_yields_final.C:1165
 fit_yields_final.C:1166
 fit_yields_final.C:1167
 fit_yields_final.C:1168
 fit_yields_final.C:1169
 fit_yields_final.C:1170
 fit_yields_final.C:1171
 fit_yields_final.C:1172
 fit_yields_final.C:1173
 fit_yields_final.C:1174
 fit_yields_final.C:1175
 fit_yields_final.C:1176
 fit_yields_final.C:1177
 fit_yields_final.C:1178
 fit_yields_final.C:1179
 fit_yields_final.C:1180
 fit_yields_final.C:1181
 fit_yields_final.C:1182
 fit_yields_final.C:1183
 fit_yields_final.C:1184
 fit_yields_final.C:1185
 fit_yields_final.C:1186
 fit_yields_final.C:1187
 fit_yields_final.C:1188
 fit_yields_final.C:1189
 fit_yields_final.C:1190
 fit_yields_final.C:1191
 fit_yields_final.C:1192
 fit_yields_final.C:1193
 fit_yields_final.C:1194
 fit_yields_final.C:1195
 fit_yields_final.C:1196
 fit_yields_final.C:1197
 fit_yields_final.C:1198
 fit_yields_final.C:1199
 fit_yields_final.C:1200
 fit_yields_final.C:1201
 fit_yields_final.C:1202
 fit_yields_final.C:1203
 fit_yields_final.C:1204
 fit_yields_final.C:1205
 fit_yields_final.C:1206
 fit_yields_final.C:1207
 fit_yields_final.C:1208
 fit_yields_final.C:1209
 fit_yields_final.C:1210
 fit_yields_final.C:1211
 fit_yields_final.C:1212
 fit_yields_final.C:1213
 fit_yields_final.C:1214
 fit_yields_final.C:1215
 fit_yields_final.C:1216
 fit_yields_final.C:1217
 fit_yields_final.C:1218
 fit_yields_final.C:1219
 fit_yields_final.C:1220
 fit_yields_final.C:1221
 fit_yields_final.C:1222
 fit_yields_final.C:1223
 fit_yields_final.C:1224
 fit_yields_final.C:1225
 fit_yields_final.C:1226
 fit_yields_final.C:1227
 fit_yields_final.C:1228
 fit_yields_final.C:1229
 fit_yields_final.C:1230
 fit_yields_final.C:1231
 fit_yields_final.C:1232
 fit_yields_final.C:1233
 fit_yields_final.C:1234
 fit_yields_final.C:1235
 fit_yields_final.C:1236
 fit_yields_final.C:1237
 fit_yields_final.C:1238
 fit_yields_final.C:1239
 fit_yields_final.C:1240
 fit_yields_final.C:1241
 fit_yields_final.C:1242
 fit_yields_final.C:1243
 fit_yields_final.C:1244
 fit_yields_final.C:1245
 fit_yields_final.C:1246
 fit_yields_final.C:1247
 fit_yields_final.C:1248
 fit_yields_final.C:1249
 fit_yields_final.C:1250
 fit_yields_final.C:1251
 fit_yields_final.C:1252
 fit_yields_final.C:1253
 fit_yields_final.C:1254
 fit_yields_final.C:1255
 fit_yields_final.C:1256
 fit_yields_final.C:1257
 fit_yields_final.C:1258
 fit_yields_final.C:1259
 fit_yields_final.C:1260
 fit_yields_final.C:1261
 fit_yields_final.C:1262
 fit_yields_final.C:1263
 fit_yields_final.C:1264
 fit_yields_final.C:1265
 fit_yields_final.C:1266
 fit_yields_final.C:1267
 fit_yields_final.C:1268
 fit_yields_final.C:1269
 fit_yields_final.C:1270
 fit_yields_final.C:1271
 fit_yields_final.C:1272
 fit_yields_final.C:1273
 fit_yields_final.C:1274
 fit_yields_final.C:1275
 fit_yields_final.C:1276
 fit_yields_final.C:1277
 fit_yields_final.C:1278
 fit_yields_final.C:1279
 fit_yields_final.C:1280
 fit_yields_final.C:1281
 fit_yields_final.C:1282
 fit_yields_final.C:1283
 fit_yields_final.C:1284
 fit_yields_final.C:1285
 fit_yields_final.C:1286
 fit_yields_final.C:1287
 fit_yields_final.C:1288
 fit_yields_final.C:1289
 fit_yields_final.C:1290
 fit_yields_final.C:1291
 fit_yields_final.C:1292
 fit_yields_final.C:1293
 fit_yields_final.C:1294
 fit_yields_final.C:1295
 fit_yields_final.C:1296
 fit_yields_final.C:1297
 fit_yields_final.C:1298
 fit_yields_final.C:1299
 fit_yields_final.C:1300
 fit_yields_final.C:1301
 fit_yields_final.C:1302
 fit_yields_final.C:1303
 fit_yields_final.C:1304
 fit_yields_final.C:1305
 fit_yields_final.C:1306
 fit_yields_final.C:1307
 fit_yields_final.C:1308
 fit_yields_final.C:1309
 fit_yields_final.C:1310
 fit_yields_final.C:1311
 fit_yields_final.C:1312
 fit_yields_final.C:1313
 fit_yields_final.C:1314
 fit_yields_final.C:1315
 fit_yields_final.C:1316
 fit_yields_final.C:1317
 fit_yields_final.C:1318
 fit_yields_final.C:1319
 fit_yields_final.C:1320
 fit_yields_final.C:1321
 fit_yields_final.C:1322
 fit_yields_final.C:1323
 fit_yields_final.C:1324
 fit_yields_final.C:1325
 fit_yields_final.C:1326
 fit_yields_final.C:1327
 fit_yields_final.C:1328
 fit_yields_final.C:1329
 fit_yields_final.C:1330
 fit_yields_final.C:1331
 fit_yields_final.C:1332
 fit_yields_final.C:1333
 fit_yields_final.C:1334
 fit_yields_final.C:1335
 fit_yields_final.C:1336
 fit_yields_final.C:1337
 fit_yields_final.C:1338
 fit_yields_final.C:1339
 fit_yields_final.C:1340
 fit_yields_final.C:1341
 fit_yields_final.C:1342
 fit_yields_final.C:1343
 fit_yields_final.C:1344
 fit_yields_final.C:1345
 fit_yields_final.C:1346
 fit_yields_final.C:1347
 fit_yields_final.C:1348
 fit_yields_final.C:1349
 fit_yields_final.C:1350
 fit_yields_final.C:1351
 fit_yields_final.C:1352
 fit_yields_final.C:1353
 fit_yields_final.C:1354
 fit_yields_final.C:1355
 fit_yields_final.C:1356
 fit_yields_final.C:1357
 fit_yields_final.C:1358
 fit_yields_final.C:1359
 fit_yields_final.C:1360
 fit_yields_final.C:1361
 fit_yields_final.C:1362
 fit_yields_final.C:1363
 fit_yields_final.C:1364
 fit_yields_final.C:1365
 fit_yields_final.C:1366
 fit_yields_final.C:1367
 fit_yields_final.C:1368
 fit_yields_final.C:1369
 fit_yields_final.C:1370
 fit_yields_final.C:1371
 fit_yields_final.C:1372
 fit_yields_final.C:1373