]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCTracking.C
Temporary removed information from the event HEADER (Marian)
[u/mrichter/AliRoot.git] / TPC / AliTPCTracking.C
index 557e75e7cff0bb17e480c65ea85719a032c44e5c..c10c0efde3c69c6666a3d545080d64c999e4afdb 100644 (file)
@@ -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*
 ////////////////////////////////////////////////////////////////////////
 
 #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;
-} 
-////////////////////////////////////////////////////////////////////////
+*/