ROOT logo
/*

  .L $ALICE_ROOT/TPC/macros/AliEveTree.C+
  MakeEveTree();
  
  TFile fesd("AliESDs.root");
  TTree * treeESD = (TTree*)fesd.Get("esdTree");



  TFile ftpc("TPCdebug.root");
  TFile fits("ITSdebug.root");
  TTree * treeTPC = (TTree*)ftpc.Get("Transform");
  TTree * treeITS = (TTree*)fits.Get("Clusters");
    
  treeTPC->Draw("gx2/sqrt(gx0^2+gx1^2):sqrt(gx0^2+gx1^2)>>his(100,0,200,100,-1,1)","event==4","")
  treeITS->Draw("gz/sqrt(gx^2+gy^2):sqrt(gx^2+gy^2)>>his(100,0,200,100,-1,1)","event==4","same")
  
  treeTPC->Draw("atan2(gx1,gx0):sqrt(gx0^2+gx1^2)>>his(100,0,200,100,-1,1)","event==4","*")
  treeITS->Draw("atan2(gy,gx):sqrt(gx^2+gy^2)>>his(100,0,200,100,-1,1)","event==4","same*");

*/
#include "TFile.h"
#include "TTree.h"
#include "TTreeStream.h"
#include "TPolyMarker3D.h"
#include "TVectorD.h"

#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliESDfriendTrack.h"
#include "AliTrackPointArray.h"


AliTrackPointArray* MakeArray(TPolyMarker3D *pol);
void MakeESDTree(AliESDEvent*esd, TTreeSRedirector &cstream);

void MakeEveTree(){
  TFile fesd("AliESDs.root");
  TTree * esdTree = (TTree*)fesd.Get("esdTree");
  AliESDEvent cesd; 
  esdTree->SetBranchStatus("*",kTRUE);
  cesd.ReadFromTree(esdTree);
  TTreeSRedirector cstream("eveTree.root");
  for (Int_t ievent=0; ievent<esdTree->GetEntries();ievent++) {
    //cout<<endl<<endl<<"********* Processing event number: "<<event<<"*******\n";
    esdTree->GetEvent(ievent);
    AliESDfriend *fESDfriend =  (AliESDfriend*)cesd.FindListObject("AliESDfriend");
    cesd.SetESDfriend(fESDfriend);
    MakeESDTree(&cesd,cstream);
  }
}


void MakeESDTree(AliESDEvent*esd, TTreeSRedirector &cstream){
  //
  //
  //
  Float_t bz = esd->GetMagneticField();
  //AliTPCseed dummyTPC;
  //AliTPCseed dummyTRD;
  for (Int_t i=0;i<esd->GetNumberOfTracks(); i++){
    AliESDtrack * track = esd->GetTrack(i);
    if (!track) continue;
    TPolyMarker3D polA;
    TPolyMarker3D polV;
    TPolyMarker3D polI;
    TPolyMarker3D polO;
    //
    AliTrackPointArray * arrayA=0;
    AliTrackPointArray * arrayV=0;
    AliTrackPointArray * arrayI=0;
    AliTrackPointArray * arrayO=0;
    //
    if (track->GetInnerParam()) {
      ((AliExternalTrackParam*)track->GetInnerParam())->FillPolymarker(&polA,bz,0,350,1);}
    else{
      track->FillPolymarker(&polA,bz,0,300,5);
    }
    arrayA=MakeArray(&polA);
    track->FillPolymarker(&polV,bz,0,60,1);
    arrayV=MakeArray(&polV);
    if (track->GetInnerParam()) {
      ((AliExternalTrackParam*)track->GetInnerParam())->FillPolymarker(&polI,bz,60,170,1);
      arrayI = MakeArray(&polI);
    }
    if (track->GetOuterParam()) {
      ((AliExternalTrackParam*)track->GetOuterParam())->FillPolymarker(&polO,bz,170,350,1);    
      arrayO=MakeArray(&polO);
    }
    static  AliTrackPointArray cldummy(5);
    AliTrackPointArray *clarray= &cldummy;
    const AliESDfriendTrack *ftrack = track->GetFriendTrack();
    if (ftrack && ftrack->GetTrackPointArray()) {
      clarray=(AliTrackPointArray *)ftrack->GetTrackPointArray();
    }
    Int_t event = esd->GetEventNumberInFile();
    Int_t id = track->GetID();
    cstream<<"Tracks"<<
      "eventNr="<<event<<
      "trackNr="<<id<<
      "Tr.="<<track<<
      "Cl.="<<clarray<<
      //
      "pA.="<<&polA<<
      "pV.="<<&polV<<
      "pI.="<<&polI<<
      "pO.="<<&polO<<
      //
      "aA.="<<arrayA<<
      "aV.="<<arrayV<<
      "aI.="<<arrayI<<
      "aO.="<<arrayO<<
      "\n";
  }
}



AliTrackPointArray *MakeArray(TPolyMarker3D *pol){
  //
  // Make a aray of  points with errors
  //
  Int_t entries = pol->GetN();
  AliTrackPointArray * array = new AliTrackPointArray(entries);
  for (Int_t i=0;i<entries;i++){
    Double_t xyz[3]={0,0,0};
    pol->GetPoint(i,xyz[0],xyz[1],xyz[2]);
    ((Float_t*)array->GetX())[i]=xyz[0];
    ((Float_t*)array->GetY())[i]=xyz[1];
    ((Float_t*)array->GetZ())[i]=xyz[2];
  }
  return array;
}

 AliEveTree.C:1
 AliEveTree.C:2
 AliEveTree.C:3
 AliEveTree.C:4
 AliEveTree.C:5
 AliEveTree.C:6
 AliEveTree.C:7
 AliEveTree.C:8
 AliEveTree.C:9
 AliEveTree.C:10
 AliEveTree.C:11
 AliEveTree.C:12
 AliEveTree.C:13
 AliEveTree.C:14
 AliEveTree.C:15
 AliEveTree.C:16
 AliEveTree.C:17
 AliEveTree.C:18
 AliEveTree.C:19
 AliEveTree.C:20
 AliEveTree.C:21
 AliEveTree.C:22
 AliEveTree.C:23
 AliEveTree.C:24
 AliEveTree.C:25
 AliEveTree.C:26
 AliEveTree.C:27
 AliEveTree.C:28
 AliEveTree.C:29
 AliEveTree.C:30
 AliEveTree.C:31
 AliEveTree.C:32
 AliEveTree.C:33
 AliEveTree.C:34
 AliEveTree.C:35
 AliEveTree.C:36
 AliEveTree.C:37
 AliEveTree.C:38
 AliEveTree.C:39
 AliEveTree.C:40
 AliEveTree.C:41
 AliEveTree.C:42
 AliEveTree.C:43
 AliEveTree.C:44
 AliEveTree.C:45
 AliEveTree.C:46
 AliEveTree.C:47
 AliEveTree.C:48
 AliEveTree.C:49
 AliEveTree.C:50
 AliEveTree.C:51
 AliEveTree.C:52
 AliEveTree.C:53
 AliEveTree.C:54
 AliEveTree.C:55
 AliEveTree.C:56
 AliEveTree.C:57
 AliEveTree.C:58
 AliEveTree.C:59
 AliEveTree.C:60
 AliEveTree.C:61
 AliEveTree.C:62
 AliEveTree.C:63
 AliEveTree.C:64
 AliEveTree.C:65
 AliEveTree.C:66
 AliEveTree.C:67
 AliEveTree.C:68
 AliEveTree.C:69
 AliEveTree.C:70
 AliEveTree.C:71
 AliEveTree.C:72
 AliEveTree.C:73
 AliEveTree.C:74
 AliEveTree.C:75
 AliEveTree.C:76
 AliEveTree.C:77
 AliEveTree.C:78
 AliEveTree.C:79
 AliEveTree.C:80
 AliEveTree.C:81
 AliEveTree.C:82
 AliEveTree.C:83
 AliEveTree.C:84
 AliEveTree.C:85
 AliEveTree.C:86
 AliEveTree.C:87
 AliEveTree.C:88
 AliEveTree.C:89
 AliEveTree.C:90
 AliEveTree.C:91
 AliEveTree.C:92
 AliEveTree.C:93
 AliEveTree.C:94
 AliEveTree.C:95
 AliEveTree.C:96
 AliEveTree.C:97
 AliEveTree.C:98
 AliEveTree.C:99
 AliEveTree.C:100
 AliEveTree.C:101
 AliEveTree.C:102
 AliEveTree.C:103
 AliEveTree.C:104
 AliEveTree.C:105
 AliEveTree.C:106
 AliEveTree.C:107
 AliEveTree.C:108
 AliEveTree.C:109
 AliEveTree.C:110
 AliEveTree.C:111
 AliEveTree.C:112
 AliEveTree.C:113
 AliEveTree.C:114
 AliEveTree.C:115
 AliEveTree.C:116
 AliEveTree.C:117
 AliEveTree.C:118
 AliEveTree.C:119
 AliEveTree.C:120
 AliEveTree.C:121
 AliEveTree.C:122
 AliEveTree.C:123
 AliEveTree.C:124
 AliEveTree.C:125
 AliEveTree.C:126
 AliEveTree.C:127
 AliEveTree.C:128
 AliEveTree.C:129
 AliEveTree.C:130
 AliEveTree.C:131
 AliEveTree.C:132
 AliEveTree.C:133
 AliEveTree.C:134
 AliEveTree.C:135
 AliEveTree.C:136