ROOT logo
#define PointMaker_cxx
// The class definition in esdTree.h has been generated automatically
// by the ROOT utility TTree::MakeSelector(). This class is derived
// from the ROOT class TSelector. For more information on the TSelector
// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual.

// The following methods are defined in this file:
//    Begin():        called everytime a loop on the tree starts,
//                    a convenient place to create your histograms.
//    SlaveBegin():   called after Begin(), when on PROOF called only on the
//                    slave servers.
//    Process():      called for each event, in this function you decide what
//                    to read and fill your histograms.
//    SlaveTerminate: called at the end of the loop on the tree, when on PROOF
//                    called only on the slave servers.
//    Terminate():    called at the end of the loop on the tree,
//                    a convenient place to draw/fit your histograms.
//

// To do: rewrite as AliAnalysisTaskSE.(like initiated by Alex at some point)

#include <TROOT.h>
#include <TStyle.h>
#include <TLinearFitter.h>
#include "AliAlignObjParams.h"
#include "AliTrackPointArray.h"
#include "AliLog.h"
#include "PointMaker.h"
//=============================================================================
PointMaker::PointMaker(char *outfil) :
  TSelector(),
  fChain(0),
  fESD(0),
  //  fESDfriend(0),
  fFile(0),
  fTree(0),
  fArray(0),
  fNevents(0),
  fNtracks(0),
  fNAcceptedTracks(0),
  fOutfil(outfil)
{
  // Constructor. Initialization of pointers
}
//=============================================================================
PointMaker::~PointMaker() {
  // Remove all pointers

  //  delete fESD;

  // histograms are in the output list and deleted when the output
  // list is deleted by the TSelector dtor
  delete fFile;
}
//=============================================================================
void PointMaker::Begin(TTree *)
{
  // The Begin() function is called at the start of the query.
  // When running with PROOF Begin() is only called on the client.
  // The tree argument is deprecated (on PROOF 0 is passed).

  TString option = GetOption();

  // create output file and tree  - TEMPORARY -until root trees are merged in the memory
  fFile = TFile::Open(fOutfil.Data(), "RECREATE",0);
  fTree = new TTree("spTree", "Tree with track space point arrays");
  fTree->Branch("SP","AliTrackPointArray", &fArray);
  printf("Begin called\n");
}
//=============================================================================
void PointMaker::SlaveBegin(TTree * tree)
{
  // The SlaveBegin() function is called after the Begin() function.
  // When running with PROOF SlaveBegin() is called on each slave server.
  // The tree argument is deprecated (on PROOF 0 is passed).

  Init(tree);

  AliAlignObjParams alobj;  // initialize align obj.  
  TString option = GetOption();

  // histograms to monitor cut efficiency and module population
  fCuttra = new TH1D("cuttra","cuttra",20,0.5,20.5); 
  fCutpoi = new TH1D("cutpoi","cutpoi",20,0.5,20.5);
  fModpop = new TH2D("modpop","modpop",90,-0.5,89.5,30,-0.5,29.5);
  fModpop->SetXTitle("module nr");
  fModpop->SetYTitle("layer nr");
  printf("SlaveBegin called\n");
}
//=============================================================================
void PointMaker::Init(TTree *tree)
{
  // The Init() function is called when the selector needs to initialize
  // a new tree or chain. Typically here the branch addresses of the tree
  // will be set. It is normaly not necessary to make changes to the
  // generated code, but the routine can be extended by the user if needed.
  // Init() will be called many times when running with PROOF.

  // Set branch addresses
  if (tree == 0) return;
  fChain = tree;
  
  /*
  fChain->SetBranchAddress("ESD",&fESD);
  fChain->SetBranchStatus("ESDfriend*",1);
  fChain->SetBranchAddress("ESDfriend.",&fESDfriend);
  */
  
  fESD = new AliESDEvent();
  fChain->SetBranchStatus("ESDfriend*",1);
  fESD->ReadFromTree(fChain);
  fESDfriend = (AliESDfriend*)fESD->FindListObject("AliESDfriend");
  if(!fESDfriend) fChain->SetBranchAddress("ESDfriend.",&fESDfriend); 
  printf("Init called\n");
}
//=============================================================================
Bool_t PointMaker::Notify()
{
  // The Notify() function is called when a new file is opened. This
  // can be either for a new TTree in a TChain or when when a new TTree
  // is started when using PROOF. Typically here the branch pointers
  // will be retrieved. It is normaly not necessary to make changes
  // to the generated code, but the routine can be extended by the
  // user if needed.

  printf("Notify called\n");
  return kTRUE;
}
//=============================================================================
Bool_t PointMaker::IsIdenticalWithOneOf(AliTrackPoint *p, AliTrackPointArray *parray, int nmax) {

  // Is the point p identical with one of the points on the list parray?
  // This is a fix for aliroot 4-16-Rev-01 (and before) writing some 
  // spurious uninitialized points. 

  for (int i=0; i<parray->GetNPoints() && i<nmax; i++) {
    AliTrackPoint pa;
    parray->GetPoint(pa,i);
    //printf("comparing %7.3f with %7.3f\n",p->GetY(),pa.GetY());
    if (p->GetResidual(pa,0)<1e-8) return kTRUE;
    //printf("different\n");
  }
  return kFALSE;
}
//=============================================================================
Bool_t PointMaker::Process(Long64_t entry)
{
  // The Process() function is called for each entry in the tree (or possibly
  // keyed object in the case of PROOF) to be processed. The entry argument
  // specifies which entry in the currently loaded tree is to be processed.
  // It can be passed to either TTree::GetEntry() or TBranch::GetEntry()
  // to read either all or the required parts of the data. When processing
  // keyed objects with PROOF, the object is already loaded and is available
  // via the fObject pointer.
  //
  // This function should contain the "body" of the analysis. It can contain
  // simple or elaborate selection criteria, run algorithms on the data
  // of the event and typically fill histograms.

  // WARNING when a selector is used with a TChain, you must use
  //  the pointer to the current TTree to call GetEntry(entry).
  //  The entry is always the local entry number in the current tree.
  //  Assuming that fChain is the pointer to the TChain being processed,
  //  use fChain->GetTree()->GetEntry(entry).

  fChain->GetTree()->GetEntry(entry);
  fESD->SetESDfriend(fESDfriend);

  TLinearFitter fitter(2, "pol1");
  TLinearFitter fitterz(2, "pol1");

  // track cuts

  int tpc = 0; // require tpc
  int ptu = 0; // require certain pt's (magnetic field and tpc presumably on)

  const Float_t kMaxDelta       = 1;
  const Float_t kMinNcl         = 60;
  const Float_t kMinPtLow       = 0.2;
  const Float_t kMinNclLow      = 100;
  const Float_t kMinPt0         = 2;
  UInt_t status = AliESDtrack::kTRDrefit; 
  if (tpc) status |= AliESDtrack::kTPCrefit; 

  const Float_t kMinRadius2  = 2*2;
  const Float_t kMaxRadius2  = 400*400;
  const Float_t kDeadSpace   = 4;
  const Float_t kTan = TMath::Tan(10*TMath::DegToRad());
  Int_t ntracks = fESD->GetNumberOfTracks();
  const AliTrackPointArray *array = 0;
  AliTrackPointArray *tmpArray = 0;
  // trdarray contains all trd points in this event, for duplication detection
  AliTrackPointArray *trdarray = new AliTrackPointArray(1000);
  int ntrdarray = 0;

  int pr = (!gROOT->IsBatch());
  for (Int_t itrack=0; itrack < ntracks; itrack++) {
    if (pr) printf("\revent %d   track %d",fNevents,itrack);
    fCuttra->Fill(1);
    AliESDtrack * track = fESD->GetTrack(itrack);
    fNtracks++;
    if (!track) continue;
    fCuttra->Fill(2);
    //if ((track->GetStatus() & status) == 0) continue;
    fCuttra->Fill(3);
    if (track->GetKinkIndex(0)!=0) continue;
    fCuttra->Fill(4);
    if (tpc) if (track->GetTPCNcls()<kMinNcl) continue;
    fCuttra->Fill(5);
    if (ptu) if (track->GetP() < kMinPtLow) continue;
    fCuttra->Fill(6);
    if (ptu) if (track->GetP() < kMinPt0 && track->GetTPCNcls()<kMinNclLow) continue;
    fCuttra->Fill(7);
    //
    // select points
    //
    array = track->GetTrackPointArray();    
    if (!array) continue;
    Int_t npoints = array->GetNPoints();
    if (tmpArray) delete tmpArray;
    tmpArray = new AliTrackPointArray(npoints);
    Int_t current = 0;
    int ntpc = 0; // number of good TPC points
    int ntrd = 0; // number of good TRD points
    for (Int_t ipoint=0; ipoint<npoints; ipoint++){
      fCutpoi->Fill(1);
      AliTrackPoint p;
      array->GetPoint(p, ipoint);

      // filter buggy points

      UShort_t volid = array->GetVolumeID()[ipoint];
      Int_t iModule;
      AliGeomManager::ELayerID layer = AliGeomManager::VolUIDToLayer(volid,iModule);
      if ((layer < AliGeomManager::kFirstLayer) || (layer >= AliGeomManager::kLastLayer)) continue;
      fCutpoi->Fill(2);
      if ((iModule >= AliGeomManager::LayerSize(layer)) || (iModule < 0)) continue;
      fCutpoi->Fill(3);
      Float_t r2 = p.GetX()*p.GetX()+p.GetY()*p.GetY();
      if ( r2<kMinRadius2 || r2 > kMaxRadius2 ) continue;
      fCutpoi->Fill(4);

      // TPC clusters handling

      if (layer>=AliGeomManager::kTPC1 && layer<=AliGeomManager::kTPC2){
	// invalid covariance 
	if (p.GetCov()[0]<0 || p.GetCov()[3]<0 ||  p.GetCov()[5]<0) continue;
	fCutpoi->Fill(7);

	// remove edge clusters

	AliTrackPoint& plocal = p.MasterToLocal();
	Double_t ylocal  = plocal.GetY();
	Double_t zlocal  = plocal.GetZ();
	Double_t xlocal  = plocal.GetX();
	Float_t edgey = TMath::Abs(plocal.GetX()*kTan);
	Int_t nclose=0;
	fitter.ClearPoints();
	fitterz.ClearPoints();
	for (Int_t jpoint=ipoint-7; jpoint<=ipoint+7; jpoint++){
	  if (jpoint<0 || jpoint>=npoints) continue;
	  if (ipoint==jpoint) continue;
	  UShort_t volidL = array->GetVolumeID()[jpoint];
	  if (volidL!=volid) continue;
	  AliTrackPoint pc;	
	  array->GetPoint(pc, jpoint);
	  AliTrackPoint &pcl=  pc.MasterToLocal();		  
	  Double_t dx = pcl.GetX()-xlocal;
	  fitter.AddPoint(&dx,pcl.GetY(),1);	  
	  fitterz.AddPoint(&dx,pcl.GetZ(),1);	  
	  nclose++;
	}
	if (nclose<6) continue;
	fCutpoi->Fill(8);
	fitter.Eval();
	fitterz.Eval();
	Double_t fity =fitter.GetParameter(0); 
	Double_t fitz =fitterz.GetParameter(0); 
	if (TMath::Abs(ylocal-fity)>kMaxDelta) continue;  //outlier
	fCutpoi->Fill(9);
	if (TMath::Abs(zlocal-fitz)>kMaxDelta) continue;  //outlier
	fCutpoi->Fill(10);
	if (TMath::Abs(fity)>edgey-kDeadSpace) continue;   // remove edge clusters
	fCutpoi->Fill(11);
	ntpc++;
      }
      fCutpoi->Fill(12);

      // TRD track points handling

      if (layer>=AliGeomManager::kTRD1 && layer<=AliGeomManager::kTRD6){
	fCutpoi->Fill(14);
	if (IsIdenticalWithOneOf(&p,trdarray,ntrdarray)) continue; // bug fix
	trdarray->AddPoint(ntrdarray++,&p);
	fCutpoi->Fill(15);
	fModpop->Fill(iModule,layer);
	ntrd++;
      }
      //printf("event %4d  track %4d  volid %4d  layer %4d  module %4d  %10.3f %10.3f %10.3f\n",
      //     (int)entry,itrack,volid,layer,iModule,p.GetX(),p.GetY(),atan2(p.GetY(),p.GetX())*180/3.1416);
      tmpArray->AddPoint(current,&p);
      current++;
      fCutpoi->Fill(16);
    }
    fCuttra->Fill(8);
    if (ntpc < 100) continue;
    fCuttra->Fill(9);
    if (ntrd < 4) continue;
    fCuttra->Fill(10);
    if (fArray) delete fArray;
    fArray = new AliTrackPointArray(current);
    for (Int_t ipoint=0; ipoint<current; ipoint++){
      AliTrackPoint p;
      tmpArray->GetPoint(p, ipoint);
      fArray->AddPoint(ipoint,&p);
    }   
    fNAcceptedTracks++;
    fTree->Fill();
  }
  delete trdarray;
  fNevents++;
  return kTRUE;
}
//=============================================================================
void PointMaker::SlaveTerminate()
{
  // The SlaveTerminate() function is called after all entries or objects
  // have been processed. When running with PROOF SlaveTerminate() is called
  // on each slave server.

  // Add the histograms to the output on each slave server
  AliInfo(Form("\nNumber of tracks:\tprocessed\t%d\taccepted\t%d", fNtracks, fNAcceptedTracks));
}
//=============================================================================
void PointMaker::Terminate()
{
  // The Terminate() function is the last function to be called during
  // a query. It always runs on the client, it can be used to present
  // the results graphically or save the results to file.

  //  fTree = dynamic_cast<TTree*>(fOutput->FindObject("spTree"));
  
  //  TFile* file = TFile::Open("AliTrackPoints.root", "RECREATE");
  fFile->cd();
  fTree->Write();
  fCuttra->Write();
  fCutpoi->Write();
  fModpop->Write();
  fModpop->Draw();
}
//=============================================================================
 AliTRDpointMaker.C:1
 AliTRDpointMaker.C:2
 AliTRDpointMaker.C:3
 AliTRDpointMaker.C:4
 AliTRDpointMaker.C:5
 AliTRDpointMaker.C:6
 AliTRDpointMaker.C:7
 AliTRDpointMaker.C:8
 AliTRDpointMaker.C:9
 AliTRDpointMaker.C:10
 AliTRDpointMaker.C:11
 AliTRDpointMaker.C:12
 AliTRDpointMaker.C:13
 AliTRDpointMaker.C:14
 AliTRDpointMaker.C:15
 AliTRDpointMaker.C:16
 AliTRDpointMaker.C:17
 AliTRDpointMaker.C:18
 AliTRDpointMaker.C:19
 AliTRDpointMaker.C:20
 AliTRDpointMaker.C:21
 AliTRDpointMaker.C:22
 AliTRDpointMaker.C:23
 AliTRDpointMaker.C:24
 AliTRDpointMaker.C:25
 AliTRDpointMaker.C:26
 AliTRDpointMaker.C:27
 AliTRDpointMaker.C:28
 AliTRDpointMaker.C:29
 AliTRDpointMaker.C:30
 AliTRDpointMaker.C:31
 AliTRDpointMaker.C:32
 AliTRDpointMaker.C:33
 AliTRDpointMaker.C:34
 AliTRDpointMaker.C:35
 AliTRDpointMaker.C:36
 AliTRDpointMaker.C:37
 AliTRDpointMaker.C:38
 AliTRDpointMaker.C:39
 AliTRDpointMaker.C:40
 AliTRDpointMaker.C:41
 AliTRDpointMaker.C:42
 AliTRDpointMaker.C:43
 AliTRDpointMaker.C:44
 AliTRDpointMaker.C:45
 AliTRDpointMaker.C:46
 AliTRDpointMaker.C:47
 AliTRDpointMaker.C:48
 AliTRDpointMaker.C:49
 AliTRDpointMaker.C:50
 AliTRDpointMaker.C:51
 AliTRDpointMaker.C:52
 AliTRDpointMaker.C:53
 AliTRDpointMaker.C:54
 AliTRDpointMaker.C:55
 AliTRDpointMaker.C:56
 AliTRDpointMaker.C:57
 AliTRDpointMaker.C:58
 AliTRDpointMaker.C:59
 AliTRDpointMaker.C:60
 AliTRDpointMaker.C:61
 AliTRDpointMaker.C:62
 AliTRDpointMaker.C:63
 AliTRDpointMaker.C:64
 AliTRDpointMaker.C:65
 AliTRDpointMaker.C:66
 AliTRDpointMaker.C:67
 AliTRDpointMaker.C:68
 AliTRDpointMaker.C:69
 AliTRDpointMaker.C:70
 AliTRDpointMaker.C:71
 AliTRDpointMaker.C:72
 AliTRDpointMaker.C:73
 AliTRDpointMaker.C:74
 AliTRDpointMaker.C:75
 AliTRDpointMaker.C:76
 AliTRDpointMaker.C:77
 AliTRDpointMaker.C:78
 AliTRDpointMaker.C:79
 AliTRDpointMaker.C:80
 AliTRDpointMaker.C:81
 AliTRDpointMaker.C:82
 AliTRDpointMaker.C:83
 AliTRDpointMaker.C:84
 AliTRDpointMaker.C:85
 AliTRDpointMaker.C:86
 AliTRDpointMaker.C:87
 AliTRDpointMaker.C:88
 AliTRDpointMaker.C:89
 AliTRDpointMaker.C:90
 AliTRDpointMaker.C:91
 AliTRDpointMaker.C:92
 AliTRDpointMaker.C:93
 AliTRDpointMaker.C:94
 AliTRDpointMaker.C:95
 AliTRDpointMaker.C:96
 AliTRDpointMaker.C:97
 AliTRDpointMaker.C:98
 AliTRDpointMaker.C:99
 AliTRDpointMaker.C:100
 AliTRDpointMaker.C:101
 AliTRDpointMaker.C:102
 AliTRDpointMaker.C:103
 AliTRDpointMaker.C:104
 AliTRDpointMaker.C:105
 AliTRDpointMaker.C:106
 AliTRDpointMaker.C:107
 AliTRDpointMaker.C:108
 AliTRDpointMaker.C:109
 AliTRDpointMaker.C:110
 AliTRDpointMaker.C:111
 AliTRDpointMaker.C:112
 AliTRDpointMaker.C:113
 AliTRDpointMaker.C:114
 AliTRDpointMaker.C:115
 AliTRDpointMaker.C:116
 AliTRDpointMaker.C:117
 AliTRDpointMaker.C:118
 AliTRDpointMaker.C:119
 AliTRDpointMaker.C:120
 AliTRDpointMaker.C:121
 AliTRDpointMaker.C:122
 AliTRDpointMaker.C:123
 AliTRDpointMaker.C:124
 AliTRDpointMaker.C:125
 AliTRDpointMaker.C:126
 AliTRDpointMaker.C:127
 AliTRDpointMaker.C:128
 AliTRDpointMaker.C:129
 AliTRDpointMaker.C:130
 AliTRDpointMaker.C:131
 AliTRDpointMaker.C:132
 AliTRDpointMaker.C:133
 AliTRDpointMaker.C:134
 AliTRDpointMaker.C:135
 AliTRDpointMaker.C:136
 AliTRDpointMaker.C:137
 AliTRDpointMaker.C:138
 AliTRDpointMaker.C:139
 AliTRDpointMaker.C:140
 AliTRDpointMaker.C:141
 AliTRDpointMaker.C:142
 AliTRDpointMaker.C:143
 AliTRDpointMaker.C:144
 AliTRDpointMaker.C:145
 AliTRDpointMaker.C:146
 AliTRDpointMaker.C:147
 AliTRDpointMaker.C:148
 AliTRDpointMaker.C:149
 AliTRDpointMaker.C:150
 AliTRDpointMaker.C:151
 AliTRDpointMaker.C:152
 AliTRDpointMaker.C:153
 AliTRDpointMaker.C:154
 AliTRDpointMaker.C:155
 AliTRDpointMaker.C:156
 AliTRDpointMaker.C:157
 AliTRDpointMaker.C:158
 AliTRDpointMaker.C:159
 AliTRDpointMaker.C:160
 AliTRDpointMaker.C:161
 AliTRDpointMaker.C:162
 AliTRDpointMaker.C:163
 AliTRDpointMaker.C:164
 AliTRDpointMaker.C:165
 AliTRDpointMaker.C:166
 AliTRDpointMaker.C:167
 AliTRDpointMaker.C:168
 AliTRDpointMaker.C:169
 AliTRDpointMaker.C:170
 AliTRDpointMaker.C:171
 AliTRDpointMaker.C:172
 AliTRDpointMaker.C:173
 AliTRDpointMaker.C:174
 AliTRDpointMaker.C:175
 AliTRDpointMaker.C:176
 AliTRDpointMaker.C:177
 AliTRDpointMaker.C:178
 AliTRDpointMaker.C:179
 AliTRDpointMaker.C:180
 AliTRDpointMaker.C:181
 AliTRDpointMaker.C:182
 AliTRDpointMaker.C:183
 AliTRDpointMaker.C:184
 AliTRDpointMaker.C:185
 AliTRDpointMaker.C:186
 AliTRDpointMaker.C:187
 AliTRDpointMaker.C:188
 AliTRDpointMaker.C:189
 AliTRDpointMaker.C:190
 AliTRDpointMaker.C:191
 AliTRDpointMaker.C:192
 AliTRDpointMaker.C:193
 AliTRDpointMaker.C:194
 AliTRDpointMaker.C:195
 AliTRDpointMaker.C:196
 AliTRDpointMaker.C:197
 AliTRDpointMaker.C:198
 AliTRDpointMaker.C:199
 AliTRDpointMaker.C:200
 AliTRDpointMaker.C:201
 AliTRDpointMaker.C:202
 AliTRDpointMaker.C:203
 AliTRDpointMaker.C:204
 AliTRDpointMaker.C:205
 AliTRDpointMaker.C:206
 AliTRDpointMaker.C:207
 AliTRDpointMaker.C:208
 AliTRDpointMaker.C:209
 AliTRDpointMaker.C:210
 AliTRDpointMaker.C:211
 AliTRDpointMaker.C:212
 AliTRDpointMaker.C:213
 AliTRDpointMaker.C:214
 AliTRDpointMaker.C:215
 AliTRDpointMaker.C:216
 AliTRDpointMaker.C:217
 AliTRDpointMaker.C:218
 AliTRDpointMaker.C:219
 AliTRDpointMaker.C:220
 AliTRDpointMaker.C:221
 AliTRDpointMaker.C:222
 AliTRDpointMaker.C:223
 AliTRDpointMaker.C:224
 AliTRDpointMaker.C:225
 AliTRDpointMaker.C:226
 AliTRDpointMaker.C:227
 AliTRDpointMaker.C:228
 AliTRDpointMaker.C:229
 AliTRDpointMaker.C:230
 AliTRDpointMaker.C:231
 AliTRDpointMaker.C:232
 AliTRDpointMaker.C:233
 AliTRDpointMaker.C:234
 AliTRDpointMaker.C:235
 AliTRDpointMaker.C:236
 AliTRDpointMaker.C:237
 AliTRDpointMaker.C:238
 AliTRDpointMaker.C:239
 AliTRDpointMaker.C:240
 AliTRDpointMaker.C:241
 AliTRDpointMaker.C:242
 AliTRDpointMaker.C:243
 AliTRDpointMaker.C:244
 AliTRDpointMaker.C:245
 AliTRDpointMaker.C:246
 AliTRDpointMaker.C:247
 AliTRDpointMaker.C:248
 AliTRDpointMaker.C:249
 AliTRDpointMaker.C:250
 AliTRDpointMaker.C:251
 AliTRDpointMaker.C:252
 AliTRDpointMaker.C:253
 AliTRDpointMaker.C:254
 AliTRDpointMaker.C:255
 AliTRDpointMaker.C:256
 AliTRDpointMaker.C:257
 AliTRDpointMaker.C:258
 AliTRDpointMaker.C:259
 AliTRDpointMaker.C:260
 AliTRDpointMaker.C:261
 AliTRDpointMaker.C:262
 AliTRDpointMaker.C:263
 AliTRDpointMaker.C:264
 AliTRDpointMaker.C:265
 AliTRDpointMaker.C:266
 AliTRDpointMaker.C:267
 AliTRDpointMaker.C:268
 AliTRDpointMaker.C:269
 AliTRDpointMaker.C:270
 AliTRDpointMaker.C:271
 AliTRDpointMaker.C:272
 AliTRDpointMaker.C:273
 AliTRDpointMaker.C:274
 AliTRDpointMaker.C:275
 AliTRDpointMaker.C:276
 AliTRDpointMaker.C:277
 AliTRDpointMaker.C:278
 AliTRDpointMaker.C:279
 AliTRDpointMaker.C:280
 AliTRDpointMaker.C:281
 AliTRDpointMaker.C:282
 AliTRDpointMaker.C:283
 AliTRDpointMaker.C:284
 AliTRDpointMaker.C:285
 AliTRDpointMaker.C:286
 AliTRDpointMaker.C:287
 AliTRDpointMaker.C:288
 AliTRDpointMaker.C:289
 AliTRDpointMaker.C:290
 AliTRDpointMaker.C:291
 AliTRDpointMaker.C:292
 AliTRDpointMaker.C:293
 AliTRDpointMaker.C:294
 AliTRDpointMaker.C:295
 AliTRDpointMaker.C:296
 AliTRDpointMaker.C:297
 AliTRDpointMaker.C:298
 AliTRDpointMaker.C:299
 AliTRDpointMaker.C:300
 AliTRDpointMaker.C:301
 AliTRDpointMaker.C:302
 AliTRDpointMaker.C:303
 AliTRDpointMaker.C:304
 AliTRDpointMaker.C:305
 AliTRDpointMaker.C:306
 AliTRDpointMaker.C:307
 AliTRDpointMaker.C:308
 AliTRDpointMaker.C:309
 AliTRDpointMaker.C:310
 AliTRDpointMaker.C:311
 AliTRDpointMaker.C:312
 AliTRDpointMaker.C:313
 AliTRDpointMaker.C:314
 AliTRDpointMaker.C:315
 AliTRDpointMaker.C:316
 AliTRDpointMaker.C:317
 AliTRDpointMaker.C:318
 AliTRDpointMaker.C:319
 AliTRDpointMaker.C:320
 AliTRDpointMaker.C:321
 AliTRDpointMaker.C:322
 AliTRDpointMaker.C:323
 AliTRDpointMaker.C:324
 AliTRDpointMaker.C:325
 AliTRDpointMaker.C:326
 AliTRDpointMaker.C:327
 AliTRDpointMaker.C:328
 AliTRDpointMaker.C:329
 AliTRDpointMaker.C:330
 AliTRDpointMaker.C:331
 AliTRDpointMaker.C:332
 AliTRDpointMaker.C:333
 AliTRDpointMaker.C:334
 AliTRDpointMaker.C:335
 AliTRDpointMaker.C:336
 AliTRDpointMaker.C:337
 AliTRDpointMaker.C:338
 AliTRDpointMaker.C:339
 AliTRDpointMaker.C:340
 AliTRDpointMaker.C:341
 AliTRDpointMaker.C:342
 AliTRDpointMaker.C:343
 AliTRDpointMaker.C:344
 AliTRDpointMaker.C:345
 AliTRDpointMaker.C:346
 AliTRDpointMaker.C:347
 AliTRDpointMaker.C:348
 AliTRDpointMaker.C:349
 AliTRDpointMaker.C:350
 AliTRDpointMaker.C:351
 AliTRDpointMaker.C:352