]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCFindClusters.C
Use PHOS version Run1
[u/mrichter/AliRoot.git] / TPC / AliTPCFindClusters.C
index 196c9e9350dc100fe85d29392efa345e83fb04b8..9535e0447d28aaa10fc2c288e0a68c9627da7ec9 100644 (file)
-/****************************************************************************
- *           Origin: I.Belikov, CERN, Jouri.Belikov@cern.ch                 *
- ****************************************************************************/
-
-#if !defined(__CINT__) || defined(__MAKECINT__)
-  #include <Riostream.h>
-
-  #include "AliRun.h"
-  #include "AliRunLoader.h"
-  #include "AliTPCLoader.h"
-  #include "AliTPCv1.h"
-  #include "AliTPCParam.h"
-  #include "AliTPCclusterer.h"
-
-  #include "TTree.h"
-  #include "TStopwatch.h"
+/// \file AliTPCFindClusters.C
+///
+/// \author 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
 
-extern AliRun *gAlice;
-
-Int_t AliTPCFindClusters(Int_t nev=5) {
-
-   if (gAlice) {
-      delete AliRunLoader::GetRunLoader();
-      delete gAlice;//if everything was OK here it is already NULL
-      gAlice = 0x0;
-   }
-    
+Int_t AliTPCFindClustersMI(Int_t n=1) {
+   
    AliRunLoader* rl = AliRunLoader::Open("galice.root");
    if (rl == 0x0) {
       cerr<<"Can not open session"<<endl;
       return 1;
    }
    
-   if (rl->LoadgAlice()) {
-      cerr<<"Error occured while l"<<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 1;
-   }
-
-   if (nev>rl->GetNumberOfEvents()) nev=rl->GetNumberOfEvents();
    
-   tpcl->LoadRecPoints("recreate");
-   if (ver==1) tpcl->LoadHits("read");
-   else tpcl->LoadDigits("read");
+   AliTPCParam *dig=(AliTPCParam *)gDirectory->Get("75x40_100x60_150x60");
+   if (!dig) {cerr<<"TPC parameters have not been found !\n"; return 4;}
 
    TStopwatch timer;
 
-   if (ver==1) {
+   switch (ver) {
+   case 1:
       cerr<<"Making clusters...\n";
-      AliTPCv1 &tpc=*((AliTPCv1*)TPC);
-      tpc.SetParam(dig);
-      tpc.SetLoader(tpcl);
-      rl->LoadKinematics();
-      timer.Start();
-      for(Int_t i=0;i<nev;i++) {
-         printf("Processing event %d\n",i);
-         rl->GetEvent(i);
-         tpc.Hits2Clusters(i);
-      }
-   } else if (ver==2) {
-      cerr<<"Looking for clusters...\n";
-      AliTPCclusterer *dummy=new AliTPCclusterer(dig), &clusterer=*dummy; 
-      timer.Start();
-      for (Int_t i=0;i<nev;i++) {
+      {
+       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);
-         rl->GetEvent(i);
-
-         TTree *out=tpcl->TreeR();
-         if (!out) {
-            tpcl->MakeTree("R");
-            out=tpcl->TreeR();
-         }
-         TTree *in=tpcl->TreeD();
-         if (!in) {
-            cerr<<"Can't get digits tree !\n";
-            return 4;
-         }
-
-         clusterer.Digits2Clusters(in,out);
-         
-         tpcl->WriteRecPoints("OVERWRITE");
+         gAlice->GetEvent(i);
+         tpc.Hits2Clusters(out,i);
+       } 
       }
-      delete dummy;
-      delete dig;
-   } else {
-      cerr<<"Invalid TPC version !\n";
-      delete rl;
-      return 5;
+      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;
+   
+   delete rl;//cleans everything
 
    return 0;
 }