ROOT logo
/* $Id$ */

#include "TFile.h"
#include "TCanvas.h"
#include "TDirectory.h"
#include "TNamed.h"
#include "TF1.h"
#include "TAttLine.h"
#include "TAttMarker.h"
#include "TH1.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TSystem.h"
#include "TStyle.h"
#include "TMath.h"
#include "TList.h"
#include <TString.h>
#include <TObject.h>
#include <TROOT.h>
#include <THashList.h>
#include <Rtypes.h>
#include <TPRegexp.h>
#include "TFitResult.h"
#include <TMap.h>
#include <TObjString.h>
#include "TPad.h"
#include "TAxis.h"
#include <TArrayD.h>
#include <TMath.h>
#include <TMathBase.h>

namespace RawProduction {

  bool ignoreErrors = false;
  enum CentBinVersion { PbPb1, PbPb2, pPb1 };
  CentBinVersion centBinVersion = PbPb2; // default

  // Fit range
  Double_t rangeMin=0.05 ;
  Double_t rangeMax=0.3 ;
  void FitRanges(double lowerEdge=0, double upperEdge=0);


  // Fit limits
  double lowerMass = 0.110; double upperMass = 0.145;
  double lowerWidth = 0.001; double upperWidth = 0.012;

  // Scale integral range
  double scalarEMBSFrom = 0.2, scalarEMBSTo = 0.4;
  double AFrom = 0.125, ATo = 0.16;
  double B1From = 0.1, B1To = 0.12;
  double B2From = 0.2, B2To = 0.25;
  double GetA(TH1* hist, double from=AFrom, double to=ATo);
  double GetADiffB(TH1* hist=0, TH1* scaledMixHist=0);
  double GetP0(TH1* hist=0);
  double GetP1(TH1* hist=0);

  Double_t PeakPosition(Double_t pt){
    //Fit to the measured peak position
    return 4.99292e-003*exp(-pt*9.32300e-001)+1.34944e-001 ;
  }
  //-----------------------------------------------------------------------------
  Double_t PeakWidth(Double_t pt){
    //fit to the measured peak width
    Double_t a=0.0068, b=0.0025, c=0.000319 ;
    return TMath::Sqrt(a*a+b*b/pt/pt+c*c*pt*pt) ;
  }

  // Pt bin parameters
  Int_t nPtBins=25; //Z PWGGA commenly agreed upon binnings
  Double_t ptBinEdges[26] =  {0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8,2.0,2.2,2.4,2.6,3.0,3.5,4.0,5.0,6.0,8.0,10.,12.,15.,20.,25.,30.,35.,40.};
  
  //Double_t ptBinEdges[1000] = {0};
  // old:
  double GetPtBin(int bin);
  void MakePtBins();

  // various parameters
  const Double_t kMean=0.136 ; //Approximate peak position to facilitate error estimate
  const char format[] = ".pdf"; // say if you want .pdf

  class Input;

  TH1* GetHistogram_cent(Input& input, const TString& name, int fromCent, int toCent);
  TH1* MergeHistogram_cent(Input& input, const TString& name, int fromCent, int toCent, int fromCentIndex, int toCentIndex);
  int kNCentralityBins = 3;

  Double_t CGausPol1(Double_t * x, Double_t * par);
  Double_t CGausPol2(Double_t * x, Double_t * par);
  Double_t CGausPol0(Double_t * x, Double_t * par);
  Double_t CPol1(Double_t * x, Double_t * par);
  Double_t CPol2(Double_t * x, Double_t * par);


  // Output Bin
  class TriggerBin {
  public:
    TriggerBin(const TString& trigger = "kCentral" );
    TriggerBin(const char* trigger);
    const TString& Dir() const {return fDir;}
    const TString& Key() const {return fKey;}
    const TString& Trigger() const {return fTrigger;}
  protected:
    TString fTrigger;
    TString fDir;
    TString fKey;
  };
  // Object describing the input for the macros
  class Input {
  public:
    Input(const TString& fileName, const TriggerBin& inputBin, TString listPath = "");
    TH1 * GetHistogram(const char* name="");
    const TriggerBin& Bin() const {return fBin;}
  private:
    static TFile* fFile;
    TList* fList;
    TriggerBin fBin;
  };

  // Output Bin
  class TriCenPidBin : public TriggerBin {
  public:
    TriCenPidBin(Int_t centFrom, Int_t centTo, const TString& pid, const TString& trigger);
    Int_t FromCent() const {return fCentFrom; }
    Int_t ToCent() const { return fCentTo; }
    const TString& PID() const {return fPID;}
  private:
    Int_t fCentFrom;
    Int_t fCentTo;
    TString fPID;
  };
  // Object describing the output of the macros
  class Output {
  public:
    Output(const TString& fileName = "RawProduction.root", const char* options = "UPDATE");
    ~Output();
    TH1* GetHistogram(const TString& name, const TriggerBin& inBin);
    TH1* GetHistogram(const TString& name);
    void SetDir(const TriggerBin& inBin);
    void Write();
  private:
    TFile* fFile;
  };

  void MakePi0Fit(Input& input, const TriggerBin& outBin, Output& output);
  void MakePi0FitTCP(Input& input, const TriCenPidBin& outBin, Output& output);

  void MakePi0Fit(Input& input, const TriggerBin& outBin, Output& output) {
    //MakePtBins();
    Printf("\nMakePi0Fit(%s)", outBin.Key().Data());
    output.SetDir(outBin);

    for(int m1i = 1; m1i <=3; ++m1i) {
      for(int m2i = m1i; m2i <=3; ++m2i) {
	TStringToken names("A;M;W;p0;p1;p2", ";");
	TStringToken titles("Amplitude;Mass;Width;p0;p1;p2", ";");
	while( names.NextToken() && titles.NextToken() ) {
	  TString  name(Form("%s_M%i%i",  names.Data(), m1i, m2i));
	  TString title(Form("%s_M%i%i", titles.Data(), m1i, m2i));
	  new TH1D(name.Data(), title.Data(), nPtBins,ptBinEdges);
	  new TH1D(Form("%s_error", name.Data()), title.Data(), nPtBins,ptBinEdges);
	}
      }
    }

    TF1 * pol2Gaus = new TF1("pol2Gaus", CGausPol2, 0., 1., 6);
    pol2Gaus->SetParNames("A", "m_{0}", "#sigma", "a_{0}", "a_{1}", "a_{2}");
    for(int m1i = 1; m1i <=3; ++m1i) {
      for(int m2i = m1i; m2i <=3; ++m2i) {
	TH2F* hPi0MNN = (TH2F*) input.GetHistogram(Form("hPi0M%i%i", m1i, m2i));
	for(Int_t ptBin=1; ptBin<=nPtBins; ptBin++){
	  Int_t imin = hPi0MNN->GetYaxis()->FindBin(ptBinEdges[ptBin-1]+0.0001);
	  Int_t imax = hPi0MNN->GetYaxis()->FindBin(ptBinEdges[ptBin]+0.0001) -1;
	  TH1D* hPi0MNNProj = hPi0MNN->ProjectionX(Form("pt%03i_hPi0M%i%i",ptBin, m1i, m2i), imin, imax);
	  hPi0MNNProj->SetTitle(Form("M_{#gamma#gamma}, M%i%i, %.1f<p_{T}<%.1f, %s", m1i, m2i, ptBinEdges[ptBin-1], ptBinEdges[ptBin], outBin.Trigger().Data()));
	  hPi0MNNProj->Sumw2();
	  int entries = hPi0MNNProj->Integral(hPi0MNNProj->FindBin(lowerMass), hPi0MNNProj->FindBin(upperMass));
	  Printf("pt bin %i, %3.1f to %3.1f, entries: %i", ptBin, ptBinEdges[ptBin-1], ptBinEdges[ptBin], entries);
	  if( entries < 10 ) continue;


	  // Error Fix
	  for(Int_t ib=1; ib<=hPi0MNNProj->GetNbinsX();ib++){if(hPi0MNNProj ->GetBinContent(ib)==0)hPi0MNNProj ->SetBinError(ib,1.);}

	  pol2Gaus->SetParameters(entries, 0.134, 0.006, entries, 0, 0);
	  pol2Gaus->SetParLimits(1, lowerMass, upperMass);
	  pol2Gaus->SetParLimits(2, lowerWidth, upperWidth);
	  TFitResultPtr resPtr = hPi0MNNProj->Fit(pol2Gaus, "MSQ", "", rangeMin, rangeMax);
	  Int_t error = int(resPtr) != 4000;
	  error = error || TMath::Abs(pol2Gaus->GetParameter(1) - lowerMass) < 0.0001 || TMath::Abs(pol2Gaus->GetParameter(1) - upperMass) <0.0001;
	  error = error || TMath::Abs(pol2Gaus->GetParameter(2) - lowerWidth) < 0.0001 || TMath::Abs(pol2Gaus->GetParameter(2) - upperWidth) <0.0001;

	  if(error) {
	    ((TH1D*) output.GetHistogram(Form("A_M%i%i_error", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(0));
	    ((TH1D*) output.GetHistogram(Form("M_M%i%i_error", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(1));
	    ((TH1D*) output.GetHistogram(Form("W_M%i%i_error", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(2));
	    ((TH1D*) output.GetHistogram(Form("p0_M%i%i_error", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(3));
	    ((TH1D*) output.GetHistogram(Form("p1_M%i%i_error", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(4));
	    ((TH1D*) output.GetHistogram(Form("p2_M%i%i_error", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(5));
	    ((TH1D*) output.GetHistogram(Form("A_M%i%i_error", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(0));
	    ((TH1D*) output.GetHistogram(Form("M_M%i%i_error", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(1));
	    ((TH1D*) output.GetHistogram(Form("W_M%i%i_error", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(2));
	    ((TH1D*) output.GetHistogram(Form("p0_M%i%i_error", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(3));
	    ((TH1D*) output.GetHistogram(Form("p1_M%i%i_error", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(4));
	    ((TH1D*) output.GetHistogram(Form("p2_M%i%i_error", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(5));
	  } else {
	    ((TH1D*) output.GetHistogram(Form("A_M%i%i", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(0));
	    ((TH1D*) output.GetHistogram(Form("M_M%i%i", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(1));
	    ((TH1D*) output.GetHistogram(Form("W_M%i%i", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(2));
	    ((TH1D*) output.GetHistogram(Form("p0_M%i%i", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(3));
	    ((TH1D*) output.GetHistogram(Form("p1_M%i%i", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(4));
	    ((TH1D*) output.GetHistogram(Form("p2_M%i%i", m1i, m2i), outBin))->SetBinContent(ptBin, pol2Gaus->GetParameter(5));
	    ((TH1D*) output.GetHistogram(Form("A_M%i%i", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(0));
	    ((TH1D*) output.GetHistogram(Form("M_M%i%i", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(1));
	    ((TH1D*) output.GetHistogram(Form("W_M%i%i", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(2));
	    ((TH1D*) output.GetHistogram(Form("p0_M%i%i", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(3));
	    ((TH1D*) output.GetHistogram(Form("p1_M%i%i", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(4));
	    ((TH1D*) output.GetHistogram(Form("p2_M%i%i", m1i, m2i), outBin))->SetBinError(ptBin, pol2Gaus->GetParError(5));
	  }
	}
      }
    }
  }
  void MakePi0FitTCP(Input& input, const TriCenPidBin& outBin, Output& output) {
    //MakePtBins();
    Printf("MakePi0FitTCP(%s)", outBin.Key().Data());
    output.SetDir(outBin);

    TH1F * hTotSelEvents          = (TH1F*) input.GetHistogram("hTotSelEvents");
    TH2F * hCentrality  = (TH2F*) input.GetHistogram("hCenPHOSCells");
    TH1D * hCentralityX = hCentrality->ProjectionX();
    TH2F *hPi0 =    (TH2F*)GetHistogram_cent(input, Form("hPi0%s", outBin.PID().Data()), outBin.FromCent(), outBin.ToCent());
    TH2F *hPi0Mix = (TH2F*)GetHistogram_cent(input, Form("hMiPi0%s", outBin.PID().Data()), outBin.FromCent(), outBin.ToCent());

    printf("TotSelEvents (4): %.0f \n", hTotSelEvents->GetBinContent(4)) ;
    printf("Centrality:   %.0f \n",     hCentralityX->Integral()) ;

    if( !hPi0 || !hPi0Mix ) {
      Printf(Form("no histogram(0x%p, 0x%p), returning", hPi0, hPi0Mix));
      return;
    }

    // for temp convas for drawing/monitoring
    TCanvas* canvas = new TCanvas("cMakePi0Fit", Form("MakePi0Fit Canvas, %s", outBin.Key().Data()),10,10,1200,800);


    // Peak Parameterization
    //  1. Linear Bg
    TF1 * funcRatioFit1 = new TF1("funcRatioFit1",CGausPol1,0.,1.,5) ;
    funcRatioFit1->SetParNames("A", "m_{0}", "#sigma", "a_{0}", "a_{1}");
    funcRatioFit1->SetLineWidth(2) ;
    funcRatioFit1->SetLineColor(2) ;
    //  2. Quadratic Bg
    TF1 * funcRatioFit2 = new TF1("funcRatioFit2",CGausPol2,0.,1.,6) ;
    funcRatioFit2->SetParNames("A", "m_{0}", "#sigma", "a_{0}", "a_{1}", "a_{2}");
    funcRatioFit2->SetLineWidth(2) ;
    funcRatioFit2->SetLineColor(4) ;
    funcRatioFit2->SetLineStyle(2) ;
    //     Other
    TF1 * fgs = new TF1("gs",CGausPol0,0.,1.,4) ;
    fgs->SetParNames("A", "m_{0}", "#sigma", "B") ;
    fgs->SetLineColor(2) ;
    fgs->SetLineWidth(1) ;
    TF1 * fbg1 = new TF1("bg1",CPol1,0.,1.,2) ;
    TF1 * fbg2 = new TF1("bg2",CPol2,0.,1.,3) ;

    // Adding Histograms:
    //  1. Linear Bg
    TStringToken names("mr1;mr1r;sr1;sr1r;ar1;br1;yr1;yr1int", ";");
    TStringToken titles("Mass;Mass, Ratio Fit;Width;Width, Ratio Fit;a;b;Raw Yield; Raw Yield, integrated", ";");
    while( names.NextToken() && titles.NextToken() ) {
      new TH1D(names.Data(), titles.Data(), nPtBins,ptBinEdges);
      new TH1D(Form("%s_error", names.Data()), titles.Data(), nPtBins,ptBinEdges);
    }
    //  2. Quadratic Bg
    TStringToken names2("mr2;mr2r;sr2;sr2r;ar2;br2;cr2;yr2;yr2int", ";");
    TStringToken titles2("Mass;Mass, Ratio Fit;Width;Width, Ratio Fit;a;b;c;Raw Yield; Raw Yield, integrated", ";");
    while( names2.NextToken() && titles2.NextToken() ) {
      new TH1D(names2.Data(), titles2.Data(), nPtBins,ptBinEdges);
      new TH1D(Form("%s_error", names2.Data()), titles2.Data(), nPtBins,ptBinEdges);
    }

    TH1D* hMixRawRatio =new TH1D("hMixRawRatio", "ratio of statistics in RAW and Mixed", nPtBins, ptBinEdges);

    // Pt slice loop
    for(Int_t ptBin=1; ptBin<=nPtBins; ptBin++){
      //gSystem->Sleep(2000);
      canvas->Clear();
      canvas->Divide(2,2);
      canvas->cd(1);
      printf("pt bin %i, %3.1f to %3.1f, ", ptBin, ptBinEdges[ptBin-1], ptBinEdges[ptBin]);

      //TList* ptBinOutputList = outputList;
      TAxis * ptAxis=hPi0->GetYaxis() ;
      Int_t imin=ptAxis->FindBin(ptBinEdges[ptBin-1]+0.0001);
      Int_t imax=ptAxis->FindBin(ptBinEdges[ptBin]+0.0001) -1;
      if( TMath::Abs( ptAxis->GetBinLowEdge(imin) - ptBinEdges[ptBin -1] ) >0.0001 ) {
	Printf("\nError: hPi0 lower bin edge (%f) different from ptBinEdges lower (%f)", ptAxis->GetBinLowEdge(imin), ptBinEdges[ptBin -1]);
	continue;
      }
      if( TMath::Abs( ptAxis->GetBinLowEdge(imax+1) - ptBinEdges[ptBin] ) >0.0001 ) {
	Printf("\nError: hPi0 upper bin edge (%f) different from ptBinEdges upper (%f)", ptAxis->GetBinLowEdge(imax+1), ptBinEdges[ptBin]);
	continue;
      }

      Double_t pt=(ptBinEdges[ptBin]+ptBinEdges[ptBin-1])/2. ;
      Double_t dpt= ptBinEdges[ptBin] - ptBinEdges[ptBin-1];

      TH1D * hPi0Proj = hPi0->ProjectionX(Form("pt%03i_hPi0",ptBin), imin, imax);
      hPi0Proj->Sumw2();
      TH1D * hPi0ProjMix= hPi0Mix->ProjectionX(Form("pt%03i_hPi0Mix",ptBin), imin, imax) ;
      hPi0ProjMix->Sumw2();

      const Double_t pi0Entries = hPi0Proj->Integral(hPi0Proj->FindBin(lowerMass), hPi0Proj->FindBin(upperMass));
      const Double_t mixEntries = hPi0ProjMix->Integral(hPi0Proj->FindBin(lowerMass), hPi0Proj->FindBin(upperMass));
      if( pi0Entries >0)  {
	hMixRawRatio->SetBinContent(ptBin, mixEntries/pi0Entries);
	//printf(" %f, %f ", mixEntries/pi0Entries/pi0Entries ,mixEntries*mixEntries/pi0Entries/pi0Entries/pi0Entries );
	//printf("statistics in bin is %i, mixed %i, ", pi0Entries, mixEntries);

	hMixRawRatio->SetBinError(ptBin, TMath::Sqrt(mixEntries/pi0Entries/pi0Entries + mixEntries*mixEntries/pi0Entries/pi0Entries/pi0Entries));
      }
      printf("statistics in bin is %i, mixed %i, ", pi0Entries, mixEntries);
      if( pi0Entries < 10 ) {
	Printf("to few entries");
	continue;
      }

      const bool rebin = pi0Entries < 1000;
      if( rebin && pi0Entries >= 500 ) {
	printf("rebin by factor 2, ");
	hPi0Proj->Rebin(2);
	hPi0ProjMix->Rebin(2);
      } else if( rebin && pi0Entries >= 200) {
	printf("rebin by factor 4, ");
	hPi0Proj->Rebin(4);
	hPi0ProjMix->Rebin(4);
      } else if( rebin && pi0Entries >= 10) {
	printf("rebin by factor 5, ");
	hPi0Proj->Rebin(5);
	hPi0ProjMix->Rebin(5);
      }
      std::cout << std::endl;

      hPi0Proj->SetTitle(Form("M_{#gamma#gamma}, %.1f<p_{T}<%.1f, PID=%s, %s", ptBinEdges[ptBin-1], ptBinEdges[ptBin], outBin.PID().Data(), outBin.Trigger().Data()));
      hPi0Proj->SetXTitle("M_{#gamma#gamma} (GeV/c^{2})");
      hPi0ProjMix->SetTitle(Form("M_{#gamma#gamma}^{Mix}, %.1f<p_{T}<%.1f, PID=%s, %s",ptBinEdges[ptBin-1],ptBinEdges[ptBin],outBin.PID().Data(), outBin.Trigger().Data()));
      hPi0ProjMix->SetXTitle("M_{#gamma#gamma}^{Mix} (GeV/c^{2})");


      // Error Fix
      for(Int_t ib=1; ib<=hPi0Proj->GetNbinsX();ib++){if(hPi0Proj ->GetBinContent(ib)==0)hPi0Proj ->SetBinError(ib,1.);}
      for(Int_t ib=1; ib<=hPi0Proj->GetNbinsX();ib++){if(hPi0ProjMix->GetBinContent(ib)==0)hPi0ProjMix->SetBinError(ib,1.);}

      // Signal-Mix Ratio
      canvas->cd(2);
      TH1D * hPi0Ratio = (TH1D*)hPi0Proj->Clone( Form("pt%03i_hPi0Ratio",ptBin) ) ;
      hPi0Ratio->SetTitle(Form("#frac{M_{#gamma#gamma}}{M_{#gamma#gamma}^{Mix}}, %.1f<p_{T}<%.1f GeV/c", ptBinEdges[ptBin-1], ptBinEdges[ptBin]));
      hPi0Ratio->Divide(hPi0ProjMix) ;
      hPi0Ratio->SetMarkerStyle(20) ;
      hPi0Ratio->SetMarkerSize(0.7) ;

      FitRanges(ptBinEdges[ptBin-1],ptBinEdges[ptBin]);//Sets the Fit ranges in the relevant pT bin

      // ================================================
      // Fit Pol1 ratio
      // ================================================
      printf("Pol1 ratio Fit, ");
      canvas->cd(2);

      funcRatioFit1->SetParameters(GetADiffB(hPi0Ratio), 0.136, 0.0055, GetP0(hPi0Ratio), GetP1(hPi0Ratio)) ;
      funcRatioFit1->SetParLimits(0,0.000,1.000) ;
      funcRatioFit1->SetParLimits(1,lowerMass,upperMass) ;
      funcRatioFit1->SetParLimits(2,lowerWidth,upperWidth) ;


      TFitResultPtr ratioFitResultPtr1 = hPi0Ratio->Fit(funcRatioFit1,"MSQ" ,"",rangeMin,rangeMax) ;
      if( int(ratioFitResultPtr1) % 4000 ) // "More" error is acceptable
	ratioFitResultPtr1 = hPi0Ratio->Fit(funcRatioFit1,"MSQ" ,"",rangeMin,rangeMax) ;

      Int_t ratioFitError1 = ratioFitResultPtr1;
      ratioFitError1 = ratioFitError1 % 4000; // "More" error is acceptable
      ratioFitError1 = ratioFitError1 || TMath::Abs( funcRatioFit1->GetParameter(1) - lowerMass) < 0.0001 || TMath::Abs( funcRatioFit1->GetParameter(1) - upperMass) < 0.0001;//  "center" mass converged to limit
      ratioFitError1 = ratioFitError1 || funcRatioFit1->GetParError(1) > (upperMass - lowerMass)/2; // to large of an error
      ratioFitError1 = ratioFitError1 || TMath::Abs( funcRatioFit1->GetParameter(2) - lowerWidth) < 0.0001 || TMath::Abs( funcRatioFit1->GetParameter(2) - upperWidth) < 0.0001;//  st. error converged to limit
      ratioFitError1 = ratioFitError1 || funcRatioFit1->GetParError(2) > (upperWidth - lowerWidth)/2; // to large of an error

      if( ratioFitError1) {
	Printf("in ERROR, %i", ratioFitError1);
	((TH1D*) output.GetHistogram("mr1r_error", outBin))->SetBinContent(ptBin,fgs->GetParameter(1)) ;
	((TH1D*) output.GetHistogram("mr1r_error", outBin))->SetBinError  (ptBin,fgs->GetParError(1) ) ;
	((TH1D*) output.GetHistogram("sr1r_error", outBin))->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
	((TH1D*) output.GetHistogram("sr1r_error", outBin))->SetBinError  (ptBin,fgs->GetParError(2) ) ;
	((TH1D*) output.GetHistogram("ar1_error", outBin))->SetBinContent(ptBin,funcRatioFit1->GetParameter(3)) ;
	((TH1D*) output.GetHistogram("ar1_error", outBin))->SetBinError  (ptBin,funcRatioFit1->GetParError(3)) ;
	((TH1D*) output.GetHistogram("br1_error", outBin))->SetBinContent(ptBin,funcRatioFit1->GetParameter(4)) ;
	((TH1D*) output.GetHistogram("br1_error", outBin))->SetBinError  (ptBin,funcRatioFit1->GetParError(4)) ;
      }
      if( !ratioFitError1 || ignoreErrors ) {
	Printf("converged, status:%i, covMatrixStatus: %i", ratioFitResultPtr1->Status(), ratioFitResultPtr1->CovMatrixStatus());
	((TH1D*) output.GetHistogram("mr1r", outBin))->SetBinContent(ptBin,fgs->GetParameter(1)) ;
	((TH1D*) output.GetHistogram("mr1r", outBin))->SetBinError  (ptBin,fgs->GetParError(1) ) ;
	((TH1D*) output.GetHistogram("sr1r", outBin))->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
	((TH1D*) output.GetHistogram("sr1r", outBin))->SetBinError  (ptBin,fgs->GetParError(2) ) ;
	((TH1D*) output.GetHistogram("ar1", outBin))->SetBinContent(ptBin,funcRatioFit1->GetParameter(3)) ;
	((TH1D*) output.GetHistogram("ar1", outBin))->SetBinError  (ptBin,funcRatioFit1->GetParError(3)) ;
	((TH1D*) output.GetHistogram("br1", outBin))->SetBinContent(ptBin,funcRatioFit1->GetParameter(4)) ;
	((TH1D*) output.GetHistogram("br1", outBin))->SetBinError  (ptBin,funcRatioFit1->GetParError(4)) ;
      }



      // ================================================
      // Fit Pol2 ratio
      // ================================================
      printf("Pol2 ratio Fit, ");
      if( ratioFitError1 ) {
	funcRatioFit2->SetParameters(GetADiffB(hPi0Ratio), 0.136, 0.0055, GetP0(hPi0Ratio),GetP1(hPi0Ratio), 0.) ;
	funcRatioFit2->SetParLimits(0,0.000,1.000) ;
	funcRatioFit2->SetParLimits(1,lowerMass,upperMass) ;
	funcRatioFit2->SetParLimits(2,lowerWidth,upperWidth) ;
      } else {
	funcRatioFit2->SetParameters(funcRatioFit1->GetParameters()) ;
	funcRatioFit2->SetParameter(5, 0);
	funcRatioFit2->SetParLimits(0,0.000,1.000) ;
	funcRatioFit2->SetParLimits(1,lowerMass,upperMass) ;
	funcRatioFit2->SetParLimits(2,lowerWidth,upperWidth) ;
      }
      TFitResultPtr ratioFitResultPtr2 = hPi0Ratio->Fit(funcRatioFit2,"+MSQ" ,"",rangeMin,rangeMax) ;
      if( int(ratioFitResultPtr2) != 4000 ) // if error, "More" error is acceptable
	ratioFitResultPtr2  = hPi0Ratio->Fit(funcRatioFit2,"MSQ" ,"",rangeMin,rangeMax) ;

      Int_t ratioFitError2 = ratioFitResultPtr2;
      ratioFitError2 = ratioFitError2 % 4000; // "More" error is acceptable
      ratioFitError2 = ratioFitError2 || TMath::Abs( funcRatioFit2->GetParameter(1) - lowerMass) < 0.0001 || TMath::Abs( funcRatioFit2->GetParameter(1) - upperMass) < 0.0001;  // "center" mass converged to limit
      //ratioFitError2 = ratioFitError2 || funcRatioFit2->GetParError(1) > (upperMass - lowerMass)/2; // to large of an error
      ratioFitError2 = ratioFitError2 || TMath::Abs( funcRatioFit2->GetParameter(2) - lowerWidth) < 0.0001 || TMath::Abs( funcRatioFit2->GetParameter(2) - upperWidth) < 0.0001;  // st. error converged to limit
      //ratioFitError2 = ratioFitError2 || funcRatioFit2->GetParError(2) > (upperWidth - lowerWidth)/2; // to large of an error

      if( ratioFitError2) {
	Printf("in ERROR, %i", ratioFitError2);
	((TH1D*) output.GetHistogram("mr2r_error", outBin))->SetBinContent(ptBin,fgs->GetParameter(1)) ;
	((TH1D*) output.GetHistogram("mr2r_error", outBin))->SetBinError  (ptBin,fgs->GetParError(1) ) ;
	((TH1D*) output.GetHistogram("sr2r_error", outBin))->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
	((TH1D*) output.GetHistogram("sr2r_error", outBin))->SetBinError  (ptBin,fgs->GetParError(2) ) ;
	((TH1D*) output.GetHistogram("ar2_error", outBin))->SetBinContent(ptBin,funcRatioFit2->GetParameter(3)) ;
	((TH1D*) output.GetHistogram("ar2_error", outBin))->SetBinError  (ptBin,funcRatioFit2->GetParError(3)) ;
	((TH1D*) output.GetHistogram("br2_error", outBin))->SetBinContent(ptBin,funcRatioFit2->GetParameter(4)) ;
	((TH1D*) output.GetHistogram("br2_error", outBin))->SetBinError  (ptBin,funcRatioFit2->GetParError(4)) ;
	((TH1D*) output.GetHistogram("cr2_error", outBin))->SetBinContent(ptBin,funcRatioFit2->GetParameter(5)) ;
	((TH1D*) output.GetHistogram("cr2_error", outBin))->SetBinError  (ptBin,funcRatioFit2->GetParError(5)) ;
      }
      if( !ratioFitError2 || ignoreErrors ) {
	Printf("converged, status:%i, covMatrixStatus: %i", ratioFitResultPtr2->Status(), ratioFitResultPtr2->CovMatrixStatus());
	((TH1D*) output.GetHistogram("mr2r", outBin))->SetBinContent(ptBin,fgs->GetParameter(1)) ;
	((TH1D*) output.GetHistogram("mr2r", outBin))->SetBinError  (ptBin,fgs->GetParError(1) ) ;
	((TH1D*) output.GetHistogram("sr2r", outBin))->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
	((TH1D*) output.GetHistogram("sr2r", outBin))->SetBinError  (ptBin,fgs->GetParError(2) ) ;
	((TH1D*) output.GetHistogram("ar2", outBin))->SetBinContent(ptBin,funcRatioFit2->GetParameter(3)) ;
	((TH1D*) output.GetHistogram("ar2", outBin))->SetBinError  (ptBin,funcRatioFit2->GetParError(3)) ;
	((TH1D*) output.GetHistogram("br2", outBin))->SetBinContent(ptBin,funcRatioFit2->GetParameter(4)) ;
	((TH1D*) output.GetHistogram("br2", outBin))->SetBinError  (ptBin,funcRatioFit2->GetParError(4)) ;
	((TH1D*) output.GetHistogram("cr2", outBin))->SetBinContent(ptBin,funcRatioFit2->GetParameter(5)) ;
	((TH1D*) output.GetHistogram("cr2", outBin))->SetBinError  (ptBin,funcRatioFit2->GetParError(5)) ;
      }



      // ================================================
      // Plot Ratio Fits
      // ================================================
      hPi0Ratio->GetXaxis()->SetRangeUser(rangeMin, rangeMax);
      hPi0Ratio->Draw();
      canvas->Update();



      // ================================================
      // Pol1 Scaled Background Subtraction
      // ================================================
      canvas->cd(3);
      Double_t intRangeMin = PeakPosition(pt)-3.*PeakWidth(pt) ;
      Double_t intRangeMax = PeakPosition(pt)+3.*PeakWidth(pt) ;
      Int_t    intBinMin   = hPi0Proj->GetXaxis()->FindBin(intRangeMin) ;
      Int_t    intBinMax   = hPi0Proj->GetXaxis()->FindBin(intRangeMax) ;
      Double_t mixInt     = hPi0ProjMix->Integral(intBinMin,intBinMax);

      if( ! ratioFitError1 || true) {
	printf("Pol1 BS Fit, ");
	TH1D * hPi0MixScaledPol1 = (TH1D*)hPi0ProjMix->Clone(Form("pt%03i_hPi0MixScaledPol1", ptBin)) ;
	TH1D * hPi0BSPol1 = (TH1D*)hPi0Proj->Clone(Form("pt%03i_hPi0BSPol1", ptBin)) ;

	// Scale Mix by linear part of ratio, yielding approx background
	fbg1->SetParameters(funcRatioFit1->GetParameter(3), funcRatioFit1->GetParameter(4));
	hPi0MixScaledPol1 ->Multiply(fbg1) ;
	hPi0BSPol1->Add(hPi0MixScaledPol1 ,-1.) ;

	//Int_t binPi0 = hPi0BSPol1->FindBin(funcRatioFit1->GetParameter(1));
	//Int_t nWidPi0 = 2 * (Int_t) (funcRatioFit1->GetParameter(2)/hPi0BSPol1->GetBinWidth(1));
	//Int_t integral = TMath::Abs(hPi0BSPol1->Integral(binPi0-nWidPi0,binPi0+nWidPi0));
	fgs->SetParameters(GetADiffB(hPi0BSPol1), funcRatioFit1->GetParameter(1), funcRatioFit1->GetParameter(2)) ;
	fgs->SetParLimits(0,0.,pi0Entries) ;
	fgs->SetParLimits(1,lowerMass,upperMass) ;
	fgs->SetParLimits(2,lowerWidth,upperWidth) ;

	// Fit
	TFitResultPtr bs1FitResultPtr = hPi0BSPol1->Fit(fgs,"MSQ","",rangeMin,rangeMax) ;
	if( int(bs1FitResultPtr) != 4000 ) // if error, "More" error is acceptable
	  bs1FitResultPtr = hPi0BSPol1->Fit(fgs,"MSQ","",rangeMin,rangeMax) ;

	Int_t bs1FitError = bs1FitResultPtr;
	bs1FitError = bs1FitError % 4000; // "More" error is acceptable
	bs1FitError = bs1FitError || TMath::Abs( fgs->GetParameter(1) - lowerMass) < 0.0001 || TMath::Abs( fgs->GetParameter(1) - upperMass) < 0.0001;  // "center" mass converged to limit
	//bs1FitError = bs1FitError || fgs->GetParError(1) > (upperMass - lowerMass)/2; // to large of an error
	bs1FitError = bs1FitError || TMath::Abs( fgs->GetParameter(2) - lowerWidth) < 0.0001 || TMath::Abs( fgs->GetParameter(2) - upperWidth) < 0.0001;  // st. error converged to limit
	//bs1FitError = bs1FitError || fgs->GetParError(2) > (upperWidth - lowerWidth)/2; // to large of an error

	  Double_t y=fgs->GetParameter(0)/hPi0BSPol1->GetXaxis()->GetBinWidth(1) ;
	  Double_t ey=fgs->GetParError(0)/hPi0BSPol1->GetXaxis()->GetBinWidth(1) ;
	  Double_t npiInt = hPi0BSPol1->Integral(intBinMin,intBinMax) ;
	  Double_t norm   = fbg1->GetParameter(0) ;
	  Double_t normErr= fbg1->GetParError(0) ;
	if( bs1FitError) {
	  Printf("in ERROR, %i", bs1FitError);
	  ((TH1D*) output.GetHistogram("mr1_error", outBin))->SetBinContent(ptBin,fgs->GetParameter(1)) ;
	  ((TH1D*) output.GetHistogram("mr1_error", outBin))->SetBinError  (ptBin,fgs->GetParError(1) ) ;
	  ((TH1D*) output.GetHistogram("sr1_error", outBin))->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
	  ((TH1D*) output.GetHistogram("sr1_error", outBin))->SetBinError  (ptBin,fgs->GetParError(2) ) ;

	  ((TH1D*) output.GetHistogram("yr1_error", outBin))->SetBinContent(ptBin,y/dpt/pt) ;
	  ((TH1D*) output.GetHistogram("yr1_error", outBin))->SetBinError(ptBin,ey/dpt/pt) ;
	  if(npiInt>0.){
	    ((TH1D*) output.GetHistogram("yr1int_error", outBin))->SetBinContent(ptBin,npiInt/dpt/pt) ;
	    ((TH1D*) output.GetHistogram("yr1int_error", outBin))->SetBinError(ptBin,TMath::Sqrt(npiInt + norm*mixInt + normErr*normErr*mixInt*mixInt + norm*norm*mixInt)/dpt/pt) ;
	  }
	}
	if( !bs1FitError || ignoreErrors ) {
	  Printf("converged, status:%i, covMatrixStatus: %i", bs1FitResultPtr->Status(), bs1FitResultPtr->CovMatrixStatus());
	  ((TH1D*) output.GetHistogram("mr1", outBin))->SetBinContent(ptBin,fgs->GetParameter(1)) ;
	  ((TH1D*) output.GetHistogram("mr1", outBin))->SetBinError  (ptBin,fgs->GetParError(1) ) ;
	  ((TH1D*) output.GetHistogram("sr1", outBin))->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
	  ((TH1D*) output.GetHistogram("sr1", outBin))->SetBinError  (ptBin,fgs->GetParError(2) ) ;

	  ((TH1D*) output.GetHistogram("yr1", outBin))->SetBinContent(ptBin,y/dpt/pt) ;
	  ((TH1D*) output.GetHistogram("yr1", outBin))->SetBinError(ptBin,ey/dpt/pt) ;
	  if(npiInt>0.){
	    ((TH1D*) output.GetHistogram("yr1int", outBin))->SetBinContent(ptBin,npiInt/dpt/pt) ;
	    ((TH1D*) output.GetHistogram("yr1int", outBin))->SetBinError(ptBin,TMath::Sqrt(npiInt + norm*mixInt + normErr*normErr*mixInt*mixInt + norm*norm*mixInt)/dpt/pt) ;
	    // maybe we should use TH1::IntegralAndError
	  }
	}
	// Ploting
	hPi0BSPol1->SetAxisRange(rangeMin, rangeMax);
	hPi0BSPol1->SetMaximum(hPi0BSPol1->GetMaximum()*1.5) ;
	hPi0BSPol1->SetMinimum(hPi0BSPol1->GetMinimum()*0.9) ;
	hPi0BSPol1->SetMarkerStyle(20) ;
	hPi0BSPol1->SetMarkerSize(0.7) ;
	hPi0BSPol1->Draw();
	canvas->Update();
	//printf("end pt");
      }


      // ================================================
      // Pol2 Scaled Background Subtraction
      // ================================================
      canvas->cd(4);
      fbg2->SetParameters(funcRatioFit2->GetParameter(3),funcRatioFit2->GetParameter(4),funcRatioFit2->GetParameter(5));
      if( ! ratioFitError2 || true) {
	printf("Pol1 Scaled Background Subtraction, ");
	TH1D * hPi0MixScaledPol2 = (TH1D*)hPi0ProjMix->Clone(Form("pt%03i_hPi0MixScaledPol2", ptBin)) ;
	TH1D * hPi0BSPol2     = (TH1D*)hPi0Proj    ->Clone(Form("pt%03i_hPi0BSPol2", ptBin)) ;

	hPi0MixScaledPol2->Multiply(fbg2) ;
	hPi0BSPol2 ->Add(hPi0MixScaledPol2,-1.) ;
	hPi0BSPol2->SetOption();

// 	Int_t binPi0 = hPi0BSPol2->FindBin(funcRatioFit2->GetParameter(1));
// 	Int_t nWidPi0 = 2 * (Int_t) (funcRatioFit2->GetParameter(2)/hPi0BSPol2->GetBinWidth(1));
// 	Int_t integral = TMath::Abs(hPi0BSPol2->Integral(binPi0-nWidPi0,binPi0+nWidPi0));
	fgs->SetParameters(GetADiffB(hPi0BSPol2), funcRatioFit2->GetParameter(1), funcRatioFit2->GetParameter(2)) ;
	fgs->SetParLimits(0,0.,pi0Entries) ;
	fgs->SetParLimits(1,lowerMass,upperMass) ;
	fgs->SetParLimits(2,lowerWidth,upperWidth) ;

      	// Fit
	TFitResultPtr bs2FitResultPtr = hPi0BSPol2->Fit(fgs,"MSQ","",rangeMin,rangeMax) ;
	if( int(bs2FitResultPtr) != 4000 ) // if error, "More" error is acceptable
	  bs2FitResultPtr = hPi0BSPol2->Fit(fgs,"MSQ","",rangeMin,rangeMax) ;

	Int_t bs2FitError = bs2FitResultPtr;
	bs2FitError = bs2FitError % 4000; // "More" error is acceptable
	bs2FitError = bs2FitError || TMath::Abs( fgs->GetParameter(1) - lowerMass) < 0.0001 || TMath::Abs( fgs->GetParameter(1) - upperMass) < 0.0001;  // "center" mass converged to limit
// 	bs2FitError = bs2FitError || fgs->GetParError(1) > (upperMass - lowerMass)/2; // to large of an error
	bs2FitError = bs2FitError || TMath::Abs( fgs->GetParameter(2) - lowerWidth) < 0.0001 || TMath::Abs( fgs->GetParameter(2) - upperWidth) < 0.0001;  // st. error converged to limit
// 	bs2FitError = bs2FitError || fgs->GetParError(2) > (upperWidth - lowerWidth)/2; // to large of an error

	  Double_t y=fgs->GetParameter(0)/hPi0BSPol2->GetXaxis()->GetBinWidth(1) ;
	  Double_t ey=fgs->GetParError(0)/hPi0BSPol2->GetXaxis()->GetBinWidth(1) ;
	  Double_t npiInt = hPi0BSPol2->Integral(intBinMin,intBinMax) ;
	  Double_t norm   = fbg2->GetParameter(0) ;
	  Double_t normErr= fbg2->GetParError(0) ;
	if( bs2FitError ) {
	  Printf("in ERROR, %i", bs2FitError);
	  ((TH1D*) output.GetHistogram("mr2_error", outBin))->SetBinContent(ptBin,fgs->GetParameter(1)) ;
	  ((TH1D*) output.GetHistogram("mr2_error", outBin))->SetBinError  (ptBin,fgs->GetParError(1) ) ;
	  ((TH1D*) output.GetHistogram("sr2_error", outBin))->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
	  ((TH1D*) output.GetHistogram("sr2_error", outBin))->SetBinError  (ptBin,fgs->GetParError(2) ) ;

	  ((TH1D*) output.GetHistogram("yr2_error", outBin))->SetBinContent(ptBin,y/dpt/pt) ;
	  ((TH1D*) output.GetHistogram("yr2_error", outBin))->SetBinError(ptBin,ey/dpt/pt) ;
	  if(npiInt>0.){
	    ((TH1D*) output.GetHistogram("yr2int_error", outBin))->SetBinContent(ptBin,npiInt/dpt/pt) ;
	    ((TH1D*) output.GetHistogram("yr2int_error", outBin))->SetBinError(ptBin,TMath::Sqrt(npiInt + norm*mixInt + normErr*normErr*mixInt*mixInt + norm*norm*mixInt)/dpt/pt) ;
	    // maybe we should use TH1::IntegralAndError
	    }
	}
	if( !bs2FitError || ignoreErrors ) {
	  Printf("converged, status:%i, covMatrixStatus: %i", bs2FitResultPtr->Status(), bs2FitResultPtr->CovMatrixStatus());
	  ((TH1D*) output.GetHistogram("mr2", outBin))->SetBinContent(ptBin,fgs->GetParameter(1)) ;
	  ((TH1D*) output.GetHistogram("mr2", outBin))->SetBinError  (ptBin,fgs->GetParError(1) ) ;
	  ((TH1D*) output.GetHistogram("sr2", outBin))->SetBinContent(ptBin,TMath::Abs(fgs->GetParameter(2))) ;
	  ((TH1D*) output.GetHistogram("sr2", outBin))->SetBinError  (ptBin,fgs->GetParError(2) ) ;

	  ((TH1D*) output.GetHistogram("yr2", outBin))->SetBinContent(ptBin,y/dpt/pt) ;
	  ((TH1D*) output.GetHistogram("yr2", outBin))->SetBinError(ptBin,ey/dpt/pt) ;
	  if(npiInt>0.){
	    ((TH1D*) output.GetHistogram("yr2int", outBin))->SetBinContent(ptBin,npiInt/dpt/pt) ;
	    ((TH1D*) output.GetHistogram("yr2int", outBin))->SetBinError(ptBin,TMath::Sqrt(npiInt + norm*mixInt + normErr*normErr*mixInt*mixInt + norm*norm*mixInt)/dpt/pt) ;
	    // maybe we should use TH1::IntegralAndError
	    }
	}
	// Plotting
	hPi0BSPol2->SetAxisRange(rangeMin, rangeMax);
	hPi0BSPol2->SetMaximum(hPi0BSPol2->GetMaximum()*1.5) ;
	hPi0BSPol2->SetMinimum(hPi0BSPol2->GetMinimum()*0.9) ;
	hPi0BSPol2->SetMarkerStyle(20) ;
	hPi0BSPol2->SetMarkerSize(0.7) ;
	hPi0BSPol2->Draw();
	canvas->Update();

      }

      canvas->cd(1);
      TH1D * hPi0MixScaled = (TH1D*)hPi0ProjMix ->Clone(Form("%sScaled", hPi0Proj->GetName())) ;
      int fromBin = hPi0Proj->FindBin(scalarEMBSFrom);
      int toBin = TMath::Min(hPi0Proj->FindBin(scalarEMBSTo), hPi0Proj->GetNbinsX());
      Double_t scalar = hPi0Proj->Integral(fromBin, toBin) / hPi0ProjMix->Integral(fromBin, toBin);
      hPi0MixScaled->Scale(scalar);
      hPi0MixScaled->SetLineColor(kRed);
      hPi0MixScaled->SetTitle(Form("%s, Scaled", hPi0Proj->GetName()));
      hPi0Proj->SetAxisRange(rangeMin, 1.);
      hPi0Proj->Draw();
      hPi0MixScaled->Draw("same");

      canvas->Update();

      canvas->Print(Form("imgs/%s_ptBin:%03i.pdf", outBin.Key().Data(), ptBin));
      canvas->Print(Form("imgs/%s_ptBin:%03i.png", outBin.Key().Data(), ptBin));

      std::cout << std::endl;
    }// end of Pt slice loop


    //Normalize by the number of events
    Int_t cMin=outBin.FromCent();
    Int_t cMax=outBin.ToCent();
    Double_t nevents = hCentralityX->Integral(cMin,cMax);
    
    if ( nevents > 0.9 ) {
      TStringToken yhists("yr1 yr1int yr2 yr2int yr1_error yr1int_error yr2_error yr2int_error", " ");
      while( yhists.NextToken() ) {
	((TH1D*) output.GetHistogram(yhists.Data(), outBin))->Scale(1./nevents) ;
	((TH1D*) output.GetHistogram(yhists.Data(), outBin))->GetYaxis()->SetTitle("#frac{dN^{RAW}_{#pi^{0}}}{p_{T}dp_{T} N_{ev}}");
      }
    } else {
      Printf("WARNING: non positive nEvents in centrality range, cMin:%d, cMax:%d, nEvents:%f", cMin, cMax, nevents );

    }


    // store to file
    //  TFile* outputFile = TFile::Open(saveToFileName.Data(), "UPDATE");
    //outputList->Write(input.KeySuggestion(), TObject::kSingleKey);
    //outputList->Write();
//     outputFile->Write();
//     outputFile->Close();
//     delete outputFile;
    // delete list and content from memory
    //outputList->SetOwner(kTRUE);
    //outputList->Delete("slow");
    //delete outputList;
    //output.Write();
    delete canvas;
  }

  double GetA(TH1* hist, double from, double to)
  {
    int fbin = hist->FindBin(from);
    if( from > (hist->GetBinLowEdge(fbin)+hist->GetBinLowEdge(fbin+1)) )
      fbin=fbin+1;
    int tbin = hist->FindBin(to);
    if( to < (hist->GetBinLowEdge(tbin)+hist->GetBinLowEdge(tbin+1)) )
      tbin=tbin-1;
    double integer = hist->Integral(fbin, tbin);
    return integer/(tbin-fbin+1);
  }

  double GetADiffB(TH1* hist, TH1* mixHist)
  {
    double rawSig = GetA(hist);
    // If we have SCALED Event Mixing Histogram
    if(mixHist) {
      double mixSig = GetA(mixHist);
      double A = TMath::Abs(rawSig - mixSig );
      return A;
    }
    // else, interpolate between B1 and B2.
    double background = GetP0(hist)*(ATo-AFrom) + GetP1(hist)*(ATo*ATo-AFrom*AFrom)/2;
    double A = GetA(hist);
    return TMath::Abs(A-background);
  }

  double GetP0(TH1* hist)
  {
    double b1=GetA(hist,B1From,B1To)*(B1To-B1From);
    double b2=GetA(hist,B2From,B2To)*(B2To-B2From);
    double a11 = B1To - B1From;
    double a12 = (B1To*B1To - B1From*B1From)/2;
    double a21 = B2To - B2From;
    double a22 = (B2To*B2To - B2From*B2From)/2;
    return (a22*b1-a12*b2)/(a11*a22-a12*a21);
  }
  double GetP1(TH1* hist)
  {
    double b1=GetA(hist,B1From,B1To)*(B1To-B1From);
    double b2=GetA(hist,B2From,B2To)*(B2To-B2From);
    double a11 = B1To - B1From;
    double a12 = (B1To*B1To - B1From*B1From)/2;
    double a21 = B2To - B2From;
    double a22 = (B2To*B2To - B2From*B2From)/2;
    return (-a21*b1+a11*b2)/(a11*a22-a12*a21);
  }


  //-----------------------------------------------------------------------------
  double GetPtBin(int bin){
    // recusive function used by MakePtBins

    if( bin==0 )
      return 1.;

    // return GetPtBin(bin-1) * 1.1;

    // if ( bin % 2 )
    //   return GetPtBin(bin-1) + 0.4;
    // else
    //   return GetPtBin(bin-1) + 0.2;

    double previousBin = GetPtBin(bin-1);
    double linInc = 1.;
    double threshold = 5.;
    double logFact = 1 + linInc/threshold;
    if ( previousBin < threshold ) // linear
      return double(int((previousBin + linInc)*10))/10;
    else { // logarithmic
      return double(int((previousBin * logFact)*10))/10;
    }
  }

  //-----------------------------------------------------------------------------
  void MakePtBins() {
    // function for setting Pt bins

    int bin = -1;
    do {
      ++bin;
      ptBinEdges[bin] = GetPtBin(bin);
    } while(ptBinEdges[bin] < 40.);
    nPtBins = bin -2;

    printf("Making Pt Bins:\n");
    for(int b=0; b < nPtBins+1; ++b)
      printf("%.1f, ", ptBinEdges[b]);
    printf("\n N. Bins: %d\n", nPtBins);


    // for(int bin = 0; bin <= nPtBins; ++bin){
    //   ptBinEdges[bin] = GetPtBin(bin);
    //   printf("%.1f, ", ptBinEdges[bin]);
    // }
    // printf("\n");
  }

  //-----------------------------------------------------------------------------
  Double_t CGausPol1(Double_t * x, Double_t * par){
    //Parameterization of Real/Mixed ratio
    Double_t m=par[1] ;
    Double_t s=par[2] ;
    Double_t dx=(x[0]-m)/s ;
    return par[0]*exp(-dx*dx/2.)+par[3]+par[4]*(x[0]-kMean) ;
  }

  //-----------------------------------------------------------------------------
  Double_t CGausPol2(Double_t * x, Double_t * par){
    //Another parameterization of Real/Mixed ratio7TeV/README
    Double_t m=par[1] ;
    Double_t s=par[2] ;
    Double_t dx=(x[0]-m)/s ;
    return par[0]*exp(-dx*dx/2.)+par[3]+par[4]*(x[0]-kMean)+par[5]*(x[0]-kMean)*(x[0]-kMean) ;
  }
  //-----------------------------------------------------------------------------
  Double_t CGausPol0(Double_t * x, Double_t * par){
    //Parameterizatin of signal
    Double_t m=par[1] ;
    Double_t s=par[2] ;
    Double_t dx=(x[0]-m)/s ;
    return par[0]*exp(-dx*dx/2.)/TMath::Sqrt(TMath::TwoPi())/s+par[3] ;
  }
  //-----------------------------------------------------------------------------
  Double_t CPol1(Double_t * x, Double_t * par){
    //Normalizatino of Mixed
    return par[0]+par[1]*(x[0]-kMean) ;
  }
  //-----------------------------------------------------------------------------
  Double_t CPol2(Double_t * x, Double_t * par){
    //Another normalization of  Mixed
    return par[0]+par[1]*(x[0]-kMean)+par[2]*(x[0]-kMean)*(x[0]-kMean) ;
  }


  // Input Definitions
  TFile* Input::fFile = 0;
  Input::Input(const TString& fileName, const RawProduction::TriggerBin& inputBin, TString listPath)
  : fList(0x0), fBin(inputBin.Trigger())
  {
    // File
    if(fFile && !fileName.EqualTo(fFile->GetName())){
      fFile->Close();
      delete fFile;
      fFile = 0x0;
    }

    if(! fFile) {
      Printf("Opening %s", fileName.Data());
     fFile = TFile::Open(fileName.Data(), "READ");
    }

    if( listPath.EqualTo("") ) {
      char cstr[256] = "";
      if( pPb1 == centBinVersion ) {
	sprintf(cstr, "PHOSPi0pPb_%s/PHOSPi0pPb_%sCoutput1", fBin.Trigger().Data(), fBin.Trigger().Data());
      }
      if(PbPb1 == centBinVersion || PbPb2 == centBinVersion  ){
	sprintf(cstr, "PHOSPi0Flow_%s/PHOSPi0Flow_%sCoutput1", fBin.Trigger().Data(), fBin.Trigger().Data());
      }
      listPath = cstr;
    }

    Printf("Getting list, %s", listPath.Data());
    fFile->GetObject(listPath.Data(), fList);
    if( !fList )
      Printf("ERROR: list not found");
  }

  TH1* Input::GetHistogram(const char* name){
    TObject* obj = fList->FindObject(name);
    TH1* hist = dynamic_cast<TH1*> (obj);
    if( ! hist)
      Printf("MakePi0FitInput::GetHistogram: Error, could not find object of name: %s or cast to hist", name);
    return hist;
  }

  //OutputBin Definitions
  TriggerBin::TriggerBin(const TString& trigger)
  : fTrigger(trigger), fDir(trigger), fKey(trigger)
  { }

  TriggerBin::TriggerBin(const char* trigger)
  : fTrigger(trigger), fDir(trigger), fKey(trigger)
  { }

  TriCenPidBin::TriCenPidBin(Int_t centFrom, Int_t centTo, const TString& pid, const TString& trigger)
  : TriggerBin(trigger), fCentFrom(centFrom), fCentTo(centTo), fPID(pid)
  {
    fDir.Form("%s/c%02i-%02i/%s", trigger.Data(), centFrom, fCentTo, pid.Data());
    fKey.Form("%s_c%02i-%02i_%s", trigger.Data(), centFrom, fCentTo, pid.Data());
  }

  Output::Output(const TString& fileName, const char* options)
  : fFile(0x0)
  {
    TDirectory* priorDir = gDirectory;
    fFile = TFile::Open(fileName.Data(), options);
    priorDir->cd();
  }
  Output::~Output()
  {
    if( fFile )
      fFile->DeleteAll();
    delete fFile;
  }


  void Output::SetDir(const TriggerBin& inBin)
  {
    TDirectory* dir = (TDirectoryFile*) fFile;
    TStringToken dirs(inBin.Dir(), "/");
    while( dirs.NextToken() ) {
      Printf("%s", dirs.Data());
      TDirectory* ndir = dir->GetDirectory(dirs.Data());
      if(!ndir)
	dir = dir->mkdir(dirs.Data());
      else
	dir = ndir;
    }
    dir->cd();
  }

  TH1* Output::GetHistogram(const TString& name, const RawProduction::TriggerBin& inBin)
  {
    TDirectory* dir = fFile->GetDirectory(inBin.Dir().Data(), true);
    TH1* hist = dynamic_cast<TH1*>( dir->Get(name.Data()) );
    if( hist )
      return hist;
    else {
      Printf("ERROR: Output::GetHistogram: %s could not be found", name.Data());
      return 0x0;
    }
  }
  
  TH1* Output::GetHistogram(const TString& name) {
    TH1* hist = dynamic_cast<TH1*>( fFile->Get(name.Data()) );
    if( hist )
      return hist;
    else {
      Printf("ERROR: Output::GetHistogram: %s could not be found", name.Data());
      return 0x0;
    }
  }




  void Output::Write()
  {
    fFile->Write();
  }

  const TArrayD& GetBinEdges( const TString& trigger )
  {
    static TArrayD binEdges;

    if( pPb1 == centBinVersion ) {
      const int nbins = 5;
      Double_t cbin[nbins+1] = {0., 20., 40., 60., 80., 100.};
      binEdges = TArrayD(nbins+1, cbin);
    }
    if( PbPb2 == centBinVersion ) {
      if ( trigger.EqualTo("kCentral") ) {
	const int nbins = 4;
	Double_t cbin[nbins+1] = {0., 5., 8., 9., 10.};
	binEdges = TArrayD(nbins+1, cbin);
      } 
      else if ( trigger.EqualTo("kSemiCentral") ) {
	const int nbins = 8;
	Double_t cbin[nbins+1] = {10., 11., 12., 13., 15., 20., 30., 40., 50.};
	binEdges = TArrayD(nbins+1, cbin);
      }
      else if( trigger.EqualTo("kMB") || trigger.EqualTo("kPHOSPb") ) {
        const int nbins = 8;
        Double_t cbin[nbins+1] = {0., 10., 20., 30., 40., 50., 60., 70., 80.};
	binEdges = TArrayD(nbins+1, cbin);
      } 
    }
    if ( PbPb1 == centBinVersion ) {
      Printf("ERROR:GetBinEdges PbPb1 no longer in use!");
    }
    
    return binEdges;
  }
 
  void FitRanges(double lowerEdge, double upperEdge)
  {
    if(PbPb1 == centBinVersion || PbPb2 == centBinVersion  )
      {
	if( upperEdge < 2.1 ) {
	  rangeMin = 0.1;
	  rangeMax = 0.2;
	} else if( upperEdge < 3.1 ) {
	  rangeMin = 0.08;
	  rangeMax = 0.22;
	} else if( upperEdge < 5.1 ) {
	  rangeMin = 0.08;
	  rangeMax = 0.25;
	} else if( upperEdge < 10.1 ) {
	  rangeMin = 0.07;
	  rangeMax = 0.3;
	} else {
	  rangeMin = 0.05;
	  rangeMax = 0.3;
	}
      }
    else if( pPb1 == centBinVersion)
      {
	if( upperEdge < 1.0 ) {
	  rangeMin = 0.08;
	  rangeMax = 0.18;
	} else if( upperEdge < 3.1 ) {
	  rangeMin = 0.08;
	  rangeMax = 0.18;
	} else if( upperEdge < 5.1 ) {
	  rangeMin = 0.08;
	  rangeMax = 0.2;
	} else if( upperEdge < 10.1 ) {
	  rangeMin = 0.05;
	  rangeMax = 0.3;
	} else {
	  rangeMin = 0.05;
	  rangeMax = 0.3;
	}
      }
  }



  TH1* GetHistogram_cent(Input& input, const TString& name, int fromCent, int toCent)
  {
    // Gets Histogram of name with centrality selection [fromCent,toCent)
    
    TH1* hist = 0x0;

    // Bin edges such as in LEGO Train
    TArrayD binEdges = GetBinEdges(input.Bin().Trigger());
    
    // from bin edges and [fromCent,toCent): determine [fromBin,toBin]
    int fromBin = -1;
    int toBin = -1;
    for(int idx = 0; idx < binEdges.GetSize()-1; ++idx) {
      if(fromCent == binEdges[idx])
	fromBin = idx;
      if( toCent == binEdges[idx+1])
	toBin = idx;
    }
    // if found, Merge:
    if( fromBin >= 0 && toBin >= fromBin )
      hist = MergeHistogram_cent(input, name, fromCent, toCent, fromBin, toBin);
    
    if( ! hist ) {
      Printf("ERROR:GetHistogram_cent: %02i-%02i not possible for %s trigger", fromCent, toCent, input.Bin().Trigger().Data());
      return 0x0;
    }

    hist->SetTitle(Form("%s, %02i-%02i%%", hist->GetTitle(), fromCent, toCent));
    return hist;
  }

  TH1* MergeHistogram_cent(Input& input, const TString& name, int fromCent, int toCent, int fromCentIndex, int toCentIndex)
  {
    // Merger (All cent) for histograms following the naming patern of %s_cen%i, 
    //
    // Merges centralites bins into one histogram, from including to including, and names the histogram using the patern above.
    // If an histogram with that name Allready exist in the current directory (gDirectory), then no merge
    // occurs and this hist. is simply returned.
    // take note that toCent is assumed exclusive, and toCentIndex is inclusive.

    char mergeHistName[256] = "";
    sprintf(mergeHistName, "%s_cen%02i-%02i", name.Data(), fromCent, toCent);

    // Check if histogram allready exists in current directory.
    TH1* mergeHist = dynamic_cast<TH1*>( gDirectory->FindObject(mergeHistName) );
    if ( mergeHist )
      return mergeHist;

    // If not so; get the first hist, clone, and add the others
    char cname[256] = "";
    sprintf(cname, "%s_cen%i", name.Data(), fromCentIndex);
    TH1* hist0 = input.GetHistogram(cname);
    TH1 * histMerged = (TH1*) hist0->Clone(mergeHistName);

    Printf(cname);
    for(int cent=fromCentIndex+1; cent <= toCentIndex; ++cent) {
      sprintf(cname, "%s_cen%i", name.Data(), cent);
      Printf(cname);
      TH1* nextHist = input.GetHistogram(cname);
      if( ! nextHist ) {Printf("ERROR: Merge of histograms failed"); delete histMerged; return 0x0; }
      histMerged->Add(nextHist);
    }
    return histMerged;
  }



  //-----------------------------------------------------------------------------
  void PPRstyle()
  {

    //////////////////////////////////////////////////////////////////////
    //
    // ROOT style macro for the TRD TDR
    //
    //////////////////////////////////////////////////////////////////////

    gStyle->SetPalette(1);
    gStyle->SetCanvasBorderMode(-1);
    gStyle->SetCanvasBorderSize(1);
    gStyle->SetCanvasColor(10);

    gStyle->SetFrameFillColor(10);
    gStyle->SetFrameBorderSize(1);
    gStyle->SetFrameBorderMode(-1);
    gStyle->SetFrameLineWidth(1.2);
    gStyle->SetFrameLineColor(1);

    gStyle->SetHistFillColor(0);
    gStyle->SetHistLineWidth(1);
    gStyle->SetHistLineColor(1);

    gStyle->SetPadColor(10);
    gStyle->SetPadBorderSize(1);
    gStyle->SetPadBorderMode(-1);

    gStyle->SetStatColor(10);
    gStyle->SetTitleColor(kBlack,"X");
    gStyle->SetTitleColor(kBlack,"Y");

    gStyle->SetLabelSize(0.04,"X");
    gStyle->SetLabelSize(0.04,"Y");
    gStyle->SetLabelSize(0.04,"Z");
    gStyle->SetTitleSize(0.04,"X");
    gStyle->SetTitleSize(0.04,"Y");
    gStyle->SetTitleSize(0.04,"Z");
    gStyle->SetTitleFont(42,"X");
    gStyle->SetTitleFont(42,"Y");
    gStyle->SetTitleFont(42,"X");
    gStyle->SetLabelFont(42,"X");
    gStyle->SetLabelFont(42,"Y");
    gStyle->SetLabelFont(42,"Z");
    gStyle->SetStatFont(42);

    gStyle->SetTitleOffset(1.0,"X");
    gStyle->SetTitleOffset(1.4,"Y");

    gStyle->SetFillColor(kWhite);
    gStyle->SetTitleFillColor(kWhite);

    gStyle->SetOptDate(0);
    gStyle->SetOptTitle(1);
    gStyle->SetOptStat(0);
    gStyle->SetOptFit(111);

  }
}



void MakeRawProductionAll()
{
  //gStyle->SetOptStat(0);
  gStyle->SetOptFit(1);

  RawProduction::Output output;
  
  TArrayD tbin;

  TStringToken triggers("kCentral kMB  kSemiCentral kPHOSPb", " ");
  //TStringToken triggers("kCentral", " ");
  while(triggers.NextToken()) {
    RawProduction::TriggerBin triggerBin(triggers);
    RawProduction::Input input("AnalysisResults.root", triggerBin);

    //RawProduction::MakePi0Fit(input, triggerBin, output);
    
    TStringToken pids("All Allcore Allwou Disp Disp2 Dispcore Disp2core Dispwou CPV CPVcore CPV2 CPV2core Both Bothcore Both2 Both2core", " ");
    while(pids.NextToken()) {
      if(triggers.EqualTo("kMB") || triggers.EqualTo("kPHOSPb")) {
	RawProduction::TriCenPidBin tcpBin(0, 10, pids, triggerBin.Trigger());
	RawProduction::MakePi0FitTCP(input, tcpBin, output);
      }
      if(triggers.EqualTo("kCentral") ) {
	RawProduction::TriCenPidBin tcpBin2(5, 10, pids, triggerBin.Trigger());
	RawProduction::MakePi0FitTCP(input, tcpBin2, output);
	RawProduction::TriCenPidBin tcpBin(0, 5, pids, triggerBin.Trigger());
	RawProduction::MakePi0FitTCP(input, tcpBin, output);
      }
      if(triggers.EqualTo("kSemiCentral") ) {
	RawProduction::TriCenPidBin tcpBin(10, 50, pids, triggerBin.Trigger());
	RawProduction::MakePi0FitTCP(input, tcpBin, output);
      }
    } // pid
  } // trigger
  output.Write();
}

void MakeRawProductionAllpPb()
{
  RawProduction::centBinVersion = RawProduction::pPb1;
  RawProduction::Output output;
  
  TArrayD tbin;

  TStringToken triggers("kINT7 kPHI7", " ");
  //TStringToken triggers("kCentral", " ");
  while(triggers.NextToken()) {
    RawProduction::TriggerBin triggerBin(triggers);
    RawProduction::Input input("AnalysisResults.root", triggerBin);

    RawProduction::MakePi0Fit(input, triggerBin, output);


    TStringToken pids("All Disp CPV Both", " ");
    //TStringToken pids("All Allcore Allwou Disp Disp2 Dispcore Disp2core Dispwou CPV CPVcore CPV2 CPV2core Both Bothcore Both2 Both2core", " ");
    while(pids.NextToken()) {
      if(triggers.EqualTo("kINT7") || triggers.EqualTo("kPHI7")) {
	RawProduction::TriCenPidBin tcpBin(0, 40, pids, triggerBin.Trigger());
	RawProduction::MakePi0FitTCP(input, tcpBin, output);
	RawProduction::TriCenPidBin tcpBin2(40, 60, pids, triggerBin.Trigger());
	RawProduction::MakePi0FitTCP(input, tcpBin2, output);
	RawProduction::TriCenPidBin tcpBin3(60, 100, pids, triggerBin.Trigger());
	RawProduction::MakePi0FitTCP(input, tcpBin3, output);
	RawProduction::TriCenPidBin tcpBin6(0, 100, pids, triggerBin.Trigger());
	RawProduction::MakePi0FitTCP(input, tcpBin6, output);
      }
    } // pid
  } // trigger
  output.Write();
  
}

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