ROOT logo
#if !defined (__CINT__) || (defined(__MAKECINT__))
#include <iostream>
#include "TH1.h"
#include "TVirtualFitter.h"
#include "TMath.h"
#include "TFile.h"
#include "TF1.h"
#include "TCanvas.h"
#include "TROOT.h"
#include "TRandom.h"

#endif
using namespace std;
/* definition of the fields in the histogram returned */
enum EValue_t {
  kYield = 1,
  kYieldStat,
  kYieldSysHi,
  kYieldSysLo,
  kMean,
  kMeanStat,
  kMeanSysHi,
  kMeanSysLo
};


void YieldMean_IntegralMean(TH1 *hdata, TH1 *hlo, TH1 *hhi, Double_t &integral, Double_t &mean,Bool_t printinfo=kFALSE);
TH1* YieldMean_LowExtrapolationHisto(TH1 *h, TF1 *f, Double_t min, Double_t binwidth = 0.01);
TH1 * YieldMean_HighExtrapolationHisto(TH1 *h, TF1 *f, Double_t max, Double_t binwidth = 0.1);
TH1 * YieldMean_ReturnRandom(TH1 *hin);
TH1 * YieldMean_ReturnCoherentRandom(TH1 *hin);
TH1 *YieldMean_ReturnExtremeHisto(TH1 *hin, Float_t sign = 1.);
TH1 *YieldMean_ReturnExtremeHardHisto(TH1 *hin);
TH1 *YieldMean_ReturnExtremeSoftHisto(TH1 *hin);
TH1 * YieldMean_ReturnExtremeLowHisto(TH1 *hin);

TH1 * YieldMean_ReturnExtremeHighHisto(TH1 *hin);




TH1 *
YieldMean(TH1 *hstat, TH1 *hsys, TF1 *f = NULL, Double_t min = 0., Double_t max = 10., Double_t loprecision = 0.01, Double_t hiprecision = 0.1, Option_t *opt = "0q",TString logfilename="log.root")
{
  /* set many iterations when fitting the data so we don't
     stop minimization with MAX_CALLS */
  TVirtualFitter::SetMaxIterations(1000000);

  /* create output histo */
  Double_t integral, mean;
  TH1 *hout = new TH1D("hout", "", 8, 0, 8);
  TH1 *hlo, *hhi;
  
  /* create histo with stat+sys errors */
  TH1 *htot = (TH1 *)hstat->Clone(Form("%sfittedwith%s",hstat->GetName(),f->GetName()));
  for (Int_t ibin = 0; ibin < htot->GetNbinsX(); ibin++) {
    htot->SetBinError(ibin + 1, TMath::Sqrt(hsys->GetBinError(ibin + 1) * hsys->GetBinError(ibin + 1) + hstat->GetBinError(ibin + 1) * hstat->GetBinError(ibin + 1)));
  }

  /*
   *   measure the central value 
   */
  Int_t fitres;
  Int_t trials = 0;
  trials = 0;
  do {
    fitres = htot->Fit(f, opt);
    Printf("Trial: %d", trials++);
    if(trials > 10) {
      Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
      break;
    }
  }
  while (fitres != 0);
  TFile* filewithfits=TFile::Open(logfilename.Data(),"UPDATE");
  htot->Write();
  filewithfits->Close();		
  delete filewithfits;	 
	
  cout<<" Fit sys+stat for " <<f->GetName()<<endl;		
  cout<<"NDF="<<f->GetNDF()<<" Chi^2="<<f->GetChisquare()<<" Chi^2/NDF="<<f->GetChisquare()/f->GetNDF()<<endl;

  hlo = YieldMean_LowExtrapolationHisto(htot, f, min, loprecision);
  hhi = YieldMean_HighExtrapolationHisto(htot, f, max, hiprecision);
  YieldMean_IntegralMean(htot, hlo, hhi, integral, mean,kTRUE);
  hout->SetBinContent(kYield, integral);
  hout->SetBinContent(kMean, mean);

  /*
   * STATISTICS
   */
  
  TCanvas *cCanvasStat = new TCanvas("cCanvasStat");
  cCanvasStat->Divide(2, 1);
  
  /*
   * measure statistical error
   */

  /* fit with stat error */
  trials = 0;
  do {
    fitres = hstat->Fit(f, opt);
    Printf("Trial: %d", trials++);
    if(trials > 10) {
      Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
      break;
    }
  }
  while (fitres != 0);
  hlo = YieldMean_LowExtrapolationHisto(hstat, f, min, loprecision);
  hhi = YieldMean_HighExtrapolationHisto(hstat, f, max, hiprecision);
  
  /* random generation with integration (coarse) */
  TH1 *hIntegral_tmp = new TH1F("hIntegral_tmp", "", 1000, 0.75 * integral, 1.25 * integral);
  TH1 *hMean_tmp = new TH1F("hMean_tmp", "", 1000, 0.75 * mean, 1.25 * mean);
  for (Int_t irnd = 0; irnd < 100; irnd++) {
    /* get random histogram */
    TH1 *hrnd = YieldMean_ReturnRandom(hstat);
    /* fit */
    TH1 *hrndlo = YieldMean_ReturnCoherentRandom(hlo);
    TH1 *hrndhi = YieldMean_ReturnCoherentRandom(hhi);
    /* integrate */
    YieldMean_IntegralMean(hrnd, hrndlo, hrndhi, integral, mean);
    hIntegral_tmp->Fill(integral);
    hMean_tmp->Fill(mean);
    delete hrnd;
    delete hrndlo;
    delete hrndhi;
   }
  /* random generation with integration (fine) */
  TH1 *hIntegral = new TH1F("hIntegral", "", 100, 
                            hIntegral_tmp->GetMean() - 10. * hIntegral_tmp->GetRMS(),
                            hIntegral_tmp->GetMean() + 10. * hIntegral_tmp->GetRMS());
  TH1 *hMean = new TH1F("hMean", "", 100,
                        hMean_tmp->GetMean() - 10. * hMean_tmp->GetRMS(),
                        hMean_tmp->GetMean() + 10. * hMean_tmp->GetRMS());
  for (Int_t irnd = 0; irnd < 1000; irnd++) {
    /* get random histogram */
    TH1 *hrnd = YieldMean_ReturnRandom(hstat);
    /* fit */
    TH1 *hrndlo = YieldMean_ReturnCoherentRandom(hlo);
    TH1 *hrndhi = YieldMean_ReturnCoherentRandom(hhi);
    /* integrate */
    YieldMean_IntegralMean(hrnd, hrndlo, hrndhi, integral, mean);
    hIntegral->Fill(integral);
    hMean->Fill(mean);
    delete hrnd;
    delete hrndlo;
    delete hrndhi;
  }
  TF1 *gaus = (TF1 *)gROOT->GetFunction("gaus");
  
  cCanvasStat->cd(1);
  hIntegral->Fit(gaus, "q");
  integral = hout->GetBinContent(kYield) * gaus->GetParameter(2) / gaus->GetParameter(1);
  hout->SetBinContent(kYieldStat, integral);
  
  cCanvasStat->cd(2);
  hMean->Fit(gaus, "q");
  mean = hout->GetBinContent(kMean) * gaus->GetParameter(2) / gaus->GetParameter(1);
  hout->SetBinContent(kMeanStat, mean);
  
  /*
   * SYSTEMATICS
   */

  TCanvas *cCanvasSys = new TCanvas("cCanvasYieldSys");
  cCanvasSys->Divide(2, 1);
  cCanvasSys->cd(1)->DrawFrame(min, 1.e-3, max, 1.e3);
  hsys->SetMarkerStyle(20);
  hsys->SetMarkerColor(1);
  hsys->SetMarkerSize(1);
  hsys->Draw("same");
  cCanvasSys->cd(2)->DrawFrame(min, 1.e-3, max, 1.e3);
  hsys->Draw("same");
  
  /*
   * systematic error high
   */

  TH1 *hhigh = YieldMean_ReturnExtremeHighHisto(hsys);
  trials = 0;
  do {
    fitres = hhigh->Fit(f, opt);
    Printf("Trial: %d", trials++);
    if(trials > 10) {
      Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
      break;
    }
  }
  while (fitres != 0);
  hlo = YieldMean_LowExtrapolationHisto(hhigh, f, min, loprecision);
  hhi = YieldMean_HighExtrapolationHisto(hhigh, f, max, hiprecision);
  YieldMean_IntegralMean(hhigh, hlo, hhi, integral, mean);
  integral = TMath::Abs(integral - hout->GetBinContent(kYield));
  hout->SetBinContent(kYieldSysHi, integral);

  cCanvasSys->cd(1);
  f->SetLineColor(2);
  f->DrawCopy("same");
  
  /*
   * systematic error hard
   */

  TH1 *hhard = YieldMean_ReturnExtremeHardHisto(hsys);
  trials = 0;
  do {
    fitres = hhard->Fit(f, opt);
    Printf("Trial: %d", trials++);
    if(trials > 10) {
      Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
      break;
    }
  }
  while (fitres != 0);
  hlo = YieldMean_LowExtrapolationHisto(hhard, f, min, loprecision);
  hhi = YieldMean_HighExtrapolationHisto(hhard, f, max, hiprecision);
  YieldMean_IntegralMean(hhard, hlo, hhi, integral, mean);
  mean = TMath::Abs(mean - hout->GetBinContent(kMean));
  hout->SetBinContent(kMeanSysHi, mean);

  cCanvasSys->cd(2);
  f->SetLineColor(2);
  f->DrawCopy("same");
  
  /*
   * systematic error low
   */

  TH1 *hlow = YieldMean_ReturnExtremeLowHisto(hsys);
  trials = 0;
  do {
    fitres = hlow->Fit(f, opt);
    Printf("Trial: %d", trials++);
    if(trials > 10) {
      Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
      break;
    }
  }
  while (fitres != 0);
  hlo = YieldMean_LowExtrapolationHisto(hlow, f, min, loprecision);
  hhi = YieldMean_HighExtrapolationHisto(hlow, f, max, hiprecision);
  YieldMean_IntegralMean(hlow, hlo, hhi, integral, mean);
  integral = TMath::Abs(integral - hout->GetBinContent(kYield));
  hout->SetBinContent(kYieldSysLo, integral);

  cCanvasSys->cd(1);
  f->SetLineColor(4);
  f->DrawCopy("same");

  /*
   * systematic error soft
   */

  TH1 *hsoft = YieldMean_ReturnExtremeSoftHisto(hsys);
  trials = 0;
  do {
    fitres = hsoft->Fit(f, opt);
    Printf("Trial: %d", trials++);
    if(trials > 10) {
      Printf("FIT DOES NOT CONVERGE IN LINE %d",__LINE__);
      break;
    }
  }
  while (fitres != 0);
  hlo = YieldMean_LowExtrapolationHisto(hsoft, f, min, loprecision);
  hhi = YieldMean_HighExtrapolationHisto(hsoft, f, max, hiprecision);
  YieldMean_IntegralMean(hsoft, hlo, hhi, integral, mean);
  mean = TMath::Abs(mean - hout->GetBinContent(kMean));
  hout->SetBinContent(kMeanSysLo, mean);

  cCanvasSys->cd(2);
  f->SetLineColor(4);
  f->DrawCopy("same");

  return hout;
}

TH1 *
YieldMean_LowExtrapolationHisto(TH1 *h, TF1 *f, Double_t min, Double_t binwidth)
{
  /* find lowest edge in histo */
  Int_t binlo;
  Double_t lo;
  for (Int_t ibin = 1; ibin < h->GetNbinsX() + 1; ibin++) {
    if (h->GetBinContent(ibin) != 0.) {
      binlo = ibin;
      lo = h->GetBinLowEdge(ibin);
      break;
    }
  }
  
  Int_t nbins = (lo - min) / binwidth;
  TH1 *hlo = new TH1F("hlo", "", nbins, min, lo);
  
  /* integrate function in histogram bins */
  Double_t cont, err, width;
  for (Int_t ibin = 0; ibin < hlo->GetNbinsX(); ibin++) {
    width = hlo->GetBinWidth(ibin + 1);
    cont = f->Integral(hlo->GetBinLowEdge(ibin + 1), hlo->GetBinLowEdge(ibin + 2), (Double_t *)0, 1.e-6);
    err = f->IntegralError(hlo->GetBinLowEdge(ibin + 1), hlo->GetBinLowEdge(ibin + 2), (Double_t *)0, (Double_t *)0, 1.e-6);
    hlo->SetBinContent(ibin + 1, cont / width);
    hlo->SetBinError(ibin + 1, err / width);
  }

  return hlo;
}

TH1 *
YieldMean_HighExtrapolationHisto(TH1 *h, TF1 *f, Double_t max, Double_t binwidth)
{
  /* find highest edge in histo */
  Int_t binhi;
  Double_t hi;
  for (Int_t ibin = h->GetNbinsX(); ibin > 0; ibin--) {
    if (h->GetBinContent(ibin) != 0.) {
      binhi = ibin + 1;
      hi = h->GetBinLowEdge(ibin + 1);
      break;
    }
  }
  if(max<hi) {
    Printf("Warning! You should probably set a higher max value (Max = %f, hi = %f)", max, hi);
  }
  Int_t nbins = (max - hi) / binwidth;
  TH1 *hhi = new TH1F("hhi", "", nbins, hi, max);
  
  /* integrate function in histogram bins */
  Double_t cont, err, width;
  for (Int_t ibin = 0; ibin < hhi->GetNbinsX(); ibin++) {
    width = hhi->GetBinWidth(ibin + 1);
    cont = f->Integral(hhi->GetBinLowEdge(ibin + 1), hhi->GetBinLowEdge(ibin + 2), (Double_t *)0, 1.e-6);
    err = f->IntegralError(hhi->GetBinLowEdge(ibin + 1), hhi->GetBinLowEdge(ibin + 2), (Double_t *)0, (Double_t *)0, 1.e-6);
    hhi->SetBinContent(ibin + 1, cont / width);
    hhi->SetBinError(ibin + 1, err / width);
  }

  return hhi;
}

TH1 *
YieldMean_ReturnRandom(TH1 *hin)
{
  TH1 *hout = (TH1 *)hin->Clone("hout");
  hout->Reset();
  Double_t cont, err;
  for (Int_t ibin = 0; ibin < hin->GetNbinsX(); ibin++) {
    if (hin->GetBinError(ibin + 1) <= 0.) continue;
    cont = hin->GetBinContent(ibin + 1);
    err = hin->GetBinError(ibin + 1);
    hout->SetBinContent(ibin + 1, gRandom->Gaus(cont, err));
    hout->SetBinError(ibin + 1, err);
  }
  return hout;
}

TH1 *
YieldMean_ReturnCoherentRandom(TH1 *hin)
{
  TH1 *hout = (TH1 *)hin->Clone("hout");
  hout->Reset();
  Double_t cont, err, cohe;
  cohe = gRandom->Gaus(0., 1.);
  for (Int_t ibin = 0; ibin < hin->GetNbinsX(); ibin++) {
    if (hin->GetBinError(ibin + 1) <= 0.) continue;
    cont = hin->GetBinContent(ibin + 1);
    err = hin->GetBinError(ibin + 1);
    hout->SetBinContent(ibin + 1, cont + cohe * err);
    hout->SetBinError(ibin + 1, err);
  }
  return hout;
}

TH1 *
YieldMean_ReturnExtremeHighHisto(TH1 *hin)
{
  TH1 *hout = (TH1 *)hin->Clone(Form("%s_extremehigh", hin->GetName()));
  for (Int_t ibin = 0; ibin < hin->GetNbinsX(); ibin++) {
    if (hin->GetBinError(ibin + 1) <= 0.) continue;
    Double_t val = hin->GetBinContent(ibin + 1);
    Double_t err = hin->GetBinError(ibin + 1);
    hout->SetBinContent(ibin + 1, val + err);
  }
  return hout;
}

TH1 *
YieldMean_ReturnExtremeLowHisto(TH1 *hin)
{
  TH1 *hout = (TH1 *)hin->Clone(Form("%s_extremelow", hin->GetName()));
  for (Int_t ibin = 0; ibin < hin->GetNbinsX(); ibin++) {
    if (hin->GetBinError(ibin + 1) <= 0.) continue;
    Double_t val = hin->GetBinContent(ibin + 1);
    Double_t err = hin->GetBinError(ibin + 1);
    hout->SetBinContent(ibin + 1, val - err);
  }
  return hout;
}

TH1 *
YieldMean_ReturnExtremeSoftHisto(TH1 *hin)
{
  return YieldMean_ReturnExtremeHisto(hin, -1.);
}

TH1 *
YieldMean_ReturnExtremeHardHisto(TH1 *hin)
{
  return YieldMean_ReturnExtremeHisto(hin, 1.);
}

TH1 *
YieldMean_ReturnExtremeHisto(TH1 *hin, Float_t sign)
{
  Double_t ptlow, pthigh;
  for (Int_t ibin = 0; ibin < hin->GetNbinsX(); ibin++) {
    if (hin->GetBinError(ibin + 1) <= 0.) continue;
    ptlow = hin->GetBinLowEdge(ibin + 1);
    break;
  }
  for (Int_t ibin = hin->GetNbinsX(); ibin >= 0; ibin--) {
    if (hin->GetBinError(ibin + 1) <= 0.) continue;
    pthigh = hin->GetBinLowEdge(ibin + 2);
    break;
  }

  Double_t mean = hin->GetMean();
  Double_t maxdiff = 0.;
  TH1 *hmax = NULL;
  for (Int_t inode = 0; inode < hin->GetNbinsX(); inode++) {

    Double_t ptnode = hin->GetBinCenter(inode + 1);
    TH1 *hout = (TH1 *)hin->Clone(Form("%s_extremehard", hin->GetName()));
    
    for (Int_t ibin = 0; ibin < hin->GetNbinsX(); ibin++) {
      if (hin->GetBinError(ibin + 1) <= 0.) continue;
      Double_t val = hin->GetBinContent(ibin + 1);
      Double_t err = hin->GetBinError(ibin + 1);
      Double_t cen = hin->GetBinCenter(ibin + 1);
      if (cen < ptnode)
        err *= -1. + (cen - ptlow) / (ptnode - ptlow);
      else
        err *= (cen - ptnode) / (pthigh - ptnode);

      hout->SetBinContent(ibin + 1, val + sign * err);
    }

    Double_t diff = TMath::Abs(mean - hout->GetMean());
    if (diff > maxdiff) {
      //      printf("found max at %f\n", ptnode);
      if (hmax) delete hmax;
      hmax = (TH1 *)hout->Clone("hmax");
      maxdiff = diff;
    }
    delete hout;
  }
  return hmax;
}

void YieldMean_IntegralMean(TH1 *hdata, TH1 *hlo, TH1 *hhi, Double_t &integral, Double_t &mean,Bool_t printinfo)
{
  
  /*
   * compute integrals
   */
  
  Double_t cont, err, width, cent;
  Double_t I = 0., IX = 0., Ierr = 0., IXerr = 0., Ilerr = 0., IXlerr = 0.;
  Double_t M = 0., Merr = 0., Mlerr = 0., C;
  Double_t dataonly=0.0;

  /* integrate the data */
  for (Int_t ibin = 0; ibin < hdata->GetNbinsX(); ibin++) {
    cent = hdata->GetBinCenter(ibin + 1);
    width = hdata->GetBinWidth(ibin + 1);
    cont = width * hdata->GetBinContent(ibin + 1);
    err = width * hdata->GetBinError(ibin + 1);
    if (err <= 0.) continue;
    I += cont;
    IX += cont * cent;
  }
  
  dataonly=I;	
  /* integrate low */
  for (Int_t ibin = 0; ibin < hlo->GetNbinsX(); ibin++) {
    cent = hlo->GetBinCenter(ibin + 1);
    width = hlo->GetBinWidth(ibin + 1);
    cont = width * hlo->GetBinContent(ibin + 1);
    err = width * hlo->GetBinError(ibin + 1);
    if (err <= 0.) continue;
    I += cont;
    IX += cont * cent;
  }
  /* integrate high */
  for (Int_t ibin = 0; ibin < hhi->GetNbinsX(); ibin++) {
    cent = hhi->GetBinCenter(ibin + 1);
    width = hhi->GetBinWidth(ibin + 1);
    cont = width * hhi->GetBinContent(ibin + 1);
    err = width * hhi->GetBinError(ibin + 1);
    if (err <= 0.) continue;
    I += cont;
    IX += cont * cent;
  }

  /* set values */
  integral = I;
  mean = IX / I;
  if(printinfo)	
  	cout<<"data only = "<<dataonly<<" total = "<<I<<" ratio= "<<dataonly/I<<endl; 	
}
 YieldMean.C:1
 YieldMean.C:2
 YieldMean.C:3
 YieldMean.C:4
 YieldMean.C:5
 YieldMean.C:6
 YieldMean.C:7
 YieldMean.C:8
 YieldMean.C:9
 YieldMean.C:10
 YieldMean.C:11
 YieldMean.C:12
 YieldMean.C:13
 YieldMean.C:14
 YieldMean.C:15
 YieldMean.C:16
 YieldMean.C:17
 YieldMean.C:18
 YieldMean.C:19
 YieldMean.C:20
 YieldMean.C:21
 YieldMean.C:22
 YieldMean.C:23
 YieldMean.C:24
 YieldMean.C:25
 YieldMean.C:26
 YieldMean.C:27
 YieldMean.C:28
 YieldMean.C:29
 YieldMean.C:30
 YieldMean.C:31
 YieldMean.C:32
 YieldMean.C:33
 YieldMean.C:34
 YieldMean.C:35
 YieldMean.C:36
 YieldMean.C:37
 YieldMean.C:38
 YieldMean.C:39
 YieldMean.C:40
 YieldMean.C:41
 YieldMean.C:42
 YieldMean.C:43
 YieldMean.C:44
 YieldMean.C:45
 YieldMean.C:46
 YieldMean.C:47
 YieldMean.C:48
 YieldMean.C:49
 YieldMean.C:50
 YieldMean.C:51
 YieldMean.C:52
 YieldMean.C:53
 YieldMean.C:54
 YieldMean.C:55
 YieldMean.C:56
 YieldMean.C:57
 YieldMean.C:58
 YieldMean.C:59
 YieldMean.C:60
 YieldMean.C:61
 YieldMean.C:62
 YieldMean.C:63
 YieldMean.C:64
 YieldMean.C:65
 YieldMean.C:66
 YieldMean.C:67
 YieldMean.C:68
 YieldMean.C:69
 YieldMean.C:70
 YieldMean.C:71
 YieldMean.C:72
 YieldMean.C:73
 YieldMean.C:74
 YieldMean.C:75
 YieldMean.C:76
 YieldMean.C:77
 YieldMean.C:78
 YieldMean.C:79
 YieldMean.C:80
 YieldMean.C:81
 YieldMean.C:82
 YieldMean.C:83
 YieldMean.C:84
 YieldMean.C:85
 YieldMean.C:86
 YieldMean.C:87
 YieldMean.C:88
 YieldMean.C:89
 YieldMean.C:90
 YieldMean.C:91
 YieldMean.C:92
 YieldMean.C:93
 YieldMean.C:94
 YieldMean.C:95
 YieldMean.C:96
 YieldMean.C:97
 YieldMean.C:98
 YieldMean.C:99
 YieldMean.C:100
 YieldMean.C:101
 YieldMean.C:102
 YieldMean.C:103
 YieldMean.C:104
 YieldMean.C:105
 YieldMean.C:106
 YieldMean.C:107
 YieldMean.C:108
 YieldMean.C:109
 YieldMean.C:110
 YieldMean.C:111
 YieldMean.C:112
 YieldMean.C:113
 YieldMean.C:114
 YieldMean.C:115
 YieldMean.C:116
 YieldMean.C:117
 YieldMean.C:118
 YieldMean.C:119
 YieldMean.C:120
 YieldMean.C:121
 YieldMean.C:122
 YieldMean.C:123
 YieldMean.C:124
 YieldMean.C:125
 YieldMean.C:126
 YieldMean.C:127
 YieldMean.C:128
 YieldMean.C:129
 YieldMean.C:130
 YieldMean.C:131
 YieldMean.C:132
 YieldMean.C:133
 YieldMean.C:134
 YieldMean.C:135
 YieldMean.C:136
 YieldMean.C:137
 YieldMean.C:138
 YieldMean.C:139
 YieldMean.C:140
 YieldMean.C:141
 YieldMean.C:142
 YieldMean.C:143
 YieldMean.C:144
 YieldMean.C:145
 YieldMean.C:146
 YieldMean.C:147
 YieldMean.C:148
 YieldMean.C:149
 YieldMean.C:150
 YieldMean.C:151
 YieldMean.C:152
 YieldMean.C:153
 YieldMean.C:154
 YieldMean.C:155
 YieldMean.C:156
 YieldMean.C:157
 YieldMean.C:158
 YieldMean.C:159
 YieldMean.C:160
 YieldMean.C:161
 YieldMean.C:162
 YieldMean.C:163
 YieldMean.C:164
 YieldMean.C:165
 YieldMean.C:166
 YieldMean.C:167
 YieldMean.C:168
 YieldMean.C:169
 YieldMean.C:170
 YieldMean.C:171
 YieldMean.C:172
 YieldMean.C:173
 YieldMean.C:174
 YieldMean.C:175
 YieldMean.C:176
 YieldMean.C:177
 YieldMean.C:178
 YieldMean.C:179
 YieldMean.C:180
 YieldMean.C:181
 YieldMean.C:182
 YieldMean.C:183
 YieldMean.C:184
 YieldMean.C:185
 YieldMean.C:186
 YieldMean.C:187
 YieldMean.C:188
 YieldMean.C:189
 YieldMean.C:190
 YieldMean.C:191
 YieldMean.C:192
 YieldMean.C:193
 YieldMean.C:194
 YieldMean.C:195
 YieldMean.C:196
 YieldMean.C:197
 YieldMean.C:198
 YieldMean.C:199
 YieldMean.C:200
 YieldMean.C:201
 YieldMean.C:202
 YieldMean.C:203
 YieldMean.C:204
 YieldMean.C:205
 YieldMean.C:206
 YieldMean.C:207
 YieldMean.C:208
 YieldMean.C:209
 YieldMean.C:210
 YieldMean.C:211
 YieldMean.C:212
 YieldMean.C:213
 YieldMean.C:214
 YieldMean.C:215
 YieldMean.C:216
 YieldMean.C:217
 YieldMean.C:218
 YieldMean.C:219
 YieldMean.C:220
 YieldMean.C:221
 YieldMean.C:222
 YieldMean.C:223
 YieldMean.C:224
 YieldMean.C:225
 YieldMean.C:226
 YieldMean.C:227
 YieldMean.C:228
 YieldMean.C:229
 YieldMean.C:230
 YieldMean.C:231
 YieldMean.C:232
 YieldMean.C:233
 YieldMean.C:234
 YieldMean.C:235
 YieldMean.C:236
 YieldMean.C:237
 YieldMean.C:238
 YieldMean.C:239
 YieldMean.C:240
 YieldMean.C:241
 YieldMean.C:242
 YieldMean.C:243
 YieldMean.C:244
 YieldMean.C:245
 YieldMean.C:246
 YieldMean.C:247
 YieldMean.C:248
 YieldMean.C:249
 YieldMean.C:250
 YieldMean.C:251
 YieldMean.C:252
 YieldMean.C:253
 YieldMean.C:254
 YieldMean.C:255
 YieldMean.C:256
 YieldMean.C:257
 YieldMean.C:258
 YieldMean.C:259
 YieldMean.C:260
 YieldMean.C:261
 YieldMean.C:262
 YieldMean.C:263
 YieldMean.C:264
 YieldMean.C:265
 YieldMean.C:266
 YieldMean.C:267
 YieldMean.C:268
 YieldMean.C:269
 YieldMean.C:270
 YieldMean.C:271
 YieldMean.C:272
 YieldMean.C:273
 YieldMean.C:274
 YieldMean.C:275
 YieldMean.C:276
 YieldMean.C:277
 YieldMean.C:278
 YieldMean.C:279
 YieldMean.C:280
 YieldMean.C:281
 YieldMean.C:282
 YieldMean.C:283
 YieldMean.C:284
 YieldMean.C:285
 YieldMean.C:286
 YieldMean.C:287
 YieldMean.C:288
 YieldMean.C:289
 YieldMean.C:290
 YieldMean.C:291
 YieldMean.C:292
 YieldMean.C:293
 YieldMean.C:294
 YieldMean.C:295
 YieldMean.C:296
 YieldMean.C:297
 YieldMean.C:298
 YieldMean.C:299
 YieldMean.C:300
 YieldMean.C:301
 YieldMean.C:302
 YieldMean.C:303
 YieldMean.C:304
 YieldMean.C:305
 YieldMean.C:306
 YieldMean.C:307
 YieldMean.C:308
 YieldMean.C:309
 YieldMean.C:310
 YieldMean.C:311
 YieldMean.C:312
 YieldMean.C:313
 YieldMean.C:314
 YieldMean.C:315
 YieldMean.C:316
 YieldMean.C:317
 YieldMean.C:318
 YieldMean.C:319
 YieldMean.C:320
 YieldMean.C:321
 YieldMean.C:322
 YieldMean.C:323
 YieldMean.C:324
 YieldMean.C:325
 YieldMean.C:326
 YieldMean.C:327
 YieldMean.C:328
 YieldMean.C:329
 YieldMean.C:330
 YieldMean.C:331
 YieldMean.C:332
 YieldMean.C:333
 YieldMean.C:334
 YieldMean.C:335
 YieldMean.C:336
 YieldMean.C:337
 YieldMean.C:338
 YieldMean.C:339
 YieldMean.C:340
 YieldMean.C:341
 YieldMean.C:342
 YieldMean.C:343
 YieldMean.C:344
 YieldMean.C:345
 YieldMean.C:346
 YieldMean.C:347
 YieldMean.C:348
 YieldMean.C:349
 YieldMean.C:350
 YieldMean.C:351
 YieldMean.C:352
 YieldMean.C:353
 YieldMean.C:354
 YieldMean.C:355
 YieldMean.C:356
 YieldMean.C:357
 YieldMean.C:358
 YieldMean.C:359
 YieldMean.C:360
 YieldMean.C:361
 YieldMean.C:362
 YieldMean.C:363
 YieldMean.C:364
 YieldMean.C:365
 YieldMean.C:366
 YieldMean.C:367
 YieldMean.C:368
 YieldMean.C:369
 YieldMean.C:370
 YieldMean.C:371
 YieldMean.C:372
 YieldMean.C:373
 YieldMean.C:374
 YieldMean.C:375
 YieldMean.C:376
 YieldMean.C:377
 YieldMean.C:378
 YieldMean.C:379
 YieldMean.C:380
 YieldMean.C:381
 YieldMean.C:382
 YieldMean.C:383
 YieldMean.C:384
 YieldMean.C:385
 YieldMean.C:386
 YieldMean.C:387
 YieldMean.C:388
 YieldMean.C:389
 YieldMean.C:390
 YieldMean.C:391
 YieldMean.C:392
 YieldMean.C:393
 YieldMean.C:394
 YieldMean.C:395
 YieldMean.C:396
 YieldMean.C:397
 YieldMean.C:398
 YieldMean.C:399
 YieldMean.C:400
 YieldMean.C:401
 YieldMean.C:402
 YieldMean.C:403
 YieldMean.C:404
 YieldMean.C:405
 YieldMean.C:406
 YieldMean.C:407
 YieldMean.C:408
 YieldMean.C:409
 YieldMean.C:410
 YieldMean.C:411
 YieldMean.C:412
 YieldMean.C:413
 YieldMean.C:414
 YieldMean.C:415
 YieldMean.C:416
 YieldMean.C:417
 YieldMean.C:418
 YieldMean.C:419
 YieldMean.C:420
 YieldMean.C:421
 YieldMean.C:422
 YieldMean.C:423
 YieldMean.C:424
 YieldMean.C:425
 YieldMean.C:426
 YieldMean.C:427
 YieldMean.C:428
 YieldMean.C:429
 YieldMean.C:430
 YieldMean.C:431
 YieldMean.C:432
 YieldMean.C:433
 YieldMean.C:434
 YieldMean.C:435
 YieldMean.C:436
 YieldMean.C:437
 YieldMean.C:438
 YieldMean.C:439
 YieldMean.C:440
 YieldMean.C:441
 YieldMean.C:442
 YieldMean.C:443
 YieldMean.C:444
 YieldMean.C:445
 YieldMean.C:446
 YieldMean.C:447
 YieldMean.C:448
 YieldMean.C:449
 YieldMean.C:450
 YieldMean.C:451
 YieldMean.C:452
 YieldMean.C:453
 YieldMean.C:454
 YieldMean.C:455
 YieldMean.C:456
 YieldMean.C:457
 YieldMean.C:458
 YieldMean.C:459
 YieldMean.C:460
 YieldMean.C:461
 YieldMean.C:462
 YieldMean.C:463
 YieldMean.C:464
 YieldMean.C:465
 YieldMean.C:466
 YieldMean.C:467
 YieldMean.C:468
 YieldMean.C:469
 YieldMean.C:470
 YieldMean.C:471
 YieldMean.C:472
 YieldMean.C:473
 YieldMean.C:474
 YieldMean.C:475
 YieldMean.C:476
 YieldMean.C:477
 YieldMean.C:478
 YieldMean.C:479
 YieldMean.C:480
 YieldMean.C:481
 YieldMean.C:482
 YieldMean.C:483
 YieldMean.C:484
 YieldMean.C:485
 YieldMean.C:486
 YieldMean.C:487
 YieldMean.C:488
 YieldMean.C:489
 YieldMean.C:490
 YieldMean.C:491
 YieldMean.C:492
 YieldMean.C:493
 YieldMean.C:494
 YieldMean.C:495
 YieldMean.C:496
 YieldMean.C:497
 YieldMean.C:498
 YieldMean.C:499
 YieldMean.C:500
 YieldMean.C:501
 YieldMean.C:502
 YieldMean.C:503
 YieldMean.C:504
 YieldMean.C:505
 YieldMean.C:506
 YieldMean.C:507
 YieldMean.C:508
 YieldMean.C:509
 YieldMean.C:510
 YieldMean.C:511
 YieldMean.C:512
 YieldMean.C:513