ROOT logo
#ifndef __CINT__
#include "alles.h"
#include "AliComplexCluster.h"
//#include "AliTPCclusterM.h"
#include "AliTPCclusterMI.h"
#endif


Int_t AliTPCCompareTracks(Int_t eventn, Bool_t all = kFALSE) {
   cerr<<"Comparing tracks...\n";
   //CONNECT FILES
   TFile *file=TFile::Open("galice.root");
   if (!file->IsOpen()) {cerr<<"Can't open galice.root !\n"; return 1;}
   //
   TFile *ftracks=TFile::Open("AliTPCtracks.root","update");
   if (!ftracks->IsOpen()){cerr<<"Can't open AliTPCtracks.root !\n"; return 3;}
   //
   AliTPCParam *param=(AliTPCParam *)file->Get("75x40_100x60_150x60");
   if (!param) {cerr<<"TPC parameters have not been found !\n"; return 2;}   
   //
   TFile *fout=TFile::Open("AliTPCTracksDif.root","new"); 
   if (!fout->IsOpen()) fout=TFile::Open("AliTPCClustersDif.root","recreate");  
   //
   //connect exact clusters 
   file->cd();
   AliTPCClustersArray *ce=new AliTPCClustersArray;
   ce->Setup(param);
   ce->SetClusterType("AliComplexCluster");
   char  cname[100];
   sprintf(cname,"TreeCExact_%d",eventn);
   ce->ConnectTree(cname);
   //
   //connect reconstructed tracks
   ftracks->cd();
   sprintf(cname,"Seeds");
   TTree * treetracks = (TTree*)ftracks->Get(cname);
   TBranch * branchtracks = treetracks->GetBranch("seeds");   
   //
   //load seeds to the memory
   Int_t trackmap[500000][4];  // map of tracks corresponding to given track number
   memset(trackmap,0,sizeof(Int_t)*4*500000);
   Int_t ntracks = treetracks->GetEntries();
   TObjArray * trackarr= new TObjArray(ntracks);
   Int_t nproces = TMath::Min(ntracks,4000);

   //   for (Int_t itrack =0; itrack<ntracks; itrack++){
   for (Int_t itrack =0; itrack<nproces; itrack++){
     AliTPCseed * seed = new AliTPCseed;  
     //
     seed->fPoints = new TClonesArray("AliTPCTrackPoint",200);
     branchtracks->SetAddress(&seed); 
     branchtracks->GetEntry(itrack);

     //if (seed->fRemoval>0 && (itrack%4) ) continue;
     trackarr->AddLast(seed);    

     //crete array with exact position information
     seed->fEPoints = new TClonesArray("AliTPCTrackPointRef",1);
     seed->fEPoints->ExpandCreateFast(200);

     Int_t label = TMath::Abs(seed->GetLabel());
     Int_t i;
     if (label>500000) {
       //too big track label
     }else{
       for (i=0;i<4;i++) {
	 if ( trackmap[label][i]==0) 
	   break;
       }
       if(i<4) trackmap[label][i]=itrack;
     }
   }

   //add information about exact positions   
   Int_t nrows=Int_t(ce->GetTree()->GetEntries());

   for (Int_t n=0; n<nrows; n++) {
       AliSegmentID *se=ce->LoadEntry(n);
       Int_t sec,row;
       param->AdjustSectorRow(se->GetID(),sec,row);
       //
       AliTPCClustersRow* clrowe = ce->GetRow(sec,row);
       //
       Int_t ncl=clrowe->GetArray()->GetEntriesFast();
       const Int_t kNIS=param->GetNInnerSector(), kNOS=param->GetNOuterSector();
       Int_t npads, sign;
       if (sec < kNIS) {
          npads = param->GetNPadsLow(row);
          sign = (sec < kNIS/2) ? 1 : -1;
       } else {
          npads = param->GetNPadsUp(row);
          sign = ((sec-kNIS) < kNOS/2) ? 1 : -1;
       }
       
       Int_t trrow = row;
       if (sec>=param->GetNInnerSector()) trrow += param->GetNRowLow(); 
       
       while (ncl--) {
	   AliComplexCluster *cl=(AliComplexCluster*)(clrowe->GetArray()->At(ncl));
           Double_t x=param->GetPadRowRadii(sec,row);
	   Double_t y=cl->fY;
	   y = ( y + 0.5 -  0.5*npads) *param->GetPadPitchWidth(sec);
	   Double_t z=cl->fX*param->GetZWidth();
	   z = sign*(param->GetZLength() - z);
           Float_t cs, sn, tmp;
           param->AdjustCosSin(sec,cs,sn);
	   for (Int_t i=0;i<3;i++){
	     if (cl->fTracks[0]<500000) if (trackmap[cl->fTracks[0]][i]) {
	       AliTPCseed * seed = (AliTPCseed*)trackarr->At(trackmap[cl->fTracks[0]][i]);
	       TClonesArray * clarr = seed->fPoints;
	       if (!clarr){
		 //printf("Seed %d without info",trackmap[cl->fTracks[0]][i]);
		 continue;
	       }
	       AliTPCTrackPoint    * trcluster = (AliTPCTrackPoint*)(seed->fPoints->At(trrow));
	       AliTPCTrackPointRef * ecluster  = (AliTPCTrackPointRef*)(seed->fEPoints->At(trrow));
	       //
	       ecluster->GetCPoint() = trcluster->GetCPoint();
	       ecluster->GetTPoint() = trcluster->GetTPoint();
	       //
	       AliTPCExactPoint & epoint =  ecluster->GetExactPoint();
	       /*
		 trcluster->fEZ = z;
		 trcluster->fEY = y;
		 trcluster->fAngleY = cl->fSigmaY2*param->GetPadPitchLength(sec);
		 trcluster->fAngleZ = cl->fSigmaX2*param->GetPadPitchLength(sec);
		 trcluster->fEAmp = cl->fQ;
		 trcluster->fEPrim = cl->fMax;
	       */
	       epoint.fEZ = z;
	       epoint.fEY = y;
	       epoint.fEAngleY = cl->fSigmaY2*param->GetPadPitchLength(sec);
	       epoint.fEAngleZ = cl->fSigmaX2*param->GetPadPitchLength(sec);
	       epoint.fEAmp = cl->fQ;
	       epoint.fEPrim = cl->fMax;
	     }
	   } 
       }
       //       cr->ClearRow(sec,row);
       ce->ClearRow(sec,row);
   }

   // make new tree - with tracks - exact position
   fout->cd();
   TTree * treenew = new TTree("Seedref","Seedref");
   AliTPCseed *  ioseed  =   (AliTPCseed*)trackarr->At(0);   
   TBranch * br = treenew->Branch("seeds","AliTPCseed",&ioseed,32000,99);

   for (Int_t itrack =0; itrack<ntracks; itrack++){
     ioseed  =  (AliTPCseed*) trackarr->At(itrack); 
     br->SetAddress(&ioseed);
     treenew->Fill();
   }

   treenew->Write();
   printf("1\n");
   delete ce;
   printf("2\n");
   //delete cr;
   //   carray->GetTree()->Write();
   printf("3\n");
   //   delete carray;
   printf("4\n");
   //   cf->Close(); 
   printf("5\n");
   fout->Close(); 
   printf("6\n");
   ftracks->Close();
   printf("7\n");
   return 0;
}
 AliTPCCompareTracks.C:1
 AliTPCCompareTracks.C:2
 AliTPCCompareTracks.C:3
 AliTPCCompareTracks.C:4
 AliTPCCompareTracks.C:5
 AliTPCCompareTracks.C:6
 AliTPCCompareTracks.C:7
 AliTPCCompareTracks.C:8
 AliTPCCompareTracks.C:9
 AliTPCCompareTracks.C:10
 AliTPCCompareTracks.C:11
 AliTPCCompareTracks.C:12
 AliTPCCompareTracks.C:13
 AliTPCCompareTracks.C:14
 AliTPCCompareTracks.C:15
 AliTPCCompareTracks.C:16
 AliTPCCompareTracks.C:17
 AliTPCCompareTracks.C:18
 AliTPCCompareTracks.C:19
 AliTPCCompareTracks.C:20
 AliTPCCompareTracks.C:21
 AliTPCCompareTracks.C:22
 AliTPCCompareTracks.C:23
 AliTPCCompareTracks.C:24
 AliTPCCompareTracks.C:25
 AliTPCCompareTracks.C:26
 AliTPCCompareTracks.C:27
 AliTPCCompareTracks.C:28
 AliTPCCompareTracks.C:29
 AliTPCCompareTracks.C:30
 AliTPCCompareTracks.C:31
 AliTPCCompareTracks.C:32
 AliTPCCompareTracks.C:33
 AliTPCCompareTracks.C:34
 AliTPCCompareTracks.C:35
 AliTPCCompareTracks.C:36
 AliTPCCompareTracks.C:37
 AliTPCCompareTracks.C:38
 AliTPCCompareTracks.C:39
 AliTPCCompareTracks.C:40
 AliTPCCompareTracks.C:41
 AliTPCCompareTracks.C:42
 AliTPCCompareTracks.C:43
 AliTPCCompareTracks.C:44
 AliTPCCompareTracks.C:45
 AliTPCCompareTracks.C:46
 AliTPCCompareTracks.C:47
 AliTPCCompareTracks.C:48
 AliTPCCompareTracks.C:49
 AliTPCCompareTracks.C:50
 AliTPCCompareTracks.C:51
 AliTPCCompareTracks.C:52
 AliTPCCompareTracks.C:53
 AliTPCCompareTracks.C:54
 AliTPCCompareTracks.C:55
 AliTPCCompareTracks.C:56
 AliTPCCompareTracks.C:57
 AliTPCCompareTracks.C:58
 AliTPCCompareTracks.C:59
 AliTPCCompareTracks.C:60
 AliTPCCompareTracks.C:61
 AliTPCCompareTracks.C:62
 AliTPCCompareTracks.C:63
 AliTPCCompareTracks.C:64
 AliTPCCompareTracks.C:65
 AliTPCCompareTracks.C:66
 AliTPCCompareTracks.C:67
 AliTPCCompareTracks.C:68
 AliTPCCompareTracks.C:69
 AliTPCCompareTracks.C:70
 AliTPCCompareTracks.C:71
 AliTPCCompareTracks.C:72
 AliTPCCompareTracks.C:73
 AliTPCCompareTracks.C:74
 AliTPCCompareTracks.C:75
 AliTPCCompareTracks.C:76
 AliTPCCompareTracks.C:77
 AliTPCCompareTracks.C:78
 AliTPCCompareTracks.C:79
 AliTPCCompareTracks.C:80
 AliTPCCompareTracks.C:81
 AliTPCCompareTracks.C:82
 AliTPCCompareTracks.C:83
 AliTPCCompareTracks.C:84
 AliTPCCompareTracks.C:85
 AliTPCCompareTracks.C:86
 AliTPCCompareTracks.C:87
 AliTPCCompareTracks.C:88
 AliTPCCompareTracks.C:89
 AliTPCCompareTracks.C:90
 AliTPCCompareTracks.C:91
 AliTPCCompareTracks.C:92
 AliTPCCompareTracks.C:93
 AliTPCCompareTracks.C:94
 AliTPCCompareTracks.C:95
 AliTPCCompareTracks.C:96
 AliTPCCompareTracks.C:97
 AliTPCCompareTracks.C:98
 AliTPCCompareTracks.C:99
 AliTPCCompareTracks.C:100
 AliTPCCompareTracks.C:101
 AliTPCCompareTracks.C:102
 AliTPCCompareTracks.C:103
 AliTPCCompareTracks.C:104
 AliTPCCompareTracks.C:105
 AliTPCCompareTracks.C:106
 AliTPCCompareTracks.C:107
 AliTPCCompareTracks.C:108
 AliTPCCompareTracks.C:109
 AliTPCCompareTracks.C:110
 AliTPCCompareTracks.C:111
 AliTPCCompareTracks.C:112
 AliTPCCompareTracks.C:113
 AliTPCCompareTracks.C:114
 AliTPCCompareTracks.C:115
 AliTPCCompareTracks.C:116
 AliTPCCompareTracks.C:117
 AliTPCCompareTracks.C:118
 AliTPCCompareTracks.C:119
 AliTPCCompareTracks.C:120
 AliTPCCompareTracks.C:121
 AliTPCCompareTracks.C:122
 AliTPCCompareTracks.C:123
 AliTPCCompareTracks.C:124
 AliTPCCompareTracks.C:125
 AliTPCCompareTracks.C:126
 AliTPCCompareTracks.C:127
 AliTPCCompareTracks.C:128
 AliTPCCompareTracks.C:129
 AliTPCCompareTracks.C:130
 AliTPCCompareTracks.C:131
 AliTPCCompareTracks.C:132
 AliTPCCompareTracks.C:133
 AliTPCCompareTracks.C:134
 AliTPCCompareTracks.C:135
 AliTPCCompareTracks.C:136
 AliTPCCompareTracks.C:137
 AliTPCCompareTracks.C:138
 AliTPCCompareTracks.C:139
 AliTPCCompareTracks.C:140
 AliTPCCompareTracks.C:141
 AliTPCCompareTracks.C:142
 AliTPCCompareTracks.C:143
 AliTPCCompareTracks.C:144
 AliTPCCompareTracks.C:145
 AliTPCCompareTracks.C:146
 AliTPCCompareTracks.C:147
 AliTPCCompareTracks.C:148
 AliTPCCompareTracks.C:149
 AliTPCCompareTracks.C:150
 AliTPCCompareTracks.C:151
 AliTPCCompareTracks.C:152
 AliTPCCompareTracks.C:153
 AliTPCCompareTracks.C:154
 AliTPCCompareTracks.C:155
 AliTPCCompareTracks.C:156
 AliTPCCompareTracks.C:157
 AliTPCCompareTracks.C:158
 AliTPCCompareTracks.C:159
 AliTPCCompareTracks.C:160
 AliTPCCompareTracks.C:161
 AliTPCCompareTracks.C:162
 AliTPCCompareTracks.C:163
 AliTPCCompareTracks.C:164
 AliTPCCompareTracks.C:165
 AliTPCCompareTracks.C:166
 AliTPCCompareTracks.C:167
 AliTPCCompareTracks.C:168
 AliTPCCompareTracks.C:169
 AliTPCCompareTracks.C:170
 AliTPCCompareTracks.C:171
 AliTPCCompareTracks.C:172