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

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Class for TRD reconstruction                                              //
//                                                                           //   
// For the special options which can be used during reconstruction and their //
//  default values pls. see function SetOption().                            //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TObjString.h>
#include <TObjArray.h>
#include <TTreeStream.h>
#include <TDirectory.h>
#include <TRef.h>

#include "AliRawReader.h"
#include "AliLog.h"

#include "AliTRDReconstructor.h"
#include "AliTRDclusterizer.h"
#include "AliTRDrawData.h"
#include "AliTRDrawStream.h"
#include "AliTRDdigitsManager.h"
#include "AliTRDtrackerV1.h"
#include "AliESDEvent.h"
#include "AliESDTrdTrack.h"
#include "AliESDTrdTracklet.h"
#include "AliESDTrdTrigger.h"
#include "AliTRDtrackletWord.h"
#include "AliTRDtrackletMCM.h"
#include "AliTRDonlineTrackMatching.h"
#include "AliTRDcalibDB.h"

#define SETFLG(n,f) ((n) |= f)
#define CLRFLG(n,f) ((n) &= ~f)

ClassImp(AliTRDReconstructor)

Int_t    AliTRDReconstructor::fgStreamLevel     = 1;        // stream (debug) level


AliESDTrdTrigger AliTRDReconstructor::fgTriggerFlags;
AliTRDonlineTrackMatching AliTRDReconstructor::fgOnlineTrackMatcher;
TClonesArray *AliTRDReconstructor::fgClusters = NULL;
TClonesArray *AliTRDReconstructor::fgTracklets = NULL;
TClonesArray *AliTRDReconstructor::fgTracks = NULL;
Char_t const * AliTRDReconstructor::fgSteerNames[kNsteer] = {
  "DigitsConversion       "
 ,"Write Clusters         "
 ,"Write Online Tracklets "
 ,"Stand Alone Tracking   "
 ,"HLT Mode              "
 ,"Process Online Trklts  "
 ,"Debug Streaming       "
 ,"Cl. Radial Correction  "
};
Char_t const * AliTRDReconstructor::fgSteerFlags[kNsteer] = {
  "dc"// digits conversion [false]
 ,"cw"// write clusters [true]
 ,"tw"// write online tracklets [false]
 ,"sa"// track seeding (stand alone tracking) [true]
 ,"hlt"// HLT reconstruction [false]
 ,"tp"// also use online tracklets for reconstruction [false]
 ,"deb"// Write debug stream [false]
 ,"cc" // Cluster radial correction during reconstruction [false]
};
Char_t const * AliTRDReconstructor::fgTaskNames[AliTRDrecoParam::kTRDreconstructionTasks] = {
  "Clusterizer"
 ,"Tracker"
 ,"PID"
};
Char_t const * AliTRDReconstructor::fgTaskFlags[AliTRDrecoParam::kTRDreconstructionTasks] = {
  "cl"
 ,"tr"
 ,"pd"
};
Int_t AliTRDReconstructor::fgNTimeBins = -1;
const  Float_t  AliTRDReconstructor::fgkMinClustersInTrack =  0.5;  //
const  Float_t  AliTRDReconstructor::fgkLabelFraction      =  0.8;  //
const  Double_t AliTRDReconstructor::fgkMaxChi2            = 12.0;  //
const  Double_t AliTRDReconstructor::fgkMaxSnp             =  0.95; // Maximum local sine of the azimuthal angle
const  Double_t AliTRDReconstructor::fgkMaxStep            =  2.0;  // Maximal step size in propagation
const Double_t  AliTRDReconstructor::fgkEpsilon            = 1.e-5;                  // Precision of radial coordinate

//_____________________________________________________________________________
AliTRDReconstructor::AliTRDReconstructor()
  :AliReconstructor()
  ,fSteerParam(0)
  ,fClusterizer(NULL)
{
  // setting default "ON" steering parameters
  // owner of debug streamers 
  SETFLG(fSteerParam, kOwner);
  // write clusters [cw]
  SETFLG(fSteerParam, kWriteClusters);
  // track seeding (stand alone tracking) [sa]
  //SETFLG(fSteerParam, kSeeding);
  // Cluster radial correction during reconstruction [cc]
  //SETFLG(fSteerParam, kClRadialCorr);
  memset(fDebugStream, 0, sizeof(TTreeSRedirector *) * AliTRDrecoParam::kTRDreconstructionTasks);
}

//_____________________________________________________________________________
AliTRDReconstructor::~AliTRDReconstructor()
{
  //
  // Destructor
  //
  AliTRDcalibDB* calib = AliTRDcalibDB::Instance();
  if (calib) calib->Invalidate();
  //
  if(fClusterizer){
    delete fClusterizer;
    fClusterizer = NULL;
  }
  if(fgClusters) {
    fgClusters->Delete();
    delete fgClusters;
    fgClusters = NULL;
  }
  if(fgTracklets) {
    fgTracklets->Delete();
    delete fgTracklets;
    fgTracklets = NULL;
  }
  if(fgTracks) {
    fgTracks->Delete();
    delete fgTracks;
    fgTracks = NULL;
  }
  if((fSteerParam&kOwner)||  AliTRDReconstructor::GetStreamLevel()>0){
    for(Int_t itask = 0; itask < AliTRDrecoParam::kTRDreconstructionTasks; itask++)
      if(fDebugStream[itask]) delete fDebugStream[itask];
  }
}


//_____________________________________________________________________________
void AliTRDReconstructor::Init(){
  //
  // Init Options
  //
  SetOption(GetOption());
  Options(fSteerParam);

  if(!fClusterizer){
    fClusterizer = new AliTRDclusterizer(fgTaskNames[AliTRDrecoParam::kClusterizer], fgTaskNames[AliTRDrecoParam::kClusterizer]);
    fClusterizer->SetReconstructor(this);
    AliInfo(Form("Build TRD clusterizer[%p]", (void*)fClusterizer));
  }
  
  // Make Debug Streams when Debug Streaming
  if(IsDebugStreaming()){
    for(Int_t task = 0; task < AliTRDrecoParam::kTRDreconstructionTasks; task++){
      TDirectory *savedir = gDirectory;
      fDebugStream[task] = new TTreeSRedirector(Form("TRD.Debug%s.root", fgTaskNames[task]),"recreate");
      savedir->cd();
      SETFLG(fSteerParam, kOwner);
    }
  }
}

//_____________________________________________________________________________
void AliTRDReconstructor::ConvertDigits(AliRawReader *rawReader
              , TTree *digitsTree) const
{
  //
  // Convert raw data digits into digit objects in a root tree
  //

  AliDebug(1, "Convert raw data digits into digit objects [RawReader -> Digit TTree]");
  AliDebug(2, Form("clusters[%p] tracklets[%p] tracks[%p]", (void*)fgClusters, (void*)fgTracklets, (void*)fgTracks));

  rawReader->Reset();
  rawReader->Select("TRD");
  ResetContainers();

  AliTRDrawData rawData;

  AliTRDdigitsManager *manager = rawData.Raw2Digits(rawReader);
  manager->MakeBranch(digitsTree);
  manager->WriteDigits();
  delete manager;

  for (Int_t iSector = 0; iSector < 18; iSector++) fgTriggerFlags.SetFlags(iSector, rawData.GetTriggerFlags(iSector));
}

//_____________________________________________________________________________
void AliTRDReconstructor::Reconstruct(AliRawReader *rawReader
                                    , TTree *clusterTree) const
{
  //
  // Reconstruct clusters
  //

  AliDebug(1, "Reconstruct TRD clusters from RAW data [RawReader -> Cluster TTree]");
  AliDebug(2, Form("clusters[%p] tracklets[%p] tracks[%p]", (void*)fgClusters, (void*)fgTracklets, (void*)fgTracks));
  if(!fClusterizer){
    AliFatal("Clusterizer not available!");
    return;
  }
  rawReader->Reset();
  rawReader->Select("TRD");
  ResetContainers();
  fClusterizer->OpenOutput(clusterTree);
  fClusterizer->SetUseLabels(kFALSE);
  fClusterizer->SetStoreRawSignals(kTRUE);
  fClusterizer->ResetRecPoints();
  fClusterizer->Raw2ClustersChamber(rawReader);
  fgNTimeBins = fClusterizer->GetNTimeBins();
  for (Int_t iSector = 0; iSector < 18; iSector++) fgTriggerFlags.SetFlags(iSector, fClusterizer->GetTriggerFlags(iSector));
}

//_____________________________________________________________________________
void AliTRDReconstructor::Reconstruct(TTree *digitsTree
                                    , TTree *clusterTree) const
{
  //
  // Reconstruct clusters
  //

  AliDebug(1, "Reconstruct TRD clusters from Digits [Digit TTree -> Cluster TTree]");
  AliDebug(2, Form("Start :: clusters[%p] tracklets[%p] tracks[%p]", (void*)fgClusters, (void*)fgTracklets, (void*)fgTracks));
  if(!fClusterizer){
    AliFatal("Clusterizer not available!");
    return;
  }

  ResetContainers();
  //  AliTRDclusterizer clusterizer(fgTaskNames[AliTRDrecoParam::kClusterizer], fgTaskNames[AliTRDrecoParam::kClusterizer]);
  fClusterizer->SetReconstructor(this);
  fClusterizer->SetUseLabels(kTRUE);
  fClusterizer->SetStoreRawSignals(kTRUE);
  fClusterizer->OpenOutput(clusterTree);
  fClusterizer->ResetRecPoints();
  fClusterizer->ReadDigits(digitsTree);
  fClusterizer->ReadTracklets();
  fClusterizer->ReadTracks();
  fClusterizer->MakeClusters();
  fgNTimeBins = fClusterizer->GetNTimeBins();
}

//_____________________________________________________________________________
AliTracker *AliTRDReconstructor::CreateTracker() const
{
  //
  // Create a TRD tracker
  //

  //return new AliTRDtracker(NULL);
  AliTRDtrackerV1 *tracker = new AliTRDtrackerV1();
  tracker->SetReconstructor(this);
  AliInfo(Form("Build TRD tracker[%p]", (void*)tracker));
  return tracker;

}

//_____________________________________________________________________________
void AliTRDReconstructor::FillESD(TTree* /*digitsTree*/
        , TTree* /*clusterTree*/
        , AliESDEvent* esd) const
{
  //
  // Fill ESD
  //

  // ----- filling tracklets -----
  AliDebug(1, Form("Loading onl.tracklets(%i) to ESD", fgTracklets ? fgTracklets->GetEntriesFast() : 0));
  Int_t trackletIndex[1080] = { 0 };
  TList trklList;
  AliTRDrawStream::SortTracklets(fgTracklets, trklList, trackletIndex);
  TIter trackletIter(&trklList);
  while (AliTRDtrackletBase* tracklet = (AliTRDtrackletBase*) trackletIter()) {
    Int_t label = -2; // mark raw tracklets with label -2
    if (AliTRDtrackletMCM *trklMCM = dynamic_cast<AliTRDtrackletMCM*> (tracklet)) label = trklMCM->GetLabel();
    esd->AddTrdTracklet(tracklet->GetTrackletWord(), tracklet->GetHCId(), label);
  }

  // ----- filling GTU tracks -----
  AliDebug(1, Form("Loading gtu.tracks(%i) to ESD", fgTracks ? fgTracks->GetEntriesFast() : 0));
  if (fgTracks) {
    for (Int_t iTrack = 0; iTrack < fgTracks->GetEntriesFast(); iTrack++) {
      AliESDTrdTrack *trdTrack = (AliESDTrdTrack*) ((*fgTracks)[iTrack]);

      UInt_t stack = trdTrack->GetStack();

      Int_t refIndex[6];
      AliTRDrawStream::AssignTracklets(trdTrack, trackletIndex, refIndex);

      for (Int_t iLayer = 0; iLayer < 6; ++iLayer) {
        Int_t det = trdTrack->GetSector()*30 + stack*6 + iLayer;
        AliESDTrdTracklet *trkl = refIndex[iLayer] > -1 ? esd->GetTrdTracklet(refIndex[iLayer]) : 0x0;
        if (trkl) {
          AliDebug(5, Form("adding tracklet with index %i: 0x%08x",
              refIndex[iLayer], trkl->GetTrackletWord()));
          if (trkl->GetDetector() != det)
            AliError(Form("inconsistent assignment of tracklet 0x%08x in det %i to track in %i",
              trkl->GetTrackletWord(), trkl->GetDetector(), det));
          trdTrack->AddTrackletReference(trkl, iLayer);
        }
      }
      // only add the track when it's complete (including tracklet references)
      esd->AddTrdTrack(trdTrack);
    }
  }
  esd->SetTrdTrigger(&fgTriggerFlags);

  // ----- matching GTU tracks to global tracks -----
  AliDebug(1, Form("TRD track matching with %i ESD, %i TRD tracks",
		   esd->GetNumberOfTracks(), esd->GetNumberOfTrdTracks()));
  fgOnlineTrackMatcher.ProcessEvent(esd);
}

//_____________________________________________________________________________
void AliTRDReconstructor::SetOption(Option_t *opt)
{
  //
  // Read option string into the steer param.
  //
  // The following string options are available during reconstruction.
  // In square brackets the default values are given.
  //   "dc"  : digits conversion [false]
  //   "cw"  : write clusters [true]
  //   "tw"  : write online tracklets [false]
  //   "sa"  : track seeding (stand alone tracking) [true]
  //   "hlt" : HLT reconstruction [false]
  //   "tp"  : also use online tracklets for reconstruction [false]
  //   "deb" : Write debug stream [false]
  //   "cc"  : Cluster radial correction during reconstruction [false]
  //
  // To check the actual options used during reconstruction include the following line in your rec.C script
  // AliLog::SetClassDebugLevel("AliTRDReconstructor", 1);

  AliReconstructor::SetOption(opt);

  TString s(opt);
  TObjArray *opar = s.Tokenize(",");
  for(Int_t ipar=0; ipar<opar->GetEntriesFast(); ipar++){
    Bool_t processed = kFALSE;
    TString sopt(((TObjString*)(*opar)[ipar])->String());
    for(Int_t iopt=0; iopt<kNsteer; iopt++){
      if(!sopt.Contains(fgSteerFlags[iopt])) continue;
      SETFLG(fSteerParam, BIT(iopt));
      if(sopt.Contains("!")) CLRFLG(fSteerParam, BIT(iopt));
      processed = kTRUE;
      break;	
    }
    if(processed) continue;

    AliWarning(Form("Unknown option flag %s.", sopt.Data()));
  }
  opar->Delete();
  delete opar;
}

//_____________________________________________________________________________
void AliTRDReconstructor::Options(UInt_t steer)
{
  //
  // Print the options
  //

  for(Int_t iopt=0; iopt<kNsteer; iopt++){
    AliDebugGeneral("AliTRDReconstructor", 1, Form(" %s[%s]%s", fgSteerNames[iopt], fgSteerFlags[iopt], steer ?(((steer>>iopt)&1)?" : ON":" : OFF"):""));
  }
}


//_____________________________________________________________________________
TClonesArray* AliTRDReconstructor::GetClusters()
{
// Build/ Retrieve cluster array
  if(!fgClusters){
    fgClusters = new TClonesArray("AliTRDcluster", Int_t(GetRecoParam()->GetNClusters()));
    fgClusters->SetOwner();
    AliInfoGeneral("AliTRDReconstructor", Form("Allocate cluster array @ %p", (void*)fgClusters));
  }
  return fgClusters;
}

//_____________________________________________________________________________
TClonesArray* AliTRDReconstructor::GetTracklets(const char *trkltype)
{
// Build/ Retrieve online tracklets array

  if (trkltype && strlen(trkltype) > 0) {
    if(fgTracklets && (TClass::GetClass(trkltype) != fgTracklets->GetClass())){
      fgTracklets->Delete();
      delete fgTracklets;
    }
    if (!fgTracklets) {
      fgTracklets = new TClonesArray(trkltype, 200);
      fgTracklets->SetOwner(kTRUE);
      AliInfoGeneral("AliTRDReconstructor", Form("Allocate online tracklets[%s] array @ %p", trkltype, (void*)fgTracklets));
    }
  }
  return fgTracklets;
}

//_____________________________________________________________________________
TClonesArray* AliTRDReconstructor::GetTracks()
{
// Build/ Retrieve cluster array
  if(!fgTracks){
    fgTracks = new TClonesArray("AliESDTrdTrack", 100);
    fgTracks->SetOwner();
    AliInfoGeneral("AliTRDReconstructor", Form("Allocate online tracks array @ %p", (void*)fgTracks));
  }
  return fgTracks;
}

//_____________________________________________________________________________
void AliTRDReconstructor::ResetContainers() const
{
// prepare data containers for a new event

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