#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;
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"
,"cw"
,"tw"
,"sa"
,"hlt"
,"tp"
,"deb"
,"cc"
};
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;
const Double_t AliTRDReconstructor::fgkMaxStep = 2.0;
const Double_t AliTRDReconstructor::fgkEpsilon = 1.e-5;
AliTRDReconstructor::AliTRDReconstructor()
:AliReconstructor()
,fSteerParam(0)
,fClusterizer(NULL)
{
SETFLG(fSteerParam, kOwner);
SETFLG(fSteerParam, kWriteClusters);
memset(fDebugStream, 0, sizeof(TTreeSRedirector *) * AliTRDrecoParam::kTRDreconstructionTasks);
}
AliTRDReconstructor::~AliTRDReconstructor()
{
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(){
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));
}
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
{
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
{
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
{
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();
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
{
AliTRDtrackerV1 *tracker = new AliTRDtrackerV1();
tracker->SetReconstructor(this);
AliInfo(Form("Build TRD tracker[%p]", (void*)tracker));
return tracker;
}
void AliTRDReconstructor::FillESD(TTree*
, TTree*
, AliESDEvent* esd) const
{
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;
if (AliTRDtrackletMCM *trklMCM = dynamic_cast<AliTRDtrackletMCM*> (tracklet)) label = trklMCM->GetLabel();
esd->AddTrdTracklet(tracklet->GetTrackletWord(), tracklet->GetHCId(), label);
}
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);
}
}
esd->AddTrdTrack(trdTrack);
}
}
esd->SetTrdTrigger(&fgTriggerFlags);
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)
{
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)
{
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()
{
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)
{
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()
{
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
{
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