]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/MUONTracker.C
New TGeo features allow us to avoid the use of MANY.
[u/mrichter/AliRoot.git] / MUON / MUONTracker.C
index 3a38d82a7f8d7206e67adcd77e8834fb9c8ea03d..da95c6ab614501fc03249b59b6cc261c2c6eaaaa 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/* $Id$ */
-
 // Macro MUONTracker.C (TO BE COMPILED)
 // for testing the C++ reconstruction code
 // Output is using aliroot standard output MUON.Tracks.root
 // The output is a TClonesArray of AliMUONTracks.
-// Gines MARTINEZ, Subatech, sep 2003
+// Allow to make track reconstruction directly from AliTrackReference hits 
+// recorded in TrackRefs.root file.
 
 #if !defined(__CINT__) || defined(__MAKECINT__)
-#include <TClonesArray.h>
-
 #include "AliRun.h"
 #include "AliMUON.h"
 #include "AliMUONData.h"
-#include "AliMUONEventReconstructor.h"
-#include "AliMUONTrack.h"
-#include "AliMUONTrackHit.h"
-#include "AliMUONTrackParam.h"
+#include "AliMUONTrackReconstructor.h"
 #endif
 
-void MUONTracker (Text_t *FileName = "galice.root", Int_t FirstEvent = 0, Int_t LastEvent = 9999)
+void MUONTracker (Int_t FirstEvent = 0, Int_t LastEvent = 9999, Text_t *FileName = "galice.root")
 {
   //
   cout << "MUONTracker" << endl;
@@ -42,78 +36,78 @@ void MUONTracker (Text_t *FileName = "galice.root", Int_t FirstEvent = 0, Int_t
   cout << "FileName ``" << FileName << "''" << endl;
   
   // Creating Run Loader and openning file containing Hits, Digits and RecPoints
-  AliRunLoader * RunLoader = AliRunLoader::Open(FileName,"Event","UPDATE");
+  AliRunLoader * RunLoader = AliRunLoader::Open(FileName,"MUONLoader","UPDATE");
   if (RunLoader ==0x0) {
     printf(">>> Error : Error Opening %s file \n",FileName);
     return;
   }
   // Loading AliRun master
-  RunLoader->LoadgAlice();
+  if (RunLoader->GetAliRun() == 0x0) RunLoader->LoadgAlice();
   gAlice = RunLoader->GetAliRun();
-  RunLoader->LoadKinematics("READ");
+  RunLoader->LoadTrackRefs("READ");
   
   // Loading MUON subsystem
-  AliMUON * MUON = (AliMUON *) gAlice->GetDetector("MUON");
   AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
-  //  MUONLoader->LoadHits("READ");
-  MUONLoader->LoadRecPoints("READ");
   MUONLoader->LoadTracks("UPDATE");
-  AliMUONData * muondata = MUON->GetMUONData();
-  muondata->SetLoader(MUONLoader);
   
   Int_t nevents;
   nevents = RunLoader->GetNumberOfEvents();
   
-  AliMUONEventReconstructor *Reco = new AliMUONEventReconstructor();
+  AliMUONTrackReconstructor* Reco = new AliMUONTrackReconstructor(MUONLoader);
+  AliMUONData* muondata = Reco->GetMUONData();
 
-  // The right place for changing AliMUONEventReconstructor parameters
+  // Testing if Tracker has already been done
+  RunLoader->GetEvent(0);
+  if (MUONLoader->TreeT()) {
+    if (muondata->IsTrackBranchesInTree()) {
+      MUONLoader->UnloadTracks();
+      MUONLoader->LoadTracks("RECREATE");
+      printf("Recreating tracks files\n");
+    }
+  }
+  
+  // The right place for changing AliMUONTrackReconstructor parameters
   // with respect to the default ones
   //   Reco->SetMaxSigma2Distance(100.0);
   //   Reco->SetPrintLevel(20);
   Reco->SetPrintLevel(0);
   //   Reco->SetBendingResolution(0.0);
   //   Reco->SetNonBendingResolution(0.0);
-  cout << "AliMUONEventReconstructor: actual parameters" << endl;
-//  Reco->Dump();
-  //   gObjectTable->Print();
+  Reco->SetRecTrackRefHits(1); // 1: reconst. from track ref. hits 0: from clusters
 
-  MUONLoader->LoadRecPoints("READ");
+  if (Reco->GetRecTrackRefHits() == 0)
+    MUONLoader->LoadRecPoints("READ");
 
-  if  (LastEvent>nevents) LastEvent=nevents;
+  if  (LastEvent > nevents-1) LastEvent=nevents-1;
+  
   // Loop over events
-  for (Int_t event = FirstEvent; event < LastEvent; event++) {
-      //MUONLoader->LoadHits("READ");
-      cout << "Event: " << event << endl;
-      RunLoader->GetEvent(event);   
-// Test if trigger track has already been done before
-      if (MUONLoader->TreeT() == 0x0) {        
-         MUONLoader->MakeTracksContainer();
-      }      else {
-         if (muondata->IsTrackBranchesInTree()){ // Test if track has already been done before
-             if (event==FirstEvent) MUONLoader->UnloadTracks();
-             MUONLoader->MakeTracksContainer();  // Redoing Tracking
-             Info("TrackContainer","Recreating TrackContainer and deleting previous ones");
-         }
-      }
-
-      muondata->MakeBranch("RT");
-      muondata->SetTreeAddress("RT");
-      Reco->EventReconstruct();
-      // Dump current event
-      // Reco->EventDump();
-      
-      // Duplicating rectrack data in muondata for output
-      for(Int_t i=0; i<Reco->GetNRecTracks(); i++) {
-         AliMUONTrack * track = (AliMUONTrack*) Reco->GetRecTracksPtr()->At(i);
-         muondata->AddRecTrack(*track);
-         //printf(">>> TEST TEST event %d Number of hits in the track %d is %d \n",event,i,track->GetNTrackHits());
+  for (Int_t event = FirstEvent; event <= LastEvent; event++) {
+    cout << "Event: " << event << endl;
+    RunLoader->GetEvent(event);   
+    // Test if trigger track has already been done before
+    if (MUONLoader->TreeT() == 0x0) {  
+      MUONLoader->MakeTracksContainer();
+    }      else {
+      if (muondata->IsTrackBranchesInTree()){ // Test if track has already been done before
+       if (event==FirstEvent) MUONLoader->UnloadTracks();
+       MUONLoader->MakeTracksContainer();  // Redoing Tracking
+       Info("TrackContainer","Recreating TrackContainer and deleting previous ones");
       }
+    }
+    
+    muondata->MakeBranch("RT");
+    muondata->SetTreeAddress("RT");
+    Reco->EventReconstruct();
     
     muondata->Fill("RT");
     MUONLoader->WriteTracks("OVERWRITE");  
     muondata->ResetRecTracks();
-    muondata->ResetRawClusters();
+    if (Reco->GetRecTrackRefHits() == 0)
+      muondata->ResetRawClusters();
   } // Event loop
-    MUONLoader->UnloadRecPoints();
-    MUONLoader->UnloadTracks();
+  
+  MUONLoader->UnloadRecPoints();
+  MUONLoader->UnloadTracks();
+  RunLoader->UnloadTrackRefs();
 }