]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/DecodeRecoCocktail.C
In MUONTRK*da:
[u/mrichter/AliRoot.git] / MUON / DecodeRecoCocktail.C
index 80585cee3bde4f966e8818c31b5792512c74611d..6f00fe90d4469321f137670849d61a9e68dd739f 100644 (file)
 
 /* $Id$ */
 
-// A. De Falco, H. Woehri, INFN Cagliari, July 2006
-// This macro reads the generation/reconstruction files in the 
-// input directory (dirname), 
-// builds a tree that contains, for each event, an array of muons and dimuons
-// (TClonesArrays of AliMUONTrackLight and AliMUONPairLight objects) 
-// and writes the tree in an output file (outFileName) 
-// Note that if the path for the output file is not explicitly specified, 
-// it will be written in the directory containing the generation/reconstruction
-// 27-Nov-2006: modified by in order to loop on files
+/// \ingroup macros
+/// \file DecodeRecoCocktail.C
+/// \brief add brief description
+///
+/// \author A. De Falco, H. Woehri, INFN Cagliari, July 2006
+///
+/// This macro reads the generation/reconstruction files in the 
+/// input directories (recodir and simdir), 
+/// builds a tree that contains, for each event, an array of muons and dimuons
+/// (TClonesArrays of AliMUONTrackLight and AliMUONPairLight objects) 
+/// and writes the tree in an output file (outFileName) 
+/// Note that if the path for the output file is not explicitly specified, 
+/// it will be written in the directory containing the generation/reconstruction
+/// 27-Nov-2006: modified by in order to loop on files
+///
+/// 13 Nov 2007:
+/// Updated this macro to work with new version of AliMUONRecoCheck. Also, we are
+/// now fetching reconstructed track data from ESD and not the track tree, because
+/// the AliMUONTrack objects for reconstructed tracks are no longer stored on disk.
+///  - Artur Szostak <artursz@iafrica.com>
 
 #if !defined(__CINT__) || defined(__MAKECINT__)
 #include <Riostream.h>
 #include "AliMUONRecoCheck.h"
 #include "AliMUONTrack.h"
 #include "AliMUONTrackParam.h"
-#include "AliRunLoader.h"
 #include "AliMUONTrackLight.h"
 #include "AliMUONPairLight.h"
+#include "AliMUONVTrackStore.h"
 #include "AliMUONTrackExtrap.h"
-#include "AliESD.h"
-#include "AliESDVertex.h" 
+#include "AliESDEvent.h"
+#include "AliESDVertex.h"
+#include "AliMCEventHandler.h"
+#include "AliMCEvent.h"
+#include "AliMagF.h"
+/*TODO: need to update this with changes made to ITS
 #include "AliITSVertexerPPZ.h"
 #include "AliITSLoader.h"
+*/
 #include "AliTracker.h"
-#include "AliMagFMaps.h"
 #endif
 
 
-void DecodeRecoCocktail(char* dirname=".", char* outFileName = "MuonLight.root", char* geoFilename = "geometry.root"){
+void DecodeRecoCocktail(
+    char* recodir=".",          // The directory containing galice.root for reconstructed data.
+    char* simdir="generated/",  // The directory containing galice.root for simulated data.
+    char* outFileName = "MuonLight.root", // The output filename containing AliMUONTrackLight and AliMUONPairLight objects.
+    char* geoFilename = "geometry.root"  // The filename containing the geometry.
+  )
+{
+/// \param recodir      The directory containing galice.root for reconstructed data.
+/// \param simdir       The directory containing galice.root for simulated data.
+/// \param outFileName  The output filename containing AliMUONTrackLight and AliMUONPairLight objects.
+/// \param geoFilename  The filename containing the geometry.
 
-  
   char startingDir[200]; 
   sprintf (startingDir,"%s",gSystem->pwd()); 
-  gSystem->cd(dirname); 
-
+  gSystem->cd(recodir); 
 
   TClonesArray *muonArray   = new TClonesArray("AliMUONTrackLight",10); 
   TClonesArray *dimuonArray = new TClonesArray("AliMUONPairLight",10); 
@@ -69,20 +92,6 @@ void DecodeRecoCocktail(char* dirname=".", char* outFileName = "MuonLight.root",
   treeOut->Branch("muons",&muonArray); 
   treeOut->Branch("dimuons",&dimuonArray); 
   
-  TFile* esdFile = TFile::Open("AliESDs.root");
-  if (!esdFile || !esdFile->IsOpen()) {
-    Error("DecodeRecoCocktailNew", "opening ESD file %s failed", esdFileName);
-    return;
-  }
-    
-  AliESD* esd = new AliESD();
-  TTree* treeESD = (TTree*) esdFile->Get("esdTree");
-  if (!treeESD) {
-    Error("CheckESD", "no ESD tree found");
-    return;
-  }
-  treeESD->SetBranchAddress("ESD", &esd);
-   
   // Import TGeo geometry (needed by AliMUONTrackExtrap::ExtrapToVertex)
   if (!gGeoManager) {
     TGeoManager::Import(geoFilename);
@@ -94,69 +103,78 @@ void DecodeRecoCocktail(char* dirname=".", char* outFileName = "MuonLight.root",
   
   // 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);
+  if (!TGeoGlobalMagField::Instance()->GetField()) {
+    printf("Loading field map...\n");
+    AliMagF* field = new AliMagF("Maps","Maps",2,1.,1., 10.,AliMagF::k5kG);
+    TGeoGlobalMagField::Instance()->SetField(field);
+  }
   // set the magnetic field for track extrapolations
-  AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
+  AliMUONTrackExtrap::SetField();
 
-  AliMUONRecoCheck *rc = new AliMUONRecoCheck("galice.root");
-  AliRunLoader *runLoader = rc->GetRunLoader();
+  AliMUONRecoCheck *rc = new AliMUONRecoCheck("AliESDs.root", simdir);
+  Int_t nev = rc->NumberOfEvents();
   
-  runLoader->LoadKinematics("READ");
-  Int_t nev = runLoader->GetNumberOfEvents(); 
-//   nevent = nevent +nev;  
-//     printf(" number of files and events = %d - %d \n",irun,nevent);
-    
-  AliITSLoader* ITSloader =  (AliITSLoader*) runLoader->GetLoader("ITSLoader");
+  /*TODO: need to update this with changes made to ITS
+  AliITSLoader* ITSloader =  (AliITSLoader*) runLoaderSim->GetLoader("ITSLoader");
   AliITSVertexerPPZ *dovert = 0; 
   if (ITSloader) { 
     dovert = new AliITSVertexerPPZ("default",0,0);
-    dovert->SetDebug(0);
+    // dovert->SetDebug(0);
     dovert->SetDiffPhiMax(0.05);
     dovert->SetWindow(3.);
   }
   AliESDVertex *vert = 0;
+  */
   
   TLorentzVector v; 
-  
   for(Int_t ievent = 0; ievent < nev; ievent++){ // loop over events 
-    AliHeader *header = runLoader->GetHeader();
+    
+    /*TODO: need to update this with changes made to ITS
+    runLoaderSim->GetHeader();
     if (ITSloader) { 
       vert = dovert->FindVertexForCurrentEvent(ievent);
     }
-    // printf ("Event %d of %d\n",ievent,nev);
+    */
+    
+    //printf ("Event %d of %d\n",ievent,nev);
     muonArray->Clear();     // clean muon and dimuon arrays 
     dimuonArray->Clear(); 
-    runLoader->GetEvent(ievent);
-    treeESD->GetEvent(ievent);
-    rc->ResetTracks();
-    rc->MakeTrackRef(); // make reconstructable tracks
     
-    TClonesArray * trackRecoArray = rc->GetTrackReco();
-    TClonesArray * trackRefArray = rc->GetMuonTrackRef();
-    Int_t nTrackReco = trackRecoArray->GetEntriesFast();
-    Int_t nTracksESD = (Int_t)esd->GetNumberOfMuonTracks() ; 
-    if (nTrackReco != nTracksESD) printf ("Tracks in AliMUONTrack and in ESD do not match!\n");
-    Int_t nreftracks = 0; 
-    for (Int_t itrRec = 0; itrRec<nTrackReco; itrRec++) { 
+    AliMUONVTrackStore* recoTracks = rc->ReconstructedTracks(ievent);  // Use tracks from actual reconstruction, but this does not work anymore.
+    //AliMUONVTrackStore* trackRefs = rc->ReconstructibleTracks(ievent);  // Only use reconstructible reference tracks.
+    AliMUONVTrackStore* trackRefs = rc->TrackRefs(ievent);
+    AliStack* pstack = (const_cast<AliMCEventHandler*>(rc->GetMCEventHandler()))->MCEvent()->Stack();
+    
+    TIter next(recoTracks->CreateIterator());
+    AliMUONTrack* trackReco = NULL;
+    
+    Int_t nTrackReco = recoTracks->GetSize();
+    Int_t nTracksESD = rc->GetESDEvent()->GetNumberOfMuonTracks();
+    if (nTrackReco != nTracksESD) printf ("Tracks in recoTracks (%d) and in ESD (%d) do not match!\n", nTrackReco, nTracksESD);
+    Int_t nreftracks = 0;
+    Int_t itrRec = 0;
+    while ( (trackReco = static_cast<AliMUONTrack*>(next())) != NULL )
+    {
       // assign parameters concerning the reconstructed tracks
       AliMUONTrackLight muLight;
-      AliMUONTrack *trackReco = (AliMUONTrack *)trackRecoArray->At(itrRec);
-      muLight.FillFromESD(esd->GetMuonTrack(itrRec));
-      //       muLight.FillFromAliMUONTrack(trackReco);
+      
+      muLight.FillFromESD(rc->GetESDEvent()->GetMuonTrack(itrRec));
+      // muLight.FillFromAliMUONTrack(trackReco);
       
       // find the reference track and store further information        
-      TParticle *part = muLight.FindRefTrack(trackReco,trackRefArray,runLoader); 
+      TParticle *part = muLight.FindRefTrack(trackReco, trackRefs, pstack);
       if (part) { 
        v.SetPxPyPzE(part->Px(), part->Py(), part->Pz(), part->Energy());
        muLight.SetPGen(v); 
-       muLight.FillMuonHistory(runLoader, part);
+       muLight.FillMuonHistory(pstack, part);
        //        muLight.PrintInfo("A");
        //store the referenced track in the muonArray:
        TClonesArray &muons = *muonArray;
        new (muons[nreftracks++]) AliMUONTrackLight(muLight);
       } 
+      
+      itrRec++;
     }  // end reco track
     
     // now loop over muon pairs to build dimuons
@@ -172,6 +190,7 @@ void DecodeRecoCocktail(char* dirname=".", char* outFileName = "MuonLight.root",
        new (dimuons[ndimuons++]) AliMUONPairLight(dimuLight);
       }
     }
+    
     treeOut->Fill(); 
   } 
   
@@ -184,6 +203,5 @@ void DecodeRecoCocktail(char* dirname=".", char* outFileName = "MuonLight.root",
   delete treeOut; 
   delete fout;
   delete rc;
-  delete esd; 
 }