ROOT logo
// $Id$

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>
#include <TH1D.h>
#include <TFile.h>
#include <TTree.h>
#include <TMath.h>
#include <TParticle.h>
#include <TPDGCode.h>
#include <TDatabasePDG.h>
#include <TRandom3.h>
#include <TChain.h>
#include <TROOT.h>
#include <TH2F.h>
#include <TCanvas.h>
#include <TNtuple.h>
#include <TRandom3.h>
#include <TProfile.h>
#include <TColor.h>
#include <TLegend.h>
#include <TF1.h>
#include <TStyle.h>
#include <TGraphErrors.h>
#include <TTimeStamp.h>
#endif

TObjArray *gList = 0;
TTree     *gGTree = 0;

// from PPR
const Int_t nclasses = 6;
Double_t bmin[nclasses] = {0,3,6,9,12,15};
Double_t bmax[nclasses] = {3,6,9,12,15,18};
Double_t fxs[nclasses];

// analysis cuts
const int nclassesan = 11;
Double_t bminan[nclassesan];
Double_t bmaxan[nclassesan];
Double_t fxsan[nclassesan];
Double_t fxsan1[nclassesan] = {5,5,10,10,10,10,10,10,10,10,10};
Double_t npminan[nclassesan];
Double_t npmaxan[nclassesan];
Double_t npfxsan[nclassesan];
const char *lan[nclassesan] = 
  {"0-5","5-10","10-20","20-30","30-40","40-50","50-60","60-70","70-80","80-90","90-100"};
Int_t colorcl[nclassesan] = 
  {kYellow-9,kYellow,kOrange-4,kOrange+6,kOrange+8,kRed,kRed+1,kRed+2,kMagenta+3,kBlue+3,kBlue+4};
Double_t npmean[nclassesan];
Double_t nprms[nclassesan];

TCanvas *Canvas(const char *name, const char *title=0, Int_t ww=600, Int_t wh=400);
void Classes(TH1 *h, Double_t *resmin, Double_t *resmax, Double_t *fxs, Int_t pos=1, Int_t verbose=0);
TObjArray *Draw(const char *expr, const char *sel=0, const char *opt=0, Int_t type=1,
                const char *scl=0, Double_t *smin=0, Double_t *smax=0, TTree *t=0);
TCanvas *FitNpartDists(const char *name, TObjArray *arr, Int_t verbose=0);
TH1 *Hist(const char *hname, const char *name, const char *title, const char *xtitle, 
          const char *ytitle, Bool_t stats=0, Int_t lc=0, Int_t ls=0);
TH1 *Hist(TH1 *h, const char *name, const char *title, const char *xtitle, 
          const char *ytitle, Bool_t stats=0, Int_t lc=0, Int_t ls=0);
TH1 *Hist(const char *name, const char *title, const char *xtitle, const char *ytitle, 
          Bool_t stats=0, Int_t lc=1, Int_t ls=1);
Double_t NBD(Int_t n, Double_t mu, Double_t k);
TH1F *NBDhist(Double_t mu, Double_t k);
void Store(TObject *o, const char *name=0, const char *fname="gres");

// macro starts here

void testHijingGlauber(const char *fname="hj-quenched.root") 
{
  Bool_t pImDist               = 1;
  Bool_t pNpDist               = 1;
  Bool_t pNpDistSelWithImp     = 1;
  Bool_t pNpDistSelWithImpFits = 1;
  Bool_t pMidRecResStudy       = 0;
  Bool_t pdNdEta               = 1;

  Double_t fwdres=0.00;
  Double_t midres=0.00;

  gStyle->SetOptFit(1);
  gROOT->ForceStyle();
  TH1::SetDefaultSumw2(1);

  if (gList) 
    delete gList;
  gList = new TObjArray;
  gList->SetOwner(1);

  TFile *f = TFile::Open(fname);
  TTree *t = (TTree*)f->Get("glaubertree");
  if (!t) {
    cerr << " not find glaubertree" <<endl;
    return;
  }
  if (gGTree)
    delete gGTree;
  gGTree = t;

  if (1) {
    TNtuple *nt = new TNtuple("nt","nt","g1:g2:g3");
    nt->SetDirectory(0);
    Int_t nents = t->GetEntries();
    for (Int_t i=0;i<nents;++i) {
      nt->Fill(gRandom->Gaus(),gRandom->Gaus(),gRandom->Gaus());
    }
    t->AddFriend(nt,"nt");
  }

  t->SetAlias("Etmidn","response.fEtch0n");
  t->SetAlias("Etmidp","response.fEtch0p");
  t->SetAlias("Etfwdn","response.fEtch3n+response.fEtch4n");
  t->SetAlias("Etfwdp","response.fEtch3p+response.fEtch4p");
  t->SetAlias("Nmidn","response.fNch0n");
  t->SetAlias("Nmidp","response.fNch0p");
  t->SetAlias("Nfwdn","response.fNch3n+response.fNch4n");
  t->SetAlias("Nfwdp","response.fNch3p+response.fNch4p");
  t->SetAlias("Nmid","(Nmidn+Nmidp)/2.");

  t->SetAlias("Etfwdnres",Form("Etfwdn*(1+%f*nt.g1)",fwdres));
  t->SetAlias("Etfwdpres",Form("Etfwdp*(1+%f*nt.g2)",fwdres));
  t->SetAlias("Nmidrec",Form("Nmid*(1+%f*nt.g3)",midres));
  t->SetAlias("npart","header.fNT+header.fNP");
  t->SetAlias("ncoll","header.fN00+header.fN01+header.fN10+header.fN11");
  t->SetAlias("bb","header.fBB");

  t->SetAlias("tresp","1+npart*0.");
  //t->SetAlias("tresp","1-exp(-npart/2.)");
  //t->SetAlias("trig","1+Nmid*0.");
  t->SetAlias("trig","rndm<tresp&&rndm<tresp&&Etfwdnres>5&&Etfwdpres>5");

  TString name;
  if (1) {
    name="ImpactDistFine";
    t->Draw("bb>>htemp(3000,0,30)","1","goff");
    TH1F *hbb=(TH1F*)Hist(name,"","impact parameter [fm]","counts per bin");

    Double_t totxs = 0;
    for (Int_t i=0;i<nclasses;++i) {
      fxs[i] = 100. * hbb->Integral(hbb->FindBin(bmin[i]), hbb->FindBin(bmax[i])) / hbb->Integral();
      totxs += fxs[i];
      printf("Class PPR %d: %.1f - %.1f -> %.1f\n",i+1,bmin[i],bmax[i],fxs[i]);
    }
    cout << "Total from PPR: " << totxs << endl;

    Classes(hbb, bminan, bmaxan, fxsan, 1, 0);
    totxs = 0;
    for (Int_t i=0;i<nclassesan;++i) {
      printf("Centrality Class %d: %.2ffm - %.2ffm -> %.2f (%s)\n",i+1,bminan[i],bmaxan[i],fxsan[i],lan[i]);
      totxs+=fxsan[i];
    }
    cout << "Total: " << totxs << endl;

    if (pImDist) {
      name="ImpactDist";
      TCanvas *c = Canvas(name);
      t->Draw("bb>>htemp(440,0,22)");
      Hist(name,"","impact parameter [fm]","counts per bin");
      TObjArray *arr=Draw("bb>>htemp(440,0,22)",0,"hist");
      TLegend *l = dynamic_cast<TLegend*>(arr->At(0));
      if (l) {
        l->SetX1(0.15); l->SetX2(0.35); l->Draw();
      }
      Store(c);
    }
  }
  if (1) {
    name="NpartDistFine";
    t->Draw("npart>>htemp(440,0,440)","1","goff");
    TH1F *hnp=(TH1F*)Hist(name,"","number participants","counts per bin");

    Classes(hnp, npminan, npmaxan, npfxsan, -1, 0);
    Double_t totxs = 0;
    for (Int_t i=0;i<nclassesan;++i) {
      printf("Npart Class %d: %.1f - %.1f -> %.1f (%s)\n",i+1,npminan[i],npmaxan[i],npfxsan[i],lan[i]);
      totxs+=npfxsan[i];
    }
    cout << "Total: " << totxs << endl;
    if (pNpDist) {
      name="NpartDist";
      TCanvas *c1=Canvas(name);
      c1->SetLogy(1);
      t->Draw("npart>>htemp(440,0,440)","1","goff");
      TH1 *h=Hist(name,"","number participants","counts per bin");
      h->SetMinimum(1);
      h->Draw();
      /*TObjArray *arr=*/Draw("npart>>htemp(440,0,440)",0,"hist",-2);
      Store(c1);
    }
    if (pNpDistSelWithImp) {
      name="NpartDistsWithImpact";
      TCanvas *c1=Canvas(name);
      c1->SetLogy(1);
      t->Draw("npart>>htemp(440,0,440)","1","goff");
      TH1 *h=Hist(name,"","number participants","counts per bin");
      h->SetMinimum(1);
      h->Draw();
      TObjArray *arr=Draw("npart>>htemp(440,0,440)",0,"hist",-1);
      TGraph *ge1 = new TGraph(nclassesan);
      TGraph *ge2 = new TGraph(nclassesan);
      ge1->SetMarkerSize(1.2);
      ge1->SetMarkerStyle(20);
      ge2->SetMarkerSize(1.2);
      ge2->SetMarkerStyle(20);
      for (Int_t i=1;i<arr->GetEntries();++i) {
        TH1F *h = (TH1F*)arr->At(i);
        Int_t N=nclassesan-i;
        Double_t mean  = h->GetMean();
        Double_t width = h->GetRMS();
        npmean[N] = mean;
        nprms[N]  = width;
        ge1->SetPoint(N,N,mean);
        ge2->SetPoint(N,N,width);
      }
      Store(c1);
      Store(ge1,"gNpartMean");
      Store(ge2,"gNpartRms");
      if (pNpDistSelWithImpFits) {
        TCanvas *c2 = FitNpartDists("NpartDistsWithImpactFits",arr,1);
        Store(c2);
      }
    }
  }
  if (pMidRecResStudy) {
    Int_t resint = 100*midres;
    name=Form("MidRecDistribution_res%d",resint);
    t->Draw("Nmidrec>>htemp(3000,0,3000)","1","goff");
    TH1 *hNm = Hist(name,"","Nch in -0.5<#eta<0.5","counts per bin");
    Double_t resmin[nclassesan];
    Double_t resmax[nclassesan];
    Double_t fxs[nclassesan];
    Classes(hNm,resmin,resmax,fxs,-1,1);
    if (1) {
      TCanvas *c = Canvas(name);
      hNm->SetMinimum(1);
      hNm->Draw();
      Draw("Nmidrec>>htemp(3000,0,3000)",0,"hist",-3,"Nmidrec",resmin,resmax);
      Store(c);
    } else {
      delete hNm;
    }

    name=Form("NpartDistsWithTracks_res%d",resint);
    TCanvas *c1 = Canvas(name);
    t->Draw("npart>>htemp(440,0,440)","1","goff");
    TH1 *hNpart = Hist(name,"","number participants","counts per bin");
    hNpart->SetMinimum(1);
    hNpart->Draw();
    TObjArray *arr=Draw("npart>>htemp(440,0,440)",0,"hist",-3,"Nmidrec",resmin,resmax);
    Store(c1);
    if (1) {
      TCanvas *c2 = FitNpartDists(Form("NpartDistsWithTracksFits_res%d",resint),arr,1);
      Store(c2);
    }
    TGraph *ge1 = new TGraph(nclassesan);
    TGraph *ge2 = new TGraph(nclassesan);
    ge1->SetMarkerSize(1.2);
    ge1->SetMarkerStyle(20);
    ge2->SetMarkerSize(1.2);
    ge2->SetMarkerStyle(20);
    for (Int_t i=1;i<arr->GetEntries();++i) {
      Int_t N=nclassesan-i;
      TH1F *h = (TH1F*)arr->At(i);
      Double_t mean  = h->GetMean();
      Double_t rms = h->GetRMS();
      ge1->SetPoint(N,N,mean/npmean[N]-1);
      ge2->SetPoint(N,N,rms/mean*npmean[N]/nprms[N]-1);
      cout << i << " " << mean << " " << rms << " " << npmean[N] << " " << nprms[N] << endl;
    }
    Store(ge1,Form("gMidrecMean_res%d",resint));
    Store(ge2,Form("gMidrecRms_res%d",resint));
  }
  if (pdNdEta) {
    name="dNdEtaPerPartPair";
    Canvas(name);
    t->Draw("Nmid","1","");
    Hist(name,"","Nch in -0.5<#eta<0.5","counts per bin");
    TObjArray *arr = Draw("Nmid",0,"hist",1);
    TGraphErrors *ge = new TGraphErrors(nclassesan);
    ge->SetMarkerSize(1.2);
    ge->SetMarkerStyle(20);
    for (Int_t i=1;i<arr->GetEntries();++i) {
      Int_t N=i-1;//nclassesan-i;
      TH1F *h = (TH1F*)arr->At(i);
      Double_t mean  = h->GetMean();
      Double_t rms = h->GetRMS();
      ge->SetPoint(N,npmean[N],2*mean/npmean[N]);
      ge->SetPointError(N,nprms[N],2*rms/npmean[N]);
      cout << i << " " << mean << " " << rms << " " << npmean[N] << " " << nprms[N] << endl;
    }
    TCanvas *c = new TCanvas("dndetaplot");
    c->Draw();
    TH2F *h2f = new TH2F("h2f",";Npart;0.5/Npart dN/d#eta",1,0,400,1,0,11);
    h2f->SetStats(0);
    h2f->Draw();
    ge->Draw("P");
  }
  if (0) {
    name="FwdSumCorr";
    Canvas(name);
    t->Draw("Etfwdn:Etfwdp");
    Hist(name,"","sum p_{t} [GeV] in 3<#eta<5","sum p_{t} [GeV] in -3<#eta<-5");
  }
  if (0) {
    name="FwdNvsNpart";
    Canvas(name);
    t->Draw("Etfwdn:npart","1","prof");
    Hist(name,"","Npart","sum p_{t} [GeV] in -3<#eta<-5");
  }
  if (0) {
    name="FwdPvsNpart";
    Canvas(name);
    t->Draw("Etfwdp:npart","1","prof");
    Hist(name,"","Npart","sum p_{t} [GeV] in 3<#eta<5");
  }
  if (0) {
    name="FwdSumvsNpart";
    Canvas(name);
    t->Draw("Etfwdn+Etfwdp:npart","1","prof");
    Hist(name,"","Npart","sum p_{t} [GeV] in 3<|#eta|<5");
  }
  if (0) {
    name="FwdSumDistribution";
    Canvas(name);
    t->Draw("Etfwdn+Etfwdp","1","");
    TH1 *h1=Hist(name,"","sum p_{t} [GeV] in 3<|#eta|<5","counts per bin");
    name="FwdSumTriggered";
    t->Draw("Etfwdn+Etfwdp","trig>0","same");
    TH1 *h2=Hist(name,"","sum p_{t} [GeV] in 3<|#eta|<5","counts per bin",0,2,1);
    Double_t percent = h2->Integral()/h1->Integral()*100.;
    cout << "Recorded " << percent << "% of tot. cross section" << endl;
  }
  if (0) {
    name="Mid2Distribution";
    Canvas(name);
    t->Draw("Nmidn+Nmidp","1","");
    Hist(name,"","Nch in -1<#eta<1","counts per bin");
    name="Mid2Triggered";
    t->Draw("Nmidn+Nmidp","trig>0","same");
    Hist(name,"","Nch in -1<#eta<1","counts per bin",0,2,1);
  }
  if (0) {
    name="MidDistribution";
    Canvas(name);
    t->Draw("Nmid","1","");
    Hist(name,"","Nch in -0.5<#eta<0.5","counts per bin");
    name="MidTriggered";
    t->Draw("Nmid","trig>0","same");
    Hist(name,"","Nch in -0.5<#eta<0.5","counts per bin",0,2,1);
  }
}

//--------------------------------------------------------------------------------------------------

TCanvas *Canvas(const char *name, const char *title, Int_t ww, Int_t wh)
{
  if (!name)
    return 0;
  TString hname(Form("c%s",name));
  if (!title)
    title = name;
  TCanvas *c = new TCanvas(hname,title,ww,wh);
  return c;
}

//--------------------------------------------------------------------------------------------------

void Classes(TH1 *h, Double_t *resmin, Double_t *resmax, Double_t *fxs, Int_t pos, Int_t verbose)
{
  Int_t bfrom = 0;
  Int_t cbin  = h->GetNbinsX();
  if (pos<0) {
    pos   = -1;
    bfrom = h->GetNbinsX()+1;
    cbin  = 1;
  } else {
    pos = 1;
  }

  Double_t totxs=0;
  for (Int_t i=0,lbin=bfrom,bin=lbin;i<nclassesan;++i) {
    lbin = bin+pos;
    Int_t lxs = 0;
    Double_t norm = h->Integral();
    while (1) {
      bin += pos;
      lxs += h->GetBinContent(bin);
      Double_t pxs = lxs/norm*100;
      Double_t tdiff = (lxs+h->GetBinContent(bin+pos))/norm*100;
      //cout << pos << " " << bin << " " << pxs << " " << tdiff << " " << lbin << endl;
      if ((pxs>1&&TMath::Abs(pxs-fxsan1[i])<=TMath::Abs(tdiff-fxsan1[i]))||(bin==cbin)) {
        if (pos>0) {
          resmin[i] = h->GetBinLowEdge(lbin);
          resmax[i] = h->GetBinLowEdge(bin+1);
        } else {
          resmin[i] = h->GetBinLowEdge(bin);
          resmax[i] = h->GetBinLowEdge(lbin+1);
        }
        fxs[i] = pxs;
        if (verbose)
          printf("Class %d: %.1f - %.1f -> %.1f (%s)\n",i+1,resmin[i],resmax[i],pxs,lan[i]);
        totxs += pxs;
        break;
      }
    }
  }
  if (verbose)
    cout << "Total: " << totxs << endl;
}

//--------------------------------------------------------------------------------------------------

TObjArray *Draw(const char *expr, const char *sel, const char *opt, Int_t type,
                const char *scl, Double_t *smin, Double_t *smax, TTree *t)
{
  if (!t) 
    t = gGTree;
  
  TObjArray *oarr = new TObjArray;
  oarr->SetOwner();

  TLegend *l = new TLegend(0.2,0.4,0.4,0.9);
  l->SetBorderSize(0);
  l->SetFillStyle(0);
  oarr->Add(l);

  TString tsel("1");
  if (sel)
    tsel=sel;
  TString doopt("same");
  if (opt)
    doopt=Form("%s,same",opt);

  Int_t beg=0;
  Int_t end=nclassesan;
  if (type<0) {
    beg=nclassesan-1;
    end=-1;
  }
  Double_t *cmin = bminan;
  Double_t *cmax = bmaxan;
  const char *varname="bb";
  if (TMath::Abs(type)==2) {
    cmin = npminan;
    cmax = npmaxan;
    varname="npart";
  } else if (TMath::Abs(type)>2) {
    cmin    = smin;
    cmax    = smax;
    varname = scl;
  }

  while(beg!=end) {
    Int_t i=beg;
    TString dosel(Form("(%s>%.2f&&%s<%.2f)&&(%s)",varname,cmin[i],varname,cmax[i],tsel.Data()));
    t->Draw(expr,dosel,doopt);
    TH1 *h=dynamic_cast<TH1*>(gROOT->FindObject("htemp"));
    if (h) {
      h->SetName(Form("cl_%s_%s",expr,dosel.Data()));
      h->SetLineColor(colorcl[i]);
      h->SetMarkerColor(colorcl[i]);
      h->SetFillColor(colorcl[i]);
      h->SetFillStyle(1000);
      l->AddEntry(h,Form("%s%%",lan[i]),"f");
      oarr->Add(h);
    } else {
      cerr << "Could not obtain htemp for: " << expr << " " << dosel << " " << doopt << endl;
    }
    if(type<0)
      --beg;
    else
      ++beg;
  }
  return oarr;
}

//--------------------------------------------------------------------------------------------------

TCanvas *FitNpartDists(const char *name, TObjArray *arr, Int_t verbose)
{
  TCanvas *c = Canvas(name,0,1200,900);
  c->Divide(4,3);
  TGraphErrors *ge = new TGraphErrors(nclassesan);
  for (Int_t i=1;i<arr->GetEntries();++i) {
    c->cd(i);
    Int_t N=nclassesan-i;
    TH1F *h = (TH1F*)arr->At(i);
    Double_t mean  = h->GetMean();
    Double_t width = h->GetRMS();
    TH1 *h1 = h->DrawCopy("hist");
    h1->SetName(lan[N]);
    h1->SetTitle(Form("%s%% most central",lan[N]));
    h1->SetStats(1);
    h1->SetXTitle("Npart");
    h1->SetYTitle("counts per bin");
    TF1 *fit = new TF1(Form("fit%d",i),"gaus(0)",0,440);
    fit->SetParameters(1,mean,width);
    fit->SetLineWidth(3);
    h1->Fit(fit,"QM0");
    fit->Draw("same");
    ge->SetPoint(N,mean,width);
    //ge->SetPointError(N,0,width);
    if (verbose) 
      cout << i << " hist: " << mean << " " << width 
           << " fit:  " << fit->GetParameter(1) << " " << fit->GetParameter(2) << endl;
  }
  c->cd(12);
  TH2F *h2f = new TH2F(Form("%s_summary",name),";#LTNpart#GT;RMS",1,0,440,1,0,49);
  h2f->SetStats(0);
  h2f->Draw();
  ge->SetMarkerSize(1.2);
  ge->SetMarkerStyle(20);
  ge->Draw("P");
  return c;
}

//--------------------------------------------------------------------------------------------------

TH1 *Hist(const char *name, const char *title, const char *xtitle, const char *ytitle, 
          Bool_t stats, Int_t lc, Int_t ls)
{
  TH1 *h=dynamic_cast<TH1*>(gROOT->FindObject("htemp"));
  return Hist(h,name,title,xtitle,ytitle,stats,lc,ls);
}

//--------------------------------------------------------------------------------------------------

TH1 *Hist(const char *hname, const char *name, const char *title, const char *xtitle, 
          const char *ytitle, Bool_t stats, Int_t lc, Int_t ls)
{
  TH1 *h=dynamic_cast<TH1*>(gROOT->FindObject(hname));
  return Hist(h,name,title,xtitle,ytitle,stats,lc,ls);
}

//--------------------------------------------------------------------------------------------------

TH1 *Hist(TH1 *h, const char *name, const char *title, const char *xtitle, 
          const char *ytitle, Bool_t stats, Int_t lc, Int_t ls)
{
  if (!h && !name) 
    return 0;
  TString hname(Form("h%s",name));
  h->SetName(hname);
  if (!title)
    title = name;
  h->SetTitle(title);
  if (xtitle)
    h->SetXTitle(xtitle);
  if (ytitle)
    h->SetYTitle(ytitle);
  h->GetXaxis()->SetTitleOffset(1.1);
  h->GetYaxis()->SetTitleOffset(1.2);
  h->SetStats(stats);
  h->SetLineColor(lc);
  h->SetLineStyle(ls);
  gList->Add(h);
  return h;
}

//--------------------------------------------------------------------------------------------------

void Store(TObject *o, const char *name, const char *fname)
{
  if (!o || !fname)
    return;

  TTimeStamp t;
  TString filename(Form("%s_%d.root",fname, t.GetDate()));
  TFile *f = new TFile(filename,"update");
  if (!name)
    name = o->GetName();
  if (o) {
    f->Delete(Form("%s;1",name));
    o->Write(name);
  }

  f->Close();
  delete f;
}

//--------------------------------------------------------------------------------------------------

Double_t NBD(Int_t n, Double_t mu, Double_t k)
{
  Double_t mudk = mu/k;
  Double_t ret = TMath::Gamma(n+k) / TMath::Gamma(k) / TMath::Factorial(n) *
                 TMath::Power(mudk,n) / TMath::Power(1+mudk,n+k);
  return ret;
}

//--------------------------------------------------------------------------------------------------

TH1F *NBDhist(Double_t mu, Double_t k)
{
  TH1F *h = new TH1F("htemp","",100,0,100);
  h->SetName(Form("nbd_%f_%f",mu,k));
  h->SetDirectory(0);
  for (Int_t i=0;i<100;++i) {
    Double_t val = NBD(i,mu,k);
    h->Fill(i,val);
  }
  return h;
}
 testHijingGlauber.C:1
 testHijingGlauber.C:2
 testHijingGlauber.C:3
 testHijingGlauber.C:4
 testHijingGlauber.C:5
 testHijingGlauber.C:6
 testHijingGlauber.C:7
 testHijingGlauber.C:8
 testHijingGlauber.C:9
 testHijingGlauber.C:10
 testHijingGlauber.C:11
 testHijingGlauber.C:12
 testHijingGlauber.C:13
 testHijingGlauber.C:14
 testHijingGlauber.C:15
 testHijingGlauber.C:16
 testHijingGlauber.C:17
 testHijingGlauber.C:18
 testHijingGlauber.C:19
 testHijingGlauber.C:20
 testHijingGlauber.C:21
 testHijingGlauber.C:22
 testHijingGlauber.C:23
 testHijingGlauber.C:24
 testHijingGlauber.C:25
 testHijingGlauber.C:26
 testHijingGlauber.C:27
 testHijingGlauber.C:28
 testHijingGlauber.C:29
 testHijingGlauber.C:30
 testHijingGlauber.C:31
 testHijingGlauber.C:32
 testHijingGlauber.C:33
 testHijingGlauber.C:34
 testHijingGlauber.C:35
 testHijingGlauber.C:36
 testHijingGlauber.C:37
 testHijingGlauber.C:38
 testHijingGlauber.C:39
 testHijingGlauber.C:40
 testHijingGlauber.C:41
 testHijingGlauber.C:42
 testHijingGlauber.C:43
 testHijingGlauber.C:44
 testHijingGlauber.C:45
 testHijingGlauber.C:46
 testHijingGlauber.C:47
 testHijingGlauber.C:48
 testHijingGlauber.C:49
 testHijingGlauber.C:50
 testHijingGlauber.C:51
 testHijingGlauber.C:52
 testHijingGlauber.C:53
 testHijingGlauber.C:54
 testHijingGlauber.C:55
 testHijingGlauber.C:56
 testHijingGlauber.C:57
 testHijingGlauber.C:58
 testHijingGlauber.C:59
 testHijingGlauber.C:60
 testHijingGlauber.C:61
 testHijingGlauber.C:62
 testHijingGlauber.C:63
 testHijingGlauber.C:64
 testHijingGlauber.C:65
 testHijingGlauber.C:66
 testHijingGlauber.C:67
 testHijingGlauber.C:68
 testHijingGlauber.C:69
 testHijingGlauber.C:70
 testHijingGlauber.C:71
 testHijingGlauber.C:72
 testHijingGlauber.C:73
 testHijingGlauber.C:74
 testHijingGlauber.C:75
 testHijingGlauber.C:76
 testHijingGlauber.C:77
 testHijingGlauber.C:78
 testHijingGlauber.C:79
 testHijingGlauber.C:80
 testHijingGlauber.C:81
 testHijingGlauber.C:82
 testHijingGlauber.C:83
 testHijingGlauber.C:84
 testHijingGlauber.C:85
 testHijingGlauber.C:86
 testHijingGlauber.C:87
 testHijingGlauber.C:88
 testHijingGlauber.C:89
 testHijingGlauber.C:90
 testHijingGlauber.C:91
 testHijingGlauber.C:92
 testHijingGlauber.C:93
 testHijingGlauber.C:94
 testHijingGlauber.C:95
 testHijingGlauber.C:96
 testHijingGlauber.C:97
 testHijingGlauber.C:98
 testHijingGlauber.C:99
 testHijingGlauber.C:100
 testHijingGlauber.C:101
 testHijingGlauber.C:102
 testHijingGlauber.C:103
 testHijingGlauber.C:104
 testHijingGlauber.C:105
 testHijingGlauber.C:106
 testHijingGlauber.C:107
 testHijingGlauber.C:108
 testHijingGlauber.C:109
 testHijingGlauber.C:110
 testHijingGlauber.C:111
 testHijingGlauber.C:112
 testHijingGlauber.C:113
 testHijingGlauber.C:114
 testHijingGlauber.C:115
 testHijingGlauber.C:116
 testHijingGlauber.C:117
 testHijingGlauber.C:118
 testHijingGlauber.C:119
 testHijingGlauber.C:120
 testHijingGlauber.C:121
 testHijingGlauber.C:122
 testHijingGlauber.C:123
 testHijingGlauber.C:124
 testHijingGlauber.C:125
 testHijingGlauber.C:126
 testHijingGlauber.C:127
 testHijingGlauber.C:128
 testHijingGlauber.C:129
 testHijingGlauber.C:130
 testHijingGlauber.C:131
 testHijingGlauber.C:132
 testHijingGlauber.C:133
 testHijingGlauber.C:134
 testHijingGlauber.C:135
 testHijingGlauber.C:136
 testHijingGlauber.C:137
 testHijingGlauber.C:138
 testHijingGlauber.C:139
 testHijingGlauber.C:140
 testHijingGlauber.C:141
 testHijingGlauber.C:142
 testHijingGlauber.C:143
 testHijingGlauber.C:144
 testHijingGlauber.C:145
 testHijingGlauber.C:146
 testHijingGlauber.C:147
 testHijingGlauber.C:148
 testHijingGlauber.C:149
 testHijingGlauber.C:150
 testHijingGlauber.C:151
 testHijingGlauber.C:152
 testHijingGlauber.C:153
 testHijingGlauber.C:154
 testHijingGlauber.C:155
 testHijingGlauber.C:156
 testHijingGlauber.C:157
 testHijingGlauber.C:158
 testHijingGlauber.C:159
 testHijingGlauber.C:160
 testHijingGlauber.C:161
 testHijingGlauber.C:162
 testHijingGlauber.C:163
 testHijingGlauber.C:164
 testHijingGlauber.C:165
 testHijingGlauber.C:166
 testHijingGlauber.C:167
 testHijingGlauber.C:168
 testHijingGlauber.C:169
 testHijingGlauber.C:170
 testHijingGlauber.C:171
 testHijingGlauber.C:172
 testHijingGlauber.C:173
 testHijingGlauber.C:174
 testHijingGlauber.C:175
 testHijingGlauber.C:176
 testHijingGlauber.C:177
 testHijingGlauber.C:178
 testHijingGlauber.C:179
 testHijingGlauber.C:180
 testHijingGlauber.C:181
 testHijingGlauber.C:182
 testHijingGlauber.C:183
 testHijingGlauber.C:184
 testHijingGlauber.C:185
 testHijingGlauber.C:186
 testHijingGlauber.C:187
 testHijingGlauber.C:188
 testHijingGlauber.C:189
 testHijingGlauber.C:190
 testHijingGlauber.C:191
 testHijingGlauber.C:192
 testHijingGlauber.C:193
 testHijingGlauber.C:194
 testHijingGlauber.C:195
 testHijingGlauber.C:196
 testHijingGlauber.C:197
 testHijingGlauber.C:198
 testHijingGlauber.C:199
 testHijingGlauber.C:200
 testHijingGlauber.C:201
 testHijingGlauber.C:202
 testHijingGlauber.C:203
 testHijingGlauber.C:204
 testHijingGlauber.C:205
 testHijingGlauber.C:206
 testHijingGlauber.C:207
 testHijingGlauber.C:208
 testHijingGlauber.C:209
 testHijingGlauber.C:210
 testHijingGlauber.C:211
 testHijingGlauber.C:212
 testHijingGlauber.C:213
 testHijingGlauber.C:214
 testHijingGlauber.C:215
 testHijingGlauber.C:216
 testHijingGlauber.C:217
 testHijingGlauber.C:218
 testHijingGlauber.C:219
 testHijingGlauber.C:220
 testHijingGlauber.C:221
 testHijingGlauber.C:222
 testHijingGlauber.C:223
 testHijingGlauber.C:224
 testHijingGlauber.C:225
 testHijingGlauber.C:226
 testHijingGlauber.C:227
 testHijingGlauber.C:228
 testHijingGlauber.C:229
 testHijingGlauber.C:230
 testHijingGlauber.C:231
 testHijingGlauber.C:232
 testHijingGlauber.C:233
 testHijingGlauber.C:234
 testHijingGlauber.C:235
 testHijingGlauber.C:236
 testHijingGlauber.C:237
 testHijingGlauber.C:238
 testHijingGlauber.C:239
 testHijingGlauber.C:240
 testHijingGlauber.C:241
 testHijingGlauber.C:242
 testHijingGlauber.C:243
 testHijingGlauber.C:244
 testHijingGlauber.C:245
 testHijingGlauber.C:246
 testHijingGlauber.C:247
 testHijingGlauber.C:248
 testHijingGlauber.C:249
 testHijingGlauber.C:250
 testHijingGlauber.C:251
 testHijingGlauber.C:252
 testHijingGlauber.C:253
 testHijingGlauber.C:254
 testHijingGlauber.C:255
 testHijingGlauber.C:256
 testHijingGlauber.C:257
 testHijingGlauber.C:258
 testHijingGlauber.C:259
 testHijingGlauber.C:260
 testHijingGlauber.C:261
 testHijingGlauber.C:262
 testHijingGlauber.C:263
 testHijingGlauber.C:264
 testHijingGlauber.C:265
 testHijingGlauber.C:266
 testHijingGlauber.C:267
 testHijingGlauber.C:268
 testHijingGlauber.C:269
 testHijingGlauber.C:270
 testHijingGlauber.C:271
 testHijingGlauber.C:272
 testHijingGlauber.C:273
 testHijingGlauber.C:274
 testHijingGlauber.C:275
 testHijingGlauber.C:276
 testHijingGlauber.C:277
 testHijingGlauber.C:278
 testHijingGlauber.C:279
 testHijingGlauber.C:280
 testHijingGlauber.C:281
 testHijingGlauber.C:282
 testHijingGlauber.C:283
 testHijingGlauber.C:284
 testHijingGlauber.C:285
 testHijingGlauber.C:286
 testHijingGlauber.C:287
 testHijingGlauber.C:288
 testHijingGlauber.C:289
 testHijingGlauber.C:290
 testHijingGlauber.C:291
 testHijingGlauber.C:292
 testHijingGlauber.C:293
 testHijingGlauber.C:294
 testHijingGlauber.C:295
 testHijingGlauber.C:296
 testHijingGlauber.C:297
 testHijingGlauber.C:298
 testHijingGlauber.C:299
 testHijingGlauber.C:300
 testHijingGlauber.C:301
 testHijingGlauber.C:302
 testHijingGlauber.C:303
 testHijingGlauber.C:304
 testHijingGlauber.C:305
 testHijingGlauber.C:306
 testHijingGlauber.C:307
 testHijingGlauber.C:308
 testHijingGlauber.C:309
 testHijingGlauber.C:310
 testHijingGlauber.C:311
 testHijingGlauber.C:312
 testHijingGlauber.C:313
 testHijingGlauber.C:314
 testHijingGlauber.C:315
 testHijingGlauber.C:316
 testHijingGlauber.C:317
 testHijingGlauber.C:318
 testHijingGlauber.C:319
 testHijingGlauber.C:320
 testHijingGlauber.C:321
 testHijingGlauber.C:322
 testHijingGlauber.C:323
 testHijingGlauber.C:324
 testHijingGlauber.C:325
 testHijingGlauber.C:326
 testHijingGlauber.C:327
 testHijingGlauber.C:328
 testHijingGlauber.C:329
 testHijingGlauber.C:330
 testHijingGlauber.C:331
 testHijingGlauber.C:332
 testHijingGlauber.C:333
 testHijingGlauber.C:334
 testHijingGlauber.C:335
 testHijingGlauber.C:336
 testHijingGlauber.C:337
 testHijingGlauber.C:338
 testHijingGlauber.C:339
 testHijingGlauber.C:340
 testHijingGlauber.C:341
 testHijingGlauber.C:342
 testHijingGlauber.C:343
 testHijingGlauber.C:344
 testHijingGlauber.C:345
 testHijingGlauber.C:346
 testHijingGlauber.C:347
 testHijingGlauber.C:348
 testHijingGlauber.C:349
 testHijingGlauber.C:350
 testHijingGlauber.C:351
 testHijingGlauber.C:352
 testHijingGlauber.C:353
 testHijingGlauber.C:354
 testHijingGlauber.C:355
 testHijingGlauber.C:356
 testHijingGlauber.C:357
 testHijingGlauber.C:358
 testHijingGlauber.C:359
 testHijingGlauber.C:360
 testHijingGlauber.C:361
 testHijingGlauber.C:362
 testHijingGlauber.C:363
 testHijingGlauber.C:364
 testHijingGlauber.C:365
 testHijingGlauber.C:366
 testHijingGlauber.C:367
 testHijingGlauber.C:368
 testHijingGlauber.C:369
 testHijingGlauber.C:370
 testHijingGlauber.C:371
 testHijingGlauber.C:372
 testHijingGlauber.C:373
 testHijingGlauber.C:374
 testHijingGlauber.C:375
 testHijingGlauber.C:376
 testHijingGlauber.C:377
 testHijingGlauber.C:378
 testHijingGlauber.C:379
 testHijingGlauber.C:380
 testHijingGlauber.C:381
 testHijingGlauber.C:382
 testHijingGlauber.C:383
 testHijingGlauber.C:384
 testHijingGlauber.C:385
 testHijingGlauber.C:386
 testHijingGlauber.C:387
 testHijingGlauber.C:388
 testHijingGlauber.C:389
 testHijingGlauber.C:390
 testHijingGlauber.C:391
 testHijingGlauber.C:392
 testHijingGlauber.C:393
 testHijingGlauber.C:394
 testHijingGlauber.C:395
 testHijingGlauber.C:396
 testHijingGlauber.C:397
 testHijingGlauber.C:398
 testHijingGlauber.C:399
 testHijingGlauber.C:400
 testHijingGlauber.C:401
 testHijingGlauber.C:402
 testHijingGlauber.C:403
 testHijingGlauber.C:404
 testHijingGlauber.C:405
 testHijingGlauber.C:406
 testHijingGlauber.C:407
 testHijingGlauber.C:408
 testHijingGlauber.C:409
 testHijingGlauber.C:410
 testHijingGlauber.C:411
 testHijingGlauber.C:412
 testHijingGlauber.C:413
 testHijingGlauber.C:414
 testHijingGlauber.C:415
 testHijingGlauber.C:416
 testHijingGlauber.C:417
 testHijingGlauber.C:418
 testHijingGlauber.C:419
 testHijingGlauber.C:420
 testHijingGlauber.C:421
 testHijingGlauber.C:422
 testHijingGlauber.C:423
 testHijingGlauber.C:424
 testHijingGlauber.C:425
 testHijingGlauber.C:426
 testHijingGlauber.C:427
 testHijingGlauber.C:428
 testHijingGlauber.C:429
 testHijingGlauber.C:430
 testHijingGlauber.C:431
 testHijingGlauber.C:432
 testHijingGlauber.C:433
 testHijingGlauber.C:434
 testHijingGlauber.C:435
 testHijingGlauber.C:436
 testHijingGlauber.C:437
 testHijingGlauber.C:438
 testHijingGlauber.C:439
 testHijingGlauber.C:440
 testHijingGlauber.C:441
 testHijingGlauber.C:442
 testHijingGlauber.C:443
 testHijingGlauber.C:444
 testHijingGlauber.C:445
 testHijingGlauber.C:446
 testHijingGlauber.C:447
 testHijingGlauber.C:448
 testHijingGlauber.C:449
 testHijingGlauber.C:450
 testHijingGlauber.C:451
 testHijingGlauber.C:452
 testHijingGlauber.C:453
 testHijingGlauber.C:454
 testHijingGlauber.C:455
 testHijingGlauber.C:456
 testHijingGlauber.C:457
 testHijingGlauber.C:458
 testHijingGlauber.C:459
 testHijingGlauber.C:460
 testHijingGlauber.C:461
 testHijingGlauber.C:462
 testHijingGlauber.C:463
 testHijingGlauber.C:464
 testHijingGlauber.C:465
 testHijingGlauber.C:466
 testHijingGlauber.C:467
 testHijingGlauber.C:468
 testHijingGlauber.C:469
 testHijingGlauber.C:470
 testHijingGlauber.C:471
 testHijingGlauber.C:472
 testHijingGlauber.C:473
 testHijingGlauber.C:474
 testHijingGlauber.C:475
 testHijingGlauber.C:476
 testHijingGlauber.C:477
 testHijingGlauber.C:478
 testHijingGlauber.C:479
 testHijingGlauber.C:480
 testHijingGlauber.C:481
 testHijingGlauber.C:482
 testHijingGlauber.C:483
 testHijingGlauber.C:484
 testHijingGlauber.C:485
 testHijingGlauber.C:486
 testHijingGlauber.C:487
 testHijingGlauber.C:488
 testHijingGlauber.C:489
 testHijingGlauber.C:490
 testHijingGlauber.C:491
 testHijingGlauber.C:492
 testHijingGlauber.C:493
 testHijingGlauber.C:494
 testHijingGlauber.C:495
 testHijingGlauber.C:496
 testHijingGlauber.C:497
 testHijingGlauber.C:498
 testHijingGlauber.C:499
 testHijingGlauber.C:500
 testHijingGlauber.C:501
 testHijingGlauber.C:502
 testHijingGlauber.C:503
 testHijingGlauber.C:504
 testHijingGlauber.C:505
 testHijingGlauber.C:506
 testHijingGlauber.C:507
 testHijingGlauber.C:508
 testHijingGlauber.C:509
 testHijingGlauber.C:510
 testHijingGlauber.C:511
 testHijingGlauber.C:512
 testHijingGlauber.C:513
 testHijingGlauber.C:514
 testHijingGlauber.C:515
 testHijingGlauber.C:516
 testHijingGlauber.C:517
 testHijingGlauber.C:518
 testHijingGlauber.C:519
 testHijingGlauber.C:520
 testHijingGlauber.C:521
 testHijingGlauber.C:522
 testHijingGlauber.C:523
 testHijingGlauber.C:524
 testHijingGlauber.C:525
 testHijingGlauber.C:526
 testHijingGlauber.C:527
 testHijingGlauber.C:528
 testHijingGlauber.C:529
 testHijingGlauber.C:530
 testHijingGlauber.C:531
 testHijingGlauber.C:532
 testHijingGlauber.C:533
 testHijingGlauber.C:534
 testHijingGlauber.C:535
 testHijingGlauber.C:536
 testHijingGlauber.C:537
 testHijingGlauber.C:538
 testHijingGlauber.C:539
 testHijingGlauber.C:540
 testHijingGlauber.C:541
 testHijingGlauber.C:542
 testHijingGlauber.C:543
 testHijingGlauber.C:544
 testHijingGlauber.C:545
 testHijingGlauber.C:546
 testHijingGlauber.C:547
 testHijingGlauber.C:548
 testHijingGlauber.C:549
 testHijingGlauber.C:550
 testHijingGlauber.C:551
 testHijingGlauber.C:552
 testHijingGlauber.C:553
 testHijingGlauber.C:554
 testHijingGlauber.C:555
 testHijingGlauber.C:556
 testHijingGlauber.C:557
 testHijingGlauber.C:558
 testHijingGlauber.C:559
 testHijingGlauber.C:560
 testHijingGlauber.C:561
 testHijingGlauber.C:562
 testHijingGlauber.C:563
 testHijingGlauber.C:564
 testHijingGlauber.C:565
 testHijingGlauber.C:566
 testHijingGlauber.C:567
 testHijingGlauber.C:568
 testHijingGlauber.C:569
 testHijingGlauber.C:570
 testHijingGlauber.C:571
 testHijingGlauber.C:572
 testHijingGlauber.C:573
 testHijingGlauber.C:574
 testHijingGlauber.C:575
 testHijingGlauber.C:576
 testHijingGlauber.C:577
 testHijingGlauber.C:578
 testHijingGlauber.C:579
 testHijingGlauber.C:580
 testHijingGlauber.C:581
 testHijingGlauber.C:582
 testHijingGlauber.C:583
 testHijingGlauber.C:584
 testHijingGlauber.C:585
 testHijingGlauber.C:586
 testHijingGlauber.C:587
 testHijingGlauber.C:588
 testHijingGlauber.C:589
 testHijingGlauber.C:590
 testHijingGlauber.C:591
 testHijingGlauber.C:592
 testHijingGlauber.C:593
 testHijingGlauber.C:594
 testHijingGlauber.C:595
 testHijingGlauber.C:596
 testHijingGlauber.C:597
 testHijingGlauber.C:598
 testHijingGlauber.C:599
 testHijingGlauber.C:600
 testHijingGlauber.C:601
 testHijingGlauber.C:602
 testHijingGlauber.C:603
 testHijingGlauber.C:604
 testHijingGlauber.C:605