X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCTracking.C;h=c10c0efde3c69c6666a3d545080d64c999e4afdb;hb=f01f82848dce3af1d42fe3dcc118466fe5442116;hp=557e75e7cff0bb17e480c65ea85719a032c44e5c;hpb=2d813ef151a94299f095b8f68d3c92b3fd1da4c1;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCTracking.C b/TPC/AliTPCTracking.C index 557e75e7cff..c10c0efde3c 100644 --- a/TPC/AliTPCTracking.C +++ b/TPC/AliTPCTracking.C @@ -6,21 +6,24 @@ // 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* @@ -33,199 +36,162 @@ //////////////////////////////////////////////////////////////////////// #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 +#include +#include +#include +#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<1) gBenchmark->Start(name); - TFile *fileClusters = TFile::Open(fileNameClusters,"recreate"); - TFile *fileDigits = TFile::Open(fileNameDigits); - if (!fileDigits->IsOpen()) { - cerr<<"Cannnot open "<LoadDigits(); + tpcLoader->LoadRecPoints("recreate"); } - if (!fileClusters->IsOpen()) { - cerr<<"Cannnot open "<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 "<1) cout<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 "< 2) cout<<"TPCRefitInward: event "<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(primaryVertex[0]); - vertex[1] = static_cast(primaryVertex[1]); - vertex[2] = static_cast(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: " - <