]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/MUONRecoCheck.C
Updated list of MUON libraries
[u/mrichter/AliRoot.git] / MUON / MUONRecoCheck.C
index 9b6867b8c29f88b42346a74a7b996682437eda07..2f2f6d2e45170a2cd2275caf37df4518ba31c356 100644 (file)
@@ -18,6 +18,7 @@
 #include "TH1.h"
 #include "TParticle.h"
 #include "TFile.h"
+#include <TGeoManager.h>
 
 // STEER includes
 #include "AliRun.h"
 #include "AliMC.h"
 #include "AliStack.h"
 #include "AliRunLoader.h"
+#include "AliMagFMaps.h"
+#include "AliTracker.h"
 
 // MUON includes
-#include "AliMUON.h"
 #include "AliMUONConstants.h"
 #include "AliMUONTrack.h"
 #include "AliMUONRecoCheck.h"
 #include "AliMUONTrackParam.h"
+#include "AliMUONTrackExtrap.h"
+#include "AliMUONRecData.h"
+#include "AliMUONSimData.h"
 
 Int_t TrackCheck( Bool_t *compTrack);
 
-void MUONRecoCheck (Int_t nEvent = 1, char * filename="galice.root"){
+void MUONRecoCheck (Int_t nEvent = 1, char* geoFilename = "geometry.root", 
+                    char * filenameSim="galice_sim.root", char * filename="galice.root"){
 
   // Utility macro to check the muon reconstruction. Reconstructed tracks are compared
   // to reference tracks. The reference tracks are built from AliTrackReference for the
@@ -73,11 +79,35 @@ void MUONRecoCheck (Int_t nEvent = 1, char * filename="galice.root"){
   TH1F *hResMomVertex = new TH1F("hMomVertex"," delta P vertex (GeV/c)",100,-10.,10);
   TH1F *hResMomFirstHit = new TH1F("hMomFirstHit"," delta P first hit (GeV/c)",100,-10.,10);
 
-
+  // Import TGeo geometry (needed by AliMUONTrackExtrap::ExtrapToVertex)
+  if (!gGeoManager) {
+    TGeoManager::Import(geoFilename);
+    if (!gGeoManager) {
+      Error("MUONmass_ESD", "getting geometry from file %s failed", geoFilename);
+      return;
+    }
+  }
   
-  AliMUONRecoCheck rc(filename);
-  AliRunLoader *runLoader = rc.GetRunLoader();
-
+  // set  mag field 
+  // waiting for mag field in CDB 
+  printf("Loading field map...\n");
+  AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
+  AliTracker::SetFieldMap(field, kFALSE);
+  // set the magnetic field for track extrapolations
+  AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
+
+  AliRunLoader* runLoaderSim = AliRunLoader::Open(filenameSim, "MUONFolderSim", "read");
+  AliRunLoader* runLoader = AliRunLoader::Open(filename, "MUONFolder", "read");
+  AliLoader * MUONLoader = runLoader->GetLoader("MUONLoader");
+  AliLoader * MUONLoaderSim = runLoaderSim->GetLoader("MUONLoader");
+  AliMUONRecData * MUONData = new AliMUONRecData(MUONLoader,"MUON","MUON");
+  AliMUONSimData * MUONDataSim = new AliMUONSimData(MUONLoaderSim,"MUON","MUON");
+
+  runLoaderSim->LoadKinematics("READ");
+  runLoaderSim->LoadTrackRefs("READ");
+  MUONLoader->LoadTracks("READ");
+  
+  AliMUONRecoCheck rc(runLoader, MUONData, runLoaderSim, MUONDataSim);
     
   Int_t nevents = runLoader->GetNumberOfEvents();
   
@@ -90,7 +120,9 @@ void MUONRecoCheck (Int_t nEvent = 1, char * filename="galice.root"){
 
   for (ievent=0; ievent<nEvent; ievent++) {
     if (!(ievent%10)) printf(" **** event # %d  \n",ievent);
+    runLoaderSim->GetEvent(ievent);
     runLoader->GetEvent(ievent);
+
     rc.ResetTracks();
     rc.MakeTrackRef(); // make reconstructible tracks
 //     rc.PrintEvent();
@@ -141,7 +173,7 @@ void MUONRecoCheck (Int_t nEvent = 1, char * filename="galice.root"){
       if (testTrack == 4) {     // tracking requirements verified, track is found
        nReconstructibleTracksCheck++;
        hNHitComp->Fill(nHitOK);
-       particle = runLoader->GetHeader()->Stack()->Particle(trackID);
+       particle = runLoaderSim->GetHeader()->Stack()->Particle(trackID);
 //     printf(" trackID: %d , PDG code: %d \n",trackID,particle->GetPdgCode());
        trackParam = trackRef->GetTrackParamAtVertex();
        x1 = trackParam->GetNonBendingCoor();
@@ -153,8 +185,9 @@ void MUONRecoCheck (Int_t nEvent = 1, char * filename="galice.root"){
        p1  = trackParam->P();
        
 //     printf(" Ref. track at vertex: x,y,z: %f %f %f px,py,pz,p: %f %f %f %f \n",x1,y1,z1,pX1,pY1,pZ1,p1);
-       
-       trackParam = ((AliMUONTrack *)trackRecoArray->At(indexOK))->GetTrackParamAtVertex();
+       trackReco = (AliMUONTrack *)trackRecoArray->At(indexOK);
+       trackParam = new AliMUONTrackParam(*((AliMUONTrackParam*)(trackReco->GetTrackParamAtHit()->First())));
+       AliMUONTrackExtrap::ExtrapToVertex(trackParam,x1,y1,z1);
        x2 = trackParam->GetNonBendingCoor();
        y2 = trackParam->GetBendingCoor();
        z2 = trackParam->GetZ();
@@ -162,6 +195,7 @@ void MUONRecoCheck (Int_t nEvent = 1, char * filename="galice.root"){
        pY2 = trackParam->Py();
        pZ2 = trackParam->Pz();
        p2  = trackParam->P();
+       delete trackParam;
 //     printf(" Reconst. track at vertex: x,y,z: %f %f %f px,py,pz: %f %f %f %f \n",x2,y2,z2,pX2,pY2,pZ2,p2);
        
        hResMomVertex->Fill(p2-p1);
@@ -191,9 +225,18 @@ void MUONRecoCheck (Int_t nEvent = 1, char * filename="galice.root"){
               
       }
     } // end loop track ref.
-
+    
   } // end loop on event  
 
+  MUONLoader->UnloadTracks();
+  runLoaderSim->UnloadKinematics();
+  runLoader->UnloadTrackRefs();
+  delete runLoader;
+  delete runLoaderSim;
+  delete field;
+  delete MUONData;
+  delete MUONDataSim;
+
   printf(" nb of reconstructible tracks: %d \n", nReconstructibleTracks);
   printf(" nb of reconstructed tracks: %d \n", nReconstructedTracks);
   printf(" nb of reconstructible tracks which are reconstructed: %d \n", nReconstructibleTracksCheck);