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$ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// TRD cluster finder                                                        //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TClonesArray.h>
#include <TObjArray.h>

#include "AliRunLoader.h"
#include "AliLoader.h"
#include "AliTreeLoader.h"
#include "AliAlignObj.h"

#include "AliTRDclusterizer.h"
#include "AliTRDcluster.h"
#include "AliTRDReconstructor.h"
#include "AliTRDgeometry.h"
#include "AliTRDarrayDictionary.h"
#include "AliTRDarrayADC.h"
#include "AliTRDdigitsManager.h"
#include "AliTRDdigitsParam.h"
#include "AliTRDrawData.h"
#include "AliTRDcalibDB.h"
#include "AliTRDtransform.h"
#include "AliTRDSignalIndex.h"
#include "AliTRDrawStream.h"
#include "AliTRDfeeParam.h"
#include "AliTRDtrackletWord.h"
#include "AliTRDtrackletMCM.h"
#include "AliTRDtrackGTU.h"
#include "AliESDTrdTrack.h"

#include "TTreeStream.h"

#include "Cal/AliTRDCalROC.h"
#include "Cal/AliTRDCalDet.h"
#include "Cal/AliTRDCalSingleChamberStatus.h"
#include "Cal/AliTRDCalOnlineGainTableROC.h"

ClassImp(AliTRDclusterizer)

//_____________________________________________________________________________
AliTRDclusterizer::AliTRDclusterizer(const AliTRDReconstructor *const rec)
  :TNamed()
  ,fReconstructor(rec)  
  ,fRunLoader(NULL)
  ,fClusterTree(NULL)
  ,fRecPoints(NULL)
  ,fTracklets(NULL)
  ,fTracks(NULL)
  ,fDigitsManager(new AliTRDdigitsManager())
  ,fRawVersion(2)
  ,fTransform(new AliTRDtransform(0))
  ,fDigits(NULL)
  ,fDigitsRaw(NULL)
  ,fIndexes(NULL)
  ,fMaxThresh(0)
  ,fMaxThreshTest(0)
  ,fSigThresh(0)
  ,fMinMaxCutSigma(0)
  ,fMinLeftRightCutSigma(0)
  ,fLayer(0)
  ,fDet(0)
  ,fVolid(0)
  ,fColMax(0)
  ,fTimeTotal(0)
  ,fCalGainFactorROC(NULL)
  ,fCalGainFactorDetValue(0)
  ,fCalNoiseROC(NULL)
  ,fCalNoiseDetValue(0)
  ,fCalPadStatusROC(NULL)
  ,fCalOnlGainROC(NULL)
  ,fClusterROC(0)
  ,firstClusterROC(0)
  ,fNoOfClusters(0)
  ,fBaseline(0)
  ,fRawStream(NULL)
  ,fTrgFlags()
{
  //
  // AliTRDclusterizer default constructor
  //

  SetBit(kLabels, kTRUE);
  SetBit(knewDM, kFALSE);

  fRawVersion = AliTRDfeeParam::Instance()->GetRAWversion();

  // Initialize debug stream
  if(fReconstructor){
    if(fReconstructor->GetRecoParam()->GetStreamLevel(AliTRDrecoParam::kClusterizer) > 1){
      TDirectory *savedir = gDirectory; 
      //fgGetDebugStream    = new TTreeSRedirector("TRD.ClusterizerDebug.root");
      savedir->cd();
    }
  }

}

//_____________________________________________________________________________
AliTRDclusterizer::AliTRDclusterizer(const Text_t *name
                                   , const Text_t *title
                                   , const AliTRDReconstructor *const rec)
  :TNamed(name,title)
  ,fReconstructor(rec)
  ,fRunLoader(NULL)
  ,fClusterTree(NULL)
  ,fRecPoints(NULL)
  ,fTracklets(NULL)
  ,fTracks(NULL)
  ,fDigitsManager(new AliTRDdigitsManager())
  ,fRawVersion(2)
  ,fTransform(new AliTRDtransform(0))
  ,fDigits(NULL)
  ,fDigitsRaw(NULL)
  ,fIndexes(NULL)
  ,fMaxThresh(0)
  ,fMaxThreshTest(0)
  ,fSigThresh(0)
  ,fMinMaxCutSigma(0)
  ,fMinLeftRightCutSigma(0)
  ,fLayer(0)
  ,fDet(0)
  ,fVolid(0)
  ,fColMax(0)
  ,fTimeTotal(0)
  ,fCalGainFactorROC(NULL)
  ,fCalGainFactorDetValue(0)
  ,fCalNoiseROC(NULL)
  ,fCalNoiseDetValue(0)
  ,fCalPadStatusROC(NULL)
  ,fCalOnlGainROC(NULL)
  ,fClusterROC(0)
  ,firstClusterROC(0)
  ,fNoOfClusters(0)
  ,fBaseline(0)
  ,fRawStream(NULL)
  ,fTrgFlags()
{
  //
  // AliTRDclusterizer constructor
  //

  SetBit(kLabels, kTRUE);
  SetBit(knewDM, kFALSE);

  fDigitsManager->CreateArrays();

  fRawVersion = AliTRDfeeParam::Instance()->GetRAWversion();

  //FillLUT();

}

//_____________________________________________________________________________
AliTRDclusterizer::AliTRDclusterizer(const AliTRDclusterizer &c)
  :TNamed(c)
  ,fReconstructor(c.fReconstructor)
  ,fRunLoader(NULL)
  ,fClusterTree(NULL)
  ,fRecPoints(NULL)
  ,fTracklets(NULL)
  ,fTracks(NULL)
  ,fDigitsManager(NULL)
  ,fRawVersion(2)
  ,fTransform(NULL)
  ,fDigits(NULL)
  ,fDigitsRaw(NULL)
  ,fIndexes(NULL)
  ,fMaxThresh(0)
  ,fMaxThreshTest(0)
  ,fSigThresh(0)
  ,fMinMaxCutSigma(0)
  ,fMinLeftRightCutSigma(0)
  ,fLayer(0)
  ,fDet(0)
  ,fVolid(0)
  ,fColMax(0)
  ,fTimeTotal(0)
  ,fCalGainFactorROC(NULL)
  ,fCalGainFactorDetValue(0)
  ,fCalNoiseROC(NULL)
  ,fCalNoiseDetValue(0)
  ,fCalPadStatusROC(NULL)
  ,fCalOnlGainROC(NULL)
  ,fClusterROC(0)
  ,firstClusterROC(0)
  ,fNoOfClusters(0)
  ,fBaseline(0)
  ,fRawStream(NULL)
  ,fTrgFlags()
{
  //
  // AliTRDclusterizer copy constructor
  //

  SetBit(kLabels, kTRUE);
  SetBit(knewDM, kFALSE);

  //FillLUT();

}

//_____________________________________________________________________________
AliTRDclusterizer::~AliTRDclusterizer()
{
  //
  // AliTRDclusterizer destructor
  //

  if (fDigitsManager) {
    delete fDigitsManager;
    fDigitsManager = NULL;
  }

  if (fDigitsRaw) {
    delete fDigitsRaw;
    fDigitsRaw = NULL;
  }

  if (fTransform){
    delete fTransform;
    fTransform = NULL;
  }

  if (fRawStream){
    delete fRawStream;
    fRawStream = NULL;
  }
}

//_____________________________________________________________________________
AliTRDclusterizer &AliTRDclusterizer::operator=(const AliTRDclusterizer &c)
{
  //
  // Assignment operator
  //

  if (this != &c) 
    {
      ((AliTRDclusterizer &) c).Copy(*this);
    }

  return *this;

}

//_____________________________________________________________________________
void AliTRDclusterizer::Copy(TObject &c) const
{
  //
  // Copy function
  //

  ((AliTRDclusterizer &) c).fClusterTree   = NULL;
  ((AliTRDclusterizer &) c).fRecPoints     = NULL;  
  ((AliTRDclusterizer &) c).fDigitsManager = NULL;
  ((AliTRDclusterizer &) c).fRawVersion    = fRawVersion;
  ((AliTRDclusterizer &) c).fTransform     = NULL;
  ((AliTRDclusterizer &) c).fDigits        = NULL;
  ((AliTRDclusterizer &) c).fDigitsRaw     = NULL;
  ((AliTRDclusterizer &) c).fIndexes       = NULL;
  ((AliTRDclusterizer &) c).fMaxThresh     = 0;
  ((AliTRDclusterizer &) c).fMaxThreshTest = 0;
  ((AliTRDclusterizer &) c).fSigThresh     = 0;
  ((AliTRDclusterizer &) c).fMinMaxCutSigma= 0;
  ((AliTRDclusterizer &) c).fMinLeftRightCutSigma = 0;
  ((AliTRDclusterizer &) c).fLayer         = 0;
  ((AliTRDclusterizer &) c).fDet           = 0;
  ((AliTRDclusterizer &) c).fVolid         = 0;
  ((AliTRDclusterizer &) c).fColMax        = 0;
  ((AliTRDclusterizer &) c).fTimeTotal     = 0;
  ((AliTRDclusterizer &) c).fCalGainFactorROC = NULL;
  ((AliTRDclusterizer &) c).fCalGainFactorDetValue = 0;
  ((AliTRDclusterizer &) c).fCalNoiseROC   = NULL;
  ((AliTRDclusterizer &) c).fCalNoiseDetValue = 0;
  ((AliTRDclusterizer &) c).fCalPadStatusROC = NULL;
  ((AliTRDclusterizer &) c).fClusterROC    = 0;
  ((AliTRDclusterizer &) c).firstClusterROC= 0;
  ((AliTRDclusterizer &) c).fNoOfClusters  = 0;
  ((AliTRDclusterizer &) c).fBaseline      = 0;
  ((AliTRDclusterizer &) c).fRawStream     = NULL;
  
}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::Open(const Char_t *name, Int_t nEvent)
{
  //
  // Opens the AliROOT file. Output and input are in the same file
  //

  TString evfoldname = AliConfig::GetDefaultEventFolderName();
  fRunLoader         = AliRunLoader::GetRunLoader(evfoldname);

  if (!fRunLoader) {
    fRunLoader = AliRunLoader::Open(name);
  }

  if (!fRunLoader) {
    AliError(Form("Can not open session for file %s.",name));
    return kFALSE;
  }

  OpenInput(nEvent);
  OpenOutput();

  return kTRUE;

}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::OpenOutput()
{
  //
  // Open the output file
  //

  if (!fReconstructor->IsWritingClusters()) return kTRUE;

  TObjArray *ioArray = 0x0; 

  AliLoader* loader = fRunLoader->GetLoader("TRDLoader");
  loader->MakeTree("R");

  fClusterTree = loader->TreeR();
  fClusterTree->Branch("TRDcluster", "TObjArray", &ioArray, 32000, 0);

  return kTRUE;

}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::OpenOutput(TTree *const clusterTree)
{
  //
  // Connect the output tree
  //

  // clusters writing
  if (fReconstructor->IsWritingClusters()){
    TObjArray *ioArray = 0x0;
    fClusterTree = clusterTree;
    fClusterTree->Branch("TRDcluster", "TObjArray", &ioArray, 32000, 0);
  }
  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::OpenInput(Int_t nEvent)
{
  //
  // Opens a ROOT-file with TRD-hits and reads in the digits-tree
  //

  // Import the Trees for the event nEvent in the file
  fRunLoader->GetEvent(nEvent);
  
  return kTRUE;

}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::WriteClusters(Int_t det)
{
  //
  // Fills TRDcluster branch in the tree with the clusters 
  // found in detector = det. For det=-1 writes the tree. 
  //

  if ((det <                      -1) || 
      (det >= AliTRDgeometry::Ndet())) {
    AliError(Form("Unexpected detector index %d.\n",det));
    return kFALSE;
  }
  Int_t nRecPoints = RecPoints()->GetEntriesFast();
  if(!nRecPoints) return kTRUE;

  TObjArray *ioArray = new TObjArray(400);
  TBranch *branch = fClusterTree->GetBranch("TRDcluster");
  if (!branch) {
    fClusterTree->Branch("TRDcluster","TObjArray",&ioArray,32000,0);
  } else branch->SetAddress(&ioArray);
  
  AliTRDcluster *c(NULL);
  if(det >= 0){
    for (Int_t i = 0; i < nRecPoints; i++) {
      if(!(c = (AliTRDcluster *) RecPoints()->UncheckedAt(i))) continue;
      if(det != c->GetDetector()) continue;
      ioArray->AddLast(c);
    }
    fClusterTree->Fill();
    ioArray->Clear();
  } else {
    if(!(c = (AliTRDcluster*)RecPoints()->UncheckedAt(0))){
      AliError("Missing first cluster.");
      delete ioArray;
      return kFALSE;  
    }
    Int_t detOld(c->GetDetector()), nw(0);
    ioArray->AddLast(c);
    for (Int_t i(1); i<nRecPoints; i++) {
      if(!(c = (AliTRDcluster *) RecPoints()->UncheckedAt(i))) continue;
      if(c->GetDetector() != detOld){
        nw += ioArray->GetEntriesFast();
        // fill & clear previously detector set of clusters
        fClusterTree->Fill();
        ioArray->Clear();
        detOld = c->GetDetector();
      } 
      ioArray->AddLast(c);
    }
    if(ioArray->GetEntriesFast()){
      nw += ioArray->GetEntriesFast();
      // fill & clear last detector set of clusters (if any)
      fClusterTree->Fill();
      ioArray->Clear();
    }
    AliDebug(2, Form("Clusters FOUND[%d] WRITTEN[%d] STATUS[%s]", nRecPoints, nw, nw==nRecPoints?"OK":"FAILED"));
    if(nw!=nRecPoints) AliWarning(Form("Clusters FOUND[%d] WRITTEN[%d]", nRecPoints, nw));
  }
  delete ioArray;

  return kTRUE;  
}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::ReadDigits()
{
  //
  // Reads the digits arrays from the input aliroot file
  //

  if (!fRunLoader) {
    AliError("No run loader available");
    return kFALSE;
  }

  AliLoader* loader = fRunLoader->GetLoader("TRDLoader");
  if (!loader->TreeD()) {
    loader->LoadDigits();
  }

  // Read in the digit arrays
  return (fDigitsManager->ReadDigits(loader->TreeD()));

}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::ReadDigits(TTree *digitsTree)
{
  //
  // Reads the digits arrays from the input tree
  //

  // Read in the digit arrays
  return (fDigitsManager->ReadDigits(digitsTree));

}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::ReadDigits(AliRawReader *rawReader)
{
  //
  // Reads the digits arrays from the ddl file
  //

  AliTRDrawData raw;
  fDigitsManager = raw.Raw2Digits(rawReader);

  return kTRUE;

}

Bool_t AliTRDclusterizer::ReadTracklets()
{
  //
  // Reads simulated tracklets from the input aliroot file
  //

  AliRunLoader *runLoader = AliRunLoader::Instance();
  if (!runLoader) {
    AliError("No run loader available");
    return kFALSE;
  }

  AliLoader* loader = runLoader->GetLoader("TRDLoader");

  AliDataLoader *trackletLoader = loader->GetDataLoader("tracklets");
  if (!trackletLoader) {
      return kFALSE;
  }
  trackletLoader->Load();

  Bool_t loaded = kFALSE;
  // look for simulated tracklets
  TTree *trackletTree = trackletLoader->Tree();

  if (trackletTree) {
    TBranch *trklbranch = trackletTree->GetBranch("mcmtrklbranch");
    TClonesArray *trklArray = TrackletsArray("AliTRDtrackletMCM");
    if (trklbranch && trklArray) {
      AliTRDtrackletMCM *trkl = 0x0;
      trklbranch->SetAddress(&trkl);
      Int_t nTracklets = trklbranch->GetEntries();
      for (Int_t iTracklet = 0; iTracklet < nTracklets; iTracklet++) {
        trklbranch->GetEntry(iTracklet);
        new ((*trklArray)[trklArray->GetEntries()]) AliTRDtrackletMCM(*trkl);
      }
      loaded = kTRUE;
    }
  }
  else {
    // if no simulated tracklets found, look for raw tracklets
    AliTreeLoader *treeLoader = (AliTreeLoader*) trackletLoader->GetBaseLoader("tracklets-raw");
    trackletTree = treeLoader ? treeLoader->Load(), treeLoader->Tree() : 0x0;

    if (trackletTree) {
      TClonesArray *trklArray = TrackletsArray("AliTRDtrackletWord");

      Int_t hc;
      TClonesArray *ar = 0x0;
      trackletTree->SetBranchAddress("hc", &hc);
      trackletTree->SetBranchAddress("trkl", &ar);

      Int_t nEntries = trackletTree->GetEntries();
      for (Int_t iEntry = 0; iEntry < nEntries; iEntry++) {
	trackletTree->GetEntry(iEntry);
	Int_t nTracklets = ar->GetEntriesFast();
	AliDebug(2, Form("%i tracklets in HC %i", nTracklets, hc));
	for (Int_t iTracklet = 0; iTracklet < nTracklets; iTracklet++) {
	  AliTRDtrackletWord *trklWord = (AliTRDtrackletWord*) (*ar)[iTracklet];
	  new ((*trklArray)[trklArray->GetEntries()]) AliTRDtrackletWord(trklWord->GetTrackletWord(), hc);
	}
      }
      loaded = kTRUE;
    }
  }

  trackletLoader->UnloadAll();
  trackletLoader->CloseFile();

  return loaded;
}

Bool_t AliTRDclusterizer::ReadTracks()
{
  //
  // Reads simulated GTU tracks from the input aliroot file
  //

  AliRunLoader *runLoader = AliRunLoader::Instance();

  if (!runLoader) {
    AliError("No run loader available");
    return kFALSE;
  }

  AliLoader* loader = runLoader->GetLoader("TRDLoader");
  if (!loader) {
    return kFALSE;
  }

  AliDataLoader *trackLoader = loader->GetDataLoader("gtutracks");
  if (!trackLoader) {
      return kFALSE;
  }

  Bool_t loaded = kFALSE;

  trackLoader->Load();

  TTree *trackTree = trackLoader->Tree();
  if (trackTree) {
    TClonesArray *trackArray = TracksArray();
    AliTRDtrackGTU *trk = 0x0;
    trackTree->SetBranchAddress("TRDtrackGTU", &trk);
    for (Int_t iTrack = 0; iTrack < trackTree->GetEntries(); iTrack++) {
      trackTree->GetEntry(iTrack);
      new ((*trackArray)[trackArray->GetEntries()]) AliESDTrdTrack(*(trk->CreateTrdTrack()));
    }
    loaded = kTRUE;
  }

  trackLoader->UnloadAll();
  trackLoader->CloseFile();

  return loaded;
}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::MakeClusters()
{
  //
  // Creates clusters from digits
  //

  // Propagate info from the digits manager
  if (TestBit(kLabels)){
    SetBit(kLabels, fDigitsManager->UsesDictionaries());
  }
  
  Bool_t fReturn = kTRUE;
  for (Int_t i = 0; i < AliTRDgeometry::kNdet; i++){
  
    AliTRDarrayADC *digitsIn = (AliTRDarrayADC*) fDigitsManager->GetDigits(i); //mod     
    // This is to take care of switched off super modules
    if (!digitsIn->HasData()) continue;
    digitsIn->Expand();
    digitsIn->DeleteNegatives();  // Restore digits array to >=0 values
    AliTRDSignalIndex* indexes = fDigitsManager->GetIndexes(i);
    //    if (indexes->IsAllocated() == kFALSE){ // A.B.
    fDigitsManager->BuildIndexes(i);
    //    }
  
    Bool_t fR(kFALSE);
    if (indexes->HasEntry()){
      if (TestBit(kLabels)){
        Int_t nDict(0);
        for (Int_t iDict = 0; iDict < AliTRDdigitsManager::kNDict; iDict++){
          AliTRDarrayDictionary *tracksIn(NULL); //mod
          tracksIn = (AliTRDarrayDictionary *) fDigitsManager->GetDictionary(i,iDict);  //mod
          // This is to take care of data reconstruction
          if (!tracksIn->GetDim()) continue;
          tracksIn->Expand(); nDict++; 
        }
        if(!nDict){
          AliDebug(1, "MC labels not available. Switch them off.");
          SetUseLabels(kFALSE);
        }
      }
      fR = MakeClusters(i);
      fReturn = fR && fReturn;
    }
  
    //if (fR == kFALSE){
    //  if(IsWritingClusters()) WriteClusters(i);
    //  ResetRecPoints();
    //}
        
    // Clear arrays of this chamber, to prepare for next event
    fDigitsManager->ClearArrays(i);
  }
  
  if(fReconstructor->IsWritingClusters()) WriteClusters(-1);

  AliInfo(Form("Found :: clusters[%d] tracklets[%d] tracks[%d]",
    RecPoints()?RecPoints()->GetEntriesFast():0,
    TrackletsArray()?TrackletsArray()->GetEntriesFast():0,
    TracksArray()?TracksArray()->GetEntriesFast():0));

  return fReturn;

}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::Raw2Clusters(AliRawReader *rawReader)
{
  //
  // Creates clusters from raw data
  //

  return Raw2ClustersChamber(rawReader);

}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::Raw2ClustersChamber(AliRawReader *rawReader)
{
  //
  // Creates clusters from raw data
  //

  // Create the digits manager
  if (!fDigitsManager){
    SetBit(knewDM, kTRUE);
    fDigitsManager = new AliTRDdigitsManager(kTRUE);
    fDigitsManager->CreateArrays();
  }

  fDigitsManager->SetUseDictionaries(TestBit(kLabels));

  if(!fRawStream)
    fRawStream = new AliTRDrawStream(rawReader);
  else
    fRawStream->SetReader(rawReader);

  //if(fReconstructor->IsHLT()){
    fRawStream->DisableErrorStorage();
  //}

  // register tracklet array for output
  fRawStream->SetTrackletArray(TrackletsArray("AliTRDtrackletWord"));
  fRawStream->SetTrackArray(TracksArray());

  UInt_t det = 0;
  while ((det = fRawStream->NextChamber(fDigitsManager)) < AliTRDgeometry::kNdet){
    if (fDigitsManager->GetIndexes(det)->HasEntry()){
      MakeClusters(det);
      fDigitsManager->ClearArrays(det);
    }
  }

  for (Int_t iSector = 0; iSector < AliTRDgeometry::kNsector; iSector++) {
    fTrgFlags[iSector] = fRawStream->GetTriggerFlags(iSector);
  }

  if(fReconstructor->IsWritingClusters()) WriteClusters(-1);

  if(!TestBit(knewDM)){
    delete fDigitsManager;
    fDigitsManager = NULL;
    delete fRawStream;
    fRawStream = NULL;
  }

  AliInfo(Form("Found :: clusters[%d] tracklets[%d] tracks[%d]",
    RecPoints()?RecPoints()->GetEntriesFast():0,
    TrackletsArray()?TrackletsArray()->GetEntriesFast():0,
    TracksArray()?TracksArray()->GetEntriesFast():0));
  return kTRUE;

}

//_____________________________________________________________________________
UChar_t AliTRDclusterizer::GetStatus(Short_t &signal)
{
  //
  // Check if a pad is masked
  //

  UChar_t status = 0;

  if(signal>0 && TESTBIT(signal, 10)){
    CLRBIT(signal, 10);
    for(int ibit=0; ibit<4; ibit++){
      if(TESTBIT(signal, 11+ibit)){
        SETBIT(status, ibit);
        CLRBIT(signal, 11+ibit);
      } 
    }
  }
  return status;
}

//_____________________________________________________________________________
void AliTRDclusterizer::SetPadStatus(const UChar_t status, UChar_t &out) const {
  //
  // Set the pad status into out
  // First three bits are needed for the position encoding
  //
  out |= status << 3;
}

//_____________________________________________________________________________
UChar_t AliTRDclusterizer::GetPadStatus(UChar_t encoding) const {
  //
  // return the staus encoding of the corrupted pad
  //
  return static_cast<UChar_t>(encoding >> 3);
}

//_____________________________________________________________________________
Int_t AliTRDclusterizer::GetCorruption(UChar_t encoding) const {
  //
  // Return the position of the corruption
  //
  return encoding & 7;
}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::MakeClusters(Int_t det)
{
  //
  // Generates the cluster.
  //

  // Get the digits
  fDigits = (AliTRDarrayADC *) fDigitsManager->GetDigits(det); //mod
  fBaseline = fDigitsManager->GetDigitsParam()->GetADCbaseline(det);
  
  // This is to take care of switched off super modules
  if (!fDigits->HasData()) return kFALSE;

  fIndexes = fDigitsManager->GetIndexes(det);
  if (fIndexes->IsAllocated() == kFALSE) {
    AliError("Indexes do not exist!");
    return kFALSE;      
  }

  AliTRDcalibDB* const calibration = AliTRDcalibDB::Instance();
  if (!calibration) {
    AliFatal("No AliTRDcalibDB instance available\n");
    return kFALSE;  
  }

  if (!fReconstructor){
    AliError("Reconstructor not set\n");
    return kFALSE;
  }

  const AliTRDrecoParam *const recoParam = fReconstructor->GetRecoParam();

  fMaxThresh            = recoParam->GetClusMaxThresh();
  fMaxThreshTest        = (recoParam->GetClusMaxThresh()/2+fBaseline);
  fSigThresh            = recoParam->GetClusSigThresh();
  fMinMaxCutSigma       = recoParam->GetMinMaxCutSigma();
  fMinLeftRightCutSigma = recoParam->GetMinLeftRightCutSigma();
  const Int_t iEveryNTB = recoParam->GetRecEveryNTB();

  Int_t istack  = fIndexes->GetStack();
  fLayer  = fIndexes->GetLayer();
  Int_t isector = fIndexes->GetSM();

  // Start clustering in the chamber

  fDet  = AliTRDgeometry::GetDetector(fLayer,istack,isector);
  if (fDet != det) {
    AliError(Form("Detector number missmatch! Request[%03d] RAW[%03d]", det, fDet));
    return kFALSE;
  }

  AliDebug(2, Form("Det[%d] @ Sec[%d] Stk[%d] Ly[%d]", fDet, isector, istack, fLayer));

  // TRD space point transformation
  fTransform->SetDetector(det);

  Int_t    iGeoLayer  = AliGeomManager::kTRD1 + fLayer;
  Int_t    iGeoModule = istack + AliTRDgeometry::Nstack() * isector;
  fVolid      = AliGeomManager::LayerToVolUID(iGeoLayer,iGeoModule); 

  fColMax    = fDigits->GetNcol();
  fTimeTotal = fDigitsManager->GetDigitsParam()->GetNTimeBins(det);

  // Check consistency between Geometry and raw data
  AliTRDpadPlane *pp(fTransform->GetPadPlane());
  Int_t ncols(pp->GetNcols()), nrows(pp->GetNrows());
  if(ncols != fColMax) AliDebug(1, Form("N cols missmatch in Digits for Det[%3d] :: Geom[%3d] RAW[%3d]", fDet, ncols, fColMax));
  if(nrows != fDigits->GetNrow()) AliDebug(1, Form("N rows missmatch in Digits for Det[%3d] :: Geom[%3d] RAW[%3d]", fDet, nrows, fDigits->GetNrow()));
  if(ncols != fIndexes->GetNcol()) AliDebug(1, Form("N cols missmatch in Digits for Det[%3d] :: Geom[%3d] RAW[%3d]", fDet, ncols, fIndexes->GetNcol()));
  if(nrows != fIndexes->GetNrow()) AliDebug(1, Form("N rows missmatch in Digits for Det[%3d] :: Geom[%3d] RAW[%3d]", fDet, nrows, fIndexes->GetNrow()));

  // Check consistency between OCDB and raw data
  Int_t nTimeOCDB = calibration->GetNumberOfTimeBinsDCS();
  if(fReconstructor->IsHLT()){
    if((nTimeOCDB > -1) && (fTimeTotal != nTimeOCDB)){
      AliWarning(Form("Number of timebins does not match OCDB value (RAW[%d] OCDB[%d]), using raw value"
		      ,fTimeTotal,nTimeOCDB));
    }
  }else{
    if(nTimeOCDB == -1){
      AliDebug(1, "Undefined number of timebins in OCDB, using value from raw data.");
      if(!(fTimeTotal>0)){
        AliError(Form("Number of timebins in raw data is negative, skipping chamber[%3d]!", fDet));
        return kFALSE;
      }
    }else if(nTimeOCDB == -2){
      AliError("Mixed number of timebins in OCDB, no reconstruction of TRD data!"); 
      return kFALSE;
    }else if(fTimeTotal != nTimeOCDB){
      AliError(Form("Number of timebins in raw data does not match OCDB value (RAW[%d] OCDB[%d]), skipping chamber[%3d]!"
        ,fTimeTotal,nTimeOCDB, fDet));
      return kFALSE;
    }
  }
  AliDebug(1, Form("Using %2d number of timebins for Det[%03d].", fTimeTotal, fDet));

  // Detector wise calibration object for the gain factors
  const AliTRDCalDet *calGainFactorDet = calibration->GetGainFactorDet();
  // Calibration object with pad wise values for the gain factors
  fCalGainFactorROC      = calibration->GetGainFactorROC(fDet);
  // Calibration value for chamber wise gain factor
  fCalGainFactorDetValue = calGainFactorDet->GetValue(fDet);

  // Detector wise calibration object for the noise
  const AliTRDCalDet *calNoiseDet = calibration->GetNoiseDet();
  // Calibration object with pad wise values for the noise
  fCalNoiseROC           = calibration->GetNoiseROC(fDet);
  // Calibration value for chamber wise noise
  fCalNoiseDetValue      = calNoiseDet->GetValue(fDet);
  
  // Calibration object with the pad status
  fCalPadStatusROC       = calibration->GetPadStatusROC(fDet);
  // Calibration object of the online gain
  fCalOnlGainROC          = 0x0;  
  if (calibration->HasOnlineFilterGain()) {
    fCalOnlGainROC        = calibration->GetOnlineGainTableROC(fDet);
  }

  firstClusterROC = -1;
  fClusterROC     =  0;

  SetBit(kLUT, recoParam->UseLUT());
  SetBit(kGAUS, recoParam->UseGAUS());

  // Apply the gain and the tail cancelation via digital filter
  // Use the configuration from the DCS to find out whether online 
  // tail cancellation was applied
  if ((!calibration->HasOnlineTailCancellation()) &&
      (recoParam->UseTailCancelation())) {
    // save a copy of raw data
    if(TestBit(kRawSignal)){
      if(fDigitsRaw){
        fDigitsRaw->~AliTRDarrayADC();
        new(fDigitsRaw) AliTRDarrayADC(*fDigits);
      } else fDigitsRaw = new AliTRDarrayADC(*fDigits);
    }
    TailCancelation(recoParam);
  }

  MaxStruct curr, last;
  Int_t nMaximas = 0, nCorrupted = 0;

  // Here the clusterfining is happening
  
  for(curr.time = 0; curr.time < fTimeTotal; curr.time+=iEveryNTB){
    while(fIndexes->NextRCIndex(curr.row, curr.col)){
      if(fDigits->GetData(curr.row, curr.col, curr.time) > fMaxThreshTest && IsMaximum(curr, curr.padStatus, &curr.signals[0])){
        if(last.row>-1){
          if(curr.col==last.col+2 && curr.row==last.row && curr.time==last.time) FivePadCluster(last, curr);
          CreateCluster(last);
        }
        last=curr; curr.fivePad=kFALSE;
      }
    }
  }
  if(last.row>-1) CreateCluster(last);

  if(recoParam->GetStreamLevel(AliTRDrecoParam::kClusterizer) > 2 && fReconstructor->IsDebugStreaming()){
    TTreeSRedirector* fDebugStream = fReconstructor->GetDebugStream(AliTRDrecoParam::kClusterizer);
    (*fDebugStream) << "MakeClusters"
      << "Detector="   << det
      << "NMaxima="    << nMaximas
      << "NClusters="  << fClusterROC
      << "NCorrupted=" << nCorrupted
      << "\n";
  }
  if (TestBit(kLabels)) AddLabels();

  return kTRUE;

}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::IsMaximum(const MaxStruct &Max, UChar_t &padStatus, Float_t *const Signals)
{
  //
  // Returns true if this row,col,time combination is a maximum. 
  // Gives back the padStatus and the signals of the center pad and the two neighbouring pads.
  //

  Float_t gain = fCalGainFactorDetValue * fCalGainFactorROC->GetValue(Max.col,Max.row);
  Float_t onlcf = fCalOnlGainROC ? fCalOnlGainROC->GetGainCorrectionFactor(Max.row,Max.col) : 1;
  Signals[1] = (fDigits->GetData(Max.row, Max.col, Max.time) - fBaseline) /(onlcf * gain) + 0.5f;
  if(Signals[1] <= fMaxThresh) return kFALSE;

  if(Max.col < 1 || Max.col + 1 >= fColMax) return kFALSE;

  Float_t noiseMiddleThresh = fMinMaxCutSigma*fCalNoiseDetValue*fCalNoiseROC->GetValue(Max.col, Max.row);
  if (Signals[1] <= noiseMiddleThresh) return kFALSE;  

  Char_t status[3]={
    fCalPadStatusROC->GetStatus(Max.col-1, Max.row)
   ,fCalPadStatusROC->GetStatus(Max.col,   Max.row)
   ,fCalPadStatusROC->GetStatus(Max.col+1, Max.row)
  };

  Short_t signal(0);
  if((signal = fDigits->GetData(Max.row, Max.col-1, Max.time))){
    gain = fCalGainFactorDetValue * fCalGainFactorROC->GetValue(Max.col-1,Max.row);
    onlcf = fCalOnlGainROC ? fCalOnlGainROC->GetGainCorrectionFactor(Max.row,Max.col-1) : 1;
    Signals[0] = (signal - fBaseline) /( onlcf * gain) + 0.5f;
  } else Signals[0] = 0.;
  if((signal = fDigits->GetData(Max.row, Max.col+1, Max.time))){
    gain = fCalGainFactorDetValue * fCalGainFactorROC->GetValue(Max.col+1,Max.row);
    onlcf = fCalOnlGainROC ? fCalOnlGainROC->GetGainCorrectionFactor(Max.row,Max.col+1) : 1;
    Signals[2] = (signal - fBaseline) /( onlcf *  gain) + 0.5f;
  } else Signals[2] = 0.;

  if(!(status[0] | status[1] | status[2])) {//all pads are good
    if ((Signals[2] <= Signals[1]) && (Signals[0] <  Signals[1])) {
      if ((Signals[2] > fSigThresh) || (Signals[0] > fSigThresh)) {
        if(Signals[0]<0) Signals[0]=0.;
        if(Signals[2]<0) Signals[2]=0.;
        Float_t noiseSumThresh = fMinLeftRightCutSigma * fCalNoiseDetValue
                               * fCalNoiseROC->GetValue(Max.col, Max.row);
        if ((Signals[2]+Signals[0]+Signals[1]) <= noiseSumThresh) return kFALSE;
        padStatus = 0;
        return kTRUE;
      }
    }
  } else { // at least one of the pads is bad, and reject candidates with more than 1 problematic pad
    if(Signals[0]<0)Signals[0]=0;
    if(Signals[2]<0)Signals[2]=0;
    if (status[2] && (!(status[0] || status[1])) && Signals[1] > Signals[0] && Signals[0] > fSigThresh) { 
      Signals[2]=0;
      SetPadStatus(status[2], padStatus);
      return kTRUE;
    } 
    else if (status[0] && (!(status[1] || status[2])) && Signals[1] >= Signals[2] && Signals[2] > fSigThresh) {
      Signals[0]=0;
      SetPadStatus(status[0], padStatus);
      return kTRUE;
    }
    else if (status[1] && (!(status[0] || status[2])) && ((Signals[2] > fSigThresh) || (Signals[0] > fSigThresh))) {
      Signals[1] = fMaxThresh;
      SetPadStatus(status[1], padStatus);
      return kTRUE;
    }
  }
  return kFALSE;
}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::FivePadCluster(MaxStruct &ThisMax, MaxStruct &NeighbourMax)
{
  //
  // Look for 5 pad cluster with minimum in the middle
  // Gives back the ratio
  //
  
  if (ThisMax.col >= fColMax - 3) return kFALSE;
  Float_t gain;
  Float_t onlcf;
  if (ThisMax.col < fColMax - 5){
    gain = fCalGainFactorDetValue * fCalGainFactorROC->GetValue(ThisMax.col+4,ThisMax.row);
    onlcf = fCalOnlGainROC ? fCalOnlGainROC->GetGainCorrectionFactor(ThisMax.row,ThisMax.col+4) : 1;
    if (fDigits->GetData(ThisMax.row, ThisMax.col+4, ThisMax.time) - fBaseline >= fSigThresh * gain * onlcf)
      return kFALSE;
  }
  if (ThisMax.col > 1) {
    gain = fCalGainFactorDetValue * fCalGainFactorROC->GetValue(ThisMax.col-2,ThisMax.row);
    onlcf = fCalOnlGainROC ? fCalOnlGainROC->GetGainCorrectionFactor(ThisMax.row,ThisMax.col-2) : 1;
    if (fDigits->GetData(ThisMax.row, ThisMax.col-2, ThisMax.time) - fBaseline >= fSigThresh * gain * onlcf)
      return kFALSE;
  }
  
  const Float_t kEpsilon = 0.01;
  Double_t padSignal[5] = {ThisMax.signals[0], ThisMax.signals[1], ThisMax.signals[2],
      NeighbourMax.signals[1], NeighbourMax.signals[2]};
  
  // Unfold the two maxima and set the signal on 
  // the overlapping pad to the ratio
  Float_t ratio = Unfold(kEpsilon,fLayer,padSignal);
  ThisMax.signals[2] = ThisMax.signals[2]*ratio + 0.5f;
  NeighbourMax.signals[0] = NeighbourMax.signals[0]*(1-ratio) + 0.5f;
  ThisMax.fivePad=kTRUE;
  NeighbourMax.fivePad=kTRUE;
  return kTRUE;

}

//_____________________________________________________________________________
void AliTRDclusterizer::CreateCluster(const MaxStruct &Max)
{
  //
  // Creates a cluster at the given position and saves it in RecPoints
  //

  Int_t nPadCount = 1;
  Short_t signals[7] = { 0, 0, (Short_t)Max.signals[0], (Short_t)Max.signals[1], (Short_t)Max.signals[2], 0, 0 };
  if(!fReconstructor->IsHLT()) CalcAdditionalInfo(Max, signals, nPadCount);

  AliTRDcluster cluster(fDet, ((UChar_t) Max.col), ((UChar_t) Max.row), ((UChar_t) Max.time), signals, fVolid);
  cluster.SetNPads(nPadCount);
  cluster.SetQ(Max.signals[0]+Max.signals[1]+Max.signals[2]);
  if(TestBit(kLUT)) cluster.SetRPhiMethod(AliTRDcluster::kLUT);
  else if(TestBit(kGAUS)) cluster.SetRPhiMethod(AliTRDcluster::kGAUS);
  else cluster.SetRPhiMethod(AliTRDcluster::kCOG);

  cluster.SetFivePad(Max.fivePad);
  // set pads status for the cluster
  UChar_t maskPosition = GetCorruption(Max.padStatus);
  if (maskPosition) { 
    cluster.SetPadMaskedPosition(maskPosition);
    cluster.SetPadMaskedStatus(GetPadStatus(Max.padStatus));
  }
  cluster.SetXcorr(fReconstructor->UseClusterRadialCorrection());

  // Transform the local cluster coordinates into calibrated 
  // space point positions defined in the local tracking system.
  // Here the calibration for T0, Vdrift and ExB is applied as well.
  if(!TestBit(kSkipTrafo)) if(!fTransform->Transform(&cluster)) return;
  // Store raw signals in cluster. This MUST be called after position reconstruction !
  // Xianguo Lu and Alex Bercuci 19.03.2012
  if(TestBit(kRawSignal) && fDigitsRaw){
    Float_t tmp(0.), kMaxShortVal(32767.); // protect against data overflow due to wrong gain calibration
    Short_t rawSignal[7] = {0};
    for(Int_t ipad(Max.col-3), iRawId(0); ipad<=Max.col+3; ipad++, iRawId++){
      if(ipad<0 || ipad>=fColMax) continue;
      if(!fCalOnlGainROC){
        rawSignal[iRawId] = fDigitsRaw->GetData(Max.row, ipad, Max.time);
        continue;
      }
      // Deconvolute online gain calibration when available
      // Alex Bercuci 27.04.2012
      tmp = (fDigitsRaw->GetData(Max.row, ipad, Max.time) - fBaseline)/fCalOnlGainROC->GetGainCorrectionFactor(Max.row, ipad) + 0.5f;
      rawSignal[iRawId] = (Short_t)TMath::Min(tmp, kMaxShortVal);
    }
    cluster.SetSignals(rawSignal, kTRUE);
  }
  // Temporarily store the Max.Row, column and time bin of the center pad
  // Used to later on assign the track indices
  cluster.SetLabel(Max.row, 0);
  cluster.SetLabel(Max.col, 1);
  cluster.SetLabel(Max.time,2);

  //needed for HLT reconstruction
  AddClusterToArray(&cluster);

  // Store the index of the first cluster in the current ROC
  if (firstClusterROC < 0) firstClusterROC = fNoOfClusters;
  
  fNoOfClusters++;
  fClusterROC++;
}

//_____________________________________________________________________________
void AliTRDclusterizer::CalcAdditionalInfo(const MaxStruct &Max, Short_t *const signals, Int_t &nPadCount)
{
// Calculate number of pads/cluster and
// ADC signals at position 0, 1, 5 and 6

  Float_t tmp(0.), kMaxShortVal(32767.); // protect against data overflow due to wrong gain calibration
  Float_t gain(1.); Float_t onlcf(1.); Short_t signal(0);
  // Store the amplitudes of the pads in the cluster for later analysis
  // and check whether one of these pads is masked in the database
  signals[3]=Max.signals[1];
  Int_t ipad(1), jpad(0);
  // Look to the right
  while((jpad = Max.col-ipad)){
    if(!(signal = fDigits->GetData(Max.row, jpad, Max.time))) break; // empty digit !
    gain = fCalGainFactorDetValue * fCalGainFactorROC->GetValue(jpad, Max.row);
    onlcf = fCalOnlGainROC ? fCalOnlGainROC->GetGainCorrectionFactor(Max.row,jpad) : 1;
    tmp = (signal - fBaseline) / (onlcf * gain) + 0.5f;
    signal = (Short_t)TMath::Min(tmp, kMaxShortVal);
    if(signal<fSigThresh) break; // signal under threshold
    nPadCount++;
    if(ipad<=3) signals[3 - ipad] = signal;
    ipad++;
  }
  ipad=1;
  // Look to the left
  while((jpad = Max.col+ipad)<fColMax){
    if(!(signal = fDigits->GetData(Max.row, jpad, Max.time))) break; // empty digit !
    gain = fCalGainFactorDetValue * fCalGainFactorROC->GetValue(jpad, Max.row);
    onlcf = fCalOnlGainROC ? fCalOnlGainROC->GetGainCorrectionFactor(Max.row,jpad) : 1;
    tmp = (signal - fBaseline) / (onlcf * gain) + 0.5f;
    signal = (Short_t)TMath::Min(tmp, kMaxShortVal);
    if(signal<fSigThresh) break; // signal under threshold
    nPadCount++;
    if(ipad<=3) signals[3 + ipad] = signal;
    ipad++;
  }

  AliDebug(4, Form("Signals[%3d %3d %3d %3d %3d %3d %3d] Npads[%d]."
    , signals[0], signals[1], signals[2], signals[3], signals[4], signals[5], signals[6], nPadCount));
}

//_____________________________________________________________________________
void AliTRDclusterizer::AddClusterToArray(AliTRDcluster* cluster)
{
  //
  // Add a cluster to the array
  //

  Int_t n = RecPoints()->GetEntriesFast();
  if(n!=fNoOfClusters)AliError(Form("fNoOfClusters != RecPoints()->GetEntriesFast %i != %i \n", fNoOfClusters, n));
  new((*RecPoints())[n]) AliTRDcluster(*cluster);
}

//_____________________________________________________________________________
Bool_t AliTRDclusterizer::AddLabels()
{
  //
  // Add the track indices to the found clusters
  //
  
  const Int_t   kNclus  = 3;  
  const Int_t   kNdict  = AliTRDdigitsManager::kNDict;
  const Int_t   kNtrack = kNdict * kNclus;

  Int_t iClusterROC = 0;

  Int_t row  = 0;
  Int_t col  = 0;
  Int_t time = 0;
  Int_t iPad = 0;

  // Temporary array to collect the track indices
  Int_t *idxTracks = new Int_t[kNtrack*fClusterROC];

  // Loop through the dictionary arrays one-by-one
  // to keep memory consumption low
  AliTRDarrayDictionary *tracksIn(NULL);  //mod
  for (Int_t iDict = 0; iDict < kNdict; iDict++) {

    // tracksIn should be expanded beforehand!
    tracksIn = (AliTRDarrayDictionary *) fDigitsManager->GetDictionary(fDet,iDict);

    // Loop though the clusters found in this ROC
    for (iClusterROC = 0; iClusterROC < fClusterROC; iClusterROC++) {

      AliTRDcluster *cluster = (AliTRDcluster *)
                               RecPoints()->UncheckedAt(firstClusterROC+iClusterROC);
      row  = cluster->GetLabel(0);
      col  = cluster->GetLabel(1);
      time = cluster->GetLabel(2);

      for (iPad = 0; iPad < kNclus; iPad++) {
        Int_t iPadCol = col - 1 + iPad;
        Int_t index   = tracksIn->GetData(row,iPadCol,time);  //Modification of -1 in Track
        idxTracks[3*iPad+iDict + iClusterROC*kNtrack] = index;     
      }

    }

  }

  // Copy the track indices into the cluster
  // Loop though the clusters found in this ROC
  for (iClusterROC = 0; iClusterROC < fClusterROC; iClusterROC++) {

    AliTRDcluster *cluster = (AliTRDcluster *)
      RecPoints()->UncheckedAt(firstClusterROC+iClusterROC);
    cluster->SetLabel(-9999,0);
    cluster->SetLabel(-9999,1);
    cluster->SetLabel(-9999,2);
  
    cluster->AddTrackIndex(&idxTracks[iClusterROC*kNtrack]);

  }

  delete [] idxTracks;

  return kTRUE;

}

//_____________________________________________________________________________
Float_t AliTRDclusterizer::Unfold(Double_t eps, Int_t layer, const Double_t *const padSignal) const
{
  //
  // Method to unfold neighbouring maxima.
  // The charge ratio on the overlapping pad is calculated
  // until there is no more change within the range given by eps.
  // The resulting ratio is then returned to the calling method.
  //

  AliTRDcalibDB *calibration = AliTRDcalibDB::Instance();
  if (!calibration) {
    AliError("No AliTRDcalibDB instance available\n");
    return kFALSE;  
  }
  
  Int_t   irc                = 0;
  Int_t   itStep             = 0;                 // Count iteration steps

  Double_t ratio             = 0.5;               // Start value for ratio
  Double_t prevRatio         = 0.0;               // Store previous ratio

  Double_t newLeftSignal[3]  = { 0.0, 0.0, 0.0 }; // Array to store left cluster signal
  Double_t newRightSignal[3] = { 0.0, 0.0, 0.0 }; // Array to store right cluster signal
  Double_t newSignal[3]      = { 0.0, 0.0, 0.0 };

  // Start the iteration
  while ((TMath::Abs(prevRatio - ratio) > eps) && (itStep < 10)) {

    itStep++;
    prevRatio = ratio;

    // Cluster position according to charge ratio
    Double_t maxLeft  = (ratio*padSignal[2] - padSignal[0]) 
                      / (padSignal[0] + padSignal[1] + ratio * padSignal[2]);
    Double_t maxRight = (padSignal[4] - (1-ratio)*padSignal[2]) 
                      / ((1.0 - ratio)*padSignal[2] + padSignal[3] + padSignal[4]);

    // Set cluster charge ratio
    irc = calibration->PadResponse(1.0, maxLeft, layer, newSignal);
    Double_t ampLeft  = padSignal[1] / newSignal[1];
    irc = calibration->PadResponse(1.0, maxRight, layer, newSignal);
    Double_t ampRight = padSignal[3] / newSignal[1];

    // Apply pad response to parameters
    irc = calibration->PadResponse(ampLeft ,maxLeft ,layer,newLeftSignal );
    irc = calibration->PadResponse(ampRight,maxRight,layer,newRightSignal);

    // Calculate new overlapping ratio
    // Coverity
    if (irc != 0) {
      ratio = TMath::Min((Double_t) 1.0
                        ,newLeftSignal[2] / (newLeftSignal[2] + newRightSignal[0]));
    }

  }

  return ratio;

}

//_____________________________________________________________________________
void AliTRDclusterizer::TailCancelation(const AliTRDrecoParam* const recoParam)
{
  //
  // Applies the tail cancelation
  //

  Int_t nexp = recoParam->GetTCnexp();
  if(!nexp) return;
  
  Int_t iRow  = 0;
  Int_t iCol  = 0;
  Int_t iTime = 0;

  TTreeSRedirector *fDebugStream = fReconstructor->GetDebugStream(AliTRDrecoParam::kClusterizer);
  Bool_t debugStreaming = recoParam->GetStreamLevel(AliTRDrecoParam::kClusterizer) > 7 && fReconstructor->IsDebugStreaming();
  while(fIndexes->NextRCIndex(iRow, iCol))
    {
      // if corrupted then don't make the tail cancallation
      if (fCalPadStatusROC->GetStatus(iCol, iRow)) continue;

      if(debugStreaming){
      	for (iTime = 0; iTime < fTimeTotal; iTime++) 
      	  (*fDebugStream) << "TailCancellation"
      			  << "col="  << iCol
      			  << "row="  << iRow
      			  << "\n";
      }
      
      // Apply the tail cancelation via the digital filter
      //DeConvExp(fDigits->GetDataAddress(iRow,iCol),fTimeTotal,nexp);
      ApplyTCTM(fDigits->GetDataAddress(iRow,iCol),fTimeTotal,nexp);
    } // while irow icol

  return;

}


//_____________________________________________________________________________
void AliTRDclusterizer::ApplyTCTM(Short_t *const arr, const Int_t nTime, const Int_t nexp) 
{
  //
  // Steer tail cancellation
  //


  switch(nexp) {
  case 1:
  case 2:
    DeConvExp(arr,nTime,nexp);
    break;
  case -1:
    ConvExp(arr,nTime);
    break;
  case -2:
    DeConvExp(arr,nTime,1);
    ConvExp(arr,nTime);
    break;
  default:
    break;
  }
}


//_____________________________________________________________________________
void AliTRDclusterizer::ConvExp(Short_t *const arr, const Int_t nTime)
{
  //
  // Tail maker
  //

  // Initialization (coefficient = alpha, rates = lambda)
  Float_t slope = 1.0;
  Float_t coeff = 0.5;
  Float_t rate;

  Double_t par[4];
  fReconstructor->GetRecoParam()->GetTCParams(par);
  slope = par[1];
  coeff = par[3];  

  Double_t dt = 0.1;

  rate = TMath::Exp(-dt/(slope));
   
  Float_t reminder =  .0;
  Float_t correction = 0.0;
  Float_t result     = 0.0;

  for (int i = nTime-1; i >= 0; i--) {

    result = arr[i] + correction - fBaseline;    // No rescaling
    arr[i] = (Short_t)(result + fBaseline + 0.5f);

    correction = 0.0;
    
    correction += reminder = rate * (reminder + coeff * result);
  }
}


//_____________________________________________________________________________
void AliTRDclusterizer::DeConvExp(Short_t *const arr, const Int_t nTime, const Int_t nexp)
{
  //
  // Tail cancellation by deconvolution for PASA v4 TRF
  //

  Float_t rates[2];
  Float_t coefficients[2];

  // Initialization (coefficient = alpha, rates = lambda)
  Float_t r1 = 1.0;
  Float_t r2 = 1.0;
  Float_t c1 = 0.5;
  Float_t c2 = 0.5;

  if (nexp == 1) {   // 1 Exponentials
    r1 = 1.156;
    r2 = 0.130;
    c1 = 0.066;
    c2 = 0.000;
  }
  if (nexp == 2) {   // 2 Exponentials
    Double_t par[4];
    fReconstructor->GetRecoParam()->GetTCParams(par);
    r1 = par[0];//1.156;
    r2 = par[1];//0.130;
    c1 = par[2];//0.114;
    c2 = par[3];//0.624;
  }

  coefficients[0] = c1;
  coefficients[1] = c2;

  Double_t dt = 0.1;

  rates[0] = TMath::Exp(-dt/(r1));
  rates[1] = (nexp == 1) ? .0 : TMath::Exp(-dt/(r2));
  
  Float_t reminder[2] = { .0, .0 };
  Float_t correction = 0.0;
  Float_t result     = 0.0;

  for (int i = 0; i < nTime; i++) {

    result = arr[i] - correction - fBaseline;    // No rescaling
    arr[i] = (Short_t)(result + fBaseline + 0.5f);

    correction = 0.0;
    for (int k = 0; k < 2; k++) {
      correction += reminder[k] = rates[k] * (reminder[k] + coefficients[k] * result);
    }
  }
}

//_____________________________________________________________________________
TClonesArray *AliTRDclusterizer::RecPoints() 
{
  //
  // Returns the list of rec points
  //

  fRecPoints = AliTRDReconstructor::GetClusters();
  if (!fRecPoints) AliError("Missing cluster array");
  return fRecPoints;
}

//_____________________________________________________________________________
TClonesArray *AliTRDclusterizer::TrackletsArray(const TString &trkltype)
{
  //
  // Returns the array of on-line tracklets
  //
  fTracklets = AliTRDReconstructor::GetTracklets(trkltype.Data());
  if (!fTracklets) AliError("Missing online tracklets array");
  return fTracklets;
}

//_____________________________________________________________________________
TClonesArray* AliTRDclusterizer::TracksArray()
{
  // return array of GTU tracks (create TClonesArray if necessary)

  fTracks = AliTRDReconstructor::GetTracks();
  if (!fTracks) AliError("Missing online tracks array");
  return fTracks;
}
 AliTRDclusterizer.cxx:1
 AliTRDclusterizer.cxx:2
 AliTRDclusterizer.cxx:3
 AliTRDclusterizer.cxx:4
 AliTRDclusterizer.cxx:5
 AliTRDclusterizer.cxx:6
 AliTRDclusterizer.cxx:7
 AliTRDclusterizer.cxx:8
 AliTRDclusterizer.cxx:9
 AliTRDclusterizer.cxx:10
 AliTRDclusterizer.cxx:11
 AliTRDclusterizer.cxx:12
 AliTRDclusterizer.cxx:13
 AliTRDclusterizer.cxx:14
 AliTRDclusterizer.cxx:15
 AliTRDclusterizer.cxx:16
 AliTRDclusterizer.cxx:17
 AliTRDclusterizer.cxx:18
 AliTRDclusterizer.cxx:19
 AliTRDclusterizer.cxx:20
 AliTRDclusterizer.cxx:21
 AliTRDclusterizer.cxx:22
 AliTRDclusterizer.cxx:23
 AliTRDclusterizer.cxx:24
 AliTRDclusterizer.cxx:25
 AliTRDclusterizer.cxx:26
 AliTRDclusterizer.cxx:27
 AliTRDclusterizer.cxx:28
 AliTRDclusterizer.cxx:29
 AliTRDclusterizer.cxx:30
 AliTRDclusterizer.cxx:31
 AliTRDclusterizer.cxx:32
 AliTRDclusterizer.cxx:33
 AliTRDclusterizer.cxx:34
 AliTRDclusterizer.cxx:35
 AliTRDclusterizer.cxx:36
 AliTRDclusterizer.cxx:37
 AliTRDclusterizer.cxx:38
 AliTRDclusterizer.cxx:39
 AliTRDclusterizer.cxx:40
 AliTRDclusterizer.cxx:41
 AliTRDclusterizer.cxx:42
 AliTRDclusterizer.cxx:43
 AliTRDclusterizer.cxx:44
 AliTRDclusterizer.cxx:45
 AliTRDclusterizer.cxx:46
 AliTRDclusterizer.cxx:47
 AliTRDclusterizer.cxx:48
 AliTRDclusterizer.cxx:49
 AliTRDclusterizer.cxx:50
 AliTRDclusterizer.cxx:51
 AliTRDclusterizer.cxx:52
 AliTRDclusterizer.cxx:53
 AliTRDclusterizer.cxx:54
 AliTRDclusterizer.cxx:55
 AliTRDclusterizer.cxx:56
 AliTRDclusterizer.cxx:57
 AliTRDclusterizer.cxx:58
 AliTRDclusterizer.cxx:59
 AliTRDclusterizer.cxx:60
 AliTRDclusterizer.cxx:61
 AliTRDclusterizer.cxx:62
 AliTRDclusterizer.cxx:63
 AliTRDclusterizer.cxx:64
 AliTRDclusterizer.cxx:65
 AliTRDclusterizer.cxx:66
 AliTRDclusterizer.cxx:67
 AliTRDclusterizer.cxx:68
 AliTRDclusterizer.cxx:69
 AliTRDclusterizer.cxx:70
 AliTRDclusterizer.cxx:71
 AliTRDclusterizer.cxx:72
 AliTRDclusterizer.cxx:73
 AliTRDclusterizer.cxx:74
 AliTRDclusterizer.cxx:75
 AliTRDclusterizer.cxx:76
 AliTRDclusterizer.cxx:77
 AliTRDclusterizer.cxx:78
 AliTRDclusterizer.cxx:79
 AliTRDclusterizer.cxx:80
 AliTRDclusterizer.cxx:81
 AliTRDclusterizer.cxx:82
 AliTRDclusterizer.cxx:83
 AliTRDclusterizer.cxx:84
 AliTRDclusterizer.cxx:85
 AliTRDclusterizer.cxx:86
 AliTRDclusterizer.cxx:87
 AliTRDclusterizer.cxx:88
 AliTRDclusterizer.cxx:89
 AliTRDclusterizer.cxx:90
 AliTRDclusterizer.cxx:91
 AliTRDclusterizer.cxx:92
 AliTRDclusterizer.cxx:93
 AliTRDclusterizer.cxx:94
 AliTRDclusterizer.cxx:95
 AliTRDclusterizer.cxx:96
 AliTRDclusterizer.cxx:97
 AliTRDclusterizer.cxx:98
 AliTRDclusterizer.cxx:99
 AliTRDclusterizer.cxx:100
 AliTRDclusterizer.cxx:101
 AliTRDclusterizer.cxx:102
 AliTRDclusterizer.cxx:103
 AliTRDclusterizer.cxx:104
 AliTRDclusterizer.cxx:105
 AliTRDclusterizer.cxx:106
 AliTRDclusterizer.cxx:107
 AliTRDclusterizer.cxx:108
 AliTRDclusterizer.cxx:109
 AliTRDclusterizer.cxx:110
 AliTRDclusterizer.cxx:111
 AliTRDclusterizer.cxx:112
 AliTRDclusterizer.cxx:113
 AliTRDclusterizer.cxx:114
 AliTRDclusterizer.cxx:115
 AliTRDclusterizer.cxx:116
 AliTRDclusterizer.cxx:117
 AliTRDclusterizer.cxx:118
 AliTRDclusterizer.cxx:119
 AliTRDclusterizer.cxx:120
 AliTRDclusterizer.cxx:121
 AliTRDclusterizer.cxx:122
 AliTRDclusterizer.cxx:123
 AliTRDclusterizer.cxx:124
 AliTRDclusterizer.cxx:125
 AliTRDclusterizer.cxx:126
 AliTRDclusterizer.cxx:127
 AliTRDclusterizer.cxx:128
 AliTRDclusterizer.cxx:129
 AliTRDclusterizer.cxx:130
 AliTRDclusterizer.cxx:131
 AliTRDclusterizer.cxx:132
 AliTRDclusterizer.cxx:133
 AliTRDclusterizer.cxx:134
 AliTRDclusterizer.cxx:135
 AliTRDclusterizer.cxx:136
 AliTRDclusterizer.cxx:137
 AliTRDclusterizer.cxx:138
 AliTRDclusterizer.cxx:139
 AliTRDclusterizer.cxx:140
 AliTRDclusterizer.cxx:141
 AliTRDclusterizer.cxx:142
 AliTRDclusterizer.cxx:143
 AliTRDclusterizer.cxx:144
 AliTRDclusterizer.cxx:145
 AliTRDclusterizer.cxx:146
 AliTRDclusterizer.cxx:147
 AliTRDclusterizer.cxx:148
 AliTRDclusterizer.cxx:149
 AliTRDclusterizer.cxx:150
 AliTRDclusterizer.cxx:151
 AliTRDclusterizer.cxx:152
 AliTRDclusterizer.cxx:153
 AliTRDclusterizer.cxx:154
 AliTRDclusterizer.cxx:155
 AliTRDclusterizer.cxx:156
 AliTRDclusterizer.cxx:157
 AliTRDclusterizer.cxx:158
 AliTRDclusterizer.cxx:159
 AliTRDclusterizer.cxx:160
 AliTRDclusterizer.cxx:161
 AliTRDclusterizer.cxx:162
 AliTRDclusterizer.cxx:163
 AliTRDclusterizer.cxx:164
 AliTRDclusterizer.cxx:165
 AliTRDclusterizer.cxx:166
 AliTRDclusterizer.cxx:167
 AliTRDclusterizer.cxx:168
 AliTRDclusterizer.cxx:169
 AliTRDclusterizer.cxx:170
 AliTRDclusterizer.cxx:171
 AliTRDclusterizer.cxx:172
 AliTRDclusterizer.cxx:173
 AliTRDclusterizer.cxx:174
 AliTRDclusterizer.cxx:175
 AliTRDclusterizer.cxx:176
 AliTRDclusterizer.cxx:177
 AliTRDclusterizer.cxx:178
 AliTRDclusterizer.cxx:179
 AliTRDclusterizer.cxx:180
 AliTRDclusterizer.cxx:181
 AliTRDclusterizer.cxx:182
 AliTRDclusterizer.cxx:183
 AliTRDclusterizer.cxx:184
 AliTRDclusterizer.cxx:185
 AliTRDclusterizer.cxx:186
 AliTRDclusterizer.cxx:187
 AliTRDclusterizer.cxx:188
 AliTRDclusterizer.cxx:189
 AliTRDclusterizer.cxx:190
 AliTRDclusterizer.cxx:191
 AliTRDclusterizer.cxx:192
 AliTRDclusterizer.cxx:193
 AliTRDclusterizer.cxx:194
 AliTRDclusterizer.cxx:195
 AliTRDclusterizer.cxx:196
 AliTRDclusterizer.cxx:197
 AliTRDclusterizer.cxx:198
 AliTRDclusterizer.cxx:199
 AliTRDclusterizer.cxx:200
 AliTRDclusterizer.cxx:201
 AliTRDclusterizer.cxx:202
 AliTRDclusterizer.cxx:203
 AliTRDclusterizer.cxx:204
 AliTRDclusterizer.cxx:205
 AliTRDclusterizer.cxx:206
 AliTRDclusterizer.cxx:207
 AliTRDclusterizer.cxx:208
 AliTRDclusterizer.cxx:209
 AliTRDclusterizer.cxx:210
 AliTRDclusterizer.cxx:211
 AliTRDclusterizer.cxx:212
 AliTRDclusterizer.cxx:213
 AliTRDclusterizer.cxx:214
 AliTRDclusterizer.cxx:215
 AliTRDclusterizer.cxx:216
 AliTRDclusterizer.cxx:217
 AliTRDclusterizer.cxx:218
 AliTRDclusterizer.cxx:219
 AliTRDclusterizer.cxx:220
 AliTRDclusterizer.cxx:221
 AliTRDclusterizer.cxx:222
 AliTRDclusterizer.cxx:223
 AliTRDclusterizer.cxx:224
 AliTRDclusterizer.cxx:225
 AliTRDclusterizer.cxx:226
 AliTRDclusterizer.cxx:227
 AliTRDclusterizer.cxx:228
 AliTRDclusterizer.cxx:229
 AliTRDclusterizer.cxx:230
 AliTRDclusterizer.cxx:231
 AliTRDclusterizer.cxx:232
 AliTRDclusterizer.cxx:233
 AliTRDclusterizer.cxx:234
 AliTRDclusterizer.cxx:235
 AliTRDclusterizer.cxx:236
 AliTRDclusterizer.cxx:237
 AliTRDclusterizer.cxx:238
 AliTRDclusterizer.cxx:239
 AliTRDclusterizer.cxx:240
 AliTRDclusterizer.cxx:241
 AliTRDclusterizer.cxx:242
 AliTRDclusterizer.cxx:243
 AliTRDclusterizer.cxx:244
 AliTRDclusterizer.cxx:245
 AliTRDclusterizer.cxx:246
 AliTRDclusterizer.cxx:247
 AliTRDclusterizer.cxx:248
 AliTRDclusterizer.cxx:249
 AliTRDclusterizer.cxx:250
 AliTRDclusterizer.cxx:251
 AliTRDclusterizer.cxx:252
 AliTRDclusterizer.cxx:253
 AliTRDclusterizer.cxx:254
 AliTRDclusterizer.cxx:255
 AliTRDclusterizer.cxx:256
 AliTRDclusterizer.cxx:257
 AliTRDclusterizer.cxx:258
 AliTRDclusterizer.cxx:259
 AliTRDclusterizer.cxx:260
 AliTRDclusterizer.cxx:261
 AliTRDclusterizer.cxx:262
 AliTRDclusterizer.cxx:263
 AliTRDclusterizer.cxx:264
 AliTRDclusterizer.cxx:265
 AliTRDclusterizer.cxx:266
 AliTRDclusterizer.cxx:267
 AliTRDclusterizer.cxx:268
 AliTRDclusterizer.cxx:269
 AliTRDclusterizer.cxx:270
 AliTRDclusterizer.cxx:271
 AliTRDclusterizer.cxx:272
 AliTRDclusterizer.cxx:273
 AliTRDclusterizer.cxx:274
 AliTRDclusterizer.cxx:275
 AliTRDclusterizer.cxx:276
 AliTRDclusterizer.cxx:277
 AliTRDclusterizer.cxx:278
 AliTRDclusterizer.cxx:279
 AliTRDclusterizer.cxx:280
 AliTRDclusterizer.cxx:281
 AliTRDclusterizer.cxx:282
 AliTRDclusterizer.cxx:283
 AliTRDclusterizer.cxx:284
 AliTRDclusterizer.cxx:285
 AliTRDclusterizer.cxx:286
 AliTRDclusterizer.cxx:287
 AliTRDclusterizer.cxx:288
 AliTRDclusterizer.cxx:289
 AliTRDclusterizer.cxx:290
 AliTRDclusterizer.cxx:291
 AliTRDclusterizer.cxx:292
 AliTRDclusterizer.cxx:293
 AliTRDclusterizer.cxx:294
 AliTRDclusterizer.cxx:295
 AliTRDclusterizer.cxx:296
 AliTRDclusterizer.cxx:297
 AliTRDclusterizer.cxx:298
 AliTRDclusterizer.cxx:299
 AliTRDclusterizer.cxx:300
 AliTRDclusterizer.cxx:301
 AliTRDclusterizer.cxx:302
 AliTRDclusterizer.cxx:303
 AliTRDclusterizer.cxx:304
 AliTRDclusterizer.cxx:305
 AliTRDclusterizer.cxx:306
 AliTRDclusterizer.cxx:307
 AliTRDclusterizer.cxx:308
 AliTRDclusterizer.cxx:309
 AliTRDclusterizer.cxx:310
 AliTRDclusterizer.cxx:311
 AliTRDclusterizer.cxx:312
 AliTRDclusterizer.cxx:313
 AliTRDclusterizer.cxx:314
 AliTRDclusterizer.cxx:315
 AliTRDclusterizer.cxx:316
 AliTRDclusterizer.cxx:317
 AliTRDclusterizer.cxx:318
 AliTRDclusterizer.cxx:319
 AliTRDclusterizer.cxx:320
 AliTRDclusterizer.cxx:321
 AliTRDclusterizer.cxx:322
 AliTRDclusterizer.cxx:323
 AliTRDclusterizer.cxx:324
 AliTRDclusterizer.cxx:325
 AliTRDclusterizer.cxx:326
 AliTRDclusterizer.cxx:327
 AliTRDclusterizer.cxx:328
 AliTRDclusterizer.cxx:329
 AliTRDclusterizer.cxx:330
 AliTRDclusterizer.cxx:331
 AliTRDclusterizer.cxx:332
 AliTRDclusterizer.cxx:333
 AliTRDclusterizer.cxx:334
 AliTRDclusterizer.cxx:335
 AliTRDclusterizer.cxx:336
 AliTRDclusterizer.cxx:337
 AliTRDclusterizer.cxx:338
 AliTRDclusterizer.cxx:339
 AliTRDclusterizer.cxx:340
 AliTRDclusterizer.cxx:341
 AliTRDclusterizer.cxx:342
 AliTRDclusterizer.cxx:343
 AliTRDclusterizer.cxx:344
 AliTRDclusterizer.cxx:345
 AliTRDclusterizer.cxx:346
 AliTRDclusterizer.cxx:347
 AliTRDclusterizer.cxx:348
 AliTRDclusterizer.cxx:349
 AliTRDclusterizer.cxx:350
 AliTRDclusterizer.cxx:351
 AliTRDclusterizer.cxx:352
 AliTRDclusterizer.cxx:353
 AliTRDclusterizer.cxx:354
 AliTRDclusterizer.cxx:355
 AliTRDclusterizer.cxx:356
 AliTRDclusterizer.cxx:357
 AliTRDclusterizer.cxx:358
 AliTRDclusterizer.cxx:359
 AliTRDclusterizer.cxx:360
 AliTRDclusterizer.cxx:361
 AliTRDclusterizer.cxx:362
 AliTRDclusterizer.cxx:363
 AliTRDclusterizer.cxx:364
 AliTRDclusterizer.cxx:365
 AliTRDclusterizer.cxx:366
 AliTRDclusterizer.cxx:367
 AliTRDclusterizer.cxx:368
 AliTRDclusterizer.cxx:369
 AliTRDclusterizer.cxx:370
 AliTRDclusterizer.cxx:371
 AliTRDclusterizer.cxx:372
 AliTRDclusterizer.cxx:373
 AliTRDclusterizer.cxx:374
 AliTRDclusterizer.cxx:375
 AliTRDclusterizer.cxx:376
 AliTRDclusterizer.cxx:377
 AliTRDclusterizer.cxx:378
 AliTRDclusterizer.cxx:379
 AliTRDclusterizer.cxx:380
 AliTRDclusterizer.cxx:381
 AliTRDclusterizer.cxx:382
 AliTRDclusterizer.cxx:383
 AliTRDclusterizer.cxx:384
 AliTRDclusterizer.cxx:385
 AliTRDclusterizer.cxx:386
 AliTRDclusterizer.cxx:387
 AliTRDclusterizer.cxx:388
 AliTRDclusterizer.cxx:389
 AliTRDclusterizer.cxx:390
 AliTRDclusterizer.cxx:391
 AliTRDclusterizer.cxx:392
 AliTRDclusterizer.cxx:393
 AliTRDclusterizer.cxx:394
 AliTRDclusterizer.cxx:395
 AliTRDclusterizer.cxx:396
 AliTRDclusterizer.cxx:397
 AliTRDclusterizer.cxx:398
 AliTRDclusterizer.cxx:399
 AliTRDclusterizer.cxx:400
 AliTRDclusterizer.cxx:401
 AliTRDclusterizer.cxx:402
 AliTRDclusterizer.cxx:403
 AliTRDclusterizer.cxx:404
 AliTRDclusterizer.cxx:405
 AliTRDclusterizer.cxx:406
 AliTRDclusterizer.cxx:407
 AliTRDclusterizer.cxx:408
 AliTRDclusterizer.cxx:409
 AliTRDclusterizer.cxx:410
 AliTRDclusterizer.cxx:411
 AliTRDclusterizer.cxx:412
 AliTRDclusterizer.cxx:413
 AliTRDclusterizer.cxx:414
 AliTRDclusterizer.cxx:415
 AliTRDclusterizer.cxx:416
 AliTRDclusterizer.cxx:417
 AliTRDclusterizer.cxx:418
 AliTRDclusterizer.cxx:419
 AliTRDclusterizer.cxx:420
 AliTRDclusterizer.cxx:421
 AliTRDclusterizer.cxx:422
 AliTRDclusterizer.cxx:423
 AliTRDclusterizer.cxx:424
 AliTRDclusterizer.cxx:425
 AliTRDclusterizer.cxx:426
 AliTRDclusterizer.cxx:427
 AliTRDclusterizer.cxx:428
 AliTRDclusterizer.cxx:429
 AliTRDclusterizer.cxx:430
 AliTRDclusterizer.cxx:431
 AliTRDclusterizer.cxx:432
 AliTRDclusterizer.cxx:433
 AliTRDclusterizer.cxx:434
 AliTRDclusterizer.cxx:435
 AliTRDclusterizer.cxx:436
 AliTRDclusterizer.cxx:437
 AliTRDclusterizer.cxx:438
 AliTRDclusterizer.cxx:439
 AliTRDclusterizer.cxx:440
 AliTRDclusterizer.cxx:441
 AliTRDclusterizer.cxx:442
 AliTRDclusterizer.cxx:443
 AliTRDclusterizer.cxx:444
 AliTRDclusterizer.cxx:445
 AliTRDclusterizer.cxx:446
 AliTRDclusterizer.cxx:447
 AliTRDclusterizer.cxx:448
 AliTRDclusterizer.cxx:449
 AliTRDclusterizer.cxx:450
 AliTRDclusterizer.cxx:451
 AliTRDclusterizer.cxx:452
 AliTRDclusterizer.cxx:453
 AliTRDclusterizer.cxx:454
 AliTRDclusterizer.cxx:455
 AliTRDclusterizer.cxx:456
 AliTRDclusterizer.cxx:457
 AliTRDclusterizer.cxx:458
 AliTRDclusterizer.cxx:459
 AliTRDclusterizer.cxx:460
 AliTRDclusterizer.cxx:461
 AliTRDclusterizer.cxx:462
 AliTRDclusterizer.cxx:463
 AliTRDclusterizer.cxx:464
 AliTRDclusterizer.cxx:465
 AliTRDclusterizer.cxx:466
 AliTRDclusterizer.cxx:467
 AliTRDclusterizer.cxx:468
 AliTRDclusterizer.cxx:469
 AliTRDclusterizer.cxx:470
 AliTRDclusterizer.cxx:471
 AliTRDclusterizer.cxx:472
 AliTRDclusterizer.cxx:473
 AliTRDclusterizer.cxx:474
 AliTRDclusterizer.cxx:475
 AliTRDclusterizer.cxx:476
 AliTRDclusterizer.cxx:477
 AliTRDclusterizer.cxx:478
 AliTRDclusterizer.cxx:479
 AliTRDclusterizer.cxx:480
 AliTRDclusterizer.cxx:481
 AliTRDclusterizer.cxx:482
 AliTRDclusterizer.cxx:483
 AliTRDclusterizer.cxx:484
 AliTRDclusterizer.cxx:485
 AliTRDclusterizer.cxx:486
 AliTRDclusterizer.cxx:487
 AliTRDclusterizer.cxx:488
 AliTRDclusterizer.cxx:489
 AliTRDclusterizer.cxx:490
 AliTRDclusterizer.cxx:491
 AliTRDclusterizer.cxx:492
 AliTRDclusterizer.cxx:493
 AliTRDclusterizer.cxx:494
 AliTRDclusterizer.cxx:495
 AliTRDclusterizer.cxx:496
 AliTRDclusterizer.cxx:497
 AliTRDclusterizer.cxx:498
 AliTRDclusterizer.cxx:499
 AliTRDclusterizer.cxx:500
 AliTRDclusterizer.cxx:501
 AliTRDclusterizer.cxx:502
 AliTRDclusterizer.cxx:503
 AliTRDclusterizer.cxx:504
 AliTRDclusterizer.cxx:505
 AliTRDclusterizer.cxx:506
 AliTRDclusterizer.cxx:507
 AliTRDclusterizer.cxx:508
 AliTRDclusterizer.cxx:509
 AliTRDclusterizer.cxx:510
 AliTRDclusterizer.cxx:511
 AliTRDclusterizer.cxx:512
 AliTRDclusterizer.cxx:513
 AliTRDclusterizer.cxx:514
 AliTRDclusterizer.cxx:515
 AliTRDclusterizer.cxx:516
 AliTRDclusterizer.cxx:517
 AliTRDclusterizer.cxx:518
 AliTRDclusterizer.cxx:519
 AliTRDclusterizer.cxx:520
 AliTRDclusterizer.cxx:521
 AliTRDclusterizer.cxx:522
 AliTRDclusterizer.cxx:523
 AliTRDclusterizer.cxx:524
 AliTRDclusterizer.cxx:525
 AliTRDclusterizer.cxx:526
 AliTRDclusterizer.cxx:527
 AliTRDclusterizer.cxx:528
 AliTRDclusterizer.cxx:529
 AliTRDclusterizer.cxx:530
 AliTRDclusterizer.cxx:531
 AliTRDclusterizer.cxx:532
 AliTRDclusterizer.cxx:533
 AliTRDclusterizer.cxx:534
 AliTRDclusterizer.cxx:535
 AliTRDclusterizer.cxx:536
 AliTRDclusterizer.cxx:537
 AliTRDclusterizer.cxx:538
 AliTRDclusterizer.cxx:539
 AliTRDclusterizer.cxx:540
 AliTRDclusterizer.cxx:541
 AliTRDclusterizer.cxx:542
 AliTRDclusterizer.cxx:543
 AliTRDclusterizer.cxx:544
 AliTRDclusterizer.cxx:545
 AliTRDclusterizer.cxx:546
 AliTRDclusterizer.cxx:547
 AliTRDclusterizer.cxx:548
 AliTRDclusterizer.cxx:549
 AliTRDclusterizer.cxx:550
 AliTRDclusterizer.cxx:551
 AliTRDclusterizer.cxx:552
 AliTRDclusterizer.cxx:553
 AliTRDclusterizer.cxx:554
 AliTRDclusterizer.cxx:555
 AliTRDclusterizer.cxx:556
 AliTRDclusterizer.cxx:557
 AliTRDclusterizer.cxx:558
 AliTRDclusterizer.cxx:559
 AliTRDclusterizer.cxx:560
 AliTRDclusterizer.cxx:561
 AliTRDclusterizer.cxx:562
 AliTRDclusterizer.cxx:563
 AliTRDclusterizer.cxx:564
 AliTRDclusterizer.cxx:565
 AliTRDclusterizer.cxx:566
 AliTRDclusterizer.cxx:567
 AliTRDclusterizer.cxx:568
 AliTRDclusterizer.cxx:569
 AliTRDclusterizer.cxx:570
 AliTRDclusterizer.cxx:571
 AliTRDclusterizer.cxx:572
 AliTRDclusterizer.cxx:573
 AliTRDclusterizer.cxx:574
 AliTRDclusterizer.cxx:575
 AliTRDclusterizer.cxx:576
 AliTRDclusterizer.cxx:577
 AliTRDclusterizer.cxx:578
 AliTRDclusterizer.cxx:579
 AliTRDclusterizer.cxx:580
 AliTRDclusterizer.cxx:581
 AliTRDclusterizer.cxx:582
 AliTRDclusterizer.cxx:583
 AliTRDclusterizer.cxx:584
 AliTRDclusterizer.cxx:585
 AliTRDclusterizer.cxx:586
 AliTRDclusterizer.cxx:587
 AliTRDclusterizer.cxx:588
 AliTRDclusterizer.cxx:589
 AliTRDclusterizer.cxx:590
 AliTRDclusterizer.cxx:591
 AliTRDclusterizer.cxx:592
 AliTRDclusterizer.cxx:593
 AliTRDclusterizer.cxx:594
 AliTRDclusterizer.cxx:595
 AliTRDclusterizer.cxx:596
 AliTRDclusterizer.cxx:597
 AliTRDclusterizer.cxx:598
 AliTRDclusterizer.cxx:599
 AliTRDclusterizer.cxx:600
 AliTRDclusterizer.cxx:601
 AliTRDclusterizer.cxx:602
 AliTRDclusterizer.cxx:603
 AliTRDclusterizer.cxx:604
 AliTRDclusterizer.cxx:605
 AliTRDclusterizer.cxx:606
 AliTRDclusterizer.cxx:607
 AliTRDclusterizer.cxx:608
 AliTRDclusterizer.cxx:609
 AliTRDclusterizer.cxx:610
 AliTRDclusterizer.cxx:611
 AliTRDclusterizer.cxx:612
 AliTRDclusterizer.cxx:613
 AliTRDclusterizer.cxx:614
 AliTRDclusterizer.cxx:615
 AliTRDclusterizer.cxx:616
 AliTRDclusterizer.cxx:617
 AliTRDclusterizer.cxx:618
 AliTRDclusterizer.cxx:619
 AliTRDclusterizer.cxx:620
 AliTRDclusterizer.cxx:621
 AliTRDclusterizer.cxx:622
 AliTRDclusterizer.cxx:623
 AliTRDclusterizer.cxx:624
 AliTRDclusterizer.cxx:625
 AliTRDclusterizer.cxx:626
 AliTRDclusterizer.cxx:627
 AliTRDclusterizer.cxx:628
 AliTRDclusterizer.cxx:629
 AliTRDclusterizer.cxx:630
 AliTRDclusterizer.cxx:631
 AliTRDclusterizer.cxx:632
 AliTRDclusterizer.cxx:633
 AliTRDclusterizer.cxx:634
 AliTRDclusterizer.cxx:635
 AliTRDclusterizer.cxx:636
 AliTRDclusterizer.cxx:637
 AliTRDclusterizer.cxx:638
 AliTRDclusterizer.cxx:639
 AliTRDclusterizer.cxx:640
 AliTRDclusterizer.cxx:641
 AliTRDclusterizer.cxx:642
 AliTRDclusterizer.cxx:643
 AliTRDclusterizer.cxx:644
 AliTRDclusterizer.cxx:645
 AliTRDclusterizer.cxx:646
 AliTRDclusterizer.cxx:647
 AliTRDclusterizer.cxx:648
 AliTRDclusterizer.cxx:649
 AliTRDclusterizer.cxx:650
 AliTRDclusterizer.cxx:651
 AliTRDclusterizer.cxx:652
 AliTRDclusterizer.cxx:653
 AliTRDclusterizer.cxx:654
 AliTRDclusterizer.cxx:655
 AliTRDclusterizer.cxx:656
 AliTRDclusterizer.cxx:657
 AliTRDclusterizer.cxx:658
 AliTRDclusterizer.cxx:659
 AliTRDclusterizer.cxx:660
 AliTRDclusterizer.cxx:661
 AliTRDclusterizer.cxx:662
 AliTRDclusterizer.cxx:663
 AliTRDclusterizer.cxx:664
 AliTRDclusterizer.cxx:665
 AliTRDclusterizer.cxx:666
 AliTRDclusterizer.cxx:667
 AliTRDclusterizer.cxx:668
 AliTRDclusterizer.cxx:669
 AliTRDclusterizer.cxx:670
 AliTRDclusterizer.cxx:671
 AliTRDclusterizer.cxx:672
 AliTRDclusterizer.cxx:673
 AliTRDclusterizer.cxx:674
 AliTRDclusterizer.cxx:675
 AliTRDclusterizer.cxx:676
 AliTRDclusterizer.cxx:677
 AliTRDclusterizer.cxx:678
 AliTRDclusterizer.cxx:679
 AliTRDclusterizer.cxx:680
 AliTRDclusterizer.cxx:681
 AliTRDclusterizer.cxx:682
 AliTRDclusterizer.cxx:683
 AliTRDclusterizer.cxx:684
 AliTRDclusterizer.cxx:685
 AliTRDclusterizer.cxx:686
 AliTRDclusterizer.cxx:687
 AliTRDclusterizer.cxx:688
 AliTRDclusterizer.cxx:689
 AliTRDclusterizer.cxx:690
 AliTRDclusterizer.cxx:691
 AliTRDclusterizer.cxx:692
 AliTRDclusterizer.cxx:693
 AliTRDclusterizer.cxx:694
 AliTRDclusterizer.cxx:695
 AliTRDclusterizer.cxx:696
 AliTRDclusterizer.cxx:697
 AliTRDclusterizer.cxx:698
 AliTRDclusterizer.cxx:699
 AliTRDclusterizer.cxx:700
 AliTRDclusterizer.cxx:701
 AliTRDclusterizer.cxx:702
 AliTRDclusterizer.cxx:703
 AliTRDclusterizer.cxx:704
 AliTRDclusterizer.cxx:705
 AliTRDclusterizer.cxx:706
 AliTRDclusterizer.cxx:707
 AliTRDclusterizer.cxx:708
 AliTRDclusterizer.cxx:709
 AliTRDclusterizer.cxx:710
 AliTRDclusterizer.cxx:711
 AliTRDclusterizer.cxx:712
 AliTRDclusterizer.cxx:713
 AliTRDclusterizer.cxx:714
 AliTRDclusterizer.cxx:715
 AliTRDclusterizer.cxx:716
 AliTRDclusterizer.cxx:717
 AliTRDclusterizer.cxx:718
 AliTRDclusterizer.cxx:719
 AliTRDclusterizer.cxx:720
 AliTRDclusterizer.cxx:721
 AliTRDclusterizer.cxx:722
 AliTRDclusterizer.cxx:723
 AliTRDclusterizer.cxx:724
 AliTRDclusterizer.cxx:725
 AliTRDclusterizer.cxx:726
 AliTRDclusterizer.cxx:727
 AliTRDclusterizer.cxx:728
 AliTRDclusterizer.cxx:729
 AliTRDclusterizer.cxx:730
 AliTRDclusterizer.cxx:731
 AliTRDclusterizer.cxx:732
 AliTRDclusterizer.cxx:733
 AliTRDclusterizer.cxx:734
 AliTRDclusterizer.cxx:735
 AliTRDclusterizer.cxx:736
 AliTRDclusterizer.cxx:737
 AliTRDclusterizer.cxx:738
 AliTRDclusterizer.cxx:739
 AliTRDclusterizer.cxx:740
 AliTRDclusterizer.cxx:741
 AliTRDclusterizer.cxx:742
 AliTRDclusterizer.cxx:743
 AliTRDclusterizer.cxx:744
 AliTRDclusterizer.cxx:745
 AliTRDclusterizer.cxx:746
 AliTRDclusterizer.cxx:747
 AliTRDclusterizer.cxx:748
 AliTRDclusterizer.cxx:749
 AliTRDclusterizer.cxx:750
 AliTRDclusterizer.cxx:751
 AliTRDclusterizer.cxx:752
 AliTRDclusterizer.cxx:753
 AliTRDclusterizer.cxx:754
 AliTRDclusterizer.cxx:755
 AliTRDclusterizer.cxx:756
 AliTRDclusterizer.cxx:757
 AliTRDclusterizer.cxx:758
 AliTRDclusterizer.cxx:759
 AliTRDclusterizer.cxx:760
 AliTRDclusterizer.cxx:761
 AliTRDclusterizer.cxx:762
 AliTRDclusterizer.cxx:763
 AliTRDclusterizer.cxx:764
 AliTRDclusterizer.cxx:765
 AliTRDclusterizer.cxx:766
 AliTRDclusterizer.cxx:767
 AliTRDclusterizer.cxx:768
 AliTRDclusterizer.cxx:769
 AliTRDclusterizer.cxx:770
 AliTRDclusterizer.cxx:771
 AliTRDclusterizer.cxx:772
 AliTRDclusterizer.cxx:773
 AliTRDclusterizer.cxx:774
 AliTRDclusterizer.cxx:775
 AliTRDclusterizer.cxx:776
 AliTRDclusterizer.cxx:777
 AliTRDclusterizer.cxx:778
 AliTRDclusterizer.cxx:779
 AliTRDclusterizer.cxx:780
 AliTRDclusterizer.cxx:781
 AliTRDclusterizer.cxx:782
 AliTRDclusterizer.cxx:783
 AliTRDclusterizer.cxx:784
 AliTRDclusterizer.cxx:785
 AliTRDclusterizer.cxx:786
 AliTRDclusterizer.cxx:787
 AliTRDclusterizer.cxx:788
 AliTRDclusterizer.cxx:789
 AliTRDclusterizer.cxx:790
 AliTRDclusterizer.cxx:791
 AliTRDclusterizer.cxx:792
 AliTRDclusterizer.cxx:793
 AliTRDclusterizer.cxx:794
 AliTRDclusterizer.cxx:795
 AliTRDclusterizer.cxx:796
 AliTRDclusterizer.cxx:797
 AliTRDclusterizer.cxx:798
 AliTRDclusterizer.cxx:799
 AliTRDclusterizer.cxx:800
 AliTRDclusterizer.cxx:801
 AliTRDclusterizer.cxx:802
 AliTRDclusterizer.cxx:803
 AliTRDclusterizer.cxx:804
 AliTRDclusterizer.cxx:805
 AliTRDclusterizer.cxx:806
 AliTRDclusterizer.cxx:807
 AliTRDclusterizer.cxx:808
 AliTRDclusterizer.cxx:809
 AliTRDclusterizer.cxx:810
 AliTRDclusterizer.cxx:811
 AliTRDclusterizer.cxx:812
 AliTRDclusterizer.cxx:813
 AliTRDclusterizer.cxx:814
 AliTRDclusterizer.cxx:815
 AliTRDclusterizer.cxx:816
 AliTRDclusterizer.cxx:817
 AliTRDclusterizer.cxx:818
 AliTRDclusterizer.cxx:819
 AliTRDclusterizer.cxx:820
 AliTRDclusterizer.cxx:821
 AliTRDclusterizer.cxx:822
 AliTRDclusterizer.cxx:823
 AliTRDclusterizer.cxx:824
 AliTRDclusterizer.cxx:825
 AliTRDclusterizer.cxx:826
 AliTRDclusterizer.cxx:827
 AliTRDclusterizer.cxx:828
 AliTRDclusterizer.cxx:829
 AliTRDclusterizer.cxx:830
 AliTRDclusterizer.cxx:831
 AliTRDclusterizer.cxx:832
 AliTRDclusterizer.cxx:833
 AliTRDclusterizer.cxx:834
 AliTRDclusterizer.cxx:835
 AliTRDclusterizer.cxx:836
 AliTRDclusterizer.cxx:837
 AliTRDclusterizer.cxx:838
 AliTRDclusterizer.cxx:839
 AliTRDclusterizer.cxx:840
 AliTRDclusterizer.cxx:841
 AliTRDclusterizer.cxx:842
 AliTRDclusterizer.cxx:843
 AliTRDclusterizer.cxx:844
 AliTRDclusterizer.cxx:845
 AliTRDclusterizer.cxx:846
 AliTRDclusterizer.cxx:847
 AliTRDclusterizer.cxx:848
 AliTRDclusterizer.cxx:849
 AliTRDclusterizer.cxx:850
 AliTRDclusterizer.cxx:851
 AliTRDclusterizer.cxx:852
 AliTRDclusterizer.cxx:853
 AliTRDclusterizer.cxx:854
 AliTRDclusterizer.cxx:855
 AliTRDclusterizer.cxx:856
 AliTRDclusterizer.cxx:857
 AliTRDclusterizer.cxx:858
 AliTRDclusterizer.cxx:859
 AliTRDclusterizer.cxx:860
 AliTRDclusterizer.cxx:861
 AliTRDclusterizer.cxx:862
 AliTRDclusterizer.cxx:863
 AliTRDclusterizer.cxx:864
 AliTRDclusterizer.cxx:865
 AliTRDclusterizer.cxx:866
 AliTRDclusterizer.cxx:867
 AliTRDclusterizer.cxx:868
 AliTRDclusterizer.cxx:869
 AliTRDclusterizer.cxx:870
 AliTRDclusterizer.cxx:871
 AliTRDclusterizer.cxx:872
 AliTRDclusterizer.cxx:873
 AliTRDclusterizer.cxx:874
 AliTRDclusterizer.cxx:875
 AliTRDclusterizer.cxx:876
 AliTRDclusterizer.cxx:877
 AliTRDclusterizer.cxx:878
 AliTRDclusterizer.cxx:879
 AliTRDclusterizer.cxx:880
 AliTRDclusterizer.cxx:881
 AliTRDclusterizer.cxx:882
 AliTRDclusterizer.cxx:883
 AliTRDclusterizer.cxx:884
 AliTRDclusterizer.cxx:885
 AliTRDclusterizer.cxx:886
 AliTRDclusterizer.cxx:887
 AliTRDclusterizer.cxx:888
 AliTRDclusterizer.cxx:889
 AliTRDclusterizer.cxx:890
 AliTRDclusterizer.cxx:891
 AliTRDclusterizer.cxx:892
 AliTRDclusterizer.cxx:893
 AliTRDclusterizer.cxx:894
 AliTRDclusterizer.cxx:895
 AliTRDclusterizer.cxx:896
 AliTRDclusterizer.cxx:897
 AliTRDclusterizer.cxx:898
 AliTRDclusterizer.cxx:899
 AliTRDclusterizer.cxx:900
 AliTRDclusterizer.cxx:901
 AliTRDclusterizer.cxx:902
 AliTRDclusterizer.cxx:903
 AliTRDclusterizer.cxx:904
 AliTRDclusterizer.cxx:905
 AliTRDclusterizer.cxx:906
 AliTRDclusterizer.cxx:907
 AliTRDclusterizer.cxx:908
 AliTRDclusterizer.cxx:909
 AliTRDclusterizer.cxx:910
 AliTRDclusterizer.cxx:911
 AliTRDclusterizer.cxx:912
 AliTRDclusterizer.cxx:913
 AliTRDclusterizer.cxx:914
 AliTRDclusterizer.cxx:915
 AliTRDclusterizer.cxx:916
 AliTRDclusterizer.cxx:917
 AliTRDclusterizer.cxx:918
 AliTRDclusterizer.cxx:919
 AliTRDclusterizer.cxx:920
 AliTRDclusterizer.cxx:921
 AliTRDclusterizer.cxx:922
 AliTRDclusterizer.cxx:923
 AliTRDclusterizer.cxx:924
 AliTRDclusterizer.cxx:925
 AliTRDclusterizer.cxx:926
 AliTRDclusterizer.cxx:927
 AliTRDclusterizer.cxx:928
 AliTRDclusterizer.cxx:929
 AliTRDclusterizer.cxx:930
 AliTRDclusterizer.cxx:931
 AliTRDclusterizer.cxx:932
 AliTRDclusterizer.cxx:933
 AliTRDclusterizer.cxx:934
 AliTRDclusterizer.cxx:935
 AliTRDclusterizer.cxx:936
 AliTRDclusterizer.cxx:937
 AliTRDclusterizer.cxx:938
 AliTRDclusterizer.cxx:939
 AliTRDclusterizer.cxx:940
 AliTRDclusterizer.cxx:941
 AliTRDclusterizer.cxx:942
 AliTRDclusterizer.cxx:943
 AliTRDclusterizer.cxx:944
 AliTRDclusterizer.cxx:945
 AliTRDclusterizer.cxx:946
 AliTRDclusterizer.cxx:947
 AliTRDclusterizer.cxx:948
 AliTRDclusterizer.cxx:949
 AliTRDclusterizer.cxx:950
 AliTRDclusterizer.cxx:951
 AliTRDclusterizer.cxx:952
 AliTRDclusterizer.cxx:953
 AliTRDclusterizer.cxx:954
 AliTRDclusterizer.cxx:955
 AliTRDclusterizer.cxx:956
 AliTRDclusterizer.cxx:957
 AliTRDclusterizer.cxx:958
 AliTRDclusterizer.cxx:959
 AliTRDclusterizer.cxx:960
 AliTRDclusterizer.cxx:961
 AliTRDclusterizer.cxx:962
 AliTRDclusterizer.cxx:963
 AliTRDclusterizer.cxx:964
 AliTRDclusterizer.cxx:965
 AliTRDclusterizer.cxx:966
 AliTRDclusterizer.cxx:967
 AliTRDclusterizer.cxx:968
 AliTRDclusterizer.cxx:969
 AliTRDclusterizer.cxx:970
 AliTRDclusterizer.cxx:971
 AliTRDclusterizer.cxx:972
 AliTRDclusterizer.cxx:973
 AliTRDclusterizer.cxx:974
 AliTRDclusterizer.cxx:975
 AliTRDclusterizer.cxx:976
 AliTRDclusterizer.cxx:977
 AliTRDclusterizer.cxx:978
 AliTRDclusterizer.cxx:979
 AliTRDclusterizer.cxx:980
 AliTRDclusterizer.cxx:981
 AliTRDclusterizer.cxx:982
 AliTRDclusterizer.cxx:983
 AliTRDclusterizer.cxx:984
 AliTRDclusterizer.cxx:985
 AliTRDclusterizer.cxx:986
 AliTRDclusterizer.cxx:987
 AliTRDclusterizer.cxx:988
 AliTRDclusterizer.cxx:989
 AliTRDclusterizer.cxx:990
 AliTRDclusterizer.cxx:991
 AliTRDclusterizer.cxx:992
 AliTRDclusterizer.cxx:993
 AliTRDclusterizer.cxx:994
 AliTRDclusterizer.cxx:995
 AliTRDclusterizer.cxx:996
 AliTRDclusterizer.cxx:997
 AliTRDclusterizer.cxx:998
 AliTRDclusterizer.cxx:999
 AliTRDclusterizer.cxx:1000
 AliTRDclusterizer.cxx:1001
 AliTRDclusterizer.cxx:1002
 AliTRDclusterizer.cxx:1003
 AliTRDclusterizer.cxx:1004
 AliTRDclusterizer.cxx:1005
 AliTRDclusterizer.cxx:1006
 AliTRDclusterizer.cxx:1007
 AliTRDclusterizer.cxx:1008
 AliTRDclusterizer.cxx:1009
 AliTRDclusterizer.cxx:1010
 AliTRDclusterizer.cxx:1011
 AliTRDclusterizer.cxx:1012
 AliTRDclusterizer.cxx:1013
 AliTRDclusterizer.cxx:1014
 AliTRDclusterizer.cxx:1015
 AliTRDclusterizer.cxx:1016
 AliTRDclusterizer.cxx:1017
 AliTRDclusterizer.cxx:1018
 AliTRDclusterizer.cxx:1019
 AliTRDclusterizer.cxx:1020
 AliTRDclusterizer.cxx:1021
 AliTRDclusterizer.cxx:1022
 AliTRDclusterizer.cxx:1023
 AliTRDclusterizer.cxx:1024
 AliTRDclusterizer.cxx:1025
 AliTRDclusterizer.cxx:1026
 AliTRDclusterizer.cxx:1027
 AliTRDclusterizer.cxx:1028
 AliTRDclusterizer.cxx:1029
 AliTRDclusterizer.cxx:1030
 AliTRDclusterizer.cxx:1031
 AliTRDclusterizer.cxx:1032
 AliTRDclusterizer.cxx:1033
 AliTRDclusterizer.cxx:1034
 AliTRDclusterizer.cxx:1035
 AliTRDclusterizer.cxx:1036
 AliTRDclusterizer.cxx:1037
 AliTRDclusterizer.cxx:1038
 AliTRDclusterizer.cxx:1039
 AliTRDclusterizer.cxx:1040
 AliTRDclusterizer.cxx:1041
 AliTRDclusterizer.cxx:1042
 AliTRDclusterizer.cxx:1043
 AliTRDclusterizer.cxx:1044
 AliTRDclusterizer.cxx:1045
 AliTRDclusterizer.cxx:1046
 AliTRDclusterizer.cxx:1047
 AliTRDclusterizer.cxx:1048
 AliTRDclusterizer.cxx:1049
 AliTRDclusterizer.cxx:1050
 AliTRDclusterizer.cxx:1051
 AliTRDclusterizer.cxx:1052
 AliTRDclusterizer.cxx:1053
 AliTRDclusterizer.cxx:1054
 AliTRDclusterizer.cxx:1055
 AliTRDclusterizer.cxx:1056
 AliTRDclusterizer.cxx:1057
 AliTRDclusterizer.cxx:1058
 AliTRDclusterizer.cxx:1059
 AliTRDclusterizer.cxx:1060
 AliTRDclusterizer.cxx:1061
 AliTRDclusterizer.cxx:1062
 AliTRDclusterizer.cxx:1063
 AliTRDclusterizer.cxx:1064
 AliTRDclusterizer.cxx:1065
 AliTRDclusterizer.cxx:1066
 AliTRDclusterizer.cxx:1067
 AliTRDclusterizer.cxx:1068
 AliTRDclusterizer.cxx:1069
 AliTRDclusterizer.cxx:1070
 AliTRDclusterizer.cxx:1071
 AliTRDclusterizer.cxx:1072
 AliTRDclusterizer.cxx:1073
 AliTRDclusterizer.cxx:1074
 AliTRDclusterizer.cxx:1075
 AliTRDclusterizer.cxx:1076
 AliTRDclusterizer.cxx:1077
 AliTRDclusterizer.cxx:1078
 AliTRDclusterizer.cxx:1079
 AliTRDclusterizer.cxx:1080
 AliTRDclusterizer.cxx:1081
 AliTRDclusterizer.cxx:1082
 AliTRDclusterizer.cxx:1083
 AliTRDclusterizer.cxx:1084
 AliTRDclusterizer.cxx:1085
 AliTRDclusterizer.cxx:1086
 AliTRDclusterizer.cxx:1087
 AliTRDclusterizer.cxx:1088
 AliTRDclusterizer.cxx:1089
 AliTRDclusterizer.cxx:1090
 AliTRDclusterizer.cxx:1091
 AliTRDclusterizer.cxx:1092
 AliTRDclusterizer.cxx:1093
 AliTRDclusterizer.cxx:1094
 AliTRDclusterizer.cxx:1095
 AliTRDclusterizer.cxx:1096
 AliTRDclusterizer.cxx:1097
 AliTRDclusterizer.cxx:1098
 AliTRDclusterizer.cxx:1099
 AliTRDclusterizer.cxx:1100
 AliTRDclusterizer.cxx:1101
 AliTRDclusterizer.cxx:1102
 AliTRDclusterizer.cxx:1103
 AliTRDclusterizer.cxx:1104
 AliTRDclusterizer.cxx:1105
 AliTRDclusterizer.cxx:1106
 AliTRDclusterizer.cxx:1107
 AliTRDclusterizer.cxx:1108
 AliTRDclusterizer.cxx:1109
 AliTRDclusterizer.cxx:1110
 AliTRDclusterizer.cxx:1111
 AliTRDclusterizer.cxx:1112
 AliTRDclusterizer.cxx:1113
 AliTRDclusterizer.cxx:1114
 AliTRDclusterizer.cxx:1115
 AliTRDclusterizer.cxx:1116
 AliTRDclusterizer.cxx:1117
 AliTRDclusterizer.cxx:1118
 AliTRDclusterizer.cxx:1119
 AliTRDclusterizer.cxx:1120
 AliTRDclusterizer.cxx:1121
 AliTRDclusterizer.cxx:1122
 AliTRDclusterizer.cxx:1123
 AliTRDclusterizer.cxx:1124
 AliTRDclusterizer.cxx:1125
 AliTRDclusterizer.cxx:1126
 AliTRDclusterizer.cxx:1127
 AliTRDclusterizer.cxx:1128
 AliTRDclusterizer.cxx:1129
 AliTRDclusterizer.cxx:1130
 AliTRDclusterizer.cxx:1131
 AliTRDclusterizer.cxx:1132
 AliTRDclusterizer.cxx:1133
 AliTRDclusterizer.cxx:1134
 AliTRDclusterizer.cxx:1135
 AliTRDclusterizer.cxx:1136
 AliTRDclusterizer.cxx:1137
 AliTRDclusterizer.cxx:1138
 AliTRDclusterizer.cxx:1139
 AliTRDclusterizer.cxx:1140
 AliTRDclusterizer.cxx:1141
 AliTRDclusterizer.cxx:1142
 AliTRDclusterizer.cxx:1143
 AliTRDclusterizer.cxx:1144
 AliTRDclusterizer.cxx:1145
 AliTRDclusterizer.cxx:1146
 AliTRDclusterizer.cxx:1147
 AliTRDclusterizer.cxx:1148
 AliTRDclusterizer.cxx:1149
 AliTRDclusterizer.cxx:1150
 AliTRDclusterizer.cxx:1151
 AliTRDclusterizer.cxx:1152
 AliTRDclusterizer.cxx:1153
 AliTRDclusterizer.cxx:1154
 AliTRDclusterizer.cxx:1155
 AliTRDclusterizer.cxx:1156
 AliTRDclusterizer.cxx:1157
 AliTRDclusterizer.cxx:1158
 AliTRDclusterizer.cxx:1159
 AliTRDclusterizer.cxx:1160
 AliTRDclusterizer.cxx:1161
 AliTRDclusterizer.cxx:1162
 AliTRDclusterizer.cxx:1163
 AliTRDclusterizer.cxx:1164
 AliTRDclusterizer.cxx:1165
 AliTRDclusterizer.cxx:1166
 AliTRDclusterizer.cxx:1167
 AliTRDclusterizer.cxx:1168
 AliTRDclusterizer.cxx:1169
 AliTRDclusterizer.cxx:1170
 AliTRDclusterizer.cxx:1171
 AliTRDclusterizer.cxx:1172
 AliTRDclusterizer.cxx:1173
 AliTRDclusterizer.cxx:1174
 AliTRDclusterizer.cxx:1175
 AliTRDclusterizer.cxx:1176
 AliTRDclusterizer.cxx:1177
 AliTRDclusterizer.cxx:1178
 AliTRDclusterizer.cxx:1179
 AliTRDclusterizer.cxx:1180
 AliTRDclusterizer.cxx:1181
 AliTRDclusterizer.cxx:1182
 AliTRDclusterizer.cxx:1183
 AliTRDclusterizer.cxx:1184
 AliTRDclusterizer.cxx:1185
 AliTRDclusterizer.cxx:1186
 AliTRDclusterizer.cxx:1187
 AliTRDclusterizer.cxx:1188
 AliTRDclusterizer.cxx:1189
 AliTRDclusterizer.cxx:1190
 AliTRDclusterizer.cxx:1191
 AliTRDclusterizer.cxx:1192
 AliTRDclusterizer.cxx:1193
 AliTRDclusterizer.cxx:1194
 AliTRDclusterizer.cxx:1195
 AliTRDclusterizer.cxx:1196
 AliTRDclusterizer.cxx:1197
 AliTRDclusterizer.cxx:1198
 AliTRDclusterizer.cxx:1199
 AliTRDclusterizer.cxx:1200
 AliTRDclusterizer.cxx:1201
 AliTRDclusterizer.cxx:1202
 AliTRDclusterizer.cxx:1203
 AliTRDclusterizer.cxx:1204
 AliTRDclusterizer.cxx:1205
 AliTRDclusterizer.cxx:1206
 AliTRDclusterizer.cxx:1207
 AliTRDclusterizer.cxx:1208
 AliTRDclusterizer.cxx:1209
 AliTRDclusterizer.cxx:1210
 AliTRDclusterizer.cxx:1211
 AliTRDclusterizer.cxx:1212
 AliTRDclusterizer.cxx:1213
 AliTRDclusterizer.cxx:1214
 AliTRDclusterizer.cxx:1215
 AliTRDclusterizer.cxx:1216
 AliTRDclusterizer.cxx:1217
 AliTRDclusterizer.cxx:1218
 AliTRDclusterizer.cxx:1219
 AliTRDclusterizer.cxx:1220
 AliTRDclusterizer.cxx:1221
 AliTRDclusterizer.cxx:1222
 AliTRDclusterizer.cxx:1223
 AliTRDclusterizer.cxx:1224
 AliTRDclusterizer.cxx:1225
 AliTRDclusterizer.cxx:1226
 AliTRDclusterizer.cxx:1227
 AliTRDclusterizer.cxx:1228
 AliTRDclusterizer.cxx:1229
 AliTRDclusterizer.cxx:1230
 AliTRDclusterizer.cxx:1231
 AliTRDclusterizer.cxx:1232
 AliTRDclusterizer.cxx:1233
 AliTRDclusterizer.cxx:1234
 AliTRDclusterizer.cxx:1235
 AliTRDclusterizer.cxx:1236
 AliTRDclusterizer.cxx:1237
 AliTRDclusterizer.cxx:1238
 AliTRDclusterizer.cxx:1239
 AliTRDclusterizer.cxx:1240
 AliTRDclusterizer.cxx:1241
 AliTRDclusterizer.cxx:1242
 AliTRDclusterizer.cxx:1243
 AliTRDclusterizer.cxx:1244
 AliTRDclusterizer.cxx:1245
 AliTRDclusterizer.cxx:1246
 AliTRDclusterizer.cxx:1247
 AliTRDclusterizer.cxx:1248
 AliTRDclusterizer.cxx:1249
 AliTRDclusterizer.cxx:1250
 AliTRDclusterizer.cxx:1251
 AliTRDclusterizer.cxx:1252
 AliTRDclusterizer.cxx:1253
 AliTRDclusterizer.cxx:1254
 AliTRDclusterizer.cxx:1255
 AliTRDclusterizer.cxx:1256
 AliTRDclusterizer.cxx:1257
 AliTRDclusterizer.cxx:1258
 AliTRDclusterizer.cxx:1259
 AliTRDclusterizer.cxx:1260
 AliTRDclusterizer.cxx:1261
 AliTRDclusterizer.cxx:1262
 AliTRDclusterizer.cxx:1263
 AliTRDclusterizer.cxx:1264
 AliTRDclusterizer.cxx:1265
 AliTRDclusterizer.cxx:1266
 AliTRDclusterizer.cxx:1267
 AliTRDclusterizer.cxx:1268
 AliTRDclusterizer.cxx:1269
 AliTRDclusterizer.cxx:1270
 AliTRDclusterizer.cxx:1271
 AliTRDclusterizer.cxx:1272
 AliTRDclusterizer.cxx:1273
 AliTRDclusterizer.cxx:1274
 AliTRDclusterizer.cxx:1275
 AliTRDclusterizer.cxx:1276
 AliTRDclusterizer.cxx:1277
 AliTRDclusterizer.cxx:1278
 AliTRDclusterizer.cxx:1279
 AliTRDclusterizer.cxx:1280
 AliTRDclusterizer.cxx:1281
 AliTRDclusterizer.cxx:1282
 AliTRDclusterizer.cxx:1283
 AliTRDclusterizer.cxx:1284
 AliTRDclusterizer.cxx:1285
 AliTRDclusterizer.cxx:1286
 AliTRDclusterizer.cxx:1287
 AliTRDclusterizer.cxx:1288
 AliTRDclusterizer.cxx:1289
 AliTRDclusterizer.cxx:1290
 AliTRDclusterizer.cxx:1291
 AliTRDclusterizer.cxx:1292
 AliTRDclusterizer.cxx:1293
 AliTRDclusterizer.cxx:1294
 AliTRDclusterizer.cxx:1295
 AliTRDclusterizer.cxx:1296
 AliTRDclusterizer.cxx:1297
 AliTRDclusterizer.cxx:1298
 AliTRDclusterizer.cxx:1299
 AliTRDclusterizer.cxx:1300
 AliTRDclusterizer.cxx:1301
 AliTRDclusterizer.cxx:1302
 AliTRDclusterizer.cxx:1303
 AliTRDclusterizer.cxx:1304
 AliTRDclusterizer.cxx:1305
 AliTRDclusterizer.cxx:1306
 AliTRDclusterizer.cxx:1307
 AliTRDclusterizer.cxx:1308
 AliTRDclusterizer.cxx:1309
 AliTRDclusterizer.cxx:1310
 AliTRDclusterizer.cxx:1311
 AliTRDclusterizer.cxx:1312
 AliTRDclusterizer.cxx:1313
 AliTRDclusterizer.cxx:1314
 AliTRDclusterizer.cxx:1315
 AliTRDclusterizer.cxx:1316
 AliTRDclusterizer.cxx:1317
 AliTRDclusterizer.cxx:1318
 AliTRDclusterizer.cxx:1319
 AliTRDclusterizer.cxx:1320
 AliTRDclusterizer.cxx:1321
 AliTRDclusterizer.cxx:1322
 AliTRDclusterizer.cxx:1323
 AliTRDclusterizer.cxx:1324
 AliTRDclusterizer.cxx:1325
 AliTRDclusterizer.cxx:1326
 AliTRDclusterizer.cxx:1327
 AliTRDclusterizer.cxx:1328
 AliTRDclusterizer.cxx:1329
 AliTRDclusterizer.cxx:1330
 AliTRDclusterizer.cxx:1331
 AliTRDclusterizer.cxx:1332
 AliTRDclusterizer.cxx:1333
 AliTRDclusterizer.cxx:1334
 AliTRDclusterizer.cxx:1335
 AliTRDclusterizer.cxx:1336
 AliTRDclusterizer.cxx:1337
 AliTRDclusterizer.cxx:1338
 AliTRDclusterizer.cxx:1339
 AliTRDclusterizer.cxx:1340
 AliTRDclusterizer.cxx:1341
 AliTRDclusterizer.cxx:1342
 AliTRDclusterizer.cxx:1343
 AliTRDclusterizer.cxx:1344
 AliTRDclusterizer.cxx:1345
 AliTRDclusterizer.cxx:1346
 AliTRDclusterizer.cxx:1347
 AliTRDclusterizer.cxx:1348
 AliTRDclusterizer.cxx:1349
 AliTRDclusterizer.cxx:1350
 AliTRDclusterizer.cxx:1351
 AliTRDclusterizer.cxx:1352
 AliTRDclusterizer.cxx:1353
 AliTRDclusterizer.cxx:1354
 AliTRDclusterizer.cxx:1355
 AliTRDclusterizer.cxx:1356
 AliTRDclusterizer.cxx:1357
 AliTRDclusterizer.cxx:1358
 AliTRDclusterizer.cxx:1359
 AliTRDclusterizer.cxx:1360
 AliTRDclusterizer.cxx:1361
 AliTRDclusterizer.cxx:1362
 AliTRDclusterizer.cxx:1363
 AliTRDclusterizer.cxx:1364
 AliTRDclusterizer.cxx:1365
 AliTRDclusterizer.cxx:1366
 AliTRDclusterizer.cxx:1367
 AliTRDclusterizer.cxx:1368
 AliTRDclusterizer.cxx:1369
 AliTRDclusterizer.cxx:1370
 AliTRDclusterizer.cxx:1371
 AliTRDclusterizer.cxx:1372
 AliTRDclusterizer.cxx:1373
 AliTRDclusterizer.cxx:1374
 AliTRDclusterizer.cxx:1375
 AliTRDclusterizer.cxx:1376
 AliTRDclusterizer.cxx:1377
 AliTRDclusterizer.cxx:1378
 AliTRDclusterizer.cxx:1379
 AliTRDclusterizer.cxx:1380
 AliTRDclusterizer.cxx:1381
 AliTRDclusterizer.cxx:1382
 AliTRDclusterizer.cxx:1383
 AliTRDclusterizer.cxx:1384
 AliTRDclusterizer.cxx:1385
 AliTRDclusterizer.cxx:1386
 AliTRDclusterizer.cxx:1387
 AliTRDclusterizer.cxx:1388
 AliTRDclusterizer.cxx:1389
 AliTRDclusterizer.cxx:1390
 AliTRDclusterizer.cxx:1391
 AliTRDclusterizer.cxx:1392
 AliTRDclusterizer.cxx:1393
 AliTRDclusterizer.cxx:1394
 AliTRDclusterizer.cxx:1395
 AliTRDclusterizer.cxx:1396
 AliTRDclusterizer.cxx:1397
 AliTRDclusterizer.cxx:1398
 AliTRDclusterizer.cxx:1399
 AliTRDclusterizer.cxx:1400
 AliTRDclusterizer.cxx:1401
 AliTRDclusterizer.cxx:1402
 AliTRDclusterizer.cxx:1403
 AliTRDclusterizer.cxx:1404
 AliTRDclusterizer.cxx:1405
 AliTRDclusterizer.cxx:1406
 AliTRDclusterizer.cxx:1407
 AliTRDclusterizer.cxx:1408
 AliTRDclusterizer.cxx:1409
 AliTRDclusterizer.cxx:1410
 AliTRDclusterizer.cxx:1411
 AliTRDclusterizer.cxx:1412
 AliTRDclusterizer.cxx:1413
 AliTRDclusterizer.cxx:1414
 AliTRDclusterizer.cxx:1415
 AliTRDclusterizer.cxx:1416
 AliTRDclusterizer.cxx:1417
 AliTRDclusterizer.cxx:1418
 AliTRDclusterizer.cxx:1419
 AliTRDclusterizer.cxx:1420
 AliTRDclusterizer.cxx:1421
 AliTRDclusterizer.cxx:1422
 AliTRDclusterizer.cxx:1423
 AliTRDclusterizer.cxx:1424
 AliTRDclusterizer.cxx:1425
 AliTRDclusterizer.cxx:1426
 AliTRDclusterizer.cxx:1427
 AliTRDclusterizer.cxx:1428
 AliTRDclusterizer.cxx:1429
 AliTRDclusterizer.cxx:1430
 AliTRDclusterizer.cxx:1431
 AliTRDclusterizer.cxx:1432
 AliTRDclusterizer.cxx:1433
 AliTRDclusterizer.cxx:1434
 AliTRDclusterizer.cxx:1435
 AliTRDclusterizer.cxx:1436
 AliTRDclusterizer.cxx:1437
 AliTRDclusterizer.cxx:1438
 AliTRDclusterizer.cxx:1439
 AliTRDclusterizer.cxx:1440
 AliTRDclusterizer.cxx:1441
 AliTRDclusterizer.cxx:1442
 AliTRDclusterizer.cxx:1443
 AliTRDclusterizer.cxx:1444
 AliTRDclusterizer.cxx:1445
 AliTRDclusterizer.cxx:1446
 AliTRDclusterizer.cxx:1447
 AliTRDclusterizer.cxx:1448
 AliTRDclusterizer.cxx:1449
 AliTRDclusterizer.cxx:1450
 AliTRDclusterizer.cxx:1451
 AliTRDclusterizer.cxx:1452
 AliTRDclusterizer.cxx:1453
 AliTRDclusterizer.cxx:1454
 AliTRDclusterizer.cxx:1455
 AliTRDclusterizer.cxx:1456
 AliTRDclusterizer.cxx:1457
 AliTRDclusterizer.cxx:1458
 AliTRDclusterizer.cxx:1459
 AliTRDclusterizer.cxx:1460
 AliTRDclusterizer.cxx:1461
 AliTRDclusterizer.cxx:1462
 AliTRDclusterizer.cxx:1463
 AliTRDclusterizer.cxx:1464
 AliTRDclusterizer.cxx:1465
 AliTRDclusterizer.cxx:1466
 AliTRDclusterizer.cxx:1467
 AliTRDclusterizer.cxx:1468
 AliTRDclusterizer.cxx:1469
 AliTRDclusterizer.cxx:1470
 AliTRDclusterizer.cxx:1471
 AliTRDclusterizer.cxx:1472
 AliTRDclusterizer.cxx:1473
 AliTRDclusterizer.cxx:1474
 AliTRDclusterizer.cxx:1475
 AliTRDclusterizer.cxx:1476
 AliTRDclusterizer.cxx:1477
 AliTRDclusterizer.cxx:1478
 AliTRDclusterizer.cxx:1479
 AliTRDclusterizer.cxx:1480
 AliTRDclusterizer.cxx:1481
 AliTRDclusterizer.cxx:1482
 AliTRDclusterizer.cxx:1483
 AliTRDclusterizer.cxx:1484
 AliTRDclusterizer.cxx:1485
 AliTRDclusterizer.cxx:1486
 AliTRDclusterizer.cxx:1487
 AliTRDclusterizer.cxx:1488
 AliTRDclusterizer.cxx:1489
 AliTRDclusterizer.cxx:1490
 AliTRDclusterizer.cxx:1491
 AliTRDclusterizer.cxx:1492
 AliTRDclusterizer.cxx:1493
 AliTRDclusterizer.cxx:1494
 AliTRDclusterizer.cxx:1495
 AliTRDclusterizer.cxx:1496
 AliTRDclusterizer.cxx:1497
 AliTRDclusterizer.cxx:1498
 AliTRDclusterizer.cxx:1499
 AliTRDclusterizer.cxx:1500
 AliTRDclusterizer.cxx:1501
 AliTRDclusterizer.cxx:1502
 AliTRDclusterizer.cxx:1503
 AliTRDclusterizer.cxx:1504
 AliTRDclusterizer.cxx:1505
 AliTRDclusterizer.cxx:1506
 AliTRDclusterizer.cxx:1507