ROOT logo
/****************************************************************************
 *           Origin: M.Ivanov marian.ivanov@cern.ch                         *
 ****************************************************************************/

/*

  macro to create array of clusters from TPC digits
  input files - galice.root 
                digits.root - file with digits - usualy use link to galice.root
		            - in splitted mode - neccesary to create link to proper file
			    
   output file - AliTPCclusters.root
               - to be used by AliTPCTrackFinderMI.C

  Warning - if cluster file AliTPCclusters.root already exist - macro exit and don't produce anything
	       
 
*/


#ifndef __CINT__
#include <iostream.h>
#include "AliRun.h"
#include "AliTPCv1.h"
#include "AliTPCv2.h"
#include "AliTPCParam.h"
#include "AliTPCclusterer.h"
#include "TFile.h"
#include "TStopwatch.h"
#include "TTree.h"
#endif

Int_t AliTPCFindClustersMI(Int_t n=1) {
   
   AliRunLoader* rl = AliRunLoader::Open("galice.root");
   if (rl == 0x0) {
      cerr<<"Can not open session"<<endl;
      return 1;
   }
   
   AliTPCLoader *tpcl = (AliTPCLoader*)rl->GetLoader("TPCLoader");
   if (tpcl == 0x0) {
      cerr<<"Can not get TPC Loader"<<endl;
      return 1;
   }

   if (tpcl->LoadDigits()) {
      cerr<<"Error occured while loading digits"<<endl;
      return 1;
   }

   if (tpcl->LoadRecPoints("recreate")) {
      cerr<<"Error occured while loading digits"<<endl;
      return 1;
   }
   
   if (rl->LoadgAlice()) {
      cerr<<"Error occured while l"<<endl;
      return 1;
   }
   
   gAlice=rl->GetAliRun();
   if (!gAlice) {
      cerr<<"Can't get gAlice !\n";
      return 1;
   }

   TDirectory *cwd = gDirectory;

   AliTPC *TPC = (AliTPC*)gAlice->GetDetector("TPC"); 
   Int_t ver = TPC->IsVersion(); 
   cerr<<"TPC version "<<ver<<" has been found !\n";
   
   rl->CdGAFile();
   
   AliTPCParam *dig=(AliTPCParam *)gDirectory->Get("75x40_100x60_150x60");
   if (!dig) {cerr<<"TPC parameters have not been found !\n"; return 4;}

   TStopwatch timer;

   switch (ver) {
   case 1:
      cerr<<"Making clusters...\n";
      {
       AliTPCv1 &tpc=*((AliTPCv1*)TPC);
       tpc.SetParam(dig); timer.Start(); cwd->cd(); 
       for(Int_t i=0;i<n;i++){
         printf("Processing event %d\n",i);
         gAlice->GetEvent(i);
         tpc.Hits2Clusters(out,i);
       } 
      }
      break;
   case 2:
     cerr<<"Looking for clusters...\n";
     {
       // delete gAlice; gAlice=0;
       AliTPCv2 tpc; 
       tpc.SetParam(dig); timer.Start(); cwd->cd();  
       
       n = rl->GetNumberOfEvents();
       for (Int_t i=0;i<n;i++)
        { 
          rl->GetEvent(i);
          AliTPCclusterer clusterer(dig);
          
          TTree * input = tpcl->TreeD();
          if (input == 0x0)
           {
             cerr << "Can not get TreeD for event " << i <<endl;
             continue;
           }
          
          TTree * output = tpcl->TreeR();
          if (output == 0x0)
           {
             tpcl->MakeTree("R");
             output = tpcl->TreeR();
             if (output == 0x0)
              {
                cerr << "Problems with output tree (TreeR) for event " << i <<endl;
                continue;
              }
           }

          printf("Processing event %d\n",i); 
          clusterer.SetInput(input);
          clusterer.SetOutput(output);
          clusterer.Digits2Clusters();
          
          tpcl->WriteRecPoints("OVERWRITE");
       }
     }
     break;
   default:
     cerr<<"Invalid TPC version !\n";
     return 5;
   }
   
   timer.Stop(); timer.Print();
   
   delete rl;//cleans everything

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