ROOT logo
#include "TObjArray.h"
#include "TMath.h"

#include "AliLog.h"
#include "AliMathBase.h"

#include "AliTRDseedV1.h"
#include "AliTRDcluster.h"
#include "AliTRDpadPlane.h"
#include "AliTRDtrackletOflHelper.h"

ClassImp(AliTRDtrackletOflHelper)
//___________________________________________________________________
AliTRDtrackletOflHelper::AliTRDtrackletOflHelper() 
  :TObject()
  ,fRow(-1)
  ,fClusters(NULL)
  ,fPadPlane(NULL)
{
// Default constructor
  fCol[0]=144; fCol[1]=0;
  fTBrange[0]=1; fTBrange[1]=21;
}

//___________________________________________________________________
AliTRDtrackletOflHelper::AliTRDtrackletOflHelper(const AliTRDtrackletOflHelper &ref) 
  :TObject(ref)
  ,fRow(-1)
  ,fClusters(NULL)
  ,fPadPlane(ref.fPadPlane)
{
// Copy constructor
  fRow = ref.fRow; fCol[0]=ref.fCol[0]; fCol[1]=ref.fCol[1];
  fTBrange[0] = ref.fTBrange[0];fTBrange[1] = ref.fTBrange[1];
  Int_t n(0);
  if(ref.fClusters){
    if((n = ref.fClusters->GetEntriesFast())) {
      fClusters = new TObjArray(n);
      for(Int_t ic(n); ic--;) fClusters->AddAt(ref.fClusters->At(ic), ic);
    }
  }
}

//___________________________________________________________________
AliTRDtrackletOflHelper& AliTRDtrackletOflHelper::operator=(const AliTRDtrackletOflHelper &rhs)
{
  if(this != &rhs){
    TObject::operator=(rhs);
    fPadPlane  = rhs.fPadPlane;
    fRow       = rhs.fRow;
    fCol[0]    = rhs.fCol[0];
    fCol[1]    = rhs.fCol[1];
    fTBrange[0]= rhs.fTBrange[0];
    fTBrange[1]= rhs.fTBrange[1];
    if(rhs.fClusters){ 
      Int_t n(rhs.fClusters->GetEntriesFast());
      if(!fClusters) fClusters = new TObjArray(n);
      if(fClusters->GetEntriesFast() != n){ 
        fClusters->Clear();
        fClusters->Expand(n);
      }
      for(Int_t ic(n); ic--;)  fClusters->AddAt(rhs.fClusters->At(ic), ic);
    } else {
      if(fClusters) delete fClusters;
    }
  }
  return *this;
}

//___________________________________________________________________
AliTRDtrackletOflHelper::~AliTRDtrackletOflHelper()
{
// Clean helper  
  if(fClusters) fClusters->Clear();
  delete fClusters;
}

//___________________________________________________________________
Int_t AliTRDtrackletOflHelper::Expand(TObjArray *cls, Int_t *mark, Int_t groupId)
{
// Allocate new clusters for this helper.  If a subset of clusters is to be allocated 
// this can be specified via the identifier "groupId" which have to be compared 
// with individual elements in the array "mark".
// 
// Return total no. of clusters in helper

  if(!fPadPlane || !fClusters ){
    AliError("Helper not initialized."); 
    return 0;
  }
  Int_t ncl(fClusters->GetEntriesFast());
  Int_t mcl(cls->GetEntriesFast());
  fClusters->Expand(mcl + ncl);
  fCol[0]=144; fCol[1]=0;
  AliTRDcluster *c(NULL);
  for(Int_t icl(0), jcl(ncl); icl<mcl; icl++){
    if(!(c=(AliTRDcluster*)cls->At(icl))) continue;
    if(mark && mark[icl]!=groupId) continue;
    fClusters->AddAt(c, jcl++);
    Int_t col(c->GetPadCol());
    Short_t *sig(c->GetSignals());
    for(Int_t icol(0), jcol(col-3); icol<7; icol++, jcol++){
      if(sig[icol]==0) continue;
      if(jcol<fCol[0]) fCol[0]=jcol;
      if(jcol>fCol[1]) fCol[1]=jcol;
    }
  }

  AliDebug(1, Form("Segment[%d] Clusters[%2d] pad[%3d %3d].", groupId, fClusters->GetEntriesFast(), fCol[0], fCol[1]));
  return fClusters->GetEntriesFast();
}


//___________________________________________________________________
Int_t AliTRDtrackletOflHelper::Init(AliTRDpadPlane *p, TObjArray *cls, Int_t *mark, Int_t groupId)
{
// Allocate clusters for this helper.  If a subset of clusters is to be allocated 
// this can be specified via the identifier "groupId" which have to be compared 
// with individual elements in the array "mark".
// 
// Return no. of clusters allocated

  if(!p){
    AliError("PadPlane not initialized."); return 0;
  }
  if(!cls){
    AliError("Cluster array not initialized."); return 0;
  }
  Int_t ncl(cls->GetEntriesFast());
  if(ncl<2){ 
    AliDebug(1, Form("Segment[%d] failed n[%d].", groupId, ncl)); return 0;
  }
  Int_t mcl(ncl);
  if(mark){
    mcl = 0;
    for(Int_t icl(ncl); icl--;) 
      if(cls->At(icl) && mark[icl]==groupId) mcl++;
  }  
  if(mcl<2){ 
    AliDebug(1, Form("Segment[%d] failed n[%d] in group.", groupId, mcl)); return 0;
  }
  if(!fClusters) fClusters = new TObjArray(mcl);
  else{ 
    fClusters->Clear();
    fClusters->Expand(mcl);
  }
  fCol[0]=144; fCol[1]=0; fRow=-1;
  AliTRDcluster *c(NULL);
  for(Int_t icl(0), jcl(0); icl<ncl; icl++){
    if(!(c=(AliTRDcluster*)cls->At(icl))) continue;
    if(mark && mark[icl]!=groupId) continue;
    fClusters->AddAt(c, jcl++);
    if(fRow<0) fRow = c->GetPadRow();
    Int_t col(c->GetPadCol());
    Short_t *sig(c->GetSignals());
    for(Int_t icol(0), jcol(col-3); icol<7; icol++, jcol++){
      if(sig[icol]==0) continue;
      if(jcol<fCol[0]) fCol[0]=jcol;
      if(jcol>fCol[1]) fCol[1]=jcol;
    }
  }
  fPadPlane = p;
  
  AliDebug(1, Form("Segment[%d] Clusters[%2d] pad[%3d %3d].", groupId, fClusters->GetEntriesFast(), fCol[0], fCol[1]));
  return fClusters->GetEntriesFast();
}

//___________________________________________________________________
Int_t AliTRDtrackletOflHelper::ClassifyTopology()
{
// Classify topology and return classification code
// 0 - normal tracklet
// 1 - delta ray candidate
// 2 - secondary candidate
// 3 - "elephant" candidate
// 4 - unknown topology

  if(!fClusters){ 
    AliError("Helper not initialized. Missing clusters.");
    return kUnknown;
  }
  Int_t ncl(fClusters->GetEntries());
  if(!ncl){ 
    AliError("Helper not initialized. No cluster allocated.");
    return kUnknown;
  }
  const Int_t kRange(22); // DEFINE based on vd 
  
  // compute local occupancy
  Int_t localOccupancy[AliTRDseedV1::kNtb]; memset(localOccupancy, 0, AliTRDseedV1::kNtb*sizeof(Int_t));
  AliTRDcluster *c(NULL);
  Double_t sy[kNcls]; Int_t mcl(0);
  for(Int_t icl(ncl), time; icl--;){
    c = (AliTRDcluster*)fClusters->At(icl);
    time = c->GetPadTime();
    if(time==0 || time>=kRange){
      sy[icl] = -1; // mark clusters outsde drift volume
      continue;
    }
    // protect against wrong error param.
    if(c->GetSigmaY2() < 1.e-5) sy[icl] = 0.02;
    else sy[icl] = TMath::Min(TMath::Sqrt(c->GetSigmaY2()), 0.04);
    localOccupancy[time]++;
    mcl++;
  }
  if(!mcl){
    AliWarning("No clusters in the active area.");
    return kUnknown;
  } 
  //compute number of 0 bins and high occupancy
  Int_t goodOccupancy(0), highOccupancy(0), lowOccupancy(0);
  for(Int_t itb(1); itb<kRange; itb++){
    switch(localOccupancy[itb]){ 
      case 0: lowOccupancy++; break;
      case 1: goodOccupancy++; break;
      default: highOccupancy++; break;
    }
  }
  AliDebug(2, Form("H[%2d | %5.2f%%] L[%2d | %5.2f%%] N[%2d | %5.2f%% | %5.2f%%]",
          highOccupancy, 100.*highOccupancy/kRange, 
          lowOccupancy, 100.*lowOccupancy/kRange, 
          goodOccupancy, 100.*goodOccupancy/kRange, 100.*goodOccupancy/mcl));
  
  // filter
  Double_t dy[kNcls];
  if(goodOccupancy==mcl) return kNormal;
  else if(Double_t(goodOccupancy)/kRange > 0.9){
    if(highOccupancy == 0 ) {
      if(!FitPSR(dy)) return kUnknown;
      Int_t nin(0);
      for(Int_t idy(ncl); idy--;){
        if(sy[idy]<0.) continue;
        if(dy[idy] > 3*sy[idy]) continue;
        nin ++;
      }
      if(Double_t(nin)/mcl > 0.8) return kNormal;
      else return kUnknown;
    } else return kDeltaRay;
  } else return kUnknown;
}


//___________________________________________________________________
void AliTRDtrackletOflHelper::FindSolidCls(Bool_t *mark, Int_t *q)
{
//  Find clusters produced by large fluctuations of energy deposits
//  Largest charge and well separation from neighbors

  Int_t ntb(AliTRDseedV1::kNtb);
  Int_t idx[ntb+1];
  TMath::Sort(ntb, q, idx, kTRUE);
  Int_t qmax = Int_t(0.3*q[idx[0]]);
  mark[0] = kFALSE;
  for(Int_t icl(ntb-5); icl<ntb; icl++) mark[icl] = kFALSE;
  for(Int_t icl(0); icl<ntb; icl++){
    Int_t jcl(idx[icl]);
    if(!mark[jcl]) continue;
    if(q[jcl-1]>q[jcl] || q[jcl+1]>q[jcl]){
      mark[jcl] = kFALSE;
      continue;
    }
    if(q[jcl] < qmax){
      mark[jcl] = kFALSE;
      continue;
    }
    for(Int_t kcl=TMath::Max(0, jcl-2); kcl<jcl+3; kcl++){
      if(kcl==jcl) continue;
      mark[kcl] = kFALSE;
    }
  }
}

//___________________________________________________________________
Bool_t AliTRDtrackletOflHelper::FitPSR(Double_t dy[200], Bool_t useSolid)
{
// Fit tracklet in Pad System of Reference [PSR] to avoid uncertainty related to 
// Lorentz angle correction

  Bool_t mark[200]; memset(mark, 0, 200*sizeof(Bool_t));
  Int_t q[200]; memset(q, 0, 200*sizeof(Int_t));
  Int_t ncl(fClusters->GetEntries());
  AliTRDcluster *c(NULL);
  for(Int_t icl(ncl); icl--;){
    c = (AliTRDcluster*)fClusters->At(icl);
    if(c->GetPadRow() != fRow) continue;
    Int_t time(c->GetPadTime());
    mark[time] = kTRUE; q[time] = Int_t(c->GetQ());
  }
  if(useSolid) FindSolidCls(mark, q);
  
  Double_t 
    x[AliTRDseedV1::kNtb], y[AliTRDseedV1::kNtb], sy[AliTRDseedV1::kNtb], 
    xf[AliTRDseedV1::kNtb], yf[AliTRDseedV1::kNtb], syf[AliTRDseedV1::kNtb], 
    par[3];
  Int_t jcl(0), kcl(0);
  for(Int_t icl(0); icl<ncl; icl++){
    c = (AliTRDcluster*)fClusters->At(icl);
    if(c->GetPadRow() != fRow) continue;
    Int_t col(c->GetPadCol());
    Int_t time(c->GetPadTime());
    Double_t center(c->GetCenter());
    Double_t cw(fPadPlane->GetColSize(col));
    //Double_t corr = AliTRDcluster::GetYcorr(AliTRDgeometry::GetLayer(det), center);
    y[jcl] = fPadPlane->GetColPos(col) + (.5 + center)*cw /*+ corr*/;
    x[jcl] = c->GetX();
    sy[jcl]= TMath::Sqrt(c->GetSigmaY2());
    if(mark[time]){
      yf[kcl] = y[jcl];
      xf[kcl] = x[jcl];
      syf[kcl]= useSolid ? 0.5/time:sy[jcl];
      kcl++;
    } 
    jcl++;
  }
  Fit(kcl, xf, yf, syf, par);

  for(Int_t icl(0); icl<jcl; icl++){
    Double_t dx(x[icl] - par[2]);
    dy[icl] = y[icl] - (par[0] + par[1]*dx);
  }
  return kTRUE;
}

//___________________________________________________________________
Bool_t AliTRDtrackletOflHelper::Fit(Int_t n, Double_t *x, Double_t *y, Double_t *sy, Double_t *par, Double_t sCut,  Double_t *cov)
{
// Iterative robust tracklet fit 
  if(n<3) return kFALSE;
  //select reference radial position
  if(par[2]<0.){ //compute reference radial position as <x>
    par[2] = 0.; for(Int_t ic(n); ic--;) par[2] += x[ic]; par[2] /= n;
  }
  AliTRDtrackerV1::AliTRDLeastSquare &f=Fitter();
  for(Int_t iter(0); iter<3; iter++){
    f.Reset();
    Int_t jp(0);
    for(Int_t ip(0); ip<n; ip++){
      Double_t dx(x[ip]-par[2]);
      Double_t dy(y[ip] - (par[0] + par[1]*dx));
      if(iter && TMath::Abs(dy)>sCut*sy[ip]) continue;
      f.AddPoint(&dx, y[ip], sy[ip]);
      jp++;
    }
    if(jp<3) continue;
    if(!f.Eval()) continue;
    par[0]=f.GetFunctionParameter(0);
    par[1]=f.GetFunctionParameter(1);
    if(cov) f.GetCovarianceMatrix(cov);
    AliDebugGeneral("AliTRDtrackletOflHelper::Fit()", 2, Form("Iter[%d] Ncl[%2d/%2d] par[%f %f %f]", iter, jp, n, par[0], par[1], par[2]));
  }
  return kTRUE;
}

//___________________________________________________________________
Bool_t AliTRDtrackletOflHelper::Fit(Double_t *par, Double_t sCut) const
{
// Wrapper for clusters attach to this for static Fit function  
//
  Int_t n(fClusters->GetEntriesFast()), jc(0), dr(0);
  Double_t corr = TMath::Tan(TMath::DegToRad()*fPadPlane->GetTiltingAngle())*
                  fPadPlane->GetLengthIPad();
  Double_t x[kNcls], y[kNcls], sy[kNcls];
  AliTRDcluster *c(NULL);
  for(Int_t ic(0); ic<n; ic++){
    c = (AliTRDcluster*)fClusters->At(ic);
    if(!c->IsInChamber()) continue;
    dr = c->GetPadRow() - fRow;
    x[jc] = c->GetX();
    y[jc] = c->GetY()+corr*dr;
    sy[jc]= c->GetSigmaY2()>0?(TMath::Min(TMath::Sqrt(c->GetSigmaY2()), 0.08)):0.08;
    jc++;
  }
  return Fit(jc, x, y, sy, par, sCut);
}

//___________________________________________________________________
void AliTRDtrackletOflHelper::GetColSignals(Int_t col, Int_t adc[32], Bool_t mainRow) const
{
  memset(adc, 0, 32*sizeof(Int_t));
  if(col<fCol[0] || col>fCol[1]) return;
  
  AliTRDcluster *cc(NULL);
  for(Int_t ic(fClusters->GetEntriesFast()); ic--;){
    cc = (AliTRDcluster*)fClusters->At(ic);
    if((mainRow && cc->GetPadRow()!=fRow) ||
       (!mainRow && cc->GetPadRow()==fRow)) continue;
    Short_t *sig = cc->GetSignals();
    Int_t padcol(cc->GetPadCol());
    Int_t time(cc->GetPadTime());
    for(Int_t icol(0), jcol(padcol-3); icol<7; icol++, jcol++){
      if(jcol!=col) continue;
      adc[time]+=sig[icol];
    }
  }
}

//___________________________________________________________________
Int_t AliTRDtrackletOflHelper::GetRMS(Double_t &r, Double_t &m, Double_t &s, Double_t xm) const
{
// Calculate Rotation[r], Mean y[m] (at radial position [xm]) and Sigma[s] (of a gaussian distribution in the tracklet [SR])
// for clusters attach to this helper. The Rotation and Mean are calculated without tilt correction option.
// It returns the number of clusters in 1 sigma cut.
  
  Int_t n(fClusters->GetEntriesFast());
  if(n<=2) return n;
  Double_t par[3] = {0., 0., -1.};
  if(xm>0.) par[2] = xm; // select reference radial position from outside 
  Fit(par);
  m = par[0];
  r = par[1];
  xm= par[2];

  Double_t corr = TMath::Tan(TMath::DegToRad()*fPadPlane->GetTiltingAngle())*
                  fPadPlane->GetLengthIPad();
  Double_t y[kNcls];
  AliTRDcluster *c(NULL);
  for(Int_t ic(n); ic--;){
    c = (AliTRDcluster*)fClusters->At(ic);
    Double_t x(c->GetX() - xm);
    Int_t dr(c->GetPadRow() - fRow);
    y[ic] = c->GetY()+corr*dr - (par[0] + par[1]*x);
  }
  Double_t m1(0.);
  AliMathBase::EvaluateUni(n, y, m1, s, 0);
  Int_t n0(0);
  for(Int_t ic(n); ic--;){
    c = (AliTRDcluster*)fClusters->At(ic);
    Double_t sy = c->GetSigmaY2()>0?(TMath::Min(TMath::Sqrt(c->GetSigmaY2()), 0.08)):0.08;
    if(TMath::Abs(y[ic]-m1) <= sy) n0++;
  }
  return n0;
}

//___________________________________________________________________
Double_t AliTRDtrackletOflHelper::GetQ() const
{
// Calculate total charge NOT normalized to inclination

  Double_t q(0.);
  Int_t n(fClusters->GetEntriesFast());
  AliTRDcluster *c(NULL);
  for(Int_t ic(n); ic--;){
    c = (AliTRDcluster*)fClusters->At(ic);
    q += TMath::Abs(c->GetQ());
  }
  return q;
}

//___________________________________________________________________
Double_t AliTRDtrackletOflHelper::GetSyMean() const
{
// Calculate mean uncertainty of clusters

  Double_t sym(0.);
  Int_t n(fClusters->GetEntriesFast());
  AliTRDcluster *c(NULL);
  for(Int_t ic(n); ic--;){
    c = (AliTRDcluster*)fClusters->At(ic);
    sym += c->GetSigmaY2()>0?(TMath::Min(TMath::Sqrt(c->GetSigmaY2()), 0.08)):0.08;
  }
  return sym/=n;
}

//___________________________________________________________________
Int_t AliTRDtrackletOflHelper::Segmentation(Int_t n, Double_t *x, Double_t *y, Int_t *Index)
{
// Segmentation of clusters in the tracklet roads
//
// The user supply the coordinates of the clusters (x,y) and their number "n". Also
// The array "Index" has to be allocated by the user with a size equal or larger than "n".
// On return the function returns the number of segments found and the array "Index" i-th element 
// is filled with the index of the tracklet segment to which the i-th cluster was assigned too.
// 
// Observation
// The parameter which controls the segmentation is set inside the function "kGapSize" and it is used 
// for both "x" and "y" segmentations. An improvement can be a parametrization as function of angle of 
// incidence.
//
// author:
// Alex Bercuci <a.bercuci@gsi.de>

  if(!n || !x || !y || !Index){
    AliErrorGeneral("AliTRDtrackletOflHelper::Segmentation()", "One of the input arrays non initialized.");
    return 0;
  }
  const Int_t kBuffer = 200;
  if(n>kBuffer){
    AliWarningGeneral("AliTRDtrackletOflHelper::Segmentation()", Form("Input array size %d exceed buffer %d. Truncate.", n, kBuffer));
    n = kBuffer;
  }
  const Double_t kGapSize(0.2); // cm
  Int_t ng(0),
        nc(0);
  Double_t xx[kBuffer], dy;
  Int_t idx[kBuffer+1], jdx[kBuffer], kdx[kBuffer];
  TMath::Sort(n, y, idx);
  for(Int_t iy(0); iy<n; iy++){
    dy = iy>0?(TMath::Abs(y[idx[iy-1]]-y[idx[iy]])):0.;
    if(dy>kGapSize){
      TMath::Sort(nc, xx, jdx);
      for(Int_t ic(0), jc0, jc1; ic<nc; ic++){
        jc0 = ic>0?kdx[jdx[ic-1]]:0;
        jc1 = kdx[jdx[ic]];
        dy = TMath::Abs(y[jc0] - y[jc1]);
        if(ic && dy>kGapSize) ng++;
        Index[jc1] = ng;
        AliDebugGeneral("AliTRDtrackletOflHelper::Segmentation()", 4, Form("  y[%2d]=%+f x[%+f] %2d -> %2d -> %2d ng[%2d]", jc1, y[jc1], x[jc1], ic, jdx[ic], jc1, ng));
      }
      ng++;
      nc=0;
    }
    xx[nc] = x[idx[iy]];
    kdx[nc]= idx[iy];
    AliDebugGeneral("AliTRDtrackletOflHelper::Segmentation()", 4, Form("y[%2d]=%+f -> %2d", idx[iy], y[idx[iy]], nc));
    nc++;
  }
  if(nc){
    TMath::Sort(nc, xx, jdx);
    for(Int_t ic(0), jc0, jc1; ic<nc; ic++){
      jc0 = ic>0?kdx[jdx[ic-1]]:0;
      jc1 = kdx[jdx[ic]];
      dy = TMath::Abs(y[jc0] - y[jc1]);
      if(ic && dy>kGapSize) ng++;
      Index[jc1] = ng;
      AliDebugGeneral("AliTRDtrackletOflHelper::Segmentation()", 4, Form("  y[%2d]=%+f x[%+f|%+f] %2d -> %2d -> %2d ng[%2d]\n", jc1, y[jc1], xx[jdx[ic]], x[jc1], ic, jdx[ic], jc1, ng));
    }
    ng++;
  }
  return ng;
}

//___________________________________________________________________
void AliTRDtrackletOflHelper::SetTbRange(Float_t t0, Float_t vd)
{
// Set first time bin and total number of time bins corresponding to clusters 
// in chamber based on the calibrated info "t0" and drift velocity "vd"

  // TO CHECK
  fTBrange[0] = Int_t(t0*0.1);
  fTBrange[1] = Int_t(vd*0.1);
}

#include "TH2.h"
#include "TGraph.h"
#include "TGraphErrors.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TGaxis.h"
//___________________________________________________________________
void AliTRDtrackletOflHelper::View(TVirtualPad *vpad)
{
// Visualization support. Draw this tracklet segment  


  Int_t row(-1), det(-1);
  Int_t n(fClusters->GetEntriesFast());
  AliInfo(Form("Processing Clusters[%2d] Class[%d].", n ,ClassifyTopology()));
  
  // prepare drawing objects
  Int_t ncols(fPadPlane->GetNcols());
  Double_t cw(fPadPlane->GetColSize(1));
  TH2 *h2 = new TH2I("h2pm", ";y_{Local} [cm]; pad time;Charge", ncols, fPadPlane->GetColPos(1)-cw, fPadPlane->GetColPos(ncols-1)+cw, 31, -30.5, 0.5);
  h2->SetMarkerColor(kWhite);h2->SetMarkerSize(2.);
  h2->SetFillColor(9);
  
  TGraph *gcls = new TGraph(n);
  gcls->SetMarkerColor(kBlack);gcls->SetMarkerStyle(20);
  TGraph *gclsLC = new TGraph(n);
  gclsLC->SetMarkerColor(kBlack);gclsLC->SetMarkerStyle(28);
  TGraph *gclsSC = new TGraph(n);
  gclsSC->SetMarkerColor(kBlack);gclsSC->SetMarkerStyle(4);gclsSC->SetMarkerSize(1.5);
  TGraph *gFP = new TGraph(n);
  gFP->SetMarkerColor(kBlack);gFP->SetLineWidth(2);
  
  // fill signal data
  Bool_t map[200]; memset(map, 0, 200*sizeof(Bool_t));
  Int_t qa[200]; memset(qa, 0, 200*sizeof(Int_t));
  AliTRDcluster *cc(NULL); Int_t tm = 30; Double_t ym=0.;
  for(Int_t ic(n); ic--;){
    cc = (AliTRDcluster*)fClusters->At(ic);
    if(cc->GetPadRow() != fRow) continue; //TODO extend for 2 pad rows
    Short_t *sig = cc->GetSignals();
    Int_t col(cc->GetPadCol());
    det = cc->GetDetector();
    row = cc->GetPadRow();
    Int_t time(cc->GetPadTime());
    map[time] = kTRUE; qa[time] = (Int_t)cc->GetQ();
    for(Int_t ipad(0), jpad(col-2); ipad<7; ipad++, jpad++){
      Int_t q = (Int_t)h2->GetBinContent(jpad, 31-time);
      h2->SetBinContent(jpad, 31-time, q+sig[ipad]);
    }
    Double_t y0 = fPadPlane->GetColPos(col) + (.5 + cc->GetCenter())*cw;
    //h2->GetXaxis()->GetBinCenter(pad)+cc->GetCenter();
    gcls->SetPoint(ic, y0, -time);
    if(time <= tm) {ym = cc->GetY() - y0; tm = time;}
  }

  // draw special clusters (solid and Lorentz corrected and fit) 
  FindSolidCls(map, qa);
  Double_t ddy[200]; FitPSR(ddy, kTRUE);
  Double_t dt, dy;
  for(Int_t ic(0), jc(0); ic<n; ic++){
    cc = (AliTRDcluster*)fClusters->At(ic);
    if(cc->GetPadRow() != fRow) continue; //TODO extend for 2 pad rows
    gcls->GetPoint(ic, dy, dt);
    gclsLC->SetPoint(ic, cc->GetY()-ym, dt);
    gFP->SetPoint(ic, dy-ddy[ic], dt);
    if(map[cc->GetPadTime()]) gclsSC->SetPoint(jc++, dy, dt);
  }
  
  
  // prepare frame histo
  h2->SetName(Form("h2s%03d%02d", det, row));
  Int_t binSrt(fCol[0]+1), binSop(fCol[1]+1);
  TH1 *h1(NULL);
  
  // show everything
  if(!vpad){ 
    vpad = new TCanvas(Form("c%03d%02d", det, row), Form("D %03d [%02d_%d_%d] R[%02d]", det, AliTRDgeometry::GetSector(det), AliTRDgeometry::GetStack(det), AliTRDgeometry::GetLayer(det), row), 700, 500);
  }
  TVirtualPad *pp(NULL);
  vpad->Divide(2,1,2.e-5,2.e-5);
  pp = vpad->cd(1); pp->SetRightMargin(0.0001);pp->SetTopMargin(0.1);pp->SetBorderMode(0); pp->SetFillColor(kWhite);
  h1 = h2->ProjectionY(); h1->GetYaxis()->SetTitle("Total Charge");
  h1->SetTitle(Form("D%03d[%02d_%d_%d] R[%02d]", 
    det,AliTRDgeometry::GetSector(det), AliTRDgeometry::GetStack(det), AliTRDgeometry::GetLayer(det), row));
  TAxis *ax(h1->GetXaxis()); for(Int_t ib(0), jb(1); ib<ax->GetNbins(); ib++, jb++) ax->SetBinLabel(jb, Form("%d", -Int_t(ax->GetBinCenter(jb))));
  h1->Draw("hbar3");

  pp = vpad->cd(2);
  pp->SetRightMargin(0.15);pp->SetLeftMargin(0.0001);pp->SetTopMargin(0.1);
  pp->SetBorderMode(0); pp->SetFillColor(kWhite);
  ax=h2->GetXaxis();
  ax->SetRange(TMath::Max(1, binSrt-1), TMath::Min(ncols, binSop+1));
  h2->Draw("coltextz");
  gPad->Update();
  TGaxis *axis = new TGaxis(gPad->GetUxmin(),
                    gPad->GetUymax(),
                    gPad->GetUxmax(),
                    gPad->GetUymax(),
                    TMath::Max(0, binSrt-2)-0.5, TMath::Min(ncols-1, binSop)+0.5, 510,"-L");

  axis->SetNdivisions(103+binSop-binSrt);
  axis->SetTitle("pad col");
  axis->Draw();

  TLegend *leg = new TLegend(0.01, 0.1, 0.84, 0.21);
  leg->SetBorderSize(1); leg->SetFillColor(kYellow-9);leg->SetTextSize(0.04);
  gcls->Draw("p");  leg->AddEntry(gcls, "Cls. in Pad [SR]", "p");
  gclsLC->Draw("p"); leg->AddEntry(gclsLC, "Lorentz Corr. Cls.", "p");
  gclsSC->Draw("p"); leg->AddEntry(gclsSC, "Solid Cls.", "p");
  gFP->Draw("l"); leg->AddEntry(gFP, "Fit in Pad [SR]", "l");
  leg->Draw();
}

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