// author: Jiri Chudoba based on code of Jourij Belikov
// version: 1.0
// description:
-// reconstructs of tracks in TPC inthe following steps:
+// reconstructs of tracks in TPC in the following steps:
// TPC cluster finding
// TPC track finding
// input parameters:
-// Int_t nEvents ... nr of events to process
+// Int_t nEvents ... nr of events to process (<0 means all)
// Int_t firstEventNr ... first event number (starts from 0)
-// Char_t* fileNameHits ... name of file with hits
-// Char_t* fileNameDigits .. name of file with TPC digits
-// Char_t* fileNameClusters .. name of file with TPC clusters (output)
-// Char_t* fileNameTracks .. name of file with TPC tracks (output)
-//
-// default file names correspond to pp production (2002-04)
+// const char* fileName ... name of galice file
+// Bool_t makeClusters ... run the cluster finder or not?
+// Bool_t makeTracks ... run the track finder or not?
+// const char* fileNameRaw ... if not NULL, the cluster finder uses
+// the given file as raw data input
//
// History:
//
+// 21.07.2003 ... NewIO
+//
+// 18.03.2003 ... Char_t* replaced by const char*
+//
// 03.03.2003 ... SetFieldFactor moved to AliTracker class and
// LoadTPCParam moved to AliTPC class
// TString replaced by Char_t*
////////////////////////////////////////////////////////////////////////
#if !defined(__CINT__) || defined(__MAKECINT__)
-#include "Riostream.h"
-#include "TTree.h"
-#include "TSystem.h"
-#include "TArrayF.h"
-#include "TPC/alles.h"
-#include "TPC/AliTPCtracker.h"
-#include "TPC/AliTPCclusterer.h"
-#include "TPC/AliTPC.h"
-#include "STEER/AliRun.h"
-#include "STEER/AliHeader.h"
-#include "STEER/AliGenEventHeader.h"
-#include "STEER/AliMagF.h"
-#include "STEER/AliTracker.h"
-
+#include <Riostream.h>
+#include <TFile.h>
+#include <TTree.h>
+#include <TBenchmark.h>
+#include "AliRunLoader.h"
+#include "AliTPC.h"
+#include "AliTPCParam.h"
+#include "AliTPCclustererMI.h"
+#include "AliTPCtrackerMI.h"
+#include "AliRawReaderRoot.h"
#endif
-Int_t gDEBUG = 2;
-
-Int_t TPCFindClusters(Int_t nEvents=1, Int_t firstEvent=0,
- Char_t* fileNameDigits="rfio:galiceSDR.root",
- Char_t* fileNameClusters="tpc.clusters.root");
-Int_t TPCFindClusters(Int_t nEvents, Int_t firstEvent,
- TFile* fileDigits, TFile* fileClusters,
- AliTPCParam* paramTPC=0);
-Int_t TPCFindTracks(Int_t nEvents=1, Int_t firstEvent=0,
- Char_t* fileNameClusters="tpc.clusters.root",
- Char_t* fileNameTracks="tpc.tracks.root");
-Int_t TPCFindTracks(Int_t nEvents, Int_t firstEvent,
- TFile* fileClusters, TFile* fileTracks,
- AliTPCParam* paramTPC=0);
-
-void FindVertex(Int_t iEvent, Double_t *vertex);
-void PrintVertex(TArrayF &primaryVertex);
-
-Int_t AliTPCTracking(Int_t nEvents=1, Int_t firstEvent=0,
- Char_t* fileNameHits="rfio:galice.root",
- Char_t* fileNameDigits="rfio:galiceSDR.root",
- Char_t* fileNameClusters="tpc.clusters.root",
- Char_t* fileNameTracks="tpc.tracks.root");
+Bool_t AliTPCTracking(Int_t nEvents = -1, Int_t firstEvent = 0,
+ const char* fileName = "galice.root",
+ Bool_t makeClusters = kTRUE,
+ Bool_t makeTracks = kTRUE,
+ const char* fileNameRaw = NULL);
+
+/*
+Int_t TPCRefitInward(Int_t nEvents=1, Int_t firstEvent=0,
+ const char* fileNameClusters="tpc.clusters.root",
+ const char* fileNameTracks="tpc.tracks.root",
+ const char* fileNameTRDTracks="trd.tracks.root",
+ const char* fileNameRefittedTracks="tpc.refitted.tracks.root");
+*/
////////////////////////////////////////////////////////////////////////
-Int_t AliTPCTracking( Int_t nEvents, Int_t firstEvent,
- Char_t* fileNameHits,
- Char_t* fileNameDigits,
- Char_t* fileNameClusters,
- Char_t* fileNameTracks) {
-
- AliTracker::SetFieldFactor(fileNameHits,kFALSE);
-
-// ********** Find TPC clusters *********** //
- if (TPCFindClusters(nEvents,firstEvent,fileNameDigits,fileNameClusters)) {
- cerr<<"Failed to get TPC clusters: !\n";
- return 1;
- }
-
-// ********** Find TPC tracks *********** //
- if (TPCFindTracks(nEvents,firstEvent,fileNameClusters,fileNameTracks)) {
- cerr<<"Failed to get TPC tracks !\n";
- return 2;
+Bool_t AliTPCTracking(Int_t nEvents, Int_t firstEvent,
+ const char* fileName,
+ Bool_t makeClusters,
+ Bool_t makeTracks,
+ const char* fileNameRaw)
+{
+ // get the loaders
+ AliRunLoader* runLoader = AliRunLoader::Open(fileName);
+ if (!runLoader) {
+ cerr << "AliTPCTracking: no run loader found\n";
+ return kFALSE;
+ }
+ AliLoader* tpcLoader = runLoader->GetLoader("TPCLoader");
+ if (!tpcLoader) {
+ cerr << "AliTPCTracking: no TPC loader found\n";
+ return kFALSE;
}
- return 0;
-}
+ // get the TPC parameters
+ runLoader->CdGAFile();
+ AliTPCParam* param = AliTPC::LoadTPCParam(gFile);
+ if (!param) {
+ cerr << "AliTPCTracking: no TPC parameters found\n";
+ return kFALSE;
+ }
-////////////////////////////////////////////////////////////////////////
-Int_t TPCFindClusters(Int_t nEvents, Int_t firstEvent,
- Char_t* fileNameDigits, Char_t* fileNameClusters) {
-
- Int_t rc;
- const Char_t *name="TPCFindClusters";
- if (gDEBUG>1) cout<<name<<" starts...\n";
- if (gDEBUG>1) gBenchmark->Start(name);
- TFile *fileClusters = TFile::Open(fileNameClusters,"recreate");
- TFile *fileDigits = TFile::Open(fileNameDigits);
- if (!fileDigits->IsOpen()) {
- cerr<<"Cannnot open "<<fileNameDigits<<" !\n";
- return 1;
+ // create the clusterer object
+ AliTPCclustererMI* clusterer = NULL;
+ if (makeClusters) {
+ clusterer = new AliTPCclustererMI(param);
+ if (!fileNameRaw) tpcLoader->LoadDigits();
+ tpcLoader->LoadRecPoints("recreate");
}
- if (!fileClusters->IsOpen()) {
- cerr<<"Cannnot open "<<fileNameClusters<<" !\n";
- return 1;
+
+ // create the tracker object
+ AliTPCtrackerMI* tracker = NULL;
+ if (makeTracks) {
+// tracker = new AliTPCtrackerMI(param);
+ if (!makeClusters) tpcLoader->LoadRecPoints();
+ tpcLoader->LoadTracks("recreate");
}
- rc = TPCFindClusters(nEvents,firstEvent,fileDigits,fileClusters);
+ // get the event number range
+ Int_t maxEvent = 0;
+ if (fileNameRaw) {
+ TFile* file = TFile::Open(fileNameRaw);
+ if (file && file->IsOpen()) {
+ TTree* tree = (TTree*) file->Get("T");
+ if (tree) maxEvent = (Int_t) tree->GetEntries();
+ }
+ } else {
+ maxEvent = runLoader->GetNumberOfEvents();
+ }
+ if (nEvents < 0) nEvents = maxEvent - firstEvent;
+ Int_t lastEvent = firstEvent + nEvents;
+ if (lastEvent > maxEvent) lastEvent = maxEvent;
+
+ // loop over the events
+ for (Int_t iEvent = firstEvent; iEvent < lastEvent; iEvent++) {
+
+ runLoader->GetEvent(iEvent);
+
+ // run the cluster finder
+ if (makeClusters) {
+ if (!tpcLoader->TreeR()) tpcLoader->MakeRecPointsContainer();
+ clusterer->SetOutput(tpcLoader->TreeR());
+ if (fileNameRaw) {
+ AliRawReaderRoot rawReader(fileNameRaw, iEvent);
+ clusterer->Digits2Clusters(&rawReader);
+ } else {
+ clusterer->SetInput(tpcLoader->TreeD());
+ clusterer->Digits2Clusters();
+ }
+ tpcLoader->WriteRecPoints("OVERWRITE");
+ }
+
+ // run the track finder
+ if (makeTracks) {
+ tracker = new AliTPCtrackerMI(param);
+ tracker->Clusters2Tracks();
+ delete tracker;
+ }
+ }
- fileDigits->Close();
- fileClusters->Close();
- delete fileDigits;
- delete fileClusters;
- if (gDEBUG>1) gBenchmark->Stop(name);
- if (gDEBUG>1) gBenchmark->Show(name);
+ if (tracker) delete tracker;
+ if (clusterer) delete clusterer;
- return rc;
+ return kTRUE;
}
-////////////////////////////////////////////////////////////////////////
-Int_t TPCFindClusters(Int_t nEvents, Int_t firstEvent,
- TFile* fileDigits, TFile* fileClusters,
- AliTPCParam* paramTPC) {
- fileDigits->cd();
- if (!paramTPC) paramTPC = AliTPC::LoadTPCParam(fileDigits);
- if (!paramTPC) return 1;
-
- for (Int_t iEvent = firstEvent; iEvent < firstEvent+nEvents; iEvent++){
- if (gDEBUG > 2) cout<<"TPCFindClusters: event "<<iEvent<<endl;
- AliTPCclusterer::Digits2Clusters(paramTPC, fileClusters, iEvent);
- }
- return 0;
-}
+/*
////////////////////////////////////////////////////////////////////////
-Int_t TPCFindTracks(Int_t nEvents, Int_t firstEvent,
- Char_t* fileNameClusters, Char_t* fileNameTracks) {
-
+Int_t TPCRefitInward(Int_t nEvents, Int_t firstEvent,
+ const char* fileNameClusters,
+ const char* fileNameTracks,
+ const char* fileNameTRDTracks,
+ const char* fileNameRefittedTracks)
+{
Int_t rc = 0;
- const Char_t *name="TPCFindTracks";
+ const Char_t *name="TPCRefitInward";
if (gDEBUG>1) cout<<name<<" starts"<<endl;
if (gDEBUG>1) gBenchmark->Start(name);
- TFile *fileTracks = TFile::Open(fileNameTracks,"recreate");
- TFile *fileClusters =TFile::Open(fileNameClusters);
+ TFile *fileClusters = TFile::Open(fileNameClusters);
+ TFile *fileTracks = TFile::Open(fileNameTracks);
+ TFile *fileTRDTracks = TFile::Open(fileNameTRDTracks);
+ TFile *fileRefittedTracks = TFile::Open(fileNameRefittedTracks, "recreate");
- rc = TPCFindTracks(nEvents, firstEvent, fileClusters, fileTracks);
-
- fileClusters->Close();
- fileTracks->Close();
- delete fileClusters;
- delete fileTracks;
- if (gDEBUG>1) gBenchmark->Stop(name);
- if (gDEBUG>1) gBenchmark->Show(name);
- return rc;
-
-}
-////////////////////////////////////////////////////////////////////////
-Int_t TPCFindTracks(Int_t nEvents, Int_t firstEvent,
- TFile *fileClusters, TFile * fileTracks,
- AliTPCParam* paramTPC) {
-
- Int_t rc = 0;
- if (!paramTPC) paramTPC = AliTPC::LoadTPCParam(fileClusters);
+ AliTPCParam* paramTPC = AliTPC::LoadTPCParam(fileClusters);
if (!paramTPC) return 1;
for (Int_t iEvent = firstEvent; iEvent < firstEvent+nEvents; iEvent++){
- if (gDEBUG > 2) cout<<"TPCFindTracks: event "<<iEvent<<endl;
+ if (gDEBUG > 2) cout<<"TPCRefitInward: event "<<iEvent<<endl;
AliTPCtracker *tracker = new AliTPCtracker(paramTPC);
tracker->SetEventNumber(iEvent);
- Double_t vertex[3];
- FindVertex(iEvent,vertex);
- tracker->SetVertex(vertex);
fileClusters->cd();
- rc = tracker->Clusters2Tracks(0,fileTracks);
+ rc = tracker->RefitInward(fileTRDTracks, fileTracks, fileRefittedTracks);
delete tracker;
+ if (rc) return rc;
}
- return rc;
-}
-
-////////////////////////////////////////////////////////////////////////
-void FindVertex(Int_t eventNr, Double_t *vertex) {
- vertex[0] = vertex[1] = vertex[2] = 0.;
- if (!gAlice) {
- cerr<<"gAlice was not found! Using vertex position (0,0,0).\n";
- return;
- }
-
- gAlice->GetEvent(eventNr);
- AliHeader *header = gAlice->GetHeader();
- if (!header) {
- cerr<<"header was not found!\n";
- return;
- }
- AliGenEventHeader* genEventHeader = header->GenEventHeader();
- if (!genEventHeader) {
- cerr<<"AliGenEventHeader was not found!\n";
- return;
- }
-
- TArrayF primaryVertex(3);
- genEventHeader->PrimaryVertex(primaryVertex);
- PrintVertex(primaryVertex);
- vertex[0] = static_cast<Double_t>(primaryVertex[0]);
- vertex[1] = static_cast<Double_t>(primaryVertex[1]);
- vertex[2] = static_cast<Double_t>(primaryVertex[2]);
-// delete header;
- delete genEventHeader;
- return;
-
+ fileClusters->Close();
+ fileTracks->Close();
+ fileTRDTracks->Close();
+ fileRefittedTracks->Close();
+ delete fileClusters;
+ delete fileTracks;
+ delete fileTRDTracks;
+ delete fileRefittedTracks;
+ if (gDEBUG>1) gBenchmark->Show(name);
+ return rc;
}
-////////////////////////////////////////////////////////////////////////
-void PrintVertex(TArrayF &primaryVertex)
-{
- cout <<"Vertex: "
- <<primaryVertex[0]<<" "
- <<primaryVertex[1]<<" "
- <<primaryVertex[2]<<" "<<endl;
- exit;
-}
-////////////////////////////////////////////////////////////////////////
+*/