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: AliTRDtrackingChamber.cxx 23810 2008-02-08 09:00:27Z hristov $ */

////////////////////////////////////////////////////////////////////////////
//                                                                        //
//  Tracking in one chamber                                               //
//                                                                        //
//  Authors:                                                              //
//    Alex Bercuci <A.Bercuci@gsi.de>                                     //
//    Markus Fasel <M.Fasel@gsi.de>                                       //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

#include "AliTRDtrackingChamber.h"

#include "TMath.h"
#include "TMatrixTBase.h"
#include <TTreeStream.h>

#include "AliTRDReconstructor.h"
#include "AliTRDrecoParam.h"
#include "AliTRDtrackerV1.h"
#include "AliTRDgeometry.h"
#include "AliTRDpadPlane.h"
#include "AliTRDcalibDB.h"
#include "AliTRDCommonParam.h"
#include "Cal/AliTRDCalDet.h"
#include "Cal/AliTRDCalROC.h"

ClassImp(AliTRDtrackingChamber)

//_______________________________________________________
AliTRDtrackingChamber::AliTRDtrackingChamber() 
  :TObject()
  ,fDetector(-1)
  ,fX0(0.)
  // ,fExB(0.)
  // ,fVD(0.)
  // ,fT0(0.)
  // ,fS2PRF(0.)
  // ,fDiffL(0.)
  // ,fDiffT(0.)
{}  

//_______________________________________________________
void AliTRDtrackingChamber::Clear(const Option_t *opt)
{
  for(Int_t itb=0; itb<AliTRDseedV1::kNtb; itb++) fTB[itb].Clear(opt);
}

//_______________________________________________________
Bool_t AliTRDtrackingChamber::Build(AliTRDgeometry *const geo, Bool_t hlt)
{
// Init chamber and all time bins (AliTRDchamberTimeBin)
// Calculates radial position of the chamber based on 
// radial positions of the time bins (calibration/alignment aware)
//
  if(fDetector < 0 || fDetector >= AliTRDgeometry::kNdet){
    AliWarning(Form("Detector index not set correctly to %d", fDetector));
    return kFALSE;
  }

  Int_t stack = AliTRDgeometry::GetStack(fDetector);
  Int_t layer = AliTRDgeometry::GetLayer(fDetector);
  AliTRDpadPlane *pp = geo->GetPadPlane(layer, stack);
  Double_t zl = pp->GetRow0ROC() - pp->GetRowEndROC();
  Double_t z0 = geo->GetRow0(layer, stack, 0) - zl;
  Int_t nrows = pp->GetNrows();
  
  Int_t index[50], jtb = 0;
  for(Int_t itb=0; itb<AliTRDseedV1::kNtb; itb++){ 
    if(!fTB[itb]) continue;
    fTB[itb].SetRange(z0, zl);
    fTB[itb].SetNRows(nrows);
    fTB[itb].SetPlane(layer);
    fTB[itb].SetStack(stack);
    fTB[itb].SetSector(AliTRDgeometry::GetSector(fDetector));
    fTB[itb].BuildIndices();
    index[jtb++] = itb;
  }	
  if(jtb<2) return kFALSE;

  AliTRDcalibDB *calib = AliTRDcalibDB::Instance();
  Float_t t0;
  if(!hlt){
    t0    = calib->GetT0Average(fDetector);
  }else{
    t0    = calib->GetT0Det()->GetValue(fDetector);
  }
  // fVD    = calib->GetVdriftAverage(fDetector);
  // fS2PRF = calib->GetPRFROC(fDetector)->GetMean(); fS2PRF *= fS2PRF;
  // fExB   = AliTRDCommonParam::Instance()->GetOmegaTau(fVD);
  // AliTRDCommonParam::Instance()->GetDiffCoeff(fDiffL, fDiffT, fVD);  

  // ESTIMATE POSITION OF PAD PLANE FOR THIS CHAMBER
  //fTB[Int_t(t0)].SetT0();
  Double_t x0 = fTB[index[0]].GetX();
  Double_t x1 = fTB[index[1]].GetX();
  Double_t dx = (x0 - x1)/(index[1] - index[0]); 
  fX0 = x0 + dx*(index[0] - t0);	
  return kTRUE;
}

//_______________________________________________________	
Int_t AliTRDtrackingChamber::GetNClusters() const
{
// Basic loop method
// Returns number of clusters in chamber
//
  Int_t n = 0;
  for(Int_t itb=0; itb<AliTRDseedV1::kNtb; itb++){ 
    n += Int_t(fTB[itb]);
  }
  return n;	
}	

//_______________________________________________________
void AliTRDtrackingChamber::Bootstrap(const AliTRDReconstructor *rec)
{
// Basic loop method
// Bootstrap each time bin
//
  AliTRDchamberTimeBin *jtb = &fTB[0];
  for(Int_t itb=0; itb<AliTRDseedV1::kNtb; itb++, ++jtb){ 
    (*jtb).Bootstrap(rec, fDetector);
  }
}

//_______________________________________________________
void  AliTRDtrackingChamber::SetOwner()
{
// Basic loop method
// Set ownership in time bins
//
  AliTRDchamberTimeBin *jtb = &fTB[0];
  for(Int_t itb=0; itb<AliTRDseedV1::kNtb; itb++, ++jtb){ 
    if(!(Int_t(*jtb))) continue;
    (*jtb).SetOwner();
  }
}

//_______________________________________________________
Double_t AliTRDtrackingChamber::GetQuality()
{
  //
  // Calculate chamber quality for seeding.
  // 
  //
  // Parameters :
  //   layers : Array of propagation layers for this plane.
  //
  // Output :
  //   plane quality factor for seeding
  // 
  // Detailed description
  //
  // The quality of the plane for seeding is higher if:
  //  1. the average timebin population is closer to an integer number
  //  2. the distribution of clusters/timebin is closer to a uniform distribution.
  //    - the slope of the first derivative of a parabolic fit is small or
  //    - the slope of a linear fit is small
  //

  Int_t ncl   = 0;
  Int_t nused = 0;
  Int_t nClLayer;
  for(int itb=0; itb<AliTRDseedV1::kNtb; itb++){
    if(!(nClLayer = fTB[itb].GetNClusters())) continue;
    ncl += nClLayer;
    for(Int_t incl = 0; incl < nClLayer; incl++){
      if((fTB[itb].GetCluster(incl))->IsUsed()) nused++;
    }
  }
  
  // calculate the deviation of the mean number of clusters from the
  // closest integer values
  Float_t nclMed = float(ncl-nused)/AliTRDtrackerV1::GetNTimeBins();
  Int_t ncli = Int_t(nclMed);
  Float_t nclDev = TMath::Abs(nclMed - TMath::Max(ncli, 1));
  nclDev -= (nclDev>.5) && ncli ? 1. : 0.;
  return TMath::Exp(-5.*TMath::Abs(nclDev));

// 	// get slope of the derivative
// 	if(!fitter.Eval()) return quality;
// 	fitter.PrintResults(3);
// 	Double_t a = fitter.GetParameter(1);
// 
// 	printf("ncl_dev(%f)  a(%f)\n", ncl_dev, a);
// 	return quality*TMath::Exp(-a);

}


//_______________________________________________________
Bool_t AliTRDtrackingChamber::GetSeedingLayer(AliTRDchamberTimeBin *&fakeLayer, AliTRDgeometry * const geo, const AliTRDReconstructor *rec)
{
  //
  // Creates a seeding layer
  //
  
  // constants
  const Int_t kMaxRows = 16;
  const Int_t kMaxCols = 144;
  const Int_t kMaxPads = 2304;
  Int_t timeBinMin = rec->GetRecoParam()->GetNumberOfPresamples();
  Int_t timeBinMax = rec->GetRecoParam()->GetNumberOfPostsamples();

  // Get the geometrical data of the chamber
  Int_t layer = geo->GetLayer(fDetector);
  Int_t stack = geo->GetStack(fDetector);
  Int_t sector= geo->GetSector(fDetector);
  AliTRDpadPlane *pp = geo->GetPadPlane(layer, stack);
  Int_t nCols = pp->GetNcols();
  Float_t ymin = TMath::Min(pp->GetCol0(), pp->GetColEnd());
  Float_t ymax = TMath::Max(pp->GetCol0(), pp->GetColEnd());
  Float_t zmin = TMath::Min(pp->GetRow0(), pp->GetRowEnd());
  Float_t zmax = TMath::Max(pp->GetRow0(), pp->GetRowEnd());
  Float_t z0 = -1., zl = -1.;
  Int_t nRows = pp->GetNrows();
  Float_t binlength = (ymax - ymin)/nCols; 
  //AliInfo(Form("ymin(%f) ymax(%f) zmin(%f) zmax(%f) nRows(%d) binlength(%f)", ymin, ymax, zmin, zmax, nRows, binlength));
  
  // Fill the histogram
  Int_t nClusters;	
  Int_t *histogram[kMaxRows];											// 2D-Histogram
  Int_t hvals[kMaxPads + 1];	memset(hvals, 0, sizeof(Int_t)*kMaxPads);	 // one entry in addition for termination flag
  Float_t *sigmas[kMaxRows];
  Float_t svals[kMaxPads];	memset(svals, 0, sizeof(Float_t)*kMaxPads);	
  AliTRDcluster *c = NULL;
  for(Int_t irs = 0; irs < kMaxRows; irs++){
    histogram[irs] = &hvals[irs*kMaxCols];
    sigmas[irs] = &svals[irs*kMaxCols];
  }
  for(Int_t iTime = timeBinMin; iTime < AliTRDseedV1::kNtb-timeBinMax; iTime++){
    if(!(nClusters = fTB[iTime].GetNClusters())) continue;
    z0 = fTB[iTime].GetZ0();
    zl = fTB[iTime].GetDZ0();
    for(Int_t incl = 0; incl < nClusters; incl++){
      c = fTB[iTime].GetCluster(incl);	
      histogram[c->GetPadRow()][c->GetPadCol()]++;
      sigmas[c->GetPadRow()][c->GetPadCol()] += c->GetSigmaZ2();
    }
  }
  
// Now I have everything in the histogram, do the selection
  //Int_t nPads = nCols * nRows;
  // This is what we are interested in: The center of gravity of the best candidates
  Float_t cogyvals[kMaxPads]; memset(cogyvals, 0, sizeof(Float_t)*kMaxPads);
  Float_t cogzvals[kMaxPads]; memset(cogzvals, 0, sizeof(Float_t)*kMaxPads);
  Float_t *cogy[kMaxRows];
  Float_t *cogz[kMaxRows];
  
  // Lookup-Table storing coordinates according to the bins
  Float_t yLengths[kMaxCols]; memset(yLengths, 0, kMaxCols*sizeof(Float_t));
  Float_t zLengths[kMaxRows]; memset(zLengths, 0, kMaxRows*sizeof(Float_t));
  for(Int_t icnt = 0; icnt < nCols; icnt++){
    yLengths[icnt] = pp->GetColPos(nCols - 1 - icnt) + binlength/2;
  }
  for(Int_t icnt = 0; icnt < nRows; icnt++){
    zLengths[icnt] = pp->GetRowPos(icnt) - pp->GetRowSize(icnt)/2;
  }

  // A bitfield is used to mask the pads as usable
  Short_t mask[kMaxCols]; memset(mask, 0 ,sizeof(Short_t) * kMaxCols);//bool mvals[kMaxPads];
  for(UChar_t icount = 0; icount < nRows; icount++){
    cogy[icount] = &cogyvals[icount*kMaxCols];
    cogz[icount] = &cogzvals[icount*kMaxCols];
  }
  // In this array the array position of the best candidates will be stored
  Int_t   cand[AliTRDtrackerV1::kMaxTracksStack];
  Float_t sigcands[AliTRDtrackerV1::kMaxTracksStack];
  
  // helper variables
  Int_t indices[kMaxPads]; memset(indices, -1, sizeof(Int_t)*kMaxPads);
  Int_t nCandidates = 0;
  Float_t norm, cogv;
  // histogram filled -> Select best bins
  Int_t nPads = nCols * nRows;
  // take out all the bins which have less than 3 entries (faster sorting)
  Int_t content[kMaxPads], dictionary[kMaxPads], nCont = 0, padnumber = 0;
  Int_t *iter = &hvals[0], *citer = &content[0], *diter =  &dictionary[0]; // iterators for preselection
  const Int_t threshold = 2;
  hvals[nPads] = -1; // termination for iterator
  do{
    if(*iter > threshold){
      *(citer++) = *iter;
      *(diter++) = padnumber;
      nCont++;
    }
    padnumber++;
  }while(*(++iter) != -1);
  TMath::Sort(nCont, content, indices);		

  Int_t col, row, lower, lower1, upper, upper1;
  for(Int_t ib = 0; ib < nCont; ib++){
    if(nCandidates >= AliTRDtrackerV1::kMaxTracksStack){
      AliDebug(1, Form("Number of seed candidates %d exceeded maximum allowed per stack %d", nCandidates, AliTRDtrackerV1::kMaxTracksStack));
      break;
    }
    // Positions
    row = dictionary[indices[ib]]/nCols;
    col = dictionary[indices[ib]]%nCols;
    // here will be the threshold condition:
    if((mask[col] & (1 << row)) != 0) continue;		// Pad is masked: continue
    //	if(histogram[row][col] < TMath::Max(threshold, 1)){	// of course at least one cluster is needed
    //		break;			// number of clusters below threshold: break;
    //	} 
    // passing: Mark the neighbors
    lower  = TMath::Max(col - 1, 0); upper  = TMath::Min(col + 2, nCols);
    lower1 = TMath::Max(row - 1, 0); upper1 = TMath::Min(row + 2, nCols);
    for(Int_t ic = lower; ic < upper; ++ic)
      for(Int_t ir = lower1; ir < upper1; ++ir){
        if(ic == col && ir == row) continue;
        mask[ic] |= (1 << ir);
      }
    // Storing the position in an array
    // testing for neigboring
    cogv = 0;
    norm = 0;
    lower = TMath::Max(col - 1, 0);
    upper = TMath::Min(col + 2, nCols);
    for(Int_t inb = lower; inb < upper; ++inb){
      cogv += yLengths[inb] * histogram[row][inb];
      norm += histogram[row][inb];
    }
    cogy[row][col] = cogv / norm;
    cogv = 0; norm = 0;
    lower = TMath::Max(row - 1, 0);
    upper = TMath::Min(row + 2, nRows);
    for(Int_t inb = lower; inb < upper; ++inb){
      cogv += zLengths[inb] * histogram[inb][col];
      norm += histogram[inb][col];
    }
    cogz[row][col] = Float_t(cogv) /  norm;
    // passed the filter
    cand[nCandidates] = row*nCols + col;	// store the position of a passig candidate into an Array
    sigcands[nCandidates] = sigmas[row][col] / histogram[row][col]; // never be a floating point exeption
    // Analysis output
    nCandidates++;
  }
  if(!nCandidates) return kFALSE;
  
  Float_t pos[3], sig[2];
  Short_t signal[7]; memset(&signal[0], 0, 7*sizeof(Short_t));
  
  new(fakeLayer) AliTRDchamberTimeBin(layer, stack, sector, z0, zl);
  fakeLayer->SetReconstructor(rec);
  fakeLayer->SetNRows(nRows);
  fakeLayer->SetOwner(kFALSE);
  if(nCandidates){
    UInt_t fakeIndex = 0;
    for(Int_t ican = 0; ican < nCandidates; ican++){
      row = cand[ican] / nCols;
      col = cand[ican] % nCols;
      //temporary
      Int_t n = 0; Double_t x = 0., y = 0., z = 0.;
      for(int itb=0; itb<AliTRDseedV1::kNtb; itb++){
        if(!(nClusters = fTB[itb].GetNClusters())) continue;
        for(Int_t incl = 0; incl < nClusters; incl++){
          c = fTB[itb].GetCluster(incl);	
          if(c->GetPadRow() != row) continue;
          if(TMath::Abs(c->GetPadCol() - col) > 2) continue;
          x += c->GetX();
          y += c->GetY();
          z += c->GetZ();
          n++;
        }
      }
      if(!n) continue;
      pos[0] = x/n;
      pos[1] = y/n;
      pos[2] = z/n;
      sig[0] = .02;
      sig[1] = sigcands[ican];
      fakeLayer->InsertCluster(new AliTRDcluster(fDetector, 0., pos, sig, NULL, 3, signal, col, row, 0, 0, 0., 0), fakeIndex++);
    }
  }
  fakeLayer->BuildIndices();
  //fakeLayer->Print();
  
  if(rec->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kTracker) >= 3){
    //TMatrixD hist(nRows, nCols);
    //for(Int_t i = 0; i < nRows; i++)
    //	for(Int_t j = 0; j < nCols; j++)
    //		hist(i,j) = histogram[i][j];
    TTreeSRedirector &cstreamer = *rec->GetDebugStream(AliTRDrecoParam::kTracker);
    cstreamer << "GetSeedingLayer"
    << "layer="      << layer
    << "ymin="       << ymin
    << "ymax="       << ymax
    << "zmin="       << zmin
    << "zmax="       << zmax
    << "L.="         << fakeLayer
    //<< "Histogram.=" << &hist
    << "\n";
  }
  
  return kTRUE;
}


//_______________________________________________________
void AliTRDtrackingChamber::Print(Option_t *opt) const
{
  // Print the chamber status
  if(!GetNClusters()) return;
  AliInfo(Form("fDetector   = %d", fDetector));
  AliInfo(Form("fX0         = %7.3f", fX0));
  const AliTRDchamberTimeBin *itb = &fTB[0];
  for(Int_t jtb=0; jtb<AliTRDseedV1::kNtb; jtb++, itb++) (*itb).Print(opt);
}


//_______________________________________________________
void AliTRDtrackingChamber::Update()
{
// Steer purging of used and shared clusters 

  AliTRDchamberTimeBin *jtb = &fTB[0];
  for(Int_t itb=AliTRDseedV1::kNtb; itb--; ++jtb){ 
    if(!(Int_t(*jtb))) continue;
    (*jtb).BuildIndices();
  }
}

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