/****************************************************************************
* 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;
}