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 <TString.h>
#include <TSystem.h>
#include <TLatex.h>
#include <TF1.h>
#include <TF2.h>
#include <TFitResultPtr.h>
#include <TFitResult.h>

#include "AliHighPtDeDxCalib.h"

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

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

using namespace std;

/*
  Ideas to improve:
  =================

  Use the real mean p -> Might give some effect
  Effect: Push the <dE/dx> down (let'a see if it is still needed in the fits)

  Use the real <nCl> 
  Effect: Increase sigma for p<15. For p>15 seems to saturate.
  
  To use:

  =======
  root is enough

  gSystem->AddIncludePath("-I$ALICE_ROOT/TPC")
  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 DebugClasses.C+
  .L calibrate_de_dx.C+
  
  // Step 2: test calibrations done in step 1
  DrawStep2("calib_eta/7tev_b.root", kFALSE);
  DrawStep2("calib_eta/7tev_b.root", kTRUE);
  TestResolutionVsDeDx("calib_eta/7tev_b.root");
  TestResolutionVsEta("calib_eta/7tev_b.root", kTRUE);

  // Here we want to see that the data is symmetric in eta and roughly symmetric for high vs low eta
  CompareYields("calib_eta/7tev_b.root", 0, 3.0, 30.0, "eta-80", "eta08")
  CompareYields("calib_eta/7tev_b.root", 0, 3.0, 30.0, "etaabs04", "etaabs48") 

  // Step 3: extract
  FitDeDxVsP("calib_eta/7tev_b.root", 3.0, 30.0, 4, 2, kTRUE)


  // Step 4: inspect the results in results/calibdedx and results/calibplots
  // using e.g. gwenview. Event the fit did not converge it is still ok if it
  // describes the data!



  //
  // Test
  //
  // Step 2: test calibrations done in step 1
  DrawStep2("calib_eta/7tev_b_test.root", kFALSE);
  DrawStep2("calib_eta/7tev_b_test.root", kTRUE);
  TestResolutionVsDeDx("calib_eta/7tev_b_test.root");
  TestResolutionVsEta("calib_eta/7tev_b_test.root", kTRUE);
  // Step 3: extract
  FitDeDxVsP("calib_eta/7tev_b_test.root", 2.0, 10.0, 4, 2, kTRUE)


 */


//____________________________________________________________________________
void FitDeDxVsP(const Char_t* calibFileName,
		Double_t pStart, Double_t pStop,
		Int_t optionDeDx, Int_t optionSigma,
		Bool_t performFit = kFALSE,
		Int_t run    = 0,
		Int_t filter = 1,
		Bool_t usePhiCut = kTRUE,
		const Char_t* v0FileName=0,
		Bool_t fixAllPar=kFALSE)
{
  gStyle->SetOptStat(0);

  TString baseName(gSystem->BaseName(calibFileName));
  baseName.ReplaceAll(".root", "");

  TFile* calibFile = FindFileFresh(calibFileName);
  if(!calibFile)
    return;
  AliHighPtDeDxCalib* calib = (AliHighPtDeDxCalib*)GetObject(calibFile, filter, usePhiCut, run);
  calib->Print();

  fixMIP      = calib->GetHistDeDx(kTRUE, 0)->GetMean();
  fixPlateau  = calib->GetHistDeDx(kFALSE, 0)->GetMean();
  hDeDxVsP = calib->GetHistDeDxVsP(0);
  hMeanP = calib->GetHistMeanP();

  AliHighPtDeDxCalib* lambdaCalib = 0;
  AliHighPtDeDxCalib* kaonCalib   = 0;
  TH2D* hDeDxVsPV0Lambda = 0;
  TH2D* hDeDxVsPV0Kaon   = 0;
  if(v0FileName) {
    TFile* v0File = FindFileFresh(v0FileName);
    if(!v0File)
      return;
    lambdaCalib = (AliHighPtDeDxCalib*)GetObject(v0File, 0, usePhiCut, run, "lambda");
    lambdaCalib->Print();
    hDeDxVsPV0Lambda = lambdaCalib->GetHistDeDxVsP(0);
    kaonCalib   = (AliHighPtDeDxCalib*)GetObject(v0File, 0, usePhiCut, run, "kaon");
    kaonCalib->Print();
    hDeDxVsPV0Kaon = kaonCalib->GetHistDeDxVsP(0);
  }

  CreateDir("old");
  gSystem->Exec("mv results/calibdedx/* old/");
  if(calib->IsMc())
    gSystem->Exec("mv debugmc/* old/");

  if(hDeDxVsPV0Lambda) {
    gSystem->Exec("mv debuglambda/* old/");
    gSystem->Exec("mv debugkaon/* old/");
  }

  TH2D* hDeDxVsPPi = 0;
  TH2D* hDeDxVsPK  = 0;
  TH2D* hDeDxVsPP  = 0;
  TH2D* hDeDxVsPMu = 0;

  if(calib->IsMc()) {

    hDeDxVsPPi = calib->GetHistDeDxVsP(1);
    hDeDxVsPK  = calib->GetHistDeDxVsP(2);
    hDeDxVsPP  = calib->GetHistDeDxVsP(3);
    hDeDxVsPMu = calib->GetHistDeDxVsP(5);
  }

  TCanvas* cDeDxVsP = new TCanvas("cDeDxVsP", "dE/dx vs p", 400, 300);
  cDeDxVsP->Clear();
  cDeDxVsP->cd();
  cDeDxVsP->SetLogz();
  hDeDxVsP->SetTitle(0);
  hDeDxVsP->Draw("COLZ");

  TCanvas* cDeDxVsPLogX = new TCanvas("cDeDxVsPLogX", "dE/dx vs p", 400, 300);
  cDeDxVsPLogX->Clear();
  cDeDxVsPLogX->cd();
  cDeDxVsPLogX->SetLogz();
  cDeDxVsPLogX->SetLogx();
  hDeDxVsP->Draw("COLZ");

  // 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 = hDeDxVsP->GetXaxis()->FindBin(pStart+0.01);
  pStart = hDeDxVsP->GetXaxis()->GetBinLowEdge(binStart);
  const Int_t binStop  = hDeDxVsP->GetXaxis()->FindBin(pStop-0.01);
  pStop = hDeDxVsP->GetXaxis()->GetBinUpEdge(binStop);
  const Int_t nBins    = binStop - binStart + 1;

  cout << "Doing 2d fit from pTlow = " << pStart << " (bin: " << binStart
       << ") to pThigh = " << pStop << " (bin: " << binStop << ")" << endl;
  
  // Double_t binSize = (histdEdxvsP->GetXaxis()->GetXmax() - histdEdxvsP->GetXaxis()->GetXmin())/ histdEdxvsP->GetXaxis()->GetNbins();
  
  Double_t parDeDx[3]  = {0, 0, 0};
  Double_t parSigma[3] = {0, 0, 0};
  
  const Int_t nLocalParams  = 3; // pi, K, p yields
  Int_t nDeDxPar      = 0;
  Int_t nSigmaPar     = 0;

  switch(optionDeDx) {
    
  case 1:
    nDeDxPar = 2;
    parDeDx[0] = 39.7;
    parDeDx[1] =  6.3;
    break;
  case 2:
    nDeDxPar = 1;
    parDeDx[0] =  7.3;
    break;
  case 3:
    nDeDxPar = 2;
    parDeDx[0] =  6.85097;
    parDeDx[1] =  29.5933;
    break;
  // case 4:
  //   nDeDxPar = 3;
  //   parDeDx[0] = 35.5471;
  //   parDeDx[1] =  6.85097;
  //   parDeDx[2] =  29.5933;
  //   break;
  case 4:
    nDeDxPar = 3;
    parDeDx[0] =  35.6694;
    parDeDx[1] =  6.80835;
    parDeDx[2] =  7.6542;
    break;
  default:

    cout << "optionDeDx does not support option: " << optionDeDx << endl;
    return;
    break;
  }

  switch(optionSigma) {
    
  case 1:
    nSigmaPar = 1;
    parSigma[0] = 3.0;
    break;
  case 2:
    nSigmaPar = 1;
    parSigma[0] = 0.0655688;
    break;
  case 3:
    nSigmaPar = 2;
    parSigma[0] = 0.06;
    parSigma[1] = -0.001;
  case 4:
    nSigmaPar = 2;
    parSigma[0] = 0.06;
    parSigma[1] = 1.0;
    break;
  case 5:
    nSigmaPar = 2;
    parSigma[0] = 0.06;
    parSigma[1] = 1.0;
    break;
  default:

    cout << "optionSigma does not support option: " << optionSigma << endl;
    return;
    break;
  }

  const Int_t nGlobalParams = 2  // binStart, binStop, 
    + 2 + nDeDxPar               // optionDeDx, nDeDxPar, dedxpar0 ....
    + 2 + nSigmaPar;             // nSigmaPar, sigmapar0 .....
  
  const Int_t nParams = nBins*nLocalParams + nGlobalParams;
  
  
  TF2* fitAll = new TF2("fitAll", fitf3G, pStart, pStop, 30, 90, nParams);
  Double_t parametersIn[nParams]; 
  
  parametersIn[0] = binStart;
  fitAll->SetParName(0,"binStart");
  fitAll->FixParameter(0, parametersIn[0]);

  parametersIn[1] = binStop;
  fitAll->SetParName(1,"binStop");
  fitAll->FixParameter(1, parametersIn[1]);

  // dE/dx parameters
  parametersIn[2] = nDeDxPar;
  fitAll->SetParName(2,"nDeDxPar");
  fitAll->FixParameter(2, parametersIn[2]);

  parametersIn[3] = optionDeDx;
  fitAll->SetParName(3,"optionDeDx");
  fitAll->FixParameter(3, parametersIn[3]);

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

    parametersIn[4+i] = parDeDx[i];
    fitAll->SetParName(4+i,Form("dEdXpar%d", i));
    // if(optionDeDx == 4 && i <2) {
      
    //   fitAll->FixParameter(4+i, parametersIn[4+i]);
    // }
    if(fixAllPar) {

      fitAll->FixParameter(4+i, parametersIn[4+i]);
    }
  }

  // sigma parameters
  parametersIn[4+nDeDxPar] = nSigmaPar;
  fitAll->SetParName(4+nDeDxPar,"nSigmaPar");
  fitAll->FixParameter(4+nDeDxPar, parametersIn[4+nDeDxPar]);

  parametersIn[5+nDeDxPar] = optionSigma;
  fitAll->SetParName(5+nDeDxPar,"optionSigma");
  fitAll->FixParameter(5+nDeDxPar, parametersIn[5+nDeDxPar]);

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

    parametersIn[6+nDeDxPar+i] = parSigma[i];
    fitAll->SetParName(6+nDeDxPar+i,Form("sigmapar%d", i));
    if(fixAllPar) {

      fitAll->FixParameter(6+nDeDxPar+i, parametersIn[6+nDeDxPar+i]);
    }
  }
  
  // Initial yields

  for(Int_t bin = binStart; bin <= binStop; bin++) {
    
    TH1D* hDeDxVsPProj =(TH1D*)hDeDxVsP->ProjectionY("hDeDxVsPProj", bin, bin);
    
    const Int_t offset = nGlobalParams + (bin - binStart)*nLocalParams;
    const Double_t all = hDeDxVsPProj->Integral();
    parametersIn[offset + 0] = (all)*0.6;
    parametersIn[offset + 1] = (all)*0.3;
    parametersIn[offset + 2] = (all)*0.1;
    
    fitAll->SetParName(offset + 0, Form("piYield%d", bin));
    fitAll->SetParLimits(offset + 0, 0, 10*all);
    fitAll->SetParName(offset + 1, Form("kYield%d", bin));
    fitAll->SetParLimits(offset + 1, 0, 10*all);
    fitAll->SetParName(offset + 2, Form("pYield%d", bin));
    fitAll->SetParLimits(offset + 2, 0, 10*all);
    // fitAll->SetParLimits(offset + 0, 0., histdEdxvsPpy->GetEntries());
    // fitAll->SetParLimits(offset + 1, 0., histdEdxvsPpy->GetEntries());
    // fitAll->SetParLimits(offset + 2, 0., histdEdxvsPpy->GetEntries());    
  }
  
  fitAll->SetParameters(parametersIn);
  fitAll->Print();

  Bool_t converged = kFALSE;

  if(performFit) {
    for(Int_t i = 0; i < 4; i++) {
      TFitResultPtr fitResultPtr =  hDeDxVsP->Fit(fitAll, "0S", "", pStart+0.01, pStop-0.01);
      if(!fitResultPtr->Status()) {
	//      if(!fitResultPtr->Status() && !fitResultPtr->CovMatrixStatus()) {
	
	converged = kTRUE;
	break;
      }
    }
  }
  // else we just draw how the results looks with the input parameters

  Double_t parametersOut[nParams];
  fitAll->GetParameters(parametersOut);
  const Double_t* parameterErrorsOut = fitAll->GetParErrors();

  // overlay the fitfunction
  

  TF1* fDeDxPi = new TF1("fDeDxPi", FitFunc, 0, 50, nDeDxPar+1); // +1 because of option! 
  fDeDxPi->SetParameters(&parametersOut[3]);
  fDeDxPi->SetLineWidth(2);
  cDeDxVsP->cd();
  fDeDxPi->Draw("SAME");
  cDeDxVsPLogX->cd();
  fDeDxPi->Draw("SAME");

  TF1* fDeDxK = new TF1("fDeDxK", FitFunc, 0, 50, nDeDxPar+1); 
  fDeDxK->SetParameters(&parametersOut[3]);
  fDeDxK->SetParameter(0, fDeDxK->GetParameter(0)+10);
  fDeDxK->SetLineWidth(2);
  cDeDxVsP->cd();
  fDeDxK->Draw("SAME");
  cDeDxVsPLogX->cd();
  fDeDxK->Draw("SAME");

  TF1* fDeDxP = new TF1("fDeDxP", FitFunc, 0, 50, nDeDxPar+1); 
  fDeDxP->SetParameters(&parametersOut[3]);
  fDeDxP->SetParameter(0, fDeDxP->GetParameter(0)+20);
  fDeDxP->SetLineWidth(2);
  cDeDxVsP->cd();
  fDeDxP->Draw("SAME");
  cDeDxVsPLogX->cd();
  fDeDxP->Draw("SAME");

  TF1* fDeDxE = new TF1("fDeDxE", FitFunc, 0, 50, nDeDxPar+1); 
  fDeDxE->SetParameters(&parametersOut[3]);
  fDeDxE->SetParameter(0, fDeDxE->GetParameter(0)+30);
  fDeDxE->SetLineWidth(2);
  cDeDxVsP->cd();
  fDeDxE->Draw("SAME");
  cDeDxVsPLogX->cd();
  fDeDxE->Draw("SAME");

  TF1* fSigma = new TF1("fSigma", SigmaFunc, 0, 50, nSigmaPar+1); 
  fSigma->SetParameters(&parametersOut[5 + nDeDxPar]);

  //  fitAll->Draw("same cont3"); 

  CreateDir("results/calibdedx");

  cDeDxVsP->cd();
  cDeDxVsP->Modified();
  cDeDxVsP->Update();
  gROOT->ProcessLine(".x drawText.C");
  cDeDxVsP->SaveAs("results/calibdedx/dedx_vs_p.gif");
  cDeDxVsP->SaveAs("results/calibdedx/dedx_vs_p.pdf");

  cDeDxVsPLogX->cd();
  cDeDxVsPLogX->Modified();
  cDeDxVsPLogX->Update();
  gROOT->ProcessLine(".x drawText.C");
  cDeDxVsPLogX->SaveAs("results/calibdedx/dedx_vs_p_logx.gif");
  cDeDxVsPLogX->SaveAs("results/calibdedx/dedx_vs_p_logx.pdf");

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

  TF1* pion = new TF1("pion", "gausn", 30, 90);
  pion->SetLineWidth(2);
  pion->SetLineColor(kRed);
  TF1* kaon = new TF1("kaon", "gausn", 30, 90);
  kaon->SetLineWidth(2);
  kaon->SetLineColor(kGreen);
  TF1* proton = new TF1("proton", "gausn", 30, 90);
  proton->SetLineWidth(2);
  proton->SetLineColor(kBlue);
  TF1* total = new TF1("total", "gausn(0)+gausn(3)+gausn(6)", 30, 90);
  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");

  TH1D* hPionRatio =(TH1D*)hDeDxVsP->ProjectionX("hPionRatio", 1, 1);
  hPionRatio->Reset();
  hPionRatio->GetXaxis()->SetRangeUser(pStart+0.001, pStop-0.001);
  hPionRatio->GetYaxis()->SetRangeUser(0.0, 1.0);
  hPionRatio->SetTitle("particle fractions; p [GeV/c]; particle fraction");
  TH1D* hKaonRatio   = (TH1D*)hPionRatio->Clone("hKaonRatio");
  TH1D* hProtonRatio = (TH1D*)hPionRatio->Clone("hProtonRatio");

  TH1D* hPionRatioMc = (TH1D*)hPionRatio->Clone("hPionRatioMc");
  TH1D* hKaonRatioMc = (TH1D*)hPionRatio->Clone("hKaonRatioMc");
  TH1D* hProtonRatioMc = (TH1D*)hPionRatio->Clone("hProtonRatioMc");
  TH1D* hMuonRatioMc = (TH1D*)hPionRatio->Clone("hMuonRatioMc");
  
  for(Int_t bin = binStart; bin <= binStop; bin++){
    
    cout << "Making projection for bin: " << bin << endl;
    
    const Int_t j = bin-binStart;
    cFits->cd();
    cFits->cd(j + 1);
    
    TH1D* hDeDxVsPProj =(TH1D*)hDeDxVsP->ProjectionY(Form("hDeDxVsPProj%d", bin), bin, bin);
    hDeDxVsPProj->GetXaxis()->SetRangeUser(40, 90);
    hDeDxVsPProj->SetTitle(Form("%.1f<p<%.1f GeV/c", 
				hDeDxVsP->GetXaxis()->GetBinLowEdge(bin),
				hDeDxVsP->GetXaxis()->GetBinUpEdge(bin)));
    hDeDxVsPProj->Draw();
    
    const Int_t offset = nGlobalParams + j*nLocalParams; 
    const Double_t p = hDeDxVsP->GetXaxis()->GetBinCenter(bin);
    const Double_t pKeff = p*piMass/kMass; // corresponding p of a pion with same dE/dx
    const Double_t pPeff = p*piMass/pMass; // corresponding p of a pion with same dE/dx
    const Double_t meanDeDxPi = fDeDxPi->Eval(p);
    const Double_t meanDeDxK  = fDeDxPi->Eval(pKeff);
    const Double_t meanDeDxP  = fDeDxPi->Eval(pPeff);
    Double_t gausParams[9] = { 
      parametersOut[offset + 0], 
      meanDeDxPi, 
      fSigma->Eval(meanDeDxPi) ,
      parametersOut[offset + 1], 
      meanDeDxK, 
      fSigma->Eval(meanDeDxK) ,
      parametersOut[offset + 2], 
      meanDeDxP, 
      fSigma->Eval(meanDeDxP) ,
    };

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

    cout << endl;
    
    pion->SetParameters(&gausParams[0]);
    pion->DrawCopy("same");
    Double_t all =  hDeDxVsPProj->Integral();
    hPionRatio->SetBinContent(bin, parametersOut[offset + 0]/all);
    hPionRatio->SetBinError(bin, parameterErrorsOut[offset + 0]/all);

    kaon->SetParameters(&gausParams[3]);
    kaon->DrawCopy("same");
    hKaonRatio->SetBinContent(bin, parametersOut[offset + 1]/all);
    hKaonRatio->SetBinError(bin, parameterErrorsOut[offset + 1]/all);
    
    proton->SetParameters(&gausParams[6]);
    proton->DrawCopy("same");
    hProtonRatio->SetBinContent(bin, parametersOut[offset + 2]/all);
    hProtonRatio->SetBinError(bin, parameterErrorsOut[offset + 2]/all);
    
    total->SetParameters(gausParams);
    total->DrawCopy("same");

    cSingleFit->cd();
    cSingleFit->Clear();
    //    cSingleFit->SetLogy();
    hDeDxVsPProj->Draw();
    pion->DrawCopy("same");
    kaon->DrawCopy("same");
    proton->DrawCopy("same");
    total->DrawCopy("same");
    
    gROOT->ProcessLine(".x drawText.C(2)");
    cSingleFit->SaveAs(Form("results/calibdedx/ptspectrum_bin%d.gif", bin));
    cSingleFit->SaveAs(Form("results/calibdedx/ptspectrum_bin%d.pdf", bin));
    //    legend->Draw();

    if(calib->IsMc()) {

      cSingleFit->cd();
      cSingleFit->Clear();
      TH1D* hDeDxVsPPiProj =(TH1D*)hDeDxVsPPi->ProjectionY(Form("hDeDxVsPPiProj%d", bin), bin, bin);
      hDeDxVsPPiProj->SetMarkerStyle(20);
      hDeDxVsPPiProj->SetMarkerColor(2);
      hDeDxVsPPiProj->GetXaxis()->SetRangeUser(40, 90);
      hDeDxVsPPiProj->SetTitle(Form("%.1f<p<%.1f GeV/c", 
				    hDeDxVsP->GetXaxis()->GetBinLowEdge(bin),
				    hDeDxVsP->GetXaxis()->GetBinUpEdge(bin)));
      hDeDxVsPPiProj->Draw("P");
      hPionRatioMc->SetBinContent(bin, hDeDxVsPPiProj->Integral()/all);
      TH1D* hDeDxVsPKProj =(TH1D*)hDeDxVsPK->ProjectionY(Form("hDeDxVsPKProj%d", bin), bin, bin);
      hDeDxVsPKProj->SetMarkerStyle(21);
      hDeDxVsPKProj->SetMarkerColor(3);
      hDeDxVsPKProj->Draw("SAME P");
      hKaonRatioMc->SetBinContent(bin, hDeDxVsPKProj->Integral()/all);
      TH1D* hDeDxVsPPProj =(TH1D*)hDeDxVsPP->ProjectionY(Form("hDeDxVsPPProj%d", bin), bin, bin);
      hDeDxVsPPProj->SetMarkerStyle(22);
      hDeDxVsPPProj->SetMarkerColor(4);
      hDeDxVsPPProj->Draw("SAME P");
      hProtonRatioMc->SetBinContent(bin, hDeDxVsPPProj->Integral()/all);
      TH1D* hDeDxVsPMuProj =(TH1D*)hDeDxVsPMu->ProjectionY(Form("hDeDxVsPMuProj%d", bin), bin, bin);
      hDeDxVsPMuProj->SetMarkerStyle(22);
      hDeDxVsPMuProj->SetMarkerColor(6);
      //      hDeDxVsPMuProj->Draw("SAME P");
      hMuonRatioMc->SetBinContent(bin, hDeDxVsPMuProj->Integral()/all);
      //    cSingleFit->SetLogy();
      pion->DrawCopy("same");
      kaon->DrawCopy("same");
      proton->DrawCopy("same");
      CreateDir("results/calibdedx/debugmc");
      cSingleFit->SaveAs(Form("results/calibdedx/debugmc/ptspectrum_bin%d.gif", bin));
    }

    if(hDeDxVsPV0Lambda) {
      cSingleFit->cd();
      cSingleFit->Clear();
      TH1D* hDeDxVsPV0LambdaProj =(TH1D*)hDeDxVsPV0Lambda->ProjectionY(Form("hDeDxVsPV0LambdaProj%d", bin), bin, bin);
      hDeDxVsPV0LambdaProj->SetMarkerStyle(20);
      hDeDxVsPV0LambdaProj->SetMarkerColor(4);
      hDeDxVsPV0LambdaProj->GetXaxis()->SetRangeUser(40, 90);
      hDeDxVsPV0LambdaProj->SetTitle(Form("%.1f<p<%.1f GeV/c", 
					  hDeDxVsP->GetXaxis()->GetBinLowEdge(bin),
					  hDeDxVsP->GetXaxis()->GetBinUpEdge(bin)));
      hDeDxVsPV0LambdaProj->Draw("P");
      proton->SetParameter(0, hDeDxVsPV0LambdaProj->Integral());
      proton->DrawCopy("same");

      CreateDir("results/calibdedx/debuglambda");
      cSingleFit->SaveAs(Form("results/calibdedx/debuglambda/ptspectrum_bin%d.gif", bin));
    }

    if(hDeDxVsPV0Kaon) {
      cSingleFit->cd();
      cSingleFit->Clear();
      TH1D* hDeDxVsPV0KaonProj =(TH1D*)hDeDxVsPV0Kaon->ProjectionY(Form("hDeDxVsPV0KaonProj%d", bin), bin, bin);
      hDeDxVsPV0KaonProj->SetMarkerStyle(20);
      hDeDxVsPV0KaonProj->SetMarkerColor(2);
      hDeDxVsPV0KaonProj->GetXaxis()->SetRangeUser(40, 90);
      hDeDxVsPV0KaonProj->SetTitle(Form("%.1f<p<%.1f GeV/c", 
					  hDeDxVsP->GetXaxis()->GetBinLowEdge(bin),
					  hDeDxVsP->GetXaxis()->GetBinUpEdge(bin)));
      hDeDxVsPV0KaonProj->Draw("P");
      pion->SetParameter(0, hDeDxVsPV0KaonProj->Integral());
      pion->DrawCopy("same");
      CreateDir("results/calibdedx/debugkaon");
      cSingleFit->SaveAs(Form("results/calibdedx/debugkaon/ptspectrum_bin%d.gif", bin));
    }
  }

  TCanvas* cRatio = new TCanvas("cRatio", "ratios/all vs p", 600, 400);
  cRatio->Clear();
  hPionRatio->SetMaximum(0.8);
  hPionRatio->SetMarkerStyle(20);
  hPionRatio->SetMarkerColor(2);
  hPionRatio->Draw("P E");

  hKaonRatio->SetMarkerStyle(20);
  hKaonRatio->SetMarkerColor(3);
  hKaonRatio->Draw("SAME P E");

  hProtonRatio->SetMarkerStyle(20);
  hProtonRatio->SetMarkerColor(4);
  hProtonRatio->Draw("SAME P E");
  gROOT->ProcessLine(".x drawText.C(2)");
  cRatio->SaveAs("results/calibdedx/particle_ratios.gif");
  cRatio->SaveAs("results/calibdedx/particle_ratios.pdf");

  if(calib->IsMc()) {
    
    hPionRatioMc->SetMarkerStyle(24);
    hPionRatioMc->SetMarkerColor(2);
    hPionRatioMc->Draw("SAME P");
    
    hKaonRatioMc->SetMarkerStyle(24);
    hKaonRatioMc->SetMarkerColor(3);
    hKaonRatioMc->Draw("SAME P");
    
    hProtonRatioMc->SetMarkerStyle(24);
    hProtonRatioMc->SetMarkerColor(4);
    hProtonRatioMc->Draw("SAME P");

    hMuonRatioMc->SetMarkerStyle(24);
    hMuonRatioMc->SetMarkerColor(6);
    //    hMuonRatioMc->Draw("SAME P");
    cRatio->SaveAs("results/calibdedx/debugmc/particle_ratios_mc.gif");
  }


  cout << "MIP was fixed to: " << fixMIP << endl
       << "Plateau was fixed to: " << fixPlateau << endl;

  //
  // Store the <dE/dx> parameters in a file that we can get them back to use for the Delta-pi!
  //
  DeDxFitInfo* fitInfo = new DeDxFitInfo();
  fitInfo->MIP     = fixMIP;
  fitInfo->plateau = fixPlateau; 
  fitInfo->optionDeDx = optionDeDx; 
  fitInfo->nDeDxPar = nDeDxPar; 
  for(Int_t i = 0; i < nDeDxPar; i++) {
    fitInfo->parDeDx[i] = fDeDxPi->GetParameter(i+1); // 1st parameter is option
  }
  fitInfo->optionSigma = optionSigma; 
  fitInfo->nSigmaPar = nSigmaPar; 
  for(Int_t i = 0; i < nSigmaPar; i++) {
    fitInfo->parSigma[i] = fSigma->GetParameter(i+1); // 1st parameter is option 
  }
  if(!strstr(calibFileName, "no_calib_eta"))
    fitInfo->calibFileName = calibFileName;

  fitInfo->Print();

  CreateDir("fitparameters");
  TFile* outFile = new TFile(Form("fitparameters/%s", gSystem->BaseName(calibFileName)), "RECREATE");
  fitInfo->Write("fitInfo");
  outFile->Close();

  if(converged) {

    cout << "Fit converged and error matrix was ok" << endl;
  } else {

    cout << "WARNING!!!!!!!!!!!!!!! Fit did not converge, or error matrix was  not ok!" << endl;
  }
}



//____________________________________________________________________________
void DrawStep2(const Char_t* calibFileName,
	       Bool_t forMIP = kTRUE,
	       Int_t run    = 0,
	       Int_t filter = 1,
	       Bool_t usePhiCut = kTRUE)
{
  // option:
  // 0 - compare to ALICE INEL
  // 1 - compare to MC input spectrum
  // 2 - compare to MC correct spectrum
  gStyle->SetOptStat(0);

  CreateDir("results/calibplots");
  TString baseName(gSystem->BaseName(calibFileName));
  baseName.ReplaceAll(".root", "");

  TFile* calibFile = FindFileFresh(calibFileName);
  if(!calibFile)
    return;
  AliHighPtDeDxCalib* calib = (AliHighPtDeDxCalib*)GetObject(calibFile, filter, usePhiCut, run);
  calib->Print();
 
  TCanvas* cPhiCut = calib->DrawPhiCutHistograms();
  gROOT->ProcessLine(".x drawText.C(2)");
  cPhiCut->SaveAs(Form("results/calibplots/phicut_%s.gif", baseName.Data())); 
  cPhiCut->SaveAs(Form("results/calibplots/phicut_%s.pdf", baseName.Data())); 
  TCanvas* cEta = calib->DrawEta(forMIP);
  gROOT->ProcessLine(".x drawText.C(2)");
  TCanvas* cEtaCal = calib->DrawEtaCalibrated(forMIP);
  gROOT->ProcessLine(".x drawText.C(2)");
  if(forMIP) {
    cEta->cd();
    cEta->SaveAs(Form("results/calibplots/MIP_dedx_vs_eta_nocal_%s.gif", baseName.Data())); 
    cEta->SaveAs(Form("results/calibplots/MIP_dedx_vs_eta_nocal_%s.pdf", baseName.Data())); 
    cEtaCal->cd();
    cEtaCal->SaveAs(Form("results/calibplots/MIP_dedx_vs_eta_final_%s.gif", baseName.Data())); 
    cEtaCal->SaveAs(Form("results/calibplots/MIP_dedx_vs_eta_final_%s.pdf", baseName.Data())); 
  } else {
    cEta->cd();
    cEta->SaveAs(Form("results/calibplots/Electrons_dedx_vs_eta_nocal_%s.gif", baseName.Data())); 
    cEta->SaveAs(Form("results/calibplots/Electrons_dedx_vs_eta_nocal_%s.pdf", baseName.Data())); 
    cEtaCal->cd();
    cEtaCal->SaveAs(Form("results/calibplots/Electrons_dedx_vs_eta_final_%s.gif", baseName.Data())); 
    cEtaCal->SaveAs(Form("results/calibplots/Electrons_dedx_vs_eta_final_%s.pdf", baseName.Data())); 
  }
  TCanvas* cEtaSel = calib->DrawSelectionHistograms();
  gROOT->ProcessLine(".x drawText.C(2)");
  cEtaSel->SaveAs(Form("results/calibplots/selection_%s.gif", baseName.Data())); 
  cEtaSel->SaveAs(Form("results/calibplots/selection_%s.pdf", baseName.Data())); 

  // TCanvas* cNcl = calib->DrawNclCal();
  // gROOT->ProcessLine(".x drawText.C");
  // cNcl->SaveAs(Form("results/calibplots/dedx_vs_ncl_calib__%s.gif", baseName.Data())); 
  // cNcl->SaveAs(Form("results/calibplots/dedx_vs_ncl_calib__%s.pdf", baseName.Data())); 
}

//____________________________________________________________________________
void TestResolutionVsDeDx(const Char_t* calibFileName,
			  Int_t run    = 0,
			  Int_t filter = 1,
			  Bool_t usePhiCut = kTRUE)
{
  gStyle->SetOptStat(0);
  
  TFile* calibFile = FindFileFresh(calibFileName);
  if(!calibFile)
    return;
  AliHighPtDeDxCalib* calib = (AliHighPtDeDxCalib*)GetObject(calibFile, filter, usePhiCut, run);
  calib->Print();
 
  TH2D* hDeDxVsNcl  = calib->GetHistDeDxVsNcl(kTRUE, 0);
  TH2D* hDeDxVsNclE = calib->GetHistDeDxVsNcl(kFALSE, 0);
  TH1D* hDeDx       = calib->GetHistDeDx(kTRUE, 0);
  TH1D* hDeDxE      = calib->GetHistDeDx(kFALSE, 0);

  Double_t mdedx  = hDeDx->GetMean();
  Double_t mdedxE = hDeDxE->GetMean();

  TObjArray* helpArray = new TObjArray();

  hDeDxVsNcl->FitSlicesY(0, 0, -1, 0, "QNR", helpArray);
  TH1D* hMeanVsNcl =  (TH1D*)helpArray->At(1);
  hMeanVsNcl->SetName("hMeanVsNcl");
  hMeanVsNcl->SetMarkerStyle(29);
  TH1D* hSigmaVsNcl =  (TH1D*)helpArray->At(2);
  hSigmaVsNcl->SetName("hSigmaVsNcl");
  hSigmaVsNcl->SetTitle("#sigma vs Ncl; Ncl; #sigma");
  hSigmaVsNcl->SetMarkerStyle(29);
  hSigmaVsNcl->SetMarkerColor(2);
  hSigmaVsNcl->Scale(1.0/mdedx);

  hDeDxVsNclE->FitSlicesY(0, 0, -1, 0, "QNR", helpArray);
  TH1D* hMeanVsNclE =  (TH1D*)helpArray->At(1);
  hMeanVsNclE->SetName("hSigmaVsNclE");
  hMeanVsNclE->SetMarkerStyle(29);
  TH1D* hSigmaVsNclE =  (TH1D*)helpArray->At(2);
  hSigmaVsNclE->SetName("hSigmaVsNclE");
  hSigmaVsNclE->SetTitle("#sigma vs Ncl; Ncl; #sigma");
  hSigmaVsNclE->SetMarkerStyle(29);
  hSigmaVsNclE->SetMarkerColor(kMagenta);
  hSigmaVsNclE->Scale(1.0/mdedxE);

  TLegend* legend = new TLegend(0.54, 0.67, 0.84, 0.87);
  legend->SetFillColor(0);
  legend->SetBorderSize(0);
  legend->SetTextSize(0.05);
  legend->AddEntry(hSigmaVsNcl, "MIP pions", "P");
  legend->AddEntry(hSigmaVsNclE, "electrons", "P");

  TCanvas* cTestDeDx = new TCanvas("cTestDeDx", "Comparing resolution for MIPs and electrons", 
				   1200, 400);
  cTestDeDx->Clear();
  cTestDeDx->Divide(3, 1);
  
  cTestDeDx->cd(1);
  hDeDxVsNcl->Draw("COL");
  hMeanVsNcl->Draw("SAME");

  cTestDeDx->cd(2);
  hDeDxVsNclE->Draw("COL");
  hMeanVsNclE->Draw("SAME");

  cTestDeDx->cd(3);
  TF1* fSDedxVsNclSqrt = new TF1("fSDedxVsNclSqrt", "[0]*sqrt(159.0/x)",  0, 160);
  fSDedxVsNclSqrt->SetParameter(0, 0.05);
  hSigmaVsNcl->SetMinimum(0.0);
  hSigmaVsNcl->SetMaximum(0.15);
  hSigmaVsNcl->SetTitle("#sigma/<dE/dx> vs Ncl; Ncl; rel. #sigma");
  //  hSigmaVsNcl->Fit(fSDedxVsNclSqrt);
  hSigmaVsNcl->Draw();
  hSigmaVsNclE->Draw("SAME");
  legend->Draw();
  gROOT->ProcessLine(".x drawText.C(2)");
  TString baseName(gSystem->BaseName(calibFileName));
  baseName.ReplaceAll(".root", "");
  cTestDeDx->SaveAs(Form("results/calibplots/test_resolution_vs_dedx_%s.gif", baseName.Data())); 
  cTestDeDx->SaveAs(Form("results/calibplots/test_resolution_vs_dedx_%s.pdf", baseName.Data()));   
}  

//___________________________________________________________________________________________
void TestResolutionVsEta(const Char_t* calibFileName,
			 Bool_t forMIP,
			 Int_t run    = 0,
			 Int_t filter = 1,
			 Bool_t usePhiCut = kTRUE)
{
  gStyle->SetOptStat(0);
  
  TFile* calibFile = FindFileFresh(calibFileName);
  if(!calibFile)
    return;
  AliHighPtDeDxCalib* calib = (AliHighPtDeDxCalib*)GetObject(calibFile, filter, usePhiCut, run);
  calib->Print();
 
  const Int_t nEta = 4;
  Int_t color[nEta] = {kBlack, kBlue, kGreen+2, kRed};
  TH1D* hDeDx[nEta] = {0, 0, 0, 0};
  TH1D* hMeanVsNcl[nEta] = {0, 0, 0, 0};
  TH1D* hSigmaVsNcl[nEta] = {0, 0, 0, 0};

  const Double_t mdedx  = (calib->GetHistDeDx(forMIP, 0))->GetMean();
  
  TObjArray* helpArray = new TObjArray();
  
  for(Int_t bin = 1; bin <= nEta; bin++) {
    
    const Int_t i = bin - 1;
    hDeDx[i]  = calib->GetHistDeDx(forMIP, bin);
    hDeDx[i]->Scale(1.0/hDeDx[i]->GetEntries());
    hDeDx[i]->SetMarkerStyle(24+i);
    hDeDx[i]->SetMarkerColor(color[i]);

    TH2D* hDeDxVsNcl  = calib->GetHistDeDxVsNcl(forMIP, bin);
    hDeDxVsNcl->FitSlicesY(0, 0, -1, 0, "QNR", helpArray);

    hMeanVsNcl[i] =  (TH1D*)helpArray->At(1);
    hMeanVsNcl[i]->SetTitle("<dE/dx> vs Ncl; Ncl; #sigma");
    hMeanVsNcl[i]->SetName(Form("hMeanVsNcl%d", bin));
    hMeanVsNcl[i]->SetMarkerStyle(24+i);
    hMeanVsNcl[i]->SetMarkerColor(color[i]);
    hMeanVsNcl[i]->SetMinimum(mdedx*0.9);
    hMeanVsNcl[i]->SetMaximum(mdedx*1.1);

    hSigmaVsNcl[i] =  (TH1D*)helpArray->At(2);
    hSigmaVsNcl[i]->SetName("hSigmaVsNcl");
    hSigmaVsNcl[i]->SetTitle("#sigma/<dE/dx> vs Ncl; Ncl; rel. #sigma");
    hSigmaVsNcl[i]->SetMarkerStyle(24+i);
    hSigmaVsNcl[i]->SetMarkerColor(color[i]);
    hSigmaVsNcl[i]->Scale(1.0/mdedx);
    hSigmaVsNcl[i]->SetMinimum(0.0);
    hSigmaVsNcl[i]->SetMaximum(0.15);
  }

  TLegend* legend = new TLegend(0.54, 0.67, 0.84, 0.87);
  legend->SetFillColor(0);
  legend->SetBorderSize(0);
  legend->SetTextSize(0.05);
  
  legend->AddEntry(hDeDx[0], "|#eta|<0.2", "P");
  legend->AddEntry(hDeDx[1], "0.2<|#eta|<0.4", "P");
  legend->AddEntry(hDeDx[2], "0.4<|#eta|<0.6", "P");
  legend->AddEntry(hDeDx[3], "0.6<|#eta|<0.8", "P");

  TCanvas* cTestEta = new TCanvas("cTestEta", "Comparing resolution for MIPs and electrons", 
				   1200, 400);
  cTestEta->Clear();
  cTestEta->Divide(3, 1);
  
  for(Int_t i = 0; i < nEta; i++) {

    cTestEta->cd(1);
    if(i==0)
      hDeDx[i]->Draw("P");
    else
      hDeDx[i]->Draw("SAME P");
      	
    cTestEta->cd(2);
    if(i==0)
      hMeanVsNcl[i]->Draw("P");
    else
      hMeanVsNcl[i]->Draw("SAME P");

    cTestEta->cd(3);
    if(i==0) {
      hSigmaVsNcl[i]->Draw("P");
      legend->Draw();
    } else
      hSigmaVsNcl[i]->Draw("SAME P");
  }

  gROOT->ProcessLine(".x drawText.C(2)");
  TString baseName(gSystem->BaseName(calibFileName));
  baseName.ReplaceAll(".root", "");
  cTestEta->SaveAs(Form("results/calibplots/test_resolution_vs_eta_%s.gif", baseName.Data())); 
  cTestEta->SaveAs(Form("results/calibplots/test_resolution_vs_eta_%s.pdf", baseName.Data()));   
}  
  
  // hMeanVsNcl =  (TH1D*)helpArray->At(1);
  // hMeanVsNcl->SetName("hMeanVsNcl");
  // hMeanVsNcl->SetTitle("Mean vs Ncl; Ncl; Mean");
  // hMeanVsNcl->SetMarkerStyle(29);
  // hMeanVsNcl->SetMinimum(45);
  // hMeanVsNcl->SetMaximum(55);
  
  // if(isMC) {
  // 	hDeDxVsNclElectrons->FitSlicesY(0, 0, -1, 0, "QNR", helpArray);
  // 	hSigmaVsNclElectrons =  (TH1D*)helpArray->At(2);
  // 	hSigmaVsNclElectrons->SetName("hSigmaVsNcl");
  // 	hSigmaVsNclElectrons->SetTitle("#sigma vs Ncl; Ncl; #sigma");
  //     }

  //     TCanvas* cNcl2 = new TCanvas("cNcl2", "sigma dE/dx vs Ncl", 600, 400);
  //     cNcl2->Clear();
  //     cNcl2->cd();
      
  //     hSigmaVsNcl->DrawCopy();
  //     hSigmaVsNcl->Fit(fSDeDxVsNcl, "0");
  //     hSigmaVsNcl->Fit(fSDeDxVsNclSqrt, "0");
      
  //     fSDeDxVsNcl->DrawCopy("SAME");
  //     fSDeDxVsNclSqrt->SetLineStyle(2);
  //     fSDeDxVsNclSqrt->DrawCopy("SAME");

  //     TLegend* legFit = new TLegend(0.64, 0.67, 0.84, 0.87);
  //     legFit->SetFillColor(0);
  //     legFit->SetBorderSize(0);
  //     legFit->SetTextSize(0.05);
  //     legFit->AddEntry(fSDeDxVsNcl, "Linear fit", "L");
  //     legFit->AddEntry(fSDeDxVsNclSqrt, "1/Sqrt fit", "L");
  //     legFit->Draw();

  //     cNcl2->SaveAs(Form("%s/sigma_vs_ncl.gif", baseName.Data()));

  //     if(isMC) {
  // 	TCanvas* cNcl2Electrons = new TCanvas("cNcl2Electrons", "sigma dE/dx vs Ncl (comparison)", 600, 400);
  // 	cNcl2Electrons->Clear();
  // 	cNcl2Electrons->cd();
	
  // 	hSigmaVsNcl->SetMarkerStyle(29);
  // 	hSigmaVsNcl->DrawCopy();
  // 	hSigmaVsNclElectrons->Scale(50.0 / hDeDxVsEtaCalibratedElectrons->GetMean(2));
  // 	hSigmaVsNclElectrons->SetMarkerStyle(29);
  // 	hSigmaVsNclElectrons->SetMarkerColor(6);
  // 	hSigmaVsNclElectrons->DrawCopy("SAME");
  // 	fSDeDxVsNcl->DrawCopy("SAME");
  // 	fSDeDxVsNclSqrt->DrawCopy("SAME");
	
  // 	TLegend* legSigma = new TLegend(0.64, 0.67, 0.84, 0.87);
  // 	legSigma->SetFillColor(0);
  // 	legSigma->SetBorderSize(0);
  // 	legSigma->SetTextSize(0.05);
  // 	legSigma->AddEntry(hSigmaVsNcl, "MIP pions", "P");
  // 	legSigma->AddEntry(fSDeDxVsNcl, "Linear fit", "L");
  // 	legSigma->AddEntry(fSDeDxVsNclSqrt, "1/Sqrt fit", "L");
  // 	legSigma->AddEntry(hSigmaVsNclElectrons, "Scaled electrons", "P");
  // 	legSigma->Draw();
	
  // 	cNcl2Electrons->SaveAs(Form("%s/electrons_sigma_vs_ncl_comparison.gif", baseName.Data()));
  //     }

  //     TCanvas* cDeDx = new TCanvas("cDeDx", "dE/dx", 600, 400);
  //     cDeDx->Clear();
  //     hDeDx->Scale(1.0/hDeDx->GetEntries());
  //     hDeDx->SetMarkerStyle(29);
  //     hDeDx->DrawCopy();
  //     TCanvas* cNcl3 = new TCanvas("cNcl3", "#sigma vs Ncl", 600, 400);
  //     cNcl3->Clear();
  //     hSigmaVsNcl->DrawCopy();
  //     TCanvas* cNcl3Mean = new TCanvas("cNcl3Mean", "Mean vs Ncl", 600, 400);
  //     cNcl3Mean->Clear();
  //     hMeanVsNcl->DrawCopy();

  //     TLegend* legDeDx = new TLegend(0.7, 0.67, 0.9, 0.87);
  //     legDeDx->SetFillColor(0);
  //     legDeDx->SetBorderSize(0);
  //     legDeDx->SetTextSize(0.05);
  //     legDeDx->AddEntry(hDeDx, "No #eta cut", "P");

  //     TLegend* legScan = new TLegend(0.44, 0.67, 0.64, 0.87);
  //     legScan->SetFillColor(0);
  //     legScan->SetBorderSize(0);
  //     legScan->SetTextSize(0.05);
  //     legScan->AddEntry(hSigmaVsNcl, "No #eta cut", "P");

  //     TH2D* hArray[4] = {hDeDxVsNcl0, hDeDxVsNcl1, hDeDxVsNcl2, hDeDxVsNcl3};
  //     TH1D* hArrayDeDx[4] = {hDeDx0, hDeDx1, hDeDx3, hDeDx4};

  //     Int_t color[4] = {2, kGreen+1, 4, 6};
  //     Double_t x[4];
  //     Double_t x_err[4];
  //     Double_t slope[4];
  //     Double_t slope_err[4];
  //     Double_t offset[4];
  //     Double_t offset_err[4];
  //     for(Int_t i = 0; i < 4; i++) {

  // 	hArrayDeDx[i]->SetMarkerStyle(20);
  // 	hArrayDeDx[i]->SetMarkerColor(color[i]);
  // 	hArrayDeDx[i]->Scale(1.0/hArrayDeDx[i]->GetEntries());
  // 	cDeDx->cd();
  // 	hArrayDeDx[i]->DrawCopy("SAME");

  // 	x[i] = hMeanEta->GetBinContent(i+1);
  // 	x_err[i] = hMeanEta->GetBinError(i+1);

  // 	hArray[i]->FitSlicesY(0, 0, -1, 0, "QNR", helpArray);
  // 	hSigmaVsNclHelp =  (TH1D*)helpArray->At(2);
  // 	hSigmaVsNclHelp->SetName(Form("hSigmaVsNcl%d", i));
  // 	hSigmaVsNclHelp->SetTitle("#sigma vs Ncl; Ncl; #sigma");
  // 	hSigmaVsNclHelp->SetMarkerStyle(20);
  // 	hSigmaVsNclHelp->SetMarkerColor(color[i]);
  // 	hSigmaVsNclHelp->Fit(fSDeDxVsNclHelp, "0");
  // 	slope[i] = fSDeDxVsNclHelp->GetParameter(0);
  // 	slope_err[i] = fSDeDxVsNclHelp->GetParError(0);
  // 	offset[i] = fSDeDxVsNclHelp->GetParameter(1);
  // 	offset_err[i] = fSDeDxVsNclHelp->GetParError(1);
  // 	cNcl3->cd();
  // 	hSigmaVsNclHelp->DrawCopy("SAME");
  // 	//	fSDeDxVsNclHelp->DrawCopy("SAME");

  // 	if(i==0) {
  // 	  legDeDx->AddEntry(hArrayDeDx[i], "|#eta|<0.2", "P");
  // 	  legScan->AddEntry(hSigmaVsNclHelp, "|#eta|<0.2", "P");
  // 	} else if(i==1) {
  // 	  legDeDx->AddEntry(hArrayDeDx[i], "0.2<|#eta|<0.4", "P");
  // 	  legScan->AddEntry(hSigmaVsNclHelp, "0.2<|#eta|<0.4", "P");
  // 	} else if(i==2) {
  // 	  legDeDx->AddEntry(hArrayDeDx[i], "0.4<|#eta|<0.6", "P");
  // 	  legScan->AddEntry(hSigmaVsNclHelp, "0.4<|#eta|<0.6", "P");
  // 	} else if(i==3) {
  // 	  legDeDx->AddEntry(hArrayDeDx[i], "0.6<|#eta|<0.8", "P");
  // 	  legScan->AddEntry(hSigmaVsNclHelp, "0.6<|#eta|<0.8", "P");
  // 	}

  // 	cNcl3Mean->cd();
  // 	hMeanVsNclHelp =  (TH1D*)helpArray->At(1);
  // 	hMeanVsNclHelp->SetName(Form("hMeanVsNcl%d", i));
  // 	hMeanVsNclHelp->SetTitle("Mean vs Ncl; Ncl; Mean");
  // 	hMeanVsNclHelp->SetMarkerStyle(20);
  // 	hMeanVsNclHelp->SetMarkerColor(color[i]);
  // 	hMeanVsNclHelp->DrawCopy("SAME");
  //     }

  //     cDeDx->cd();
  //     hDeDx->DrawCopy("SAME");
  //     legDeDx->Draw();
  //     cDeDx->SaveAs(Form("%s/dedx_resolution_vs_eta.gif", baseName.Data()));

  //     cNcl3->cd();
  //     hSigmaVsNcl->DrawCopy("SAME");
  //     legScan->Draw();
  //     cNcl3->SaveAs(Form("%s/sigma_vs_ncl_vs_eta.gif", baseName.Data()));

  //     cNcl3Mean->cd();
  //     hMeanVsNcl->DrawCopy("SAME");
  //     legScan->Draw();
  //     cNcl3Mean->SaveAs(Form("%s/mean_vs_ncl_vs_eta.gif", baseName.Data()));

  //     TGraphErrors* graphSlope = new TGraphErrors(4, x, slope, x_err, slope_err);
  //     graphSlope->SetTitle("slope vs <#eta>; <#eta>; slope");
  //     graphSlope->SetMarkerStyle(29);
  //     TCanvas* cNcl4 = new TCanvas("cNcl4", "Slope vs <eta>", 600, 400);
  //     cNcl4->Clear();
  //     graphSlope->Draw("AP");
  //     cNcl4->SaveAs(Form("%s/fit_slope_vs_eta.gif", baseName.Data()));

  //     TGraphErrors* graphOffset = new TGraphErrors(4, x, offset, x_err, offset_err);
  //     graphOffset->SetMarkerStyle(29);
  //     graphOffset->SetTitle("offset vs <#eta>; <#eta>; offset");
  //     TCanvas* cNcl5 = new TCanvas("cNcl5", "Offset vs <eta>", 600, 400);
  //     cNcl5->Clear();
  //     graphOffset->Draw("AP");
  //     cNcl5->SaveAs(Form("%s/fit_offset_vs_eta.gif", baseName.Data()));
      
  //   }

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

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

  //  gSystem->Exec("mv debug/* olddebug/");


  TH2D* hDeltaPiVsPt1 = data1->GetHistDeDxVsP(0);

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

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

  TH2D* hDeltaPiVsPt2 = data2->GetHistDeDxVsP(0);

  // 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);

  TLegend* legend = new TLegend(0.11, 0.6, 0.35, 0.85);    
  legend->SetBorderSize(0);
  legend->SetFillColor(0);

  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(-20, 20);
    hDeltaPiVsPtProj1->SetTitle(Form("%.1f<p<%.1f GeV/c", 
  				hDeltaPiVsPt1->GetXaxis()->GetBinLowEdge(bin),
  				hDeltaPiVsPt1->GetXaxis()->GetBinUpEdge(bin)));

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

    hDeltaPiVsPtProj1->SetLineColor(4);
    hDeltaPiVsPtProj2->SetLineColor(2);
    hDeltaPiVsPtProj1->SetNormFactor();
    hDeltaPiVsPtProj2->SetNormFactor();

    cFits->cd();
    cFits->cd(j + 1);
    hDeltaPiVsPtProj1->DrawCopy();
    hDeltaPiVsPtProj2->DrawCopy("SAME");

    cSingleFit->cd();
    cSingleFit->Clear();
    hDeltaPiVsPtProj1->DrawCopy();
    hDeltaPiVsPtProj2->DrawCopy("SAME");

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