ROOT logo
#include <TStyle.h>
#include <TROOT.h>
#include <TAxis.h>
#include <TF1.h>
#include <TFile.h>
#include <TH1.h>
#include <THn.h>
#include <TObjArray.h>
#include <TObject.h>
#include <TString.h>
#include <TVectorT.h>
#include <TCanvas.h>
#include <TProfile2D.h>
#include <TGraphErrors.h>
#include <TTreeStream.h>

#include <AliExternalTrackParam.h>
#include <AliTPCComposedCorrection.h>
#include <AliTPCCorrectionLookupTable.h>

#include <AliToyMCEventGenerator.h>

/*

.L $ALICE_ROOT/TPC/Upgrade/macros/AnaDelta.C+g


*/
TVectorD* MakeLogBinning(Int_t nbinsX, Double_t xmin, Double_t xmax);
TVectorD* MakeLinBinning(Int_t nbinsX, Double_t xmin, Double_t xmax);
TVectorD* MakeArbitraryBinning(const char* bins);

void DumpHn(THn *hn, TTreeSRedirector &stream);
void AnaDeltaBase(TString file, TString outDir=".");
void AnaDeltaTree(TString file, TString outFile="deltas_tree.root");

void AnaDelta(Int_t type, TString file, TString output="")
{
  switch (type) {
    case 0:
      AnaDeltaBase(file,output);
      break;
    case 1:
      AnaDeltaTree(file,output);
      break;
  }
}


void AnaDeltaBase(TString file, TString outDir)
{
  //
  //
  //

  gStyle->SetOptFit();
  
  TTreeSRedirector stream(Form("%s/deltas.root",outDir.Data()));
  gROOT->cd();
  
  TFile f(file);
  THn *hn=(THn*)f.Get("hn");

  DumpHn(hn, stream);

  delete hn;
}


void AnaDeltaTree(TString file, TString outFile)
{
  if (outFile.IsNull()) outFile="deltas_tree.root";
  TFile f(file);
  gROOT->cd();
  TTree *t = (TTree*)f.Get("delta");
  Float_t soneOverPt=0.;
  Float_t radius=0.;
  Float_t trackPhi=0.;
  Float_t trackY=0.;
  Float_t trackZ=0.;
  Float_t resRphi=0.;
  Double_t trackRes=0.;
  Float_t pointY=0.;
  Float_t pointZ=0.;
  Short_t npTRD=0.;
  Short_t event=0.;
  
  t->SetBranchAddress("soneOverPt" , &soneOverPt);
  t->SetBranchAddress("r"          , &radius);
  t->SetBranchAddress("trackPhi"   , &trackPhi);
  t->SetBranchAddress("trackY"     , &trackY);
  t->SetBranchAddress("trackZ"     , &trackZ);
  t->SetBranchAddress("resRphi"    , &resRphi);
  t->SetBranchAddress("trackRes"   , &trackRes);
  t->SetBranchAddress("pointY"     , &pointY);
  t->SetBranchAddress("pointZ"     , &pointZ);
  t->SetBranchAddress("npTRD"      , &npTRD);
  t->SetBranchAddress("event"      , &event);
  
  // make binning
  TVectorD *vR   = MakeLinBinning(10,86.,250.);
  TVectorD *vPhi = MakeLinBinning(18*8,0.,2*TMath::Pi());
  TVectorD *vZ   = MakeLinBinning(50,-250.,250.);

  const Int_t nbins=4;
  Int_t bins[nbins]    = {vR->GetNrows()-1, vPhi->GetNrows()-1, vZ->GetNrows()-1, 80};
//   Int_t bins[nbins]    = {16, 18*5, 50, 80};
  Double_t xmin[nbins] = {86. , 0.,           -250., -2.};
  Double_t xmax[nbins] = {250., 2*TMath::Pi(), 250.,  2.};
  THnF *hn = new THnF("hn", "hn", nbins, bins, xmin, xmax);

  hn->GetAxis(0)->Set(vR  ->GetNrows()-1, vR  ->GetMatrixArray());
  hn->GetAxis(1)->Set(vPhi->GetNrows()-1, vPhi->GetMatrixArray());
  hn->GetAxis(2)->Set(vZ  ->GetNrows()-1, vZ  ->GetMatrixArray());

  hn->GetAxis(0)->SetNameTitle("r","r (cm)");
  hn->GetAxis(1)->SetNameTitle("phi","#varphi");
  hn->GetAxis(2)->SetNameTitle("z","z (cm)");
  hn->GetAxis(3)->SetNameTitle("drphi","#Delta(r#varphi)");
  
  for (Int_t iev=0; iev<t->GetEntries(); ++iev) {
    t->GetEntry(iev);
    
    // cuts
    // -- on trd
    if (npTRD<2) continue;
    Double_t pt=1./TMath::Abs(soneOverPt);
    if (pt<0.8) continue;
    
    Float_t resRphiRandom = resRphi*trackRes;
    Float_t deviation     = pointY-(trackY+resRphiRandom);
    
    Double_t xx[4]={radius, trackPhi, trackZ ,deviation};
    hn->Fill(xx);
  }
  
  // do fits and fill tree
  TTreeSRedirector stream(outFile.Data());
  gROOT->cd();

  DumpHn(hn, stream);

  stream.GetFile()->cd();
  hn->Write();
  
  delete hn;
  delete vR;
  delete vPhi;
  delete vZ;
}


void AnaDeltaTree2(TString file/*, TString outDir="."*/)
{
  //
  // NOTE: not finished
  //
  TFile f(file);
  gROOT->cd();
  TTree *t = (TTree*)f.Get("delta");
  Float_t soneOverPt=0.;
  Float_t radius=0.;
  Float_t trackPhi=0.;
  Float_t trackY=0.;
  Float_t trackZ=0.;
  Float_t resRphi=0.;
  Float_t trackRes=0.;
  Float_t pointY=0.;
  Float_t pointZ=0.;
  Float_t npTRD=0.;
  Float_t event=0.;
  
  t->SetBranchAddress("soneOverPt" , &soneOverPt);
  t->SetBranchAddress("r"          , &radius);
  t->SetBranchAddress("trackPhi"   , &trackPhi);
  t->SetBranchAddress("trackY"     , &trackY);
  t->SetBranchAddress("trackZ"     , &trackZ);
  t->SetBranchAddress("resRphi"    , &resRphi);
  t->SetBranchAddress("trackRes"   , &trackRes);
  t->SetBranchAddress("pointY"     , &pointY);
  t->SetBranchAddress("pointZ"     , &pointZ);
  t->SetBranchAddress("npTRD"      , &npTRD);
  t->SetBranchAddress("event"      , &event);

  // make binning
  TVectorD *vZ   = MakeLinBinning(50,-250.,250.);
  TVectorD *vPhi = MakeLinBinning(18*8,0.,TMath::Pi());
  TVectorD *vR   = MakeLinBinning(16,86.,250.);

  TObjArray arrZ(vZ->GetNrows()-1);
  arrZ.SetOwner();
  
  for (Int_t iev=0; iev<t->GetEntries(); ++iev) {
    t->GetEntry(iev);
    
    // cuts
    // -- on trd
    if (npTRD<2) continue;

    Float_t resRphiRandom=resRphi*trackRes;

    Int_t binZ   = TMath::BinarySearch(vZ->GetNrows(),vZ->GetMatrixArray(),(Double_t)trackZ);
    Int_t binPhi = TMath::BinarySearch(vPhi->GetNrows(),vPhi->GetMatrixArray(),(Double_t)trackPhi);
    Int_t binR   = TMath::BinarySearch(vR->GetNrows(),vR->GetMatrixArray(),(Double_t)radius);

    if (binZ<0)   binZ=0;
    if (binPhi<0) binPhi=0;
    if (binR<0)   binR=0;

    TObjArray *arrPhi=(TObjArray*)arrZ.UncheckedAt(binZ);
    if (!arrPhi) {
      arrPhi=new TObjArray(vPhi->GetNrows()-1);
      arrZ.AddAt(arrPhi,binZ);
    }

    TObjArray *arrR=(TObjArray*)arrPhi->UncheckedAt(binPhi);
    if (!arrR) {
      arrR=new TObjArray(vR->GetNrows()-1);
      arrPhi->AddAt(arrR,binPhi);
    }

    TH1S *h = (TH1S*)arrR->UncheckedAt(binR);
    if (!h) {
      h = new TH1S(Form("h_%02d_%02d_%d02",binZ, binPhi, binR),
                   Form("z,phi,r: %02d,%02d,%d02; #Delta r#phi (cm)",binZ, binPhi, binR),
                   80, -2., 2.);
      arrR->AddAt(h, binR);
    }

    h->Fill(trackY+resRphiRandom-pointY);
  }

  // do fits and fill tree
}

void AnaDeltaResiduals(TString fluctuationMap, TString averageMap, TString outFile="deltas_residuals.root")
{
  //
  //
  //

  TFile fFluct(fluctuationMap);
  AliTPCCorrectionLookupTable *corrFluct = (AliTPCCorrectionLookupTable*)fFluct.Get("map");
  fFluct.Close();
  
  TFile fAverage(averageMap);
  AliTPCCorrectionLookupTable *corrAverage = (AliTPCCorrectionLookupTable*)fAverage.Get("map");
  fAverage.Close();
  
//   TObjArray *arrMaps = new TObjArray(2);
//   arrMaps->Add(corrAverage); // correction with the average Map
//   arrMaps->Add(corrFluct);   // distortion with the fluctuation Map
  
  // create the composed correction
  // if the weight are set to +1 and -1, the first map will be responsible for the distortions
  // The second map for the corrections
  // !!!!! In AliTPCComposedCorrection::GetDistortion MakeInverseIterator is called !!!!
  // for this reason we have to add the maps in the wrong order
  
//   AliTPCComposedCorrection *residualDistortion = new AliTPCComposedCorrection(arrMaps, AliTPCComposedCorrection::kQueueResidual);
  Float_t dummy=0;
//   TVectorD weights(2);
//   weights(0)=+1.;
//   weights(1)=-AliToyMCEventGenerator::GetSCScalingFactor(corrFluct, corrAverage,dummy);
//   residualDistortion->SetWeights(&weights);

  corrAverage->SetCorrScaleFactor(AliToyMCEventGenerator::GetSCScalingFactor(corrFluct, corrAverage,dummy));

  TVectorD *vR   = MakeLinBinning(10,86.,250.);
  TVectorD *vPhi = MakeLinBinning(18*8,0.,2*TMath::Pi());
  TVectorD *vZ   = MakeLinBinning(50,-250.,250.);
  
  const Int_t nbins=4;
  Int_t bins[nbins]    = {vR->GetNrows()-1, vPhi->GetNrows()-1, vZ->GetNrows()-1, 80};
  //   Int_t bins[nbins]    = {16, 18*5, 50, 80};
  Double_t xmin[nbins] = {86. , 0.,           -250., -2.};
  Double_t xmax[nbins] = {250., 2*TMath::Pi(), 250.,  2.};
  THnF *hn = new THnF("hn", "hn", nbins, bins, xmin, xmax);
  
  hn->GetAxis(0)->Set(vR  ->GetNrows()-1, vR  ->GetMatrixArray());
  hn->GetAxis(1)->Set(vPhi->GetNrows()-1, vPhi->GetMatrixArray());
  hn->GetAxis(2)->Set(vZ  ->GetNrows()-1, vZ  ->GetMatrixArray());
  
  AliExternalTrackParam vv;
  
  for (Float_t iz=-245; iz<=245; iz+=2) {
    Short_t roc=(iz>=0)?0:18;
    for (Float_t ir=86; ir<250; ir+=1) {
      for (Float_t iphi=0; iphi<TMath::TwoPi(); iphi+=0.5*TMath::DegToRad()){
        Float_t x=ir*(Float_t)TMath::Cos(iphi);
        Float_t y=ir*(Float_t)TMath::Sin(iphi);
        Float_t x3[3]    = {x,y,iz};
        Float_t x3dc[3]    = {x,y,iz};
        Float_t dx3[3]   = {0.,0.,0.};
//         residualDistortion->GetDistortion(x3,roc,dx3);
        corrFluct->DistortPoint(x3dc,roc);
        corrAverage->CorrectPoint(x3dc,roc);
        dx3[0]=x3dc[0]-x3[0];
        dx3[1]=x3dc[1]-x3[1];
        dx3[2]=x3dc[2]-x3[2];
        
        Double_t ddx3[3]={dx3[0], dx3[1], dx3[2]};
        vv.Global2LocalPosition(ddx3,iphi);

        Double_t xx[4]={ir, iphi, iz ,ddx3[1]};
        hn->Fill(xx);
        
      }
    }
  }

  TTreeSRedirector stream(outFile.Data());
  gROOT->cd();
  
  DumpHn(hn, stream);
  
  stream.GetFile()->cd();
  hn->Write();
  
  delete hn;
  delete vR;
  delete vPhi;
  delete vZ;
  
//   delete residualDistortion;
}

void DumpHn(THn *hn, TTreeSRedirector &stream)
{
  TAxis *ar   = hn->GetAxis(0);
  TAxis *aphi = hn->GetAxis(1);
  TAxis *az   = hn->GetAxis(2);

  // output Hn
  const Int_t nbins=3;
  Int_t bins[nbins]    = {1,1,1};
  Double_t xmin[nbins] = {0.,0.,0.};
  Double_t xmax[nbins] = {1.,1.,1.};
  THnF hnRes("hnRes", "hnRes", nbins, bins, xmin, xmax);

  ar  ->Copy(*hnRes.GetAxis(0));
  aphi->Copy(*hnRes.GetAxis(1));
  az  ->Copy(*hnRes.GetAxis(2));
  
  
  for (Int_t iz=0; iz<az->GetNbins(); ++iz) {
    az->SetRange(iz+1,iz+1);
    TObjArray arrFits;
    arrFits.SetName(Form("z_%02d",iz));
    arrFits.SetOwner();
    
    for (Int_t ir=0; ir<ar->GetNbins(); ++ir) {
      ar->SetRange(ir+1,ir+1);
      for (Int_t iphi=0; iphi<aphi->GetNbins(); ++iphi) {
        aphi->SetRange(iphi+1,iphi+1);

        Float_t cr       = 0.;
        Float_t cphi     = 0.;
        Float_t cz       = 0.;
        Float_t mean     = 0.;
        Float_t meanErr  = 0.;
        Float_t sigma    = 0.;
        Float_t sigmaErr = 0.;
        Int_t   entries  = 0.;
        Float_t chi2ndf  = 0.;
        Float_t mean2    = 0.;
        Float_t meanErr2 = 0.;
        Float_t rms2     = 0.;
        Float_t rmsErr2  = 0.;
        
        TH1 *hProj = hn->Projection(3);
        if (hProj->GetEntries()>1) {
          TF1 fg("fg","gaus",-2,2);
          cr   = ar->GetBinCenter(ir+1);
          cphi = aphi->GetBinCenter(iphi+1);
          cz   = az->GetBinCenter(iz+1);
          hProj->SetNameTitle(Form("h_%02d_%02d_%02d",iz, iphi, ir),
          Form("z,phi,r: %02d,%02d,%02d (%.2f, %.2f, %.2f)",iz,iphi,ir, cz, cphi, cr )
          );
          hProj->Fit(&fg,"LMQR");
          arrFits.Add(hProj);

          mean     = fg.GetParameter(1);
          meanErr  = fg.GetParError(1);
          sigma    = fg.GetParameter(2);
          sigmaErr = fg.GetParError(2);
          entries  = hProj->GetEntries();
          chi2ndf  = fg.GetChisquare()/fg.GetNDF();
          mean2    = hProj->GetMean();
          meanErr2 = hProj->GetMeanError();
          rms2     = hProj->GetRMS();
          rmsErr2  = hProj->GetRMSError();
        } else {
          delete hProj;
        }
        
        stream << "d" <<
        "ir="          << ir       <<
        "iphi="        << iphi     <<
        "iz="          << iz       <<
        "cr="          << cr       <<
        "cphi="        << cphi     <<
        "cz="          << cz       <<
        "mean="        << mean     <<
        "meanErr="     << meanErr  <<
        "sigma="       << sigma    <<
        "sigmaErr="    << sigmaErr <<
        "histMean="    << mean2    <<
        "histMeanErr=" << meanErr2 <<
        "histRMS="     << rms2    <<
        "histRMSErr="  << rmsErr2 <<
        "entries="     << entries  <<
        "chi2ndf="     << chi2ndf  <<
        "\n";

//        Double_t x[nbins]={cr, cphi, cz};
//        if (meanErr<0.3) hnRes.Fill(x,mean);
      }
    }
    stream.GetFile()->cd();
    arrFits.Write(0x0,TObject::kSingleKey);
    gROOT->cd();
  }

  stream.GetFile()->cd();
  hnRes.Write();
  gROOT->cd();
}

//______________________________________________________________________________
TVectorD* MakeLogBinning(Int_t nbinsX, Double_t xmin, Double_t xmax)
{
  //
  // Make logarithmic binning
  // the user has to delete the array afterwards!!!
  //
  
  //check limits
  if (xmin<1e-20 || xmax<1e-20){
    printf("For Log binning xmin and xmax must be > 1e-20. Using linear binning instead!");
    return MakeLinBinning(nbinsX, xmin, xmax);
  }
  if (xmax<xmin){
    Double_t tmp=xmin;
    xmin=xmax;
    xmax=tmp;
  }
  TVectorD *binLim=new TVectorD(nbinsX+1);
  Double_t first=xmin;
  Double_t last=xmax;
  Double_t expMax=TMath::Log(last/first);
  for (Int_t i=0; i<nbinsX+1; ++i){
    (*binLim)[i]=first*TMath::Exp(expMax/nbinsX*(Double_t)i);
  }
  return binLim;
}

//______________________________________________________________________________
TVectorD* MakeLinBinning(Int_t nbinsX, Double_t xmin, Double_t xmax)
{
  //
  // Make linear binning
  // the user has to delete the array afterwards!!!
  //
  if (xmax<xmin){
    Double_t tmp=xmin;
    xmin=xmax;
    xmax=tmp;
  }
  TVectorD *binLim=new TVectorD(nbinsX+1);
  Double_t first=xmin;
  Double_t last=xmax;
  Double_t binWidth=(last-first)/nbinsX;
  for (Int_t i=0; i<nbinsX+1; ++i){
    (*binLim)[i]=first+binWidth*(Double_t)i;
  }
  return binLim;
}

//_____________________________________________________________________________
TVectorD* MakeArbitraryBinning(const char* bins)
{
  //
  // Make arbitrary binning, bins separated by a ','
  //
  TString limits(bins);
  if (limits.IsNull()){
    printf("Bin Limit string is empty, cannot add the variable");
    return 0x0;
  }
  
  TObjArray *arr=limits.Tokenize(",");
  Int_t nLimits=arr->GetEntries();
  if (nLimits<2){
    printf("Need at leas 2 bin limits, cannot add the variable");
    delete arr;
    return 0x0;
  }
  
  TVectorD *binLimits=new TVectorD(nLimits);
  for (Int_t iLim=0; iLim<nLimits; ++iLim){
    (*binLimits)[iLim]=(static_cast<TObjString*>(arr->At(iLim)))->GetString().Atof();
  }
  
  delete arr;
  return binLimits;
}

void PlotFromTree(TTree *d, TString outDir=".")
{
  TCanvas *c=new TCanvas;
  gStyle->SetOptStat(0);
  d->SetMarkerStyle(20);
  d->SetMarkerSize(1);
  
  TProfile2D pRZ("pRZ",";z (cm); r(cm)",50,-250,250,10,85,250);
  d->Draw("entries:cr:cz>>pRZ","","profcolz");
  pRZ.GetZaxis()->UnZoom();
  c->SaveAs(Form("%s/entries_average.png",outDir.Data()));
  d->Draw("entries:cr:cz>>pRZ","iphi==2","profcolz");
  c->SaveAs(Form("%s/entries_onePhi.png",outDir.Data()));
  
  pRZ.SetMaximum(0.04);
  d->Draw("meanErr:cr:cz>>pRZ","","profcolz");
  c->SaveAs(Form("%s/meanErr_average.png",outDir.Data()));
  d->Draw("meanErr:cr:cz>>pRZ","iphi==2","profcolz");
  c->SaveAs(Form("%s/meanErr_onePhi.png",outDir.Data()));
  
  
  d->Draw("mean:cphi:cr","iz==25","colz");
  c->SaveAs(Form("%s/mean_oneZ_phi_allR.png",outDir.Data()));
  d->Draw("mean:meanErr:cphi","iz==25&&ir==2","goff");
  TGraphErrors *grmean_phi=new TGraphErrors(d->GetSelectedRows(),d->GetV3(),d->GetV1(),0,d->GetV2());
  grmean_phi->SetTitle(";#varphi;#LT#Delta r#varphi#GT");
  grmean_phi->SetMarkerStyle(20);
  grmean_phi->SetMarkerSize(1);
  grmean_phi->Draw("ap");
  c->SaveAs(Form("%s/mean_oneZ_phi_oneR.png",outDir.Data()));
  
  d->Draw("mean:cr:cphi","iz==25","colz");
  c->SaveAs(Form("%s/mean_oneZ_r_allPhi.png",outDir.Data()));
  
  d->Draw("mean:meanErr:cr","iz==25&&iphi==2","goff");
  TGraphErrors *grmean_r=new TGraphErrors(d->GetSelectedRows(),d->GetV3(),d->GetV1(),0,d->GetV2());
  grmean_r->SetTitle(";r (cm);#LT#Delta r#varphi#GT");
  grmean_r->SetMarkerStyle(20);
  grmean_r->SetMarkerSize(1);
  grmean_r->Draw("ap");
  c->SaveAs(Form("%s/mean_oneZ_r_onePhi.png",outDir.Data()));
  
  
  d->Draw("meanErr:cphi:cr","iz==25","colz");
  c->SaveAs(Form("%s/meanErr_oneZ_phi_allR.png",outDir.Data()));
  d->Draw("meanErr:cphi","iz==25&&ir==2");
  c->SaveAs(Form("%s/meanErr_oneZ_phi_oneR.png",outDir.Data()));
  
  d->Draw("meanErr:cr:cphi","iz==25","colz");
  c->SaveAs(Form("%s/meanErr_oneZ_r_allPhi.png",outDir.Data()));
  
  d->Draw("meanErr:cr","iz==25&&iphi==2");
  c->SaveAs(Form("%s/meanErr_oneZ_r_onePhi.png",outDir.Data()));
  
}


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