ROOT logo
// MACRO TO COMPUTE THE <pt> from data for D mesons 
// works for D0, Ds and D+; D* case should be tested since the side bands definition is less clear
//
// Requires 
// a 2D (pt,mass) histogram, with fine pt bins in pt (finer than those used for the spectrum, e.g. 100 or 200 MeV/c)
// a histogram of background yield vs pt (with the pt bins in which the <pt> has to be computed)
// a histogram of the invariant mass sigma (with the pt bins in which the <pt> has to be computed)
// optionally a histogram of signal yield (not fully needed) (with the pt bins in which the <pt> has to be computed)
// optionally a histogram of the mean of the signal peak obtained from the fit (with the pt bins in which the <pt> has to be computed)
// The last 4 histograms are among the output of the standard macro used for fitting the mass distributions
// optionally (but strongly recommended) an histograms with prompt D reco efficiencies (in finer bins than those in which the <pt> is wanted, otherwise they will have no effect). 
//            The binning of the efficiency histo should match that of the pt axis of the 2D (pt,mass) plots x rebin (where rebin is used to rebin the data histogram with the method Rebin)
//            e.g. if you have data in 200 MeV/c and efficiency in 500 MeV/c bins than the minimum binning for which data and efficiencis match is 1 GeV/c
//                    -> you have to use rebin=5 (or multiples of 5) to have the macro working (it stops otherwise)
// Options: 
// rebin (see above)
// usefitforsubtraction: with this switched on the pt shape of the backgrond is fitted with an exponential and the fit function is used for the background subtraction in the signal region
//            (useful if there are stat fluctuations in the background pt shape distribution, but take care and check the fit quality in the control plots)
// correct for efficiency: if switched on, the pt distribution of the signal (i.e. that in the signal peak after back subtraction) is weighted by the efficiency
//                         it accounts for the pt dependence of the efficiency -> compulsory if a realistic (corrected) <pt> has to be computed 
//
// useParGenAccOverLimAcc: uses a parametrization for correcting the efficiencies by GenAcc/LimAcc. It is useful since the GenAcc/LimAcc factor might 
//                         not be available in very fine bins, especially at high pt  
//
//
// There are standard methods hard-coded for D0 (DoStandardForD0), D+ and Ds as an example (of course you have to change the paths of the files and the name of the histos!!).
//     To run them (e.g. for D0): 
//    -1 (my advice): copy the macro in your working directory and change the name of the paths and histo there (it helps to retrieve the results in the future). 
//                    Or copy the ingredient files in the working directory,
//     0- set the path of the files 
//     1- .L CalculateAveragePt.C++  (compile the macro, not really needed)
//     2- DoStandardForD0(5,kFALSE,kTRUE,kTRUE,0,3)
//    ... it should be easy :)

//
//
//  For problems write to: andrea.rossi@cern.ch
//
//////////////////////////////////////////////////////////////////////////////////// 

#include <TH2F.h>
#include <TH1F.h>
#include <TH2D.h>
#include <TH1D.h>
#include <TCanvas.h>
#include <TF1.h>
#include <TFile.h>
#include <TDirectory.h>
#include <TMath.h>
#include <TString.h>
#include <TGraphAsymmErrors.h>
#include <TAxis.h>
#include <TLegend.h>

TH2F *hPtInvMass=0x0;
Int_t nptbins=0;
Double_t *ptbinlimits=0x0;
Double_t *rawsignal=0x0,*rawback=0x0,*sigma=0x0,*meansignal=0x0;
Double_t nsigmaSignal=3.,nsigmaSBstart=5.;
Double_t mesonMass=1.8645;
Int_t nbinsx;//=hPtInvMass->GetNbinsX();
Int_t nbinsy;//=hPtInvMass->GetNbinsY();
Double_t binwidthpt;//=hPtInvMass->GetYaxis()->GetBinWidth(1);// ASSUME ALL BINS ARE WITH THE SAME WIDTH
Double_t binwidthInvMss;//=hPtInvMass->GetXaxis()->GetBinWidth(1);// ASSUME ALL BINS ARE WITH THE SAME WIDTH
Double_t ptmin;//=hPtInvMass->GetYaxis()->GetBinLowEdge(1);
Double_t ptmax;//=hPtInvMass->GetYaxis()->GetBinUpEdge(nbinsy);
Bool_t useFitForSubtraction=kFALSE;
Bool_t useParGenAccOverLimAcc=kFALSE;
Bool_t subtractSB=kTRUE;
Bool_t corrForEff=kFALSE;
void SetSubtractSB(Bool_t subtract){subtractSB=subtract;}
void SetCorrForEff(Bool_t correff){corrForEff=correff;}
void SetUseFitForSubtraction(Bool_t useFit){useFitForSubtraction=useFit;}
void SetNsigmaForSignal(Double_t nsigm){nsigmaSignal=nsigm;}
void SetNsigmaStartSB(Double_t nsigm){nsigmaSBstart=nsigm;  
}
void CalculateAveragePt(Int_t rebin=1,Int_t firstbin=0,Int_t lastbin=0);
TF1* ParametricGenAccOverLimAccCorr(){// parametric form of GenAcc/LimAcc correction for D0->Kpi
  TF1 *fGenAccOverLimAcc=new TF1("fat7","[2]+([0]*TMath::ATan([1]*x+[3])+[4]*TMath::Log(1.+x/[5]))",0,24);
  fGenAccOverLimAcc->SetParameters(2.76153e-01,6.69658e-01,8.45865e-01,-1.87709e+00,2.89845e+03,1.39651e+05);  
  return fGenAccOverLimAcc;
}

Int_t standrebin[8]={2,2,2,2,2,2,4,5};
TCanvas **cPtDistrNoSubtr;
TF1 **fitfunc;
TH1D *hAvRawYieldSpectrum,*hSignal,*hMeanSignal,*hEfficNum,*hEfficDenum,*hBack,*hSigma;
void SetHistosEfficiency(TH1D *hNum,TH1D *hDenum){
  hEfficNum=(TH1D*)hNum;
  hEfficDenum=(TH1D*)hDenum;
  
}
TGraphAsymmErrors *grAvRawYieldSpectrum;
TGraphAsymmErrors *grAvPtVSPtmean;

TGraphAsymmErrors *grBackAvPtVSPtmean;

void SetPtBinLimits(const Int_t npt,Double_t *ptbinlim){
  if(nptbins>0){
    delete ptbinlimits;ptbinlimits=0x0;
  }
  nptbins=npt;
  ptbinlimits=new Double_t[nptbins+1];
  for(Int_t bin=0;bin<=nptbins;bin++){
    ptbinlimits[bin]=ptbinlim[bin];
  }
  cPtDistrNoSubtr=new TCanvas*[nptbins];
  fitfunc=new TF1*[nptbins];
}

void SetPtBinLimits(TH1 *histo){
  
  if(nptbins>0){
    delete ptbinlimits;ptbinlimits=0x0;
  }
  TAxis *xax=histo->GetXaxis();
  nptbins=xax->GetNbins();
  ptbinlimits=new Double_t[nptbins+1];
  for(Int_t bin=0;bin<=nptbins;bin++){
    ptbinlimits[bin]=xax->GetBinLowEdge(bin+1);
  }
   cPtDistrNoSubtr=new TCanvas*[nptbins];
   fitfunc=new TF1*[nptbins];
}

void SetHistRawSignal(TH1D *hS){hSignal=hS;
 rawsignal=&(hSignal->GetArray())[1];
 return;}

void SetHistMean(TH1D *hM){hMeanSignal=hM;
 meansignal=&(hMeanSignal->GetArray())[1]; 
 return;
}

void SetHistRawBack(TH1D *hB){hBack=hB;
 rawback=&(hBack->GetArray())[1];
 hAvRawYieldSpectrum=new TH1D(*hBack);
 hAvRawYieldSpectrum->SetName("hAvRawYieldDistrTotPeak");
 hAvRawYieldSpectrum->SetTitle("Average Raw Yield in bins after subtraction from bin counting"); 
 hAvRawYieldSpectrum->Reset(0);
 hAvRawYieldSpectrum->SetLineColor(kRed);
 return;
}
void SetHistSigma(TH1D *hSig){hSigma=hSig;
 sigma=&(hSigma->GetArray())[1];
 return;
}

void SetHistoMassPt(TH2F *h2){
  hPtInvMass=new TH2F(*h2);
  nbinsx=hPtInvMass->GetNbinsX();
  nbinsy=hPtInvMass->GetNbinsY();
  binwidthpt=hPtInvMass->GetYaxis()->GetBinWidth(1);// ASSUME ALL BINS ARE WITH THE SAME WIDTH
  binwidthInvMss=hPtInvMass->GetXaxis()->GetBinWidth(1);// ASSUME ALL BINS ARE WITH THE SAME WIDTH
  ptmin=hPtInvMass->GetYaxis()->GetBinLowEdge(1);
  ptmax=hPtInvMass->GetYaxis()->GetBinUpEdge(nbinsy);
  
}

TH1D* CheckBinningAndMerge(TH1D *hA,TH1D *hB,Double_t precision=0.001,Double_t minX=-9999.,Double_t maxX=-9999.){// Checks that histo hB binning is finer and fits hA binning
  // and return an Histo with hB bins integrated to match than hA bins  
  // TO BE ADDED A CHECK ON THE MIN AND MAX VALUES OF THE AXES IN THE 2 PLOTS
  // NO PARTICULAR TREATMENT OF THE ERROR IN THE INTEGRATION (SHOULD BE OK BUT FOR EFFIENCIES)

  TH1D *hWork=new TH1D(*hA);
  hWork->SetName(Form("%sNewBins",hB->GetName()));
  hWork->SetTitle(hB->GetTitle());
  
  Double_t lebinA,uebinA;
  Int_t binBleA=0,binBueA=0;
  Int_t binBleALast=0,binBueALast=0;
  Int_t maxbinA=hA->GetNbinsX();
  Int_t minbinA=1;
  if(maxX!=-9999.){
    maxbinA=hA->FindBin(maxX);
  }
  if(minX!=-9999.){
    minbinA=hA->FindBin(minX);
  }
  
  for(Int_t binA=minbinA;binA<=maxbinA;binA++){
    uebinA=hA->GetXaxis()->GetBinUpEdge(binA);
    lebinA=hA->GetXaxis()->GetBinLowEdge(binA);
    // Check that Low Edge of binA is close to the low or upper edge of a bin in hB
    // within precition
    binBleA=hB->FindBin(lebinA);    
    
    if(TMath::Abs(hB->GetXaxis()->GetBinLowEdge(binBleA)-lebinA)>precision&&TMath::Abs(hB->GetXaxis()->GetBinUpEdge(binBleA)-lebinA)>precision){
      printf("The bins of the efficiency histo do not match those of the pt spectrum histo (edges 1):\n Cannot correct for efficiensies \n");
      delete hWork;
      return 0x0;
    }
    if(TMath::Abs(hB->GetXaxis()->GetBinLowEdge(binBleA)-lebinA)>TMath::Abs(hB->GetXaxis()->GetBinUpEdge(binBleA)-lebinA))binBleA++;
    if(binBleA<=binBleALast){
      printf("Problems with rebinning Hist B, non compatibility with different bin of Hist A (1)\n");
      delete hWork;
      return 0x0;
    }
    if(hB->GetBinWidth(binBleA)-hA->GetBinWidth(binA)>precision){
      printf("The bins of the efficiency histo do not match those of the pt spectrum histo (bin width 1):\n Cannot correct for efficiensies \n");
      delete hWork;
      return 0x0;
    }
    // Check that Upper Edge of binA is close to the low or upper edge of a bin in hB
    // within precition
    binBueA=hB->FindBin(uebinA);
    if(TMath::Abs(hB->GetXaxis()->GetBinLowEdge(binBueA)-uebinA)>precision&&TMath::Abs(hB->GetXaxis()->GetBinUpEdge(binBueA)-uebinA)>precision){
      printf("The bins of the efficiency histo do not match those of the pt spectrum histo (edges 2) (bin %d Vs %d):\n Cannot correct for efficiensies \n",binA,binBueA);
      printf("%f Vs %f or %f \n",uebinA,hB->GetXaxis()->GetBinLowEdge(binBueA),hB->GetXaxis()->GetBinUpEdge(binBueA));
      delete hWork;
      return 0x0;
    }
    if(TMath::Abs(hB->GetXaxis()->GetBinLowEdge(binBueA)-uebinA)<TMath::Abs(hB->GetXaxis()->GetBinUpEdge(binBueA)-uebinA))binBueA--;
    if(binBueA<=binBueALast){
      printf("Problems with rebinning Hist B, non compatibility with different bin of Hist A (2) \n");
      delete hWork;
      return 0x0;
    }
    if(hB->GetBinWidth(binBueA)-hA->GetBinWidth(binA)>precision){
      printf("The bins of the efficiency histo do not match those of the pt spectrum histo (bin width 2):\n Cannot correct for efficiensies \n");
      delete hWork;
      return 0x0;
    }
    if(binBleA>binBueA){
      printf("Mathcing failure (probably a bug in the code \n");
      delete hWork;
      return 0x0;
    }
    
    hWork->SetBinContent(binA,hB->Integral(binBleA,binBueA));
  }
  
  return hWork;
 
}

Bool_t CorrectForEfficiency(TH1D *hPtHisto){
  TH1D *hWorkNum=0x0,*hWorkDenum=0x0;
  //  hWorkNum=CheckBinningAndMerge(hPtHisto,hEfficNum,0.01,1.,23.9);
  //  printf("ptmin and pt max: %f, %f \n",ptbinlimits[0],ptbinlimits[nptbins]);
  hWorkNum=CheckBinningAndMerge(hPtHisto,hEfficNum,0.01,ptbinlimits[0]*1.0001,ptbinlimits[nptbins]*0.9999);
  hWorkNum->Sumw2();
 
  if(!hWorkNum)return kFALSE;
  hWorkDenum=CheckBinningAndMerge(hPtHisto,hEfficDenum,0.01,ptbinlimits[0]*1.0001,ptbinlimits[nptbins]*0.9999);
  //  hWorkDenum=CheckBinningAndMerge(hPtHisto,hEfficDenum,0.01,1.,23.9);; 
  hWorkDenum->Sumw2();
  if(!hWorkDenum){
    delete hWorkNum;
    return kFALSE;
  }
  TH1D *hWorkNumCl=(TH1D*)hWorkDenum->Clone("hWorkNumCl");
  hWorkNumCl->Divide(hWorkNum,hWorkDenum,1,1,"B");
  if(useParGenAccOverLimAcc){
    TF1 *fGenAccoOverLimAcc=ParametricGenAccOverLimAccCorr();
    for(Int_t j=1;j<=hWorkNumCl->GetNbinsX();j++){
      printf(" EFFF for %f: %f * %f \n",hWorkNumCl->GetBinCenter(j), hWorkNumCl->GetBinContent(j),fGenAccoOverLimAcc->Eval(hWorkNumCl->GetBinCenter(j)));
      hWorkNumCl->SetBinContent(j,hWorkNumCl->GetBinContent(j)*fGenAccoOverLimAcc->Eval(hWorkNumCl->GetBinCenter(j)));
      hWorkNumCl->SetBinError(j,hWorkNumCl->GetBinError(j)*fGenAccoOverLimAcc->Eval(hWorkNumCl->GetBinCenter(j)));
   
    }
  }
  hPtHisto->Divide(hWorkNumCl);
  
  delete hWorkNum;
  delete hWorkNumCl;
  delete hWorkDenum;
  return kTRUE;
}

TH1D *HistoPtShapeFromData(Int_t ptbin,Int_t rebin=1.){
  if(!hPtInvMass){
    printf("No histo set \n");
    return 0x0;
  }
  Double_t mean=mesonMass;
  if(meansignal!=0x0){
    mean=meansignal[ptbin];    
    printf("USING MEAN FROM MASS FIT: %f\n",mean);
  }
  TString namehist="hPtDistrSB_Bin",funcname;
  namehist+=ptbin;

  TString cname="cPtDistrNoSubBin";
  cname+=ptbin;
  cPtDistrNoSubtr[ptbin]=new TCanvas(cname.Data(),"CPtDistrNoSub",700,700);
  
  printf("After Setting Canva \n");
  Int_t binleftpt=-1,binrightpt=-1;
  TH1D *hPtDistrSB=new TH1D(namehist.Data(),"Side band Pt distribution",nbinsy,ptmin,ptmax);
  namehist="hPtDistrTotPeak_Bin";
  namehist+=ptbin;
  printf("After Setting SB hist \n");
  TH1D *hPtDistrTotPeak=new TH1D(namehist.Data(),"Total Pt distribution in signal mass reagion",nbinsy,ptmin,ptmax);  
  for(Int_t jbi=1;jbi<hPtDistrTotPeak->GetNbinsX();jbi++){
    hPtDistrTotPeak->SetBinContent(jbi,0);
    hPtDistrTotPeak->SetBinError(jbi,0);
    hPtDistrSB->SetBinContent(jbi,0);
    hPtDistrSB->SetBinError(jbi,0);
  }
  


  printf("Before loop on xbins \n");
  for(Int_t j=1;j<nbinsx;j++){
    if((hPtInvMass->GetXaxis()->GetBinLowEdge(j)<=mean-nsigmaSBstart*sigma[ptbin])||(hPtInvMass->GetXaxis()->GetBinUpEdge(j)>=mean+nsigmaSBstart*sigma[ptbin])){
      for(Int_t k=1;k<nbinsy;k++){
	if(hPtInvMass->GetYaxis()->GetBinLowEdge(k)>=ptbinlimits[ptbin]&&hPtInvMass->GetYaxis()->GetBinUpEdge(k)<=ptbinlimits[ptbin+1]){
	  hPtDistrSB->SetBinContent(k,hPtDistrSB->GetBinContent(k)+hPtInvMass->GetBinContent(j,k));
	  hPtDistrSB->SetBinError(k,TMath::Sqrt(hPtDistrSB->GetBinError(k)*hPtDistrSB->GetBinError(k)+hPtInvMass->GetBinError(j,k)*hPtInvMass->GetBinError(j,k)));
	}
      }
    }
    else if((hPtInvMass->GetXaxis()->GetBinLowEdge(j)>=mean-nsigmaSignal*sigma[ptbin])&&(hPtInvMass->GetXaxis()->GetBinUpEdge(j)<=mean+nsigmaSignal*sigma[ptbin])){
      for(Int_t k=1;k<nbinsy;k++){
	if(hPtInvMass->GetYaxis()->GetBinLowEdge(k)>=ptbinlimits[ptbin]&&hPtInvMass->GetYaxis()->GetBinUpEdge(k)<=ptbinlimits[ptbin+1]){
	  if(binleftpt==-1)binleftpt=k;
	  hPtDistrTotPeak->SetBinContent(k,hPtDistrTotPeak->GetBinContent(k)+hPtInvMass->GetBinContent(j,k));
	  hPtDistrTotPeak->SetBinError(k,TMath::Sqrt(hPtDistrTotPeak->GetBinError(k)*hPtDistrTotPeak->GetBinError(k)+hPtInvMass->GetBinError(j,k)*hPtInvMass->GetBinError(j,k)));
	  binrightpt=k;
	}
      }
    }    
  }
  hPtDistrSB->Sumw2();
  hPtDistrTotPeak->Sumw2();
  if(rebin!=1){//Rebin and recalculate needed info
    hPtDistrSB->Rebin(rebin);
    hPtDistrTotPeak->Rebin(rebin);
    binleftpt=-1;
    binleftpt=-1;
    for(Int_t k=1;k<=hPtDistrTotPeak->GetNbinsX();k++){      
      if(hPtDistrTotPeak->GetBinLowEdge(k)>=ptbinlimits[ptbin]&&hPtDistrTotPeak->GetBinLowEdge(k+1)<=ptbinlimits[ptbin+1]){
	if(binleftpt==-1)binleftpt=k;
	binrightpt=k;
      }
    }
    binwidthpt=hPtDistrTotPeak->GetBinWidth(1);    
  }
  
  Double_t avptbin=0.,errA=0.,errB=0.,errC=0.,errisq=0.;
  // CALCULATE BACKGROUND AVERAGE PT
  for(Int_t bbin=1;bbin<=hPtDistrSB->GetNbinsX();bbin++){
    avptbin+=hPtDistrSB->GetBinCenter(bbin)*hPtDistrSB->GetBinContent(bbin)*hPtDistrSB->GetBinWidth(bbin);
    errisq=hPtDistrSB->GetBinError(bbin)*hPtDistrSB->GetBinError(bbin);
    errA+=hPtDistrSB->GetBinCenter(bbin)*hPtDistrSB->GetBinCenter(bbin)*errisq;
    errB+=hPtDistrSB->GetBinCenter(bbin)*errisq;
    errC+=errisq;
    // printf("ERROR VALUES: %f, %f \n",errA,errB);
  }
  avptbin/=hPtDistrSB->Integral("width");
  errisq=TMath::Sqrt(errA-2.*avptbin*errB+avptbin*avptbin*errC)/hPtDistrSB->Integral("width");
  if(!grBackAvPtVSPtmean){
    grBackAvPtVSPtmean=new TGraphAsymmErrors();
    grBackAvPtVSPtmean->SetName("grBackAvPtVSPtmean");
  }
  Int_t grbin=grBackAvPtVSPtmean->GetN();
  grBackAvPtVSPtmean->SetPoint(grbin,0.5*(ptbinlimits[ptbin+1]+ptbinlimits[ptbin]),avptbin);
  grBackAvPtVSPtmean->SetPointError(grbin,0.5*(ptbinlimits[ptbin+1]-ptbinlimits[ptbin]),0.5*(ptbinlimits[ptbin+1]-ptbinlimits[ptbin]),errisq,errisq);

  TH1D *hPtSignalFromSubtraction=new TH1D(*hPtDistrTotPeak);
  namehist="hPtSignalFromSubtraction_Bin";
  namehist+=ptbin;
  hPtSignalFromSubtraction->SetName(namehist.Data());
  hPtSignalFromSubtraction->SetTitle("Signal Pt distr from subtraction");


  if(subtractSB){
    if(!useFitForSubtraction)hPtSignalFromSubtraction->Add(hPtDistrSB,-rawback[ptbin]*(nsigmaSignal/3.)/hPtDistrSB->Integral());// ROUGH LINEAR SCALING OF BACKGOUND!!
    else{
      funcname="expofit";
      funcname+=ptbin;
      fitfunc[ptbin]=new TF1(funcname.Data(),"expo",ptbinlimits[ptbin],ptbinlimits[ptbin+1]);        
      TCanvas *cTempt=new TCanvas();
      cTempt->cd();
      hPtDistrSB->Fit(fitfunc[ptbin],"RLEV","",ptbinlimits[ptbin],ptbinlimits[ptbin+1]);
      delete cTempt;
      for(Int_t jb=binleftpt;jb<=binrightpt;jb++){
	printf("Err before sub: %f \n",hPtSignalFromSubtraction->GetBinError(jb));
	hPtSignalFromSubtraction->SetBinContent(jb,hPtSignalFromSubtraction->GetBinContent(jb)-fitfunc[ptbin]->Eval(hPtSignalFromSubtraction->GetBinCenter(jb))/fitfunc[ptbin]->Integral(ptbinlimits[ptbin],ptbinlimits[ptbin+1])*binwidthpt*rawback[ptbin]*(nsigmaSignal/3.));// ROUGH LINEAR SCALING OF BACKGOUND!!
	printf("Err after sub: %f \n\n",hPtSignalFromSubtraction->GetBinError(jb));
      }    
    }
  }
  
  
  cPtDistrNoSubtr[ptbin]->Divide(1,2);
  cPtDistrNoSubtr[ptbin]->cd(1);
  hPtDistrSB->Draw();
  cPtDistrNoSubtr[ptbin]->cd(2);
  if(corrForEff){
    if(!CorrectForEfficiency(hPtSignalFromSubtraction)){
      printf("Correction for efficieny failed \n");
    }    
  }
  hPtDistrTotPeak->Draw();  
  hPtSignalFromSubtraction->Draw("sames");

  
  return hPtSignalFromSubtraction;

}

void CalculateAveragePt(TH2* hMassPt,TH1D *hB,TH1D *hSigm,TH1D *hEffNum=0x0,TH1D *hEffDenum=0x0,TH1D *hS=0x0,TH1D *hMean=0x0,Int_t rebin=1,Int_t firstbin=3,Int_t lastbin=8){
  
  SetPtBinLimits(hB);
  SetHistoMassPt((TH2F*)hMassPt);
  SetHistRawBack(hB);
  SetHistSigma(hSigm);
  if(((!hEffNum)&&(hEffDenum))||((hEffNum)&&(!hEffDenum))){
    printf("Two histos are needed for the efficiency: numerator and denumerator (for rebinning) \n");
  }
  else if(hEffNum){
    SetHistosEfficiency(hEffNum,hEffDenum);
    //    SetHistEffNum(hEffNum);
    // SetHistEffDenum(hEffDenum);
  }
  if(hS)SetHistRawSignal(hS);  
  if(hMean)SetHistMean(hMean);  
  printf("Histos set \n");
  CalculateAveragePt(rebin,firstbin,lastbin);
}

void CalculateAveragePt(Int_t rebin,Int_t firstbin,Int_t lastbin){
  
  TH1D *hPtSpectra;
  if(rebin>0){
    hPtSpectra=new TH1D("hPtDistrTotPeak","Total Pt distribution in signal mass reagion",nbinsy,ptmin,ptmax); 
    if(rebin!=1)hPtSpectra->Rebin(rebin);
  }
  else if(rebin==-1){
    printf("Standard rebinning not implemented yet  \n");return;
  }
  else {
    printf("Wrong rebin numnber \n");return;
  }

  grAvRawYieldSpectrum=new TGraphAsymmErrors();
  grAvPtVSPtmean=new TGraphAsymmErrors();
  grBackAvPtVSPtmean=new TGraphAsymmErrors();
  grBackAvPtVSPtmean->SetName("grBackAvPtVSPtmean");
  

  Double_t avptbin=0.,errA,errB,errC,errisq;
  for(Int_t bin=firstbin;bin<=lastbin;bin++){    
    //    printf("Before Getting Subtracted Histo \n");
    avptbin=0.;
    errA=0.;
    errB=0.;
    errC=0.;
    errisq=0.;
    
    TH1D *h=HistoPtShapeFromData(bin,rebin);
    hPtSpectra->Add(h);
    hAvRawYieldSpectrum->SetBinContent(bin+1,h->Integral("width")/hAvRawYieldSpectrum->GetBinWidth(bin+1));
    for(Int_t bbin=1;bbin<=h->GetNbinsX();bbin++){
      avptbin+=h->GetBinCenter(bbin)*h->GetBinContent(bbin)*h->GetBinWidth(bbin);
      errisq=h->GetBinError(bbin)*h->GetBinError(bbin);
      errA+=h->GetBinCenter(bbin)*h->GetBinCenter(bbin)*errisq;
      errB+=h->GetBinCenter(bbin)*errisq;
      errC+=errisq;
      // printf("ERROR VALUES: %f, %f \n",errA,errB);
    }
    avptbin/=h->Integral("width");
    errisq=TMath::Sqrt(errA-2.*avptbin*errB+avptbin*avptbin*errC)/h->Integral("width");

    grAvRawYieldSpectrum->SetPoint(bin-firstbin,avptbin,h->Integral("width")/hAvRawYieldSpectrum->GetBinWidth(bin+1));
    grAvRawYieldSpectrum->SetPointError(bin-firstbin,avptbin-ptbinlimits[bin],ptbinlimits[bin+1]-avptbin,errisq/2.,errisq/2.);   

    grAvPtVSPtmean->SetPoint(bin-firstbin,0.5*(ptbinlimits[bin+1]+ptbinlimits[bin]),avptbin);
    grAvPtVSPtmean->SetPointError(bin-firstbin,0.5*(ptbinlimits[bin+1]-ptbinlimits[bin]),0.5*(ptbinlimits[bin+1]-ptbinlimits[bin]),errisq,errisq);
    

    hSignal->SetBinContent(bin+1,hSignal->GetBinContent(bin+1)*hPtSpectra->GetBinWidth(1)/hSignal->GetBinWidth(bin+1));
    hSignal->SetBinError(bin+1,hSignal->GetBinError(bin+1)*hPtSpectra->GetBinWidth(1)/hSignal->GetBinWidth(bin+1));
    //    hPtSpectra->Add(HistoPtShapeFromData(bin,rebin),1./efficiency[bin]/nev*factorTheoryCompare*primaryCharmCorrect[bin]/binwidthpt);//(ptbinlimits[bin+1]-ptbinlimits[bin])
    cPtDistrNoSubtr[bin]->Draw();
  }

   TString nameout="ptCorrection";
   TString namegrRawAvPt="grAvRawVsAvPt",namegrAvPtPtmean="grAvPtMeanPt";
   if(useFitForSubtraction){
     nameout.Append("FitSB");  
     namegrRawAvPt.Append("FitSB");  
     namegrAvPtPtmean.Append("FitSB"); 
   }
   if(!subtractSB){
     namegrRawAvPt.Append("NoSBsub.root");
     namegrAvPtPtmean.Append("NoSBsub.root");
     nameout.Append("NoSBsubtract.root");
   }
   else nameout.Append(".root");
  

   grAvRawYieldSpectrum->SetName(namegrRawAvPt.Data());
   grAvRawYieldSpectrum->SetMarkerStyle(21);
   grAvRawYieldSpectrum->SetMarkerSize(1.2);
   grAvRawYieldSpectrum->SetMarkerColor(kBlue);
   grAvRawYieldSpectrum->SetLineColor(kBlue);

   grAvPtVSPtmean->SetName(namegrAvPtPtmean.Data());
   grAvPtVSPtmean->SetMarkerStyle(21);
   grAvPtVSPtmean->SetMarkerSize(1.2);
   grAvPtVSPtmean->SetMarkerColor(kBlue);
   grAvPtVSPtmean->SetLineColor(kBlue);



   //  TFile *ftheory=TFile::Open("/Users/administrator/ALICE/CHARM/ppData_2010/PtSelInBin/predictions_D0.root");
   // TH1D *histoThCompareCentral=(TH1D*)ftheory->Get("hD0Kpipred_central");
   // histoThCompareCentral->Rebin(5);  
 
  
 

  TCanvas *cPtSpectra=new TCanvas("cPtSpectra","cPtSpectra",700,700);
  cPtSpectra->cd();
  hPtSpectra->Draw();
  //hAvRawYieldSpectrum->Draw("same");
  hSignal->SetLineColor(kGreen);
  hSignal->Draw("same");
  grAvRawYieldSpectrum->Draw("p");

  TCanvas *cAvPtVSPtmean=new TCanvas("cAvPtVSPtmean","cAvPtVSPtmean",700,700);
  cAvPtVSPtmean->cd();
  grAvPtVSPtmean->Draw("ap");
  grAvPtVSPtmean->GetYaxis()->SetTitle("<p_{t}> (GeV/c)");
  grAvPtVSPtmean->GetXaxis()->SetTitle("bin centre p_{t} (GeV/c)");

  grBackAvPtVSPtmean->SetMarkerColor(kRed);
  grBackAvPtVSPtmean->SetMarkerStyle(24);
  grBackAvPtVSPtmean->SetLineColor(kRed);
  grBackAvPtVSPtmean->GetYaxis()->SetTitle("<p_{t}> (GeV/c)");
  grBackAvPtVSPtmean->GetXaxis()->SetTitle("bin centre p_{t} (GeV/c)");
  grBackAvPtVSPtmean->Draw("p");
  

  TLegend *leg=new TLegend(0.7,0.5,0.95,0.2,"","NDC");
  leg->AddEntry(grAvPtVSPtmean,"signal","lp");
  leg->AddEntry(grBackAvPtVSPtmean,"background","lp");
  leg->Draw();

  // PRINTING RESULTS
  Double_t *ygrSignal,*ygrBack,*eygrSignal,*eygrBack;
  ygrSignal=grAvPtVSPtmean->GetY();
  eygrSignal=grAvPtVSPtmean->GetEYhigh();
  ygrBack=grBackAvPtVSPtmean->GetY();
  eygrBack=grBackAvPtVSPtmean->GetEYhigh();
  printf("Av Pt for signal: \n");
  for(Int_t in=0;in<grAvPtVSPtmean->GetN();in++){
    cout<<ygrSignal[in]<<endl;
  }  
  printf("Error on Av Pt for signal: \n");
  for(Int_t in=0;in<grAvPtVSPtmean->GetN();in++){
    cout<<eygrSignal[in]<<endl;
  }

 printf("Av Pt for back: \n");
  for(Int_t in=0;in<grAvPtVSPtmean->GetN();in++){
    cout<<ygrBack[in]<<endl;
  }  
  printf("Error on Av Pt for back: \n");
  for(Int_t in=0;in<grAvPtVSPtmean->GetN();in++){
    cout<<eygrBack[in]<<endl;
  }

  
  

  nameout="ptCorrection";
  if(useFitForSubtraction)nameout.Append("FitSB");  
  if(!subtractSB)nameout.Append("NoSBsubtract.root");
  else nameout.Append(".root");
  TFile *fout=new TFile(nameout.Data(),"RECREATE");
  fout->cd();
  grAvPtVSPtmean->Write();
  grAvRawYieldSpectrum->Write();
  grBackAvPtVSPtmean->Write();
  cPtSpectra->Write();
  for(Int_t bin=firstbin;bin<=lastbin;bin++){  
    cPtDistrNoSubtr[bin]->Write();
  }



  fout->Close();

  //  histoThCompareCentral->Draw("sames");
}


void DoStandardForD0(Int_t rebin,Bool_t usefit,Bool_t corrforeff=kTRUE,Bool_t useParGenAccLimacc=kTRUE,Int_t firstbin=0,Int_t lastbin=3){// firstbin and lastbin are w.r.t. the signal histo plot, starting from 0
  
  //N.B.  ADAPT THE PART BELOW WITH YOUR PATHS AND HISTO NAMES
  TFile *fData=TFile::Open("/Users/administrator/ALICE/CHARM/PbPBdata_2011/TestTrain/2013June4TrainData92_MC61/Data/Standard/RAAvsNPart/FinalMassPlots_v2/RawYieldBoth_tight.root");
  TFile *fCF=TFile::Open("/Users/administrator/ALICE/CHARM/PbPBdata_2011/2013Jun8MCptWeightDataMoreSplit/MergeWithMyCode/Standard/EffPrompt/fileEff_D0_from_c.root");//EffForHFspectrumLHC10f6NOTd4Corr.root");
  TFile *fDataList=TFile::Open("/Users/administrator/ALICE/CHARM/PbPBdata_2011/TestTrain/2013June4TrainData92_MC61/Data/AnalysisResults.root");
  TDirectory *fdir=(TDirectory*)fDataList->Get("PWG3_D2H_d0D0");
  TList *lslist=(TList*)fdir->Get("clistTGHCsign_d0D0");
  TH2F *hMassPt=(TH2F*)lslist->FindObject("hInvMassPtTGHCsign");
  TH1D *hSig=(TH1D*)fData->Get("hSigma");
  TH1D *hBackground=(TH1D*)fData->Get("hBackground");
  TH1D *hSign=(TH1D*)fData->Get("hSignal");
  TH1D *hMean=(TH1D*)fData->Get("hMass");

  mesonMass=1.86484;
  
  TH1D *hEffNum=(TH1D*)fCF->Get("hRecoPIDpt");
  TH1D *hEffDeNum=(TH1D*)fCF->Get("hMCAccpt");

  /////////////////////////////////////////////////////////////////  
  //   FOR DEBUGGING: CHECK EFFICIENCY PLOTS REBINNING
  //   TCanvas *cEff=new TCanvas();
  //   cEff->cd();
  //   TH1D *hRatio=new TH1D(*(TH1D*)hEffNum);
  //   hRatio->Divide(hEffDeNum);

  //   TH1D *hPt=(TH1D*)(hMassPt->ProjectionY());  
  
  //   hPt->Rebin(rebin);cout<< hPt->GetBinWidth(1)<<endl;
  //   cout<< hEffNum->GetBinWidth(1)<<endl;
  //   TH1D *hWorkNum=0x0;
  //   hWorkNum=CheckBinningAndMerge(hPt,(TH1D*)hEffNum,0.01,23.9);
  //   TH1D *hWorkDenum=0x0;
  //   hWorkDenum=CheckBinningAndMerge(hPt,(TH1D*)hEffDeNum,0.01.,23.9);
  //   TH1D *hWorkRatio=new TH1D(*hWorkNum);
  //   hWorkRatio->Divide(hWorkDenum);
  
  
  //   hWorkRatio->Draw();
  //   hPt->Draw("sames");
  
  //   hRatio->Draw("sames");
  /////////////////////////////////////////////////////////////////

  SetNsigmaForSignal(3.);
  SetNsigmaStartSB(5.);
  SetUseFitForSubtraction(usefit);
  corrForEff=corrforeff;
  useParGenAccOverLimAcc=useParGenAccLimacc;
  CalculateAveragePt(hMassPt,hBackground,hSig,hEffNum,hEffDeNum,hSign,hMean,rebin,firstbin,lastbin);
  



}


void DoStandardForDs(Int_t rebin,Bool_t usefit,Bool_t corrforeff=kTRUE,Int_t firstbin=0,Int_t lastbin=3){// firstbin and lastbin are w.r.t. the signal histo plot, starting from 0

  //N.B.  ADAPT THE PART BELOW WITH YOUR PATHS AND HISTO NAMES
TFile *fData=TFile::Open("RawYieldBoth.root"); 
TFile *fCF=TFile::Open("fileEff_Ds_CommonFramework_from_c_Enriched.root"); 

TH1D *hSig=(TH1D*)fData->Get("hSigma"); 
TH1D *hMean=(TH1D*)fData->Get("hMass"); 
TH1D *hBackground=(TH1D*)fData->Get("hBackground"); 
TH1D *hSign=(TH1D*)fData->Get("hSignal"); 

TH1D *hEffNum=(TH1D*)fCF->Get("hRecoPIDpt"); 
TH1D *hEffDeNum=(TH1D*)fCF->Get("hMCAccpt"); 
 if(!hEffNum)return;
 if(!hEffDeNum)return;
 TFile *file=new TFile("AnalysisResults.root"); 
 TDirectory *dirFile=(TDirectory*)file->Get("PWG3_D2H_InvMassDs"); 
 TList *cOutput = (TList*)dirFile->Get("coutputDs"); 
 TH2F *hMassPt=(TH2F*)cOutput->FindObject("hPtVsMass");
 //TH2F *hMassPt=(TH2F*)fData->Get("hPtVsMass"); 
 
 mesonMass=1.96847;

 SetUseFitForSubtraction(usefit);
 corrForEff=corrforeff;
 CalculateAveragePt(hMassPt,hBackground,hSig,hEffNum,hEffDeNum,hSign,hMean,rebin,firstbin,lastbin);
 

}
void DoStandardForDplus(Int_t rebin,Bool_t usefit,Bool_t corrforeff=kTRUE,Int_t firstbin=0,Int_t lastbin=2){
// firstbin and lastbin are w.r.t. the signal histo plot, starting from 0

  //N.B.  ADAPT THE PART BELOW WITH YOUR PATHS AND HISTO NAMES
  
  TFile *fData=TFile::Open("/Users/administrator/ALICE/CHARM/ppData_2010/PtSelInBin/testWithEff/Dplus/RawYieldBoth.root");
  TFile *fCF=TFile::Open("/Users/administrator/ALICE/CHARM/ppData_2010/PtSelInBin/testWithEff/Dplus/CFEfficiency.root");
  TH2F *hMassPt=(TH2F*)fData->Get("hPtVsMassTC");
  TH1D *hSig=(TH1D*)fData->Get("hSigma");
  TH1D *hMean=(TH1D*)fData->Get("hMean");
  TH1D *hBackground=(TH1D*)fData->Get("hBackground");
  TH1D *hSign=(TH1D*)fData->Get("hSignal");
  
  TH1D *hEffNum=(TH1D*)fCF->Get("RecoPID");
  TH1D *hEffDeNum=(TH1D*)fCF->Get("GenAcc");
  
  mesonMass=1.86962; 

  /////////////////////////////////////////////////////////////////
  //   FOR DEBUGGING: CHECK EFFICIENCY PLOTS REBINNING
  //   TCanvas *cEff=new TCanvas();
  //   cEff->cd();
  //   TH1D *hRatio=new TH1D(*(TH1D*)hEffNum);
  //   hRatio->Divide(hEffDeNum);

  //   TH1D *hPt=(TH1D*)(hMassPt->ProjectionY());  
  
  //   hPt->Rebin(rebin);cout<< hPt->GetBinWidth(1)<<endl;
  //   cout<< hEffNum->GetBinWidth(1)<<endl;
  //   TH1D *hWorkNum=0x0;
  //   hWorkNum=CheckBinningAndMerge(hPt,(TH1D*)hEffNum,0.01,23.9);
  //   TH1D *hWorkDenum=0x0;
  //   hWorkDenum=CheckBinningAndMerge(hPt,(TH1D*)hEffDeNum,0.01.,23.9);
  //   TH1D *hWorkRatio=new TH1D(*hWorkNum);
  //   hWorkRatio->Divide(hWorkDenum);
  //   hWorkRatio->Draw();
  //   hPt->Draw("sames");
  //   hRatio->Draw("sames");
  /////////////////////////////////////////////////////////////////  

  SetUseFitForSubtraction(usefit);
  corrForEff=corrforeff;
  CalculateAveragePt(hMassPt,hBackground,hSig,hEffNum,hEffDeNum,hSign,hMean,rebin,firstbin,lastbin);
  



}




TH1D *SmearEffHisto(TH1D *hInput,TString name="hEffNum",Double_t maxPt=40.,Double_t step=0.1){
  Int_t nbins=(Int_t)(maxPt/step);
  Int_t maxBinA=hInput->GetNbinsX();
  Int_t binBl,binBu;
  Double_t binlea,binuea,contInMin,contInMax;

  TH1D *h=new TH1D(name.Data(),name.Data(),nbins,0.,maxPt);
  for(Int_t bin=1;bin<=maxBinA;bin++){
    contInMin=hInput->GetBinContent(bin);
    if(bin==maxBinA) contInMax=contInMin*1.2;
    else contInMax=hInput->GetBinContent(bin+1);
    binlea=hInput->GetBinLowEdge(bin);
    binuea=hInput->GetXaxis()->GetBinUpEdge(bin);
    binBl=h->FindBin(binlea);
    binBu=h->FindBin(binuea);
    for(Int_t bb=binBl;bb<binBu;bb++){
      h->SetBinContent(bb,contInMin+(bb-binBl)*(contInMax-contInMin)/(binBu-binBl));
    } 
  }
  return h;
  
}


void AverageD0DplusResults(TString fileD0="/Users/administrator/ALICE/CHARM/ppData_2010/2011_Jul_05/data/LHC10bcdeAOD057/AvPt/MassRegSel3PkMore5SBEffCorrMeanFit/ptCorrectionFitSB.root",TString fileDplus="/Users/administrator/ALICE/CHARM/ppData_2010/2011_Jul_05/Dplus/AvPt/2011Jul26Renu/average_ptNew.root"){
  
  Double_t *yD0,*eyD0,*yDplus,*eyDplus,*x,*exLow,*exHigh;
  Double_t error=0.,average=0.;

  TFile *fD0=TFile::Open(fileD0.Data());
  // TCanvas *cD0=(TCanvas*)fD0->Get("cAvPtVSPtmean");
  //  TGraphAsymmErrors *grD0=(TGraphAsymmErrors*)cD0->FindObject("grAvPtMeanPtFitSB");
  TGraphAsymmErrors *grD0=(TGraphAsymmErrors*)fD0->Get("grAvPtMeanPtFitSB");

  grD0->SetName("grAvPtMeanPtFitSB_D0");
  yD0=grD0->GetY();
  eyD0=grD0->GetEYhigh();
  

  TFile *fDplus=TFile::Open(fileDplus.Data());
  TCanvas *cDplus=(TCanvas*)fDplus->Get("cAvPtVSPtmean");
  TGraphAsymmErrors *grDplus=(TGraphAsymmErrors*)cDplus->FindObject("grAvPtMeanPtFitSB");
  grDplus->SetName("grAvPtMeanPtFitSB_Dplus");
  yDplus=grDplus->GetY();
  eyDplus=grDplus->GetEYhigh();
  

  Int_t nlmax=grDplus->GetN();
  Int_t nlD0=grD0->GetN();
  Int_t nlDplus=grDplus->GetN();
  
  if(grD0->GetN()>nlmax){
    nlmax=grD0->GetN();
    x=grD0->GetX();
    exLow=grD0->GetEXlow();
    exHigh=grD0->GetEXhigh();
  }
  else {
    x=grDplus->GetX();
    exLow=grDplus->GetEXlow();
    exHigh=grDplus->GetEXhigh();
  }
  
  
  TGraphAsymmErrors *grAverage=new TGraphAsymmErrors();
  grAverage->SetName("grAverageD0Dplus");
  
  for(Int_t j=0;j<nlmax;j++){
    if(j<nlD0&&j<nlDplus){
      average=(yD0[j]/(eyD0[j]*eyD0[j])+yDplus[j]/(eyDplus[j]*eyDplus[j]))/(1./(eyD0[j]*eyD0[j])+1./(eyDplus[j]*eyDplus[j]));
      error=TMath::Sqrt(1./(1./(eyD0[j]*eyD0[j])+1./(eyDplus[j]*eyDplus[j])));
    }
    else if(j>=nlD0){
      average=yDplus[j];
      error=eyDplus[j];
    }
    else if(j>=nlDplus){
      average=yD0[j];
      error=eyD0[j];
    }
    grAverage->SetPoint(j,x[j],average);
    grAverage->SetPointError(j,exLow[j],exHigh[j],error,error);    
  }
  
  // Printing Info: D0
  printf("Average Value D0: \n");
  for(Int_t j=0;j<nlD0;j++){
    cout<<yD0[j]<<endl;
    
  }

 printf("Average Errors D0: \n");
  for(Int_t j=0;j<nlD0;j++){
    cout<<eyD0[j]<<endl;
    
  }
  
  // Printing Info: Dplus
  printf("Average Value Dplus: \n");
  for(Int_t j=0;j<nlDplus;j++){
    cout<<yDplus[j]<<endl;
    
  }

  printf("Average Errors Dplus: \n");
  for(Int_t j=0;j<nlDplus;j++){
    cout<<eyDplus[j]<<endl;
    
  }


  // Printing Info: Dplus D0 average
  yDplus=grAverage->GetY();
  eyDplus=grAverage->GetEYhigh();
  printf("Average Value D0 + Dplus: \n");
  for(Int_t j=0;j<nlDplus;j++){
    cout<<yDplus[j]<<endl;
    
  }

  printf("Average Errors D0+Dplus: \n");
  for(Int_t j=0;j<nlDplus;j++){
    cout<<eyDplus[j]<<endl;
    
  }
  
  


  TCanvas *cCompare=new TCanvas("cCompareD0Dplus","cCompareD0Dplus",700,700);
  cCompare->cd();
  
  grDplus->SetMarkerStyle(21);
  grDplus->SetMarkerSize(1.2);
  grDplus->SetMarkerColor(kBlue);
  grDplus->SetLineColor(kBlue);
  grDplus->Draw("ap");

  grD0->SetMarkerStyle(22);
  grD0->SetMarkerSize(1.2);
  grD0->SetMarkerColor(kRed);
  grD0->SetLineColor(kRed);
  grD0->Draw("p");

  grAverage->SetMarkerStyle(20);
  grAverage->SetMarkerSize(1.2);
  grAverage->SetMarkerColor(kBlack);
  grAverage->SetLineColor(kBlack);
  grAverage->Draw("p");
  
  

}
 CalculateAveragePt.C:1
 CalculateAveragePt.C:2
 CalculateAveragePt.C:3
 CalculateAveragePt.C:4
 CalculateAveragePt.C:5
 CalculateAveragePt.C:6
 CalculateAveragePt.C:7
 CalculateAveragePt.C:8
 CalculateAveragePt.C:9
 CalculateAveragePt.C:10
 CalculateAveragePt.C:11
 CalculateAveragePt.C:12
 CalculateAveragePt.C:13
 CalculateAveragePt.C:14
 CalculateAveragePt.C:15
 CalculateAveragePt.C:16
 CalculateAveragePt.C:17
 CalculateAveragePt.C:18
 CalculateAveragePt.C:19
 CalculateAveragePt.C:20
 CalculateAveragePt.C:21
 CalculateAveragePt.C:22
 CalculateAveragePt.C:23
 CalculateAveragePt.C:24
 CalculateAveragePt.C:25
 CalculateAveragePt.C:26
 CalculateAveragePt.C:27
 CalculateAveragePt.C:28
 CalculateAveragePt.C:29
 CalculateAveragePt.C:30
 CalculateAveragePt.C:31
 CalculateAveragePt.C:32
 CalculateAveragePt.C:33
 CalculateAveragePt.C:34
 CalculateAveragePt.C:35
 CalculateAveragePt.C:36
 CalculateAveragePt.C:37
 CalculateAveragePt.C:38
 CalculateAveragePt.C:39
 CalculateAveragePt.C:40
 CalculateAveragePt.C:41
 CalculateAveragePt.C:42
 CalculateAveragePt.C:43
 CalculateAveragePt.C:44
 CalculateAveragePt.C:45
 CalculateAveragePt.C:46
 CalculateAveragePt.C:47
 CalculateAveragePt.C:48
 CalculateAveragePt.C:49
 CalculateAveragePt.C:50
 CalculateAveragePt.C:51
 CalculateAveragePt.C:52
 CalculateAveragePt.C:53
 CalculateAveragePt.C:54
 CalculateAveragePt.C:55
 CalculateAveragePt.C:56
 CalculateAveragePt.C:57
 CalculateAveragePt.C:58
 CalculateAveragePt.C:59
 CalculateAveragePt.C:60
 CalculateAveragePt.C:61
 CalculateAveragePt.C:62
 CalculateAveragePt.C:63
 CalculateAveragePt.C:64
 CalculateAveragePt.C:65
 CalculateAveragePt.C:66
 CalculateAveragePt.C:67
 CalculateAveragePt.C:68
 CalculateAveragePt.C:69
 CalculateAveragePt.C:70
 CalculateAveragePt.C:71
 CalculateAveragePt.C:72
 CalculateAveragePt.C:73
 CalculateAveragePt.C:74
 CalculateAveragePt.C:75
 CalculateAveragePt.C:76
 CalculateAveragePt.C:77
 CalculateAveragePt.C:78
 CalculateAveragePt.C:79
 CalculateAveragePt.C:80
 CalculateAveragePt.C:81
 CalculateAveragePt.C:82
 CalculateAveragePt.C:83
 CalculateAveragePt.C:84
 CalculateAveragePt.C:85
 CalculateAveragePt.C:86
 CalculateAveragePt.C:87
 CalculateAveragePt.C:88
 CalculateAveragePt.C:89
 CalculateAveragePt.C:90
 CalculateAveragePt.C:91
 CalculateAveragePt.C:92
 CalculateAveragePt.C:93
 CalculateAveragePt.C:94
 CalculateAveragePt.C:95
 CalculateAveragePt.C:96
 CalculateAveragePt.C:97
 CalculateAveragePt.C:98
 CalculateAveragePt.C:99
 CalculateAveragePt.C:100
 CalculateAveragePt.C:101
 CalculateAveragePt.C:102
 CalculateAveragePt.C:103
 CalculateAveragePt.C:104
 CalculateAveragePt.C:105
 CalculateAveragePt.C:106
 CalculateAveragePt.C:107
 CalculateAveragePt.C:108
 CalculateAveragePt.C:109
 CalculateAveragePt.C:110
 CalculateAveragePt.C:111
 CalculateAveragePt.C:112
 CalculateAveragePt.C:113
 CalculateAveragePt.C:114
 CalculateAveragePt.C:115
 CalculateAveragePt.C:116
 CalculateAveragePt.C:117
 CalculateAveragePt.C:118
 CalculateAveragePt.C:119
 CalculateAveragePt.C:120
 CalculateAveragePt.C:121
 CalculateAveragePt.C:122
 CalculateAveragePt.C:123
 CalculateAveragePt.C:124
 CalculateAveragePt.C:125
 CalculateAveragePt.C:126
 CalculateAveragePt.C:127
 CalculateAveragePt.C:128
 CalculateAveragePt.C:129
 CalculateAveragePt.C:130
 CalculateAveragePt.C:131
 CalculateAveragePt.C:132
 CalculateAveragePt.C:133
 CalculateAveragePt.C:134
 CalculateAveragePt.C:135
 CalculateAveragePt.C:136
 CalculateAveragePt.C:137
 CalculateAveragePt.C:138
 CalculateAveragePt.C:139
 CalculateAveragePt.C:140
 CalculateAveragePt.C:141
 CalculateAveragePt.C:142
 CalculateAveragePt.C:143
 CalculateAveragePt.C:144
 CalculateAveragePt.C:145
 CalculateAveragePt.C:146
 CalculateAveragePt.C:147
 CalculateAveragePt.C:148
 CalculateAveragePt.C:149
 CalculateAveragePt.C:150
 CalculateAveragePt.C:151
 CalculateAveragePt.C:152
 CalculateAveragePt.C:153
 CalculateAveragePt.C:154
 CalculateAveragePt.C:155
 CalculateAveragePt.C:156
 CalculateAveragePt.C:157
 CalculateAveragePt.C:158
 CalculateAveragePt.C:159
 CalculateAveragePt.C:160
 CalculateAveragePt.C:161
 CalculateAveragePt.C:162
 CalculateAveragePt.C:163
 CalculateAveragePt.C:164
 CalculateAveragePt.C:165
 CalculateAveragePt.C:166
 CalculateAveragePt.C:167
 CalculateAveragePt.C:168
 CalculateAveragePt.C:169
 CalculateAveragePt.C:170
 CalculateAveragePt.C:171
 CalculateAveragePt.C:172
 CalculateAveragePt.C:173
 CalculateAveragePt.C:174
 CalculateAveragePt.C:175
 CalculateAveragePt.C:176
 CalculateAveragePt.C:177
 CalculateAveragePt.C:178
 CalculateAveragePt.C:179
 CalculateAveragePt.C:180
 CalculateAveragePt.C:181
 CalculateAveragePt.C:182
 CalculateAveragePt.C:183
 CalculateAveragePt.C:184
 CalculateAveragePt.C:185
 CalculateAveragePt.C:186
 CalculateAveragePt.C:187
 CalculateAveragePt.C:188
 CalculateAveragePt.C:189
 CalculateAveragePt.C:190
 CalculateAveragePt.C:191
 CalculateAveragePt.C:192
 CalculateAveragePt.C:193
 CalculateAveragePt.C:194
 CalculateAveragePt.C:195
 CalculateAveragePt.C:196
 CalculateAveragePt.C:197
 CalculateAveragePt.C:198
 CalculateAveragePt.C:199
 CalculateAveragePt.C:200
 CalculateAveragePt.C:201
 CalculateAveragePt.C:202
 CalculateAveragePt.C:203
 CalculateAveragePt.C:204
 CalculateAveragePt.C:205
 CalculateAveragePt.C:206
 CalculateAveragePt.C:207
 CalculateAveragePt.C:208
 CalculateAveragePt.C:209
 CalculateAveragePt.C:210
 CalculateAveragePt.C:211
 CalculateAveragePt.C:212
 CalculateAveragePt.C:213
 CalculateAveragePt.C:214
 CalculateAveragePt.C:215
 CalculateAveragePt.C:216
 CalculateAveragePt.C:217
 CalculateAveragePt.C:218
 CalculateAveragePt.C:219
 CalculateAveragePt.C:220
 CalculateAveragePt.C:221
 CalculateAveragePt.C:222
 CalculateAveragePt.C:223
 CalculateAveragePt.C:224
 CalculateAveragePt.C:225
 CalculateAveragePt.C:226
 CalculateAveragePt.C:227
 CalculateAveragePt.C:228
 CalculateAveragePt.C:229
 CalculateAveragePt.C:230
 CalculateAveragePt.C:231
 CalculateAveragePt.C:232
 CalculateAveragePt.C:233
 CalculateAveragePt.C:234
 CalculateAveragePt.C:235
 CalculateAveragePt.C:236
 CalculateAveragePt.C:237
 CalculateAveragePt.C:238
 CalculateAveragePt.C:239
 CalculateAveragePt.C:240
 CalculateAveragePt.C:241
 CalculateAveragePt.C:242
 CalculateAveragePt.C:243
 CalculateAveragePt.C:244
 CalculateAveragePt.C:245
 CalculateAveragePt.C:246
 CalculateAveragePt.C:247
 CalculateAveragePt.C:248
 CalculateAveragePt.C:249
 CalculateAveragePt.C:250
 CalculateAveragePt.C:251
 CalculateAveragePt.C:252
 CalculateAveragePt.C:253
 CalculateAveragePt.C:254
 CalculateAveragePt.C:255
 CalculateAveragePt.C:256
 CalculateAveragePt.C:257
 CalculateAveragePt.C:258
 CalculateAveragePt.C:259
 CalculateAveragePt.C:260
 CalculateAveragePt.C:261
 CalculateAveragePt.C:262
 CalculateAveragePt.C:263
 CalculateAveragePt.C:264
 CalculateAveragePt.C:265
 CalculateAveragePt.C:266
 CalculateAveragePt.C:267
 CalculateAveragePt.C:268
 CalculateAveragePt.C:269
 CalculateAveragePt.C:270
 CalculateAveragePt.C:271
 CalculateAveragePt.C:272
 CalculateAveragePt.C:273
 CalculateAveragePt.C:274
 CalculateAveragePt.C:275
 CalculateAveragePt.C:276
 CalculateAveragePt.C:277
 CalculateAveragePt.C:278
 CalculateAveragePt.C:279
 CalculateAveragePt.C:280
 CalculateAveragePt.C:281
 CalculateAveragePt.C:282
 CalculateAveragePt.C:283
 CalculateAveragePt.C:284
 CalculateAveragePt.C:285
 CalculateAveragePt.C:286
 CalculateAveragePt.C:287
 CalculateAveragePt.C:288
 CalculateAveragePt.C:289
 CalculateAveragePt.C:290
 CalculateAveragePt.C:291
 CalculateAveragePt.C:292
 CalculateAveragePt.C:293
 CalculateAveragePt.C:294
 CalculateAveragePt.C:295
 CalculateAveragePt.C:296
 CalculateAveragePt.C:297
 CalculateAveragePt.C:298
 CalculateAveragePt.C:299
 CalculateAveragePt.C:300
 CalculateAveragePt.C:301
 CalculateAveragePt.C:302
 CalculateAveragePt.C:303
 CalculateAveragePt.C:304
 CalculateAveragePt.C:305
 CalculateAveragePt.C:306
 CalculateAveragePt.C:307
 CalculateAveragePt.C:308
 CalculateAveragePt.C:309
 CalculateAveragePt.C:310
 CalculateAveragePt.C:311
 CalculateAveragePt.C:312
 CalculateAveragePt.C:313
 CalculateAveragePt.C:314
 CalculateAveragePt.C:315
 CalculateAveragePt.C:316
 CalculateAveragePt.C:317
 CalculateAveragePt.C:318
 CalculateAveragePt.C:319
 CalculateAveragePt.C:320
 CalculateAveragePt.C:321
 CalculateAveragePt.C:322
 CalculateAveragePt.C:323
 CalculateAveragePt.C:324
 CalculateAveragePt.C:325
 CalculateAveragePt.C:326
 CalculateAveragePt.C:327
 CalculateAveragePt.C:328
 CalculateAveragePt.C:329
 CalculateAveragePt.C:330
 CalculateAveragePt.C:331
 CalculateAveragePt.C:332
 CalculateAveragePt.C:333
 CalculateAveragePt.C:334
 CalculateAveragePt.C:335
 CalculateAveragePt.C:336
 CalculateAveragePt.C:337
 CalculateAveragePt.C:338
 CalculateAveragePt.C:339
 CalculateAveragePt.C:340
 CalculateAveragePt.C:341
 CalculateAveragePt.C:342
 CalculateAveragePt.C:343
 CalculateAveragePt.C:344
 CalculateAveragePt.C:345
 CalculateAveragePt.C:346
 CalculateAveragePt.C:347
 CalculateAveragePt.C:348
 CalculateAveragePt.C:349
 CalculateAveragePt.C:350
 CalculateAveragePt.C:351
 CalculateAveragePt.C:352
 CalculateAveragePt.C:353
 CalculateAveragePt.C:354
 CalculateAveragePt.C:355
 CalculateAveragePt.C:356
 CalculateAveragePt.C:357
 CalculateAveragePt.C:358
 CalculateAveragePt.C:359
 CalculateAveragePt.C:360
 CalculateAveragePt.C:361
 CalculateAveragePt.C:362
 CalculateAveragePt.C:363
 CalculateAveragePt.C:364
 CalculateAveragePt.C:365
 CalculateAveragePt.C:366
 CalculateAveragePt.C:367
 CalculateAveragePt.C:368
 CalculateAveragePt.C:369
 CalculateAveragePt.C:370
 CalculateAveragePt.C:371
 CalculateAveragePt.C:372
 CalculateAveragePt.C:373
 CalculateAveragePt.C:374
 CalculateAveragePt.C:375
 CalculateAveragePt.C:376
 CalculateAveragePt.C:377
 CalculateAveragePt.C:378
 CalculateAveragePt.C:379
 CalculateAveragePt.C:380
 CalculateAveragePt.C:381
 CalculateAveragePt.C:382
 CalculateAveragePt.C:383
 CalculateAveragePt.C:384
 CalculateAveragePt.C:385
 CalculateAveragePt.C:386
 CalculateAveragePt.C:387
 CalculateAveragePt.C:388
 CalculateAveragePt.C:389
 CalculateAveragePt.C:390
 CalculateAveragePt.C:391
 CalculateAveragePt.C:392
 CalculateAveragePt.C:393
 CalculateAveragePt.C:394
 CalculateAveragePt.C:395
 CalculateAveragePt.C:396
 CalculateAveragePt.C:397
 CalculateAveragePt.C:398
 CalculateAveragePt.C:399
 CalculateAveragePt.C:400
 CalculateAveragePt.C:401
 CalculateAveragePt.C:402
 CalculateAveragePt.C:403
 CalculateAveragePt.C:404
 CalculateAveragePt.C:405
 CalculateAveragePt.C:406
 CalculateAveragePt.C:407
 CalculateAveragePt.C:408
 CalculateAveragePt.C:409
 CalculateAveragePt.C:410
 CalculateAveragePt.C:411
 CalculateAveragePt.C:412
 CalculateAveragePt.C:413
 CalculateAveragePt.C:414
 CalculateAveragePt.C:415
 CalculateAveragePt.C:416
 CalculateAveragePt.C:417
 CalculateAveragePt.C:418
 CalculateAveragePt.C:419
 CalculateAveragePt.C:420
 CalculateAveragePt.C:421
 CalculateAveragePt.C:422
 CalculateAveragePt.C:423
 CalculateAveragePt.C:424
 CalculateAveragePt.C:425
 CalculateAveragePt.C:426
 CalculateAveragePt.C:427
 CalculateAveragePt.C:428
 CalculateAveragePt.C:429
 CalculateAveragePt.C:430
 CalculateAveragePt.C:431
 CalculateAveragePt.C:432
 CalculateAveragePt.C:433
 CalculateAveragePt.C:434
 CalculateAveragePt.C:435
 CalculateAveragePt.C:436
 CalculateAveragePt.C:437
 CalculateAveragePt.C:438
 CalculateAveragePt.C:439
 CalculateAveragePt.C:440
 CalculateAveragePt.C:441
 CalculateAveragePt.C:442
 CalculateAveragePt.C:443
 CalculateAveragePt.C:444
 CalculateAveragePt.C:445
 CalculateAveragePt.C:446
 CalculateAveragePt.C:447
 CalculateAveragePt.C:448
 CalculateAveragePt.C:449
 CalculateAveragePt.C:450
 CalculateAveragePt.C:451
 CalculateAveragePt.C:452
 CalculateAveragePt.C:453
 CalculateAveragePt.C:454
 CalculateAveragePt.C:455
 CalculateAveragePt.C:456
 CalculateAveragePt.C:457
 CalculateAveragePt.C:458
 CalculateAveragePt.C:459
 CalculateAveragePt.C:460
 CalculateAveragePt.C:461
 CalculateAveragePt.C:462
 CalculateAveragePt.C:463
 CalculateAveragePt.C:464
 CalculateAveragePt.C:465
 CalculateAveragePt.C:466
 CalculateAveragePt.C:467
 CalculateAveragePt.C:468
 CalculateAveragePt.C:469
 CalculateAveragePt.C:470
 CalculateAveragePt.C:471
 CalculateAveragePt.C:472
 CalculateAveragePt.C:473
 CalculateAveragePt.C:474
 CalculateAveragePt.C:475
 CalculateAveragePt.C:476
 CalculateAveragePt.C:477
 CalculateAveragePt.C:478
 CalculateAveragePt.C:479
 CalculateAveragePt.C:480
 CalculateAveragePt.C:481
 CalculateAveragePt.C:482
 CalculateAveragePt.C:483
 CalculateAveragePt.C:484
 CalculateAveragePt.C:485
 CalculateAveragePt.C:486
 CalculateAveragePt.C:487
 CalculateAveragePt.C:488
 CalculateAveragePt.C:489
 CalculateAveragePt.C:490
 CalculateAveragePt.C:491
 CalculateAveragePt.C:492
 CalculateAveragePt.C:493
 CalculateAveragePt.C:494
 CalculateAveragePt.C:495
 CalculateAveragePt.C:496
 CalculateAveragePt.C:497
 CalculateAveragePt.C:498
 CalculateAveragePt.C:499
 CalculateAveragePt.C:500
 CalculateAveragePt.C:501
 CalculateAveragePt.C:502
 CalculateAveragePt.C:503
 CalculateAveragePt.C:504
 CalculateAveragePt.C:505
 CalculateAveragePt.C:506
 CalculateAveragePt.C:507
 CalculateAveragePt.C:508
 CalculateAveragePt.C:509
 CalculateAveragePt.C:510
 CalculateAveragePt.C:511
 CalculateAveragePt.C:512
 CalculateAveragePt.C:513
 CalculateAveragePt.C:514
 CalculateAveragePt.C:515
 CalculateAveragePt.C:516
 CalculateAveragePt.C:517
 CalculateAveragePt.C:518
 CalculateAveragePt.C:519
 CalculateAveragePt.C:520
 CalculateAveragePt.C:521
 CalculateAveragePt.C:522
 CalculateAveragePt.C:523
 CalculateAveragePt.C:524
 CalculateAveragePt.C:525
 CalculateAveragePt.C:526
 CalculateAveragePt.C:527
 CalculateAveragePt.C:528
 CalculateAveragePt.C:529
 CalculateAveragePt.C:530
 CalculateAveragePt.C:531
 CalculateAveragePt.C:532
 CalculateAveragePt.C:533
 CalculateAveragePt.C:534
 CalculateAveragePt.C:535
 CalculateAveragePt.C:536
 CalculateAveragePt.C:537
 CalculateAveragePt.C:538
 CalculateAveragePt.C:539
 CalculateAveragePt.C:540
 CalculateAveragePt.C:541
 CalculateAveragePt.C:542
 CalculateAveragePt.C:543
 CalculateAveragePt.C:544
 CalculateAveragePt.C:545
 CalculateAveragePt.C:546
 CalculateAveragePt.C:547
 CalculateAveragePt.C:548
 CalculateAveragePt.C:549
 CalculateAveragePt.C:550
 CalculateAveragePt.C:551
 CalculateAveragePt.C:552
 CalculateAveragePt.C:553
 CalculateAveragePt.C:554
 CalculateAveragePt.C:555
 CalculateAveragePt.C:556
 CalculateAveragePt.C:557
 CalculateAveragePt.C:558
 CalculateAveragePt.C:559
 CalculateAveragePt.C:560
 CalculateAveragePt.C:561
 CalculateAveragePt.C:562
 CalculateAveragePt.C:563
 CalculateAveragePt.C:564
 CalculateAveragePt.C:565
 CalculateAveragePt.C:566
 CalculateAveragePt.C:567
 CalculateAveragePt.C:568
 CalculateAveragePt.C:569
 CalculateAveragePt.C:570
 CalculateAveragePt.C:571
 CalculateAveragePt.C:572
 CalculateAveragePt.C:573
 CalculateAveragePt.C:574
 CalculateAveragePt.C:575
 CalculateAveragePt.C:576
 CalculateAveragePt.C:577
 CalculateAveragePt.C:578
 CalculateAveragePt.C:579
 CalculateAveragePt.C:580
 CalculateAveragePt.C:581
 CalculateAveragePt.C:582
 CalculateAveragePt.C:583
 CalculateAveragePt.C:584
 CalculateAveragePt.C:585
 CalculateAveragePt.C:586
 CalculateAveragePt.C:587
 CalculateAveragePt.C:588
 CalculateAveragePt.C:589
 CalculateAveragePt.C:590
 CalculateAveragePt.C:591
 CalculateAveragePt.C:592
 CalculateAveragePt.C:593
 CalculateAveragePt.C:594
 CalculateAveragePt.C:595
 CalculateAveragePt.C:596
 CalculateAveragePt.C:597
 CalculateAveragePt.C:598
 CalculateAveragePt.C:599
 CalculateAveragePt.C:600
 CalculateAveragePt.C:601
 CalculateAveragePt.C:602
 CalculateAveragePt.C:603
 CalculateAveragePt.C:604
 CalculateAveragePt.C:605
 CalculateAveragePt.C:606
 CalculateAveragePt.C:607
 CalculateAveragePt.C:608
 CalculateAveragePt.C:609
 CalculateAveragePt.C:610
 CalculateAveragePt.C:611
 CalculateAveragePt.C:612
 CalculateAveragePt.C:613
 CalculateAveragePt.C:614
 CalculateAveragePt.C:615
 CalculateAveragePt.C:616
 CalculateAveragePt.C:617
 CalculateAveragePt.C:618
 CalculateAveragePt.C:619
 CalculateAveragePt.C:620
 CalculateAveragePt.C:621
 CalculateAveragePt.C:622
 CalculateAveragePt.C:623
 CalculateAveragePt.C:624
 CalculateAveragePt.C:625
 CalculateAveragePt.C:626
 CalculateAveragePt.C:627
 CalculateAveragePt.C:628
 CalculateAveragePt.C:629
 CalculateAveragePt.C:630
 CalculateAveragePt.C:631
 CalculateAveragePt.C:632
 CalculateAveragePt.C:633
 CalculateAveragePt.C:634
 CalculateAveragePt.C:635
 CalculateAveragePt.C:636
 CalculateAveragePt.C:637
 CalculateAveragePt.C:638
 CalculateAveragePt.C:639
 CalculateAveragePt.C:640
 CalculateAveragePt.C:641
 CalculateAveragePt.C:642
 CalculateAveragePt.C:643
 CalculateAveragePt.C:644
 CalculateAveragePt.C:645
 CalculateAveragePt.C:646
 CalculateAveragePt.C:647
 CalculateAveragePt.C:648
 CalculateAveragePt.C:649
 CalculateAveragePt.C:650
 CalculateAveragePt.C:651
 CalculateAveragePt.C:652
 CalculateAveragePt.C:653
 CalculateAveragePt.C:654
 CalculateAveragePt.C:655
 CalculateAveragePt.C:656
 CalculateAveragePt.C:657
 CalculateAveragePt.C:658
 CalculateAveragePt.C:659
 CalculateAveragePt.C:660
 CalculateAveragePt.C:661
 CalculateAveragePt.C:662
 CalculateAveragePt.C:663
 CalculateAveragePt.C:664
 CalculateAveragePt.C:665
 CalculateAveragePt.C:666
 CalculateAveragePt.C:667
 CalculateAveragePt.C:668
 CalculateAveragePt.C:669
 CalculateAveragePt.C:670
 CalculateAveragePt.C:671
 CalculateAveragePt.C:672
 CalculateAveragePt.C:673
 CalculateAveragePt.C:674
 CalculateAveragePt.C:675
 CalculateAveragePt.C:676
 CalculateAveragePt.C:677
 CalculateAveragePt.C:678
 CalculateAveragePt.C:679
 CalculateAveragePt.C:680
 CalculateAveragePt.C:681
 CalculateAveragePt.C:682
 CalculateAveragePt.C:683
 CalculateAveragePt.C:684
 CalculateAveragePt.C:685
 CalculateAveragePt.C:686
 CalculateAveragePt.C:687
 CalculateAveragePt.C:688
 CalculateAveragePt.C:689
 CalculateAveragePt.C:690
 CalculateAveragePt.C:691
 CalculateAveragePt.C:692
 CalculateAveragePt.C:693
 CalculateAveragePt.C:694
 CalculateAveragePt.C:695
 CalculateAveragePt.C:696
 CalculateAveragePt.C:697
 CalculateAveragePt.C:698
 CalculateAveragePt.C:699
 CalculateAveragePt.C:700
 CalculateAveragePt.C:701
 CalculateAveragePt.C:702
 CalculateAveragePt.C:703
 CalculateAveragePt.C:704
 CalculateAveragePt.C:705
 CalculateAveragePt.C:706
 CalculateAveragePt.C:707
 CalculateAveragePt.C:708
 CalculateAveragePt.C:709
 CalculateAveragePt.C:710
 CalculateAveragePt.C:711
 CalculateAveragePt.C:712
 CalculateAveragePt.C:713
 CalculateAveragePt.C:714
 CalculateAveragePt.C:715
 CalculateAveragePt.C:716
 CalculateAveragePt.C:717
 CalculateAveragePt.C:718
 CalculateAveragePt.C:719
 CalculateAveragePt.C:720
 CalculateAveragePt.C:721
 CalculateAveragePt.C:722
 CalculateAveragePt.C:723
 CalculateAveragePt.C:724
 CalculateAveragePt.C:725
 CalculateAveragePt.C:726
 CalculateAveragePt.C:727
 CalculateAveragePt.C:728
 CalculateAveragePt.C:729
 CalculateAveragePt.C:730
 CalculateAveragePt.C:731
 CalculateAveragePt.C:732
 CalculateAveragePt.C:733
 CalculateAveragePt.C:734
 CalculateAveragePt.C:735
 CalculateAveragePt.C:736
 CalculateAveragePt.C:737
 CalculateAveragePt.C:738
 CalculateAveragePt.C:739
 CalculateAveragePt.C:740
 CalculateAveragePt.C:741
 CalculateAveragePt.C:742
 CalculateAveragePt.C:743
 CalculateAveragePt.C:744
 CalculateAveragePt.C:745
 CalculateAveragePt.C:746
 CalculateAveragePt.C:747
 CalculateAveragePt.C:748
 CalculateAveragePt.C:749
 CalculateAveragePt.C:750
 CalculateAveragePt.C:751
 CalculateAveragePt.C:752
 CalculateAveragePt.C:753
 CalculateAveragePt.C:754
 CalculateAveragePt.C:755
 CalculateAveragePt.C:756
 CalculateAveragePt.C:757
 CalculateAveragePt.C:758
 CalculateAveragePt.C:759
 CalculateAveragePt.C:760
 CalculateAveragePt.C:761
 CalculateAveragePt.C:762
 CalculateAveragePt.C:763
 CalculateAveragePt.C:764
 CalculateAveragePt.C:765
 CalculateAveragePt.C:766
 CalculateAveragePt.C:767
 CalculateAveragePt.C:768
 CalculateAveragePt.C:769
 CalculateAveragePt.C:770
 CalculateAveragePt.C:771
 CalculateAveragePt.C:772
 CalculateAveragePt.C:773
 CalculateAveragePt.C:774
 CalculateAveragePt.C:775
 CalculateAveragePt.C:776
 CalculateAveragePt.C:777
 CalculateAveragePt.C:778
 CalculateAveragePt.C:779
 CalculateAveragePt.C:780
 CalculateAveragePt.C:781
 CalculateAveragePt.C:782
 CalculateAveragePt.C:783
 CalculateAveragePt.C:784
 CalculateAveragePt.C:785
 CalculateAveragePt.C:786
 CalculateAveragePt.C:787
 CalculateAveragePt.C:788
 CalculateAveragePt.C:789
 CalculateAveragePt.C:790
 CalculateAveragePt.C:791
 CalculateAveragePt.C:792
 CalculateAveragePt.C:793
 CalculateAveragePt.C:794
 CalculateAveragePt.C:795
 CalculateAveragePt.C:796
 CalculateAveragePt.C:797
 CalculateAveragePt.C:798
 CalculateAveragePt.C:799
 CalculateAveragePt.C:800
 CalculateAveragePt.C:801
 CalculateAveragePt.C:802
 CalculateAveragePt.C:803
 CalculateAveragePt.C:804
 CalculateAveragePt.C:805
 CalculateAveragePt.C:806
 CalculateAveragePt.C:807
 CalculateAveragePt.C:808
 CalculateAveragePt.C:809
 CalculateAveragePt.C:810
 CalculateAveragePt.C:811
 CalculateAveragePt.C:812
 CalculateAveragePt.C:813
 CalculateAveragePt.C:814
 CalculateAveragePt.C:815
 CalculateAveragePt.C:816
 CalculateAveragePt.C:817
 CalculateAveragePt.C:818
 CalculateAveragePt.C:819
 CalculateAveragePt.C:820
 CalculateAveragePt.C:821
 CalculateAveragePt.C:822
 CalculateAveragePt.C:823
 CalculateAveragePt.C:824
 CalculateAveragePt.C:825
 CalculateAveragePt.C:826
 CalculateAveragePt.C:827
 CalculateAveragePt.C:828
 CalculateAveragePt.C:829
 CalculateAveragePt.C:830
 CalculateAveragePt.C:831
 CalculateAveragePt.C:832
 CalculateAveragePt.C:833
 CalculateAveragePt.C:834
 CalculateAveragePt.C:835
 CalculateAveragePt.C:836
 CalculateAveragePt.C:837
 CalculateAveragePt.C:838
 CalculateAveragePt.C:839
 CalculateAveragePt.C:840
 CalculateAveragePt.C:841
 CalculateAveragePt.C:842
 CalculateAveragePt.C:843
 CalculateAveragePt.C:844
 CalculateAveragePt.C:845
 CalculateAveragePt.C:846
 CalculateAveragePt.C:847
 CalculateAveragePt.C:848
 CalculateAveragePt.C:849
 CalculateAveragePt.C:850
 CalculateAveragePt.C:851
 CalculateAveragePt.C:852
 CalculateAveragePt.C:853
 CalculateAveragePt.C:854
 CalculateAveragePt.C:855
 CalculateAveragePt.C:856
 CalculateAveragePt.C:857
 CalculateAveragePt.C:858
 CalculateAveragePt.C:859
 CalculateAveragePt.C:860
 CalculateAveragePt.C:861
 CalculateAveragePt.C:862
 CalculateAveragePt.C:863
 CalculateAveragePt.C:864
 CalculateAveragePt.C:865
 CalculateAveragePt.C:866
 CalculateAveragePt.C:867
 CalculateAveragePt.C:868
 CalculateAveragePt.C:869
 CalculateAveragePt.C:870
 CalculateAveragePt.C:871
 CalculateAveragePt.C:872
 CalculateAveragePt.C:873
 CalculateAveragePt.C:874
 CalculateAveragePt.C:875
 CalculateAveragePt.C:876
 CalculateAveragePt.C:877
 CalculateAveragePt.C:878
 CalculateAveragePt.C:879
 CalculateAveragePt.C:880
 CalculateAveragePt.C:881
 CalculateAveragePt.C:882
 CalculateAveragePt.C:883