ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

/* $Id: AliTRDpidRefMakerLQ.cxx 34163 2009-08-07 11:28:51Z cblume $ */

///////////////////////////////////////////////////////////////////////////////
//
//
//  TRD calibration class for building reference data for PID
//  - 2D reference histograms (responsible A.Bercuci) 
//  - 3D reference histograms (not yet implemented) (responsible A.Bercuci)
//
//   Origin
//   Alex Bercuci  (A.Bercuci@gsi.de)
//
///////////////////////////////////////////////////////////////////////////////

#include <TSystem.h>
#include <TROOT.h>
#include <TFile.h>
#include <TTree.h>
#include <TMath.h>
#include <TEventList.h>
#include <TH2D.h>
#include <TH2I.h>
#include <TCanvas.h>

#include "AliLog.h"
#include "../STAT/TKDPDF.h"
#include "../STAT/TKDInterpolator.h"
#include "AliTRDpidRefMakerLQ.h"
#include "Cal/AliTRDCalPID.h"
#include "Cal/AliTRDCalPIDLQ.h"
#include "AliTRDseedV1.h"
#include "AliTRDcalibDB.h"
#include "AliTRDgeometry.h"
#include "info/AliTRDpidInfo.h"
#include "AliAnalysisManager.h"

ClassImp(AliTRDpidRefMakerLQ)

//__________________________________________________________________
AliTRDpidRefMakerLQ::AliTRDpidRefMakerLQ() 
  : AliTRDpidRefMaker()
  ,fPDF(NULL)
{
  //
  // AliTRDpidRefMakerLQ default constructor
  //
  SetNameTitle("TRDrefMakerLQ", "PID(LQ) Reference Maker");
}

//__________________________________________________________________
AliTRDpidRefMakerLQ::AliTRDpidRefMakerLQ(const char *name)
  : AliTRDpidRefMaker(name, "PID(LQ) Reference Maker")
  ,fPDF(NULL)
{
  //
  // AliTRDpidRefMakerLQ default constructor
  //
  DefineOutput(3, TObjArray::Class());
}

//__________________________________________________________________
AliTRDpidRefMakerLQ::~AliTRDpidRefMakerLQ()
{
  //
  // AliTRDCalPIDQRef destructor
  //
  if (AliAnalysisManager::GetAnalysisManager()->IsProofMode()) return;
  if(fPDF){
    //fPDF->Write("PDF_LQ", TObject::kSingleKey);
    fPDF->Delete();
    delete fPDF;
  }
}

// //________________________________________________________________________
void AliTRDpidRefMakerLQ::UserCreateOutputObjects()
{
  // Create histograms
  // Called once

  fContainer = Histos();
  PostData(1, fContainer);

  //OpenFile(2, "RECREATE");
  fPDF = new TObjArray(AliTRDCalPIDLQ::GetNrefs());
  fPDF->SetOwner();fPDF->SetName("PDF_LQ");
  PostData(3, fPDF);
}


//__________________________________________________________________
TObjArray* AliTRDpidRefMakerLQ::Histos()
{
  // Create histograms

  if(fContainer) return fContainer;
  fContainer  = new TObjArray(AliTRDCalPID::kNMom);

  // save dE/dx references
  TH1 *h(NULL);
  for(Int_t ip=AliTRDCalPID::kNMom; ip--;){ 
    TObjArray *arr = new TObjArray(2*AliPID::kSPECIES);
    arr->SetName(Form("Pbin%02d", ip)); arr->SetOwner();
    for(Int_t is=AliPID::kSPECIES; is--;) {
      h = new TH1D(Form("h1%s%d", AliPID::ParticleShortName(is), ip), Form("1D %s @ Pbin[%d]", AliPID::ParticleName(is), ip), 50, 7., 12.);
      h->GetXaxis()->SetTitle("log(dE/dx) [au]");
      h->GetYaxis()->SetTitle("#");
      h->SetLineColor(AliTRDCalPIDLQ::GetPartColor(is));
      arr->AddAt(h, is);
    }
    for(Int_t is=AliPID::kSPECIES; is--;) {
      h = new TH2D(Form("h2%s%d", AliPID::ParticleShortName(is), ip), Form("2D %s @ Pbin[%d]", AliPID::ParticleName(is), ip), 50, 7., 12., 50, 6.5, 11.);
      h->GetXaxis()->SetTitle("log(dE/dx_{am}) [au]");
      h->GetYaxis()->SetTitle("log(dE/dx_{dr}) [au]");
      h->GetZaxis()->SetTitle("#");
      arr->AddAt(h, AliPID::kSPECIES+is);
    }
    fContainer->AddAt(arr, ip);
  }
  fNRefFigures=AliTRDCalPID::kNMom;
  return fContainer;
}


//__________________________________________________________________
TObject* AliTRDpidRefMakerLQ::GetOCDBEntry(Option_t */*opt*/)
{
// Steer loading of OCDB LQ PID

  if(gSystem->AccessPathName(Form("TRD.Calib%s.root", GetName()), kReadPermission)){
    AliError(Form("File TRD.Calib%s.root not readable", GetName()));
    return NULL;
  }
  AliTRDCalPIDLQ *cal = new AliTRDCalPIDLQ("pidLQ", "LQ TRD PID object");
  cal->LoadReferences(Form("TRD.Calib%s.root", GetName()));
  return cal;
}

//__________________________________________________________________
Bool_t AliTRDpidRefMakerLQ::GetRefFigure(Int_t ifig)
{
// Steering reference picture

  if(ifig<0 || ifig>=fNRefFigures){ 
    AliError("Ref fig requested outside definition.");
    return kFALSE;
  }
  if(!gPad){
    AliWarning("Please provide a canvas to draw results.");
    return kFALSE;
  }

  TObjArray *arr(NULL);TList *l(NULL);TH1 *h(NULL);
  if(!(arr = (TObjArray*)fContainer->At(ifig))){
    AliError(Form("PDF container @ pBin[%d] missing.", ifig));
    return kFALSE;
  }
  gPad->Divide(5, 2, 1.e-5, 1.e-5);l=gPad->GetListOfPrimitives(); 
  for(Int_t is=0; is<AliPID::kSPECIES; is++){
    ((TVirtualPad*)l->At(is))->cd();
    if(!(h=(TH1*)arr->At(is))){
      AliError(Form("1D for %s @ pBin[%d] missing.", AliPID::ParticleShortName(is), ifig));
      return kFALSE;
    }
    h->GetYaxis()->SetRangeUser(0., 1.2);
    h->Draw("l");

    ((TVirtualPad*)l->At(AliPID::kSPECIES+is))->cd();
    if(!(h=(TH1*)arr->At(AliPID::kSPECIES+is))){
      AliError(Form("2D for %s @ pBin[%d] missing.", AliPID::ParticleShortName(is), ifig));
      return kFALSE;
    }
    h->Draw("cont4z");
  }

  return kTRUE;
}


//________________________________________________________________________
Bool_t AliTRDpidRefMakerLQ::Load(const Char_t *file, const Char_t *dir)
{
// Load tree with data in case of detached PostProcess processing. 

  if(gSystem->AccessPathName(file, kReadPermission)){
    AliError(Form("File %s not readable", file));
    return kFALSE;
  }
  if(!TFile::Open(file)) {
    AliError(Form("File %s corrupted", file));
    return kFALSE;
  }
  if(!gFile->cd(dir)){
    AliWarning(Form("Couldn't cd to %s in %s.", dir, file));
    return kFALSE;
  }
  if (!(fData = dynamic_cast<TTree*>(gDirectory->Get("PIDrefMaker")))) {
    AliError("PIDref Tree not available");
    return kFALSE;
  }
  LinkPIDdata();

  TObjArray *o(NULL);
/*  if(!(o = (TObjArray*)gFile->Get(Form("Moni%s", GetName())))){
    AliWarning(Form("Monitor container Moni%s not available.", name));
    return kFALSE;
  }
  fContainer = (TObjArray*)o->Clone("monitor");
  fNRefFigures=AliTRDCalPID::kNMom;
*/
  // temporary until new calibration data are being produced
  Histos();


  if(!TFile::Open(Form("TRD.Calib%s.root", GetName()), "UPDATE")){
    AliError(Form("File TRD.Calib%s.root corrupted", GetName()));
    return kFALSE;
  }
  if(!(o = (TObjArray*)gFile->Get(Form("PDF_LQ")))) {
    AliInfo("PDF container not available. Create.");
    fPDF = new TObjArray(AliTRDCalPIDLQ::GetNrefs());
    fPDF->SetOwner();fPDF->SetName("PDF_LQ");
  } else fPDF = (TObjArray*)o->Clone("PDF_LQ");

  return kTRUE;
}

#include "AliAnalysisManager.h"
//________________________________________________________________________
void AliTRDpidRefMakerLQ::UserExec(Option_t */*opt*/)
{
// Process pid info data array
// The tasks have also access to the following containers which, for the time being, are not used 
// fTracks = dynamic_cast<TObjArray*>(GetInputData(1))
// fEvent  = dynamic_cast<AliTRDeventInfo*>(GetInputData(2))
// fV0s    = dynamic_cast<TObjArray*>(GetInputData(3))

  if(!(fInfo   = dynamic_cast<TObjArray*>(GetInputData(4)))){
    Int_t ev((Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry());
    AliDebug(3, Form("Missing pid info container in ev %d", ev));
    return;
  }

  AliDebug(2, Form("ENTRIES pid[%d]\n", fInfo->GetEntriesFast()));
  AliTRDpidInfo *pid(NULL);
  const AliTRDpidInfo::AliTRDpidData *data(NULL);
  Char_t s(-1);
  for(Int_t itrk=fInfo->GetEntriesFast(); itrk--;){
    if(!(pid=(AliTRDpidInfo*)fInfo->At(itrk))) continue;
    if((s=pid->GetPID())<0) continue;
    for(Int_t itrklt=pid->GetNtracklets();itrklt--;){
      data=pid->GetData(itrklt);
      Int_t ip(data->Momentum());

      Double_t dedx[] = {0., 0.};
      if(!AliTRDCalPIDLQ::CookdEdx(data->fdEdx, dedx)) continue;
      ((TH2*)((TObjArray*)fContainer->At(ip))->At(s+Int_t(AliPID::kSPECIES)))->Fill(dedx[0], dedx[1]);
      AliTRDCalPIDLQ::CookdEdx(data->fdEdx, dedx, kFALSE);
      ((TH1*)((TObjArray*)fContainer->At(ip))->At(s))->Fill(dedx[0]+dedx[1]);
    }
  }
}


//________________________________________________________________________
Bool_t AliTRDpidRefMakerLQ::PostProcess()
{
// Analyse merged dedx = f(p) distributions.
//   - select momentum - species bins
//   - rotate to principal components
//   - locally interpolate with TKDPDF
//   - save interpolation to monitoring histograms
//   - write pdf to file for loading to OCDB
// 

  TCanvas *fMonitor(NULL);
  // allocate working storage
  const Int_t kWS(AliPID::kSPECIES*AliTRDCalPID::kNMom);
  Float_t *data[2*kWS], *data1D[kWS];
  for(Int_t i(0); i<kWS; i++){ 
    data1D[i]   = new Float_t[kMaxStat];
    data[i]     = new Float_t[kMaxStat];
    data[kWS+i] = new Float_t[kMaxStat];
  }
  Int_t ndata[kWS]; memset(ndata, 0, kWS*sizeof(Int_t));

  AliDebug(1, Form("Loading %d entries.", (Int_t)fData->GetEntries()));
  for(Int_t itrk=0; itrk < fData->GetEntries(); itrk++){
    if(!(fData->GetEntry(itrk))) continue;
    Int_t sbin(fPIDdataArray->GetPID());
    for(Int_t itrklt=fPIDdataArray->GetNtracklets(); itrklt--;){
      Int_t pbin(fPIDdataArray->GetData(itrklt)->Momentum());
      
      Double_t dedx[] = {0., 0.}, 
               dedx1D[] = {0., 0.};
      if(!AliTRDCalPIDLQ::CookdEdx(fPIDdataArray->GetData(itrklt)->fdEdx, dedx)) continue;
      AliTRDCalPIDLQ::CookdEdx(fPIDdataArray->GetData(itrklt)->fdEdx, dedx1D, kFALSE);
      Int_t idx=AliTRDCalPIDLQ::GetModelID(pbin,sbin);
      if(ndata[idx]==kMaxStat) continue;

      // store data
      data1D[idx][ndata[idx]]   = dedx1D[0];
      data[idx][ndata[idx]]     = dedx[0];
      data[idx+kWS][ndata[idx]] = dedx[1];
      ndata[idx]++;
    }
  }

  TKDPDF *pdf(NULL);
  Int_t in(0); Float_t par[6], *pp(NULL);
  for(Int_t ip=0;ip<AliTRDCalPID::kNMom;ip++){ 
    for(Int_t is=AliPID::kSPECIES; is--;) {
      // estimate bucket statistics
      Int_t idx(AliTRDCalPIDLQ::GetModelID(ip,is)),
            nb(kMinBuckets), // number of buckets
            ns((Int_t)(((Float_t)(ndata[idx]))/nb));    //statistics/bucket
            
      AliDebug(2, Form("pBin[%d] sBin[%d] n[%d] ns[%d] nb[%d]", ip, is, ndata[idx], ns, nb));
      if(ns<Int_t(kMinStat)){
        AliWarning(Form("Not enough entries [%d] for %s[%d].", ndata[idx], AliPID::ParticleShortName(is), ip));
        continue;
      }

      // build helper 1D PDF
      pdf = new TKDPDF(ndata[idx], 1, ns, &data1D[idx]);
      pdf->SetCOG(kFALSE);
      pdf->SetWeights();
      //pdf->SetStore();
      pdf->SetAlpha(15.);
      //pdf.GetStatus();
      fPDF->AddAt(pdf, idx);
      in=pdf->GetNTNodes(); pp=&par[0];
      while(in--){
        const TKDNodeInfo *nn = pdf->GetNodeInfo(in);
        nn->GetCOG(pp);
        Double_t p(par[0]),r,e;
        pdf->Eval(&p,r,e,1);
      }

      // build helper 2D PDF
      Float_t *ldata[2]={data[idx], data[kWS+idx]};
      pdf = new TKDPDF(ndata[idx], 2, ns, ldata);
      pdf->SetCOG(kFALSE);
      pdf->SetWeights();
      //pdf->SetStore();
      pdf->SetAlpha(5.);
      //pdf.GetStatus();
      fPDF->AddAt(pdf, AliTRDCalPIDLQ::GetModelID(ip,is, 2));
      in=pdf->GetNTNodes(); pp=&par[0];
      while(in--){
        const TKDNodeInfo *nn = pdf->GetNodeInfo(in);
        nn->GetCOG(pp);
        Double_t p[] = {par[0], par[1]}, r,e;
        pdf->Eval(p,r,e,1);
      }
/*
      Int_t nnodes = pdf.GetNTNodes(),
            nside = Int_t(0.05*nnodes),
            nzeros = 4*(nside+1);
      printf("nnodes[%d] nside[%d] nzeros[%d]\n", nnodes, nside, nzeros);
    

      // Build interpolator on the pdf skeleton
      TKDInterpolator interpolator(2, nnodes+nzeros); 
      for(Int_t in=nnodes; in--;)
        interpolator.SetNode(in, *pdf.GetNodeInfo(in));
      TKDNodeInfo *nodes = new TKDNodeInfo[nzeros], *node = &nodes[0];
      Float_t ax0min, ax0max, ax1min, ax1max;
      pdf.GetRange(0, ax0min, ax0max); Float_t dx = (ax0max-ax0min)/nside;
      pdf.GetRange(1, ax1min, ax1max); Float_t dy = (ax1max-ax1min)/nside;
      printf("x=[%f %f] y[%f %f]\n", ax0min, ax0max, ax1min, ax1max);

      Int_t jn = nnodes; 
      SetZeroes(&interpolator, node, nside, jn, ax0min, dx, ax1min, -dy, 'x');
      SetZeroes(&interpolator, node, nside, jn, ax1min, dy, ax0max, dx, 'y');
      SetZeroes(&interpolator, node, nside, jn, ax0max,-dx, ax1max, dy, 'x');
      SetZeroes(&interpolator, node, nside, jn ,ax1max, -dy, ax0min, -dx, 'y');
      delete [] nodes;
      Int_t in=nnodes; Float_t par[6], *pp=&par[0];
      while(in--){
        const TKDNodeInfo *nn = interpolator.GetNodeInfo(in);
        nn->GetCOG(pp);
        //printf("evaluate for node[%d] @ [%f %f]\n",in, par[0], par[1]);
        Double_t p[] = {par[0], par[1]}, r,e;
        interpolator.Eval(p,r,e,1);
      }
*/

      // visual on-line monitoring
      if(HasOnlineMonitor()){
        if(!fMonitor) fMonitor = new TCanvas("cc", "PDF 2D LQ", 500, 500);
        pdf->DrawProjection();
        fMonitor->Modified(); fMonitor->Update(); 
        fMonitor->SaveAs(Form("pdf_%s%02d.gif", AliPID::ParticleShortName(is), ip));
      }

      //fContainer->ls();
      // save a discretization of the PDF for result monitoring
      Double_t rxy[]={0.,0.};
      TH2 *h2s = (TH2D*)((TObjArray*)fContainer->At(ip))->At(AliPID::kSPECIES+is);
      TAxis *ax = h2s->GetXaxis(), *ay = h2s->GetYaxis();
      h2s->Clear();
      for(int ix=1; ix<=ax->GetNbins(); ix++){
        rxy[0] = ax->GetBinCenter(ix);
        for(int iy=1; iy<=ay->GetNbins(); iy++){
          rxy[1] = ay->GetBinCenter(iy);
      
          Double_t rr,ee;
          pdf->Eval(rxy, rr, ee, kFALSE);
          if(rr<0. || ee/rr>.15) continue; // 15% relative error
          //printf("x[%2d] x[%2d] r[%f] e[%f]\n", ix, iy, rr, ee);
          h2s->SetBinContent(ix, iy, rr);
        }
      }

      if(!(pdf=dynamic_cast<TKDPDF*>(fPDF->At(idx)))){
        AliWarning(Form("Missing pdf for model id[%d]", idx));
        continue;
      }
      TH1 *h1 = (TH1D*)((TObjArray*)fContainer->At(ip))->At(is);
      ax = h1->GetXaxis();
      h1->Clear();
      for(int ix=1; ix<=ax->GetNbins(); ix++){
        rxy[0] = ax->GetBinCenter(ix);
      
        Double_t rr,ee;
        pdf->Eval(rxy, rr, ee, kFALSE);
        if(rr<0. || ee/rr>.15) continue; // 15% relative error
        //printf("x[%2d] x[%2d] r[%f] e[%f]\n", ix, iy, rr, ee);
        h1->SetBinContent(ix, rr);
      }
    }
  }
  for(Int_t i(0); i<kWS; i++){ 
    delete [] data1D[i];
    delete [] data[i];
    delete [] data[i+kWS];
  }
  return kTRUE;
}


//__________________________________________________________________
void AliTRDpidRefMakerLQ::SetZeroes(TKDInterpolator *interpolator, TKDNodeInfo *node, Int_t n, Int_t& idx, Float_t x, Float_t dx, Float_t y, Float_t dy, const Char_t opt)
{
// Set extra nodes to ensure boundary conditions
  
  printf("SetZeroes(%c)\n", opt);
  Float_t par[6], val[] = {0., 1.};
  Int_t a[6];
  if(opt=='x'){
    a[0]=0; a[1]=1; a[2]=2; a[3]=3; a[4]=4; a[5]=5;
  } else if(opt=='y'){
    a[0]=1; a[1]=0; a[2]=4; a[3]=5; a[4]=2; a[5]=3;
  } else return;
  Float_t tmp;
  par[a[1]] = y;
  par[a[4]] = y; par[a[5]] = y+dy;
  if(dy<0.){tmp=par[a[4]]; par[a[4]]=par[a[5]]; par[a[5]]=tmp;}
  for(Int_t in=n; in--; node++, idx++, x+=dx){
    par[a[0]] = x+.5*dx;
    par[a[2]] = x;  par[a[3]] = x+dx;
    if(dx<0.){tmp=par[a[2]]; par[a[2]]=par[a[3]]; par[a[3]]=tmp;}
    node->SetNode(2, par, val);
    printf("\n\tnode[%d]\n", idx); node->Print();
    interpolator->SetNode(idx, *node);
  }
  par[a[0]] = x;
  par[a[2]] = x;  par[a[3]] = x+dx;
  if(dx<0.){tmp=par[a[2]]; par[a[2]]=par[a[3]]; par[a[3]]=tmp;}
  node->SetNode(2, par, val);
  printf("\n\tnode[%d]\n", idx); node->Print();
  interpolator->SetNode(idx, *node);node++;idx++;
}

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