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: AliTRDgtuSim.cxx 28397 2008-09-02 09:33:00Z cblume $ */

////////////////////////////////////////////////////////////////////////////
//                                                                        //
//  GTU simulation                                                        //
//                                                                        //
//  Authors: J. Klein (Jochen.Klein@cern.ch)                              //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <fstream>
#include <string>

#include "TFile.h"
#include "TROOT.h"
#include "TObject.h"
#include "TClonesArray.h"

#include "AliRun.h"
#include "AliRunLoader.h"
#include "AliLoader.h"
#include "AliTreeLoader.h"
#include "AliLog.h"
#include "AliESDTrdTrack.h"
#include "AliESDTrdTracklet.h"

#include "AliTRDgtuSim.h"
#include "AliTRDfeeParam.h"
#include "AliTRDgtuTMU.h"
#include "AliTRDtrackGTU.h"
#include "AliTRDtrackletWord.h"
#include "AliTRDtrackletMCM.h"
#include "AliESDEvent.h"

using std::ifstream;
ClassImp(AliTRDgtuSim)

AliTRDgtuSim::AliTRDgtuSim(AliRunLoader *rl)
  : TObject(),
  fRunLoader(rl),
  fFeeParam(AliTRDfeeParam::Instance()),
  fTMU(new AliTRDgtuTMU()),
  fTrackletArray(0x0)
{

}

AliTRDgtuSim::~AliTRDgtuSim()
{
  // destructor

  if (fTrackletArray)
    fTrackletArray->Clear();
  delete fTrackletArray;
  delete fTMU;
}

Bool_t AliTRDgtuSim::RunGTUFromTrackletFile(TString filename, Int_t event, Int_t noev)
{
  // run the GTU from a file of tracklets
  // used for comparison to VHDL simulation

  ifstream input(filename.Data());

  std::string str;
  TString string;
  int lineno = 0;

  Int_t iEventPrev = -1;
  Int_t iStackPrev = -1;
  Int_t iSecPrev = -1;
  Int_t iSec = -1;
  Int_t iStack = -1;
  Int_t iLink = -1;
  Int_t iEvent = -1;
  Int_t evcnt = -1;

  fTMU->Reset();
  Bool_t pendingTracklets = kFALSE;;

  TClonesArray trklArray("AliTRDtrackletWord", 100);
  TClonesArray trklArrayGTU("AliTRDtrackletGTU", 100);

  AliDebug(1, Form("--------- Reading from %s ----------", filename.Data()));
  while (getline(input, str)) {
    lineno++;
    string = str;

    TObjArray *tokens = string.Tokenize(" ");
    if (tokens->GetEntriesFast() < 7) {
      AliWarning(Form("Invalid input in line %i, too few parameters", lineno));
      delete tokens;
      continue;
    }

    if ( ((TObjString*) tokens->At(0))->GetString().Atoi() < event) {
      delete tokens;
      continue;
    }
    iEvent = ((TObjString*) tokens->At(0))->GetString().Atoi();
    iSec = ((TObjString*) tokens->At(1))->GetString().Atoi();
    iStack = ((TObjString*) tokens->At(2))->GetString().Atoi();
    iLink = 2 * ((TObjString*) tokens->At(3))->GetString().Atoi() + ((TObjString*) tokens->At(4))->GetString().Atoi();

    if ((iEvent != iEventPrev) ||
	(iStack != iStackPrev) ||
	(iSec != iSecPrev)) {
      if(pendingTracklets) {
	TList *listOfTracks = new TList();
	fTMU->SetStack(iStackPrev);
	fTMU->SetSector(iSecPrev);
	fTMU->RunTMU(listOfTracks);
	AliDebug(1,Form("--- There are %i tracks. Writing ...", listOfTracks->GetEntries()));
	WriteTracksToDataFile(listOfTracks, iEventPrev);
	if (listOfTracks->GetEntries() > 0)
	  AliDebug(2,Form("   %4.1f GeV/c", ((AliTRDtrackGTU*) listOfTracks->At(0))->GetPt() ));
	fTMU->Reset();
	delete listOfTracks;
      } else {
	pendingTracklets = kTRUE;
      }
      iStackPrev = iStack;
      iSecPrev = iSec;
      iEventPrev = iEvent;
      evcnt++;
      if (evcnt == noev)
	break;
    }
    for (Int_t i = 5; i < tokens->GetEntriesFast(); i++) {
      UInt_t trackletWord = 0;
      sscanf(((TObjString*) tokens->At(i))->GetString().Data(), "%i", &trackletWord);
      if (trackletWord == 0x10001000)
	break;
      AliDebug(2, Form("link: %2i trkl: %2i - %s -> 0x%08x",
		       iLink, i-4, ((TObjString*) tokens->At(i))->GetString().Data(), trackletWord));
      AliTRDtrackletWord *tracklet = new (trklArray[trklArray.GetEntriesFast()])       AliTRDtrackletWord(trackletWord);
      AliTRDtrackletGTU   *trkl    = new (trklArrayGTU[trklArrayGTU.GetEntriesFast()]) AliTRDtrackletGTU(tracklet);
      fTMU->AddTracklet(trkl, iLink);
    }
    //
    delete tokens;
  }

  if (pendingTracklets && evcnt < noev) {
    TList *listOfTracks = new TList();
    fTMU->SetStack(iStackPrev);
    fTMU->SetSector(iSecPrev);
    fTMU->RunTMU(listOfTracks);
    WriteTracksToDataFile(listOfTracks, iEventPrev);
    delete listOfTracks;
    fTMU->Reset();
  }

  AliInfo(Form("Analyzed %i events", evcnt));
  return kTRUE;
}

Bool_t AliTRDgtuSim::RunGTU(AliLoader *loader, AliESDEvent *esd, Int_t label, Int_t outLabel)
{
  // run the GTU on tracklets taken from the loader
  // if specified the GTU tracks are written to the ESD event

  if (!fFeeParam->GetTracklet())
    return kFALSE;

  if (fTrackletArray)
    fTrackletArray->Clear();

  if (loader) {
    if (!LoadTracklets(loader)) {
	AliError("Could not load the tracklets. Nothing done ...");
	return kFALSE;
    }
  }
  else {
    LoadTracklets(esd, label);
  }

    AliDebug(1, Form("running on %i tracklets", fTrackletArray->GetEntriesFast()));

    Int_t iStackPrev = -1;
    Int_t iSecPrev = -1;
    Int_t iSec = -1;
    Int_t iStack = -1;
    Int_t iLink = -1;

    fTMU->Reset();
    Bool_t pendingTracklets = kFALSE;
    TList *listOfTracks = new TList();

    TIter next(fTrackletArray);
    while (AliTRDtrackletGTU *trkl = (AliTRDtrackletGTU*) next()) {
	iSec = trkl->GetDetector() / 30;
	iStack = (trkl->GetDetector() % 30) / 6;
	iLink = trkl->GetHCId() % 12;

	if (iStack != iStackPrev || iSec != iSecPrev) {
	    if(pendingTracklets) {
		fTMU->SetStack(iStackPrev);
		fTMU->SetSector(iSecPrev);
		fTMU->RunTMU(listOfTracks, 0x0, outLabel);
		if (loader)
		  WriteTracksToLoader(listOfTracks);
		WriteTracksToESD(listOfTracks, esd);
		listOfTracks->Clear();
		fTMU->Reset();
	    } else {
	      pendingTracklets = kTRUE;
	    }
	    iStackPrev = iStack;
	    iSecPrev = iSec;
	    AliDebug(1, Form("now in sec %i, stack %i", iSec, iStack));
	}
	AliDebug(1, Form("adding tracklet: 0x%08x in sec %i stack %i link %i",
			 trkl->GetTrackletWord(), trkl->GetDetector() / 30, (trkl->GetDetector() % 30) / 6, trkl->GetHCId() % 12));
	fTMU->AddTracklet(trkl, iLink);
    }

    if (pendingTracklets) {
	fTMU->SetStack(iStackPrev);
	fTMU->SetSector(iSecPrev);
	fTMU->RunTMU(listOfTracks, 0x0, outLabel);
	if (loader)
	  WriteTracksToLoader(listOfTracks);
	WriteTracksToESD(listOfTracks, esd);
	listOfTracks->Clear();
	fTMU->Reset();
    }

    delete listOfTracks;

    return kTRUE;
}

Bool_t AliTRDgtuSim::LoadTracklets(const AliESDEvent *const esd, Int_t label)
{
  AliDebug(1,"Loading tracklets from ESD event ...");

  if (!fTrackletArray)
    fTrackletArray = new TClonesArray("AliTRDtrackletGTU", 1000);

  for (Int_t iTracklet = 0; iTracklet < esd->GetNumberOfTrdTracklets(); iTracklet++) {
    AliESDTrdTracklet *trkl = esd->GetTrdTracklet(iTracklet);
    if (label < -1) {
      if (trkl->GetLabel() == label)
	new ((*fTrackletArray)[fTrackletArray->GetEntries()]) AliTRDtrackletGTU(trkl);
    }
    else
      if (trkl->GetLabel() >= -1)
	new ((*fTrackletArray)[fTrackletArray->GetEntries()]) AliTRDtrackletGTU(trkl);
  }

  return kTRUE;
}

Bool_t AliTRDgtuSim::LoadTracklets(AliLoader *const loader)
{
  // load the tracklets using the given loader

  AliDebug(1,"Loading tracklets ...");

  if (!fFeeParam->GetTracklet())
    return kFALSE;

  if (!loader) {
    AliError("No loader given!");
    return kFALSE;
  }

  AliDataLoader *trackletLoader = loader->GetDataLoader("tracklets");
  if (!trackletLoader) {
      AliError("No tracklet loader found!");
      return kFALSE;
  }

  trackletLoader->Load();
  TTree *trackletTree = 0x0;

  // simulated tracklets
  trackletTree = trackletLoader->Tree();
  if (trackletTree) {
    TBranch *trklbranch = trackletTree->GetBranch("mcmtrklbranch");
    if (trklbranch) {
      if (!fTrackletArray)
	fTrackletArray = new TClonesArray("AliTRDtrackletGTU", 1000);

      AliTRDtrackletMCM *trkl = 0x0;
      trklbranch->SetAddress(&trkl);
      for (Int_t iTracklet = 0; iTracklet < trklbranch->GetEntries(); iTracklet++) {
	trklbranch->GetEntry(iTracklet);
	new ((*fTrackletArray)[fTrackletArray->GetEntries()]) AliTRDtrackletGTU(new AliTRDtrackletMCM(*trkl));
	((AliTRDtrackletGTU *)((*fTrackletArray)[fTrackletArray->GetEntries()-1]))->SetMCMtrackletIndex(iTracklet);
      }
      return kTRUE;
    }
  }

  // raw tracklets
  AliTreeLoader *tl = (AliTreeLoader*) trackletLoader->GetBaseLoader("tracklets-raw");
  trackletTree = tl ? tl->Load(), tl->Tree() : 0x0;

  if (trackletTree) {
    if (!fTrackletArray)
      fTrackletArray = new TClonesArray("AliTRDtrackletGTU", 1000);

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

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

  AliError("No raw tracklet tree found\n");

  return kFALSE;
}

Bool_t AliTRDgtuSim::WriteTracksToDataFile(TList *listOfTracks, Int_t event)
{
  // write the found tracks to a data file
  // used for comparison to VHDL simulation

    Int_t sm = 0;
    Int_t stack = 0;

    FILE *out;
    out = fopen("test.data", "a");

    AliDebug(1,Form("%i tracks found in event %i", listOfTracks->GetSize(), event));
    // fprintf(out, "0 %5i %2i %i  00000000\n", event, sm, stack);
    for (Int_t i = 0; i < listOfTracks->GetSize(); i++) {
	AliTRDtrackGTU *trk = (AliTRDtrackGTU*) listOfTracks->At(i);
	sm = trk->GetSector();
	stack = trk->GetStack();

	ULong64_t trackWord = 1;
	AppendBits(trackWord,   1, 0);
	AppendBits(trackWord,   6, trk->GetTrackletMask());
	AppendBits(trackWord,  18, (Int_t) trk->GetA());
	AppendBits(trackWord,  18, (Int_t) trk->GetB());
	AppendBits(trackWord,  12, (Int_t) trk->GetC());
	AppendBits(trackWord,   8, trk->GetPID());
	fprintf(out, "ev. %i sec. %i stack %i - track word: 0x%016llx, ",
		event, sm, stack, trackWord);

	trackWord = 0;
	AppendBits(trackWord, 11, 0); // flags
	AppendBits(trackWord,  3, 0);
	AppendBits(trackWord, 13, trk->GetYapprox());
	AppendBits(trackWord,  6, trk->GetTrackletIndex(5));
	AppendBits(trackWord,  6, trk->GetTrackletIndex(4));
	AppendBits(trackWord,  6, trk->GetTrackletIndex(3));
	AppendBits(trackWord,  6, trk->GetTrackletIndex(2));
	AppendBits(trackWord,  6, trk->GetTrackletIndex(1));
	AppendBits(trackWord,  6, trk->GetTrackletIndex(0));
	fprintf(out, "extended track word: 0x%016llx\n", trackWord);

	fprintf(out, "1 %5i %2i %2i %3i %3i %3i %3i %3i %3i %3i %4i %f\n", event, sm, stack, trk->GetTrackletMask(),
	       trk->GetTrackletIndex(5),
	       trk->GetTrackletIndex(4),
	       trk->GetTrackletIndex(3),
	       trk->GetTrackletIndex(2),
	       trk->GetTrackletIndex(1),
	       trk->GetTrackletIndex(0),
	       trk->GetPtInt(),
	       trk->GetPt());
    }
    fclose(out);
    return kTRUE;
}

Bool_t AliTRDgtuSim::WriteTracksToESD(const TList * const listOfTracks, AliESDEvent *esd)
{
  // fill the found tracks to the given ESD event

    if (esd) {
	TIter next(listOfTracks);
	while (AliTRDtrackGTU *trk = (AliTRDtrackGTU*) next()) {
	    AliESDTrdTrack *trdtrack = trk->CreateTrdTrack();
	    esd->AddTrdTrack(trdtrack);
	    delete trdtrack;
	}
    }
    return kTRUE;
}

Bool_t AliTRDgtuSim::WriteTracksToLoader(const TList * const listOfTracks)
{
  // write the GTU tracks to the dedicated loader
  // these tracks contain more information than the ones in the ESD

  AliRunLoader *rl = AliRunLoader::Instance();
  AliDataLoader *dl = 0x0;
  if (rl)
    dl = rl->GetLoader("TRDLoader")->GetDataLoader("gtutracks");
  if (!dl) {
    AliError("Could not get the GTU-track data loader!");
    return kFALSE;
  }

  TTree *trackTree = dl->Tree();
  if (!trackTree) {
    dl->MakeTree();
    trackTree = dl->Tree();
  }

  AliTRDtrackGTU *trk = 0x0;

  if (!trackTree->GetBranch("TRDtrackGTU"))
    trackTree->Branch("TRDtrackGTU", "AliTRDtrackGTU", &trk, 32000);

  AliDebug(1, Form("Writing %i tracks to loader", listOfTracks->GetEntries()));
  TIter next(listOfTracks);
  while ((trk = (AliTRDtrackGTU*) next())) {
    trackTree->SetBranchAddress("TRDtrackGTU", &trk);
    trackTree->Fill();
  }

  dl->WriteData("OVERWRITE");

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