]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/MUONmassPlot_ESD.C
Adding CreateIterator(void) and GetNeighbours() pure virtual methods,
[u/mrichter/AliRoot.git] / MUON / MUONmassPlot_ESD.C
index b3c290afcc57e866edef7bfa53f2b3f489a83b72..de460fd182489beddec64f4e36063e175ec8ccf6 100644 (file)
 
 // STEER includes
 #include "AliRun.h"
+#include "AliLog.h"
 #include "AliRunLoader.h"
 #include "AliHeader.h"
 #include "AliLoader.h"
 #include "AliStack.h"
-#include "AliMagF.h"
+#include "AliMagFMaps.h"
 #include "AliESD.h"
+#include "AliTracker.h"
 
 // MUON includes
+#include "AliMUONTrackParam.h"
+#include "AliMUONTrackExtrap.h"
 #include "AliESDMuonTrack.h"
 #endif
 //
@@ -84,7 +88,7 @@ Bool_t MUONmassPlot(char* filename = "galice.root", Int_t FirstEvent = 0, Int_t
   TH2F *hInvMassAll_vs_Pt = new TH2F("hInvMassAll_vs_Pt","hInvMassAll_vs_Pt",480,0.,12.,80,0.,20.);
   TH2F *hInvMassBgk_vs_Pt = new TH2F("hInvMassBgk_vs_Pt","hInvMassBgk_vs_Pt",480,0.,12.,80,0.,20.);
   TH1F *hInvMassRes;
-  TH1F *hPrimaryVertex = new TH1F("hPrimaryVertex","SPD reconstructed Z vertex",120,-12,12);
+  TH1F *hPrimaryVertex = new TH1F("hPrimaryVertex","SPD reconstructed Z vertex",150,-15,15);
 
   if (ResType == 553) {
     hInvMassRes = new TH1F("hInvMassRes", "Mu+Mu- invariant mass (GeV/c2) around Upsilon", 60, 8., 11.);
@@ -117,12 +121,16 @@ Bool_t MUONmassPlot(char* filename = "galice.root", Int_t FirstEvent = 0, Int_t
   Int_t ntrackhits, nevents;
   Double_t fitfmin;
   Double_t fZVertex=0;
-
+  Double_t fYVertex=0;
+  Double_t fXVertex=0;
  
   TLorentzVector fV1, fV2, fVtot;
 
-  // set off mag field 
-  AliMagF::SetReadField(kFALSE);
+  // 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);
 
   // open run loader and load gAlice, kinematics and header
   AliRunLoader* runLoader = AliRunLoader::Open(filename);
@@ -154,11 +162,12 @@ Bool_t MUONmassPlot(char* filename = "galice.root", Int_t FirstEvent = 0, Int_t
   tree->SetBranchAddress("ESD", &esd);
   
   
-  AliESDVertex* Vertex = (AliESDVertex*) esd->AliESD::GetVertex();
 
   runLoader->LoadHeader();
   nevents = runLoader->GetNumberOfEvents();
-        
+  
+  AliMUONTrackParam trackParam;
+
   // Loop over events
   for (Int_t iEvent = FirstEvent; iEvent <= TMath::Min(LastEvent, nevents - 1); iEvent++) {
 
@@ -173,7 +182,14 @@ Bool_t MUONmassPlot(char* filename = "galice.root", Int_t FirstEvent = 0, Int_t
     }
 
     // get the SPD reconstructed vertex (vertexer) and fill the histogram
-    if (Vertex) fZVertex = Vertex->GetZv();
+    AliESDVertex* Vertex = (AliESDVertex*) esd->GetVertex();
+
+    if (Vertex->GetNContributors()) {
+      fZVertex = Vertex->GetZv();
+      fYVertex = Vertex->GetYv();
+      fXVertex = Vertex->GetXv();
+
+    }
     hPrimaryVertex->Fill(fZVertex);
 
     Int_t nTracks = (Int_t)esd->GetNumberOfMuonTracks() ; 
@@ -181,11 +197,19 @@ Bool_t MUONmassPlot(char* filename = "galice.root", Int_t FirstEvent = 0, Int_t
     //    printf("\n Nb of events analysed: %d\r",iEvent);
     //      cout << " number of tracks: " << nTracks  <<endl;
   
+    // set the magnetic field for track extrapolations
+    AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
     // loop over all reconstructed tracks (also first track of combination)
     for (Int_t iTrack = 0; iTrack <  nTracks;  iTrack++) {
 
       AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTrack);
 
+      if (!Vertex->GetNContributors()) {
+       //re-extrapolate to vertex, if not kown before.
+       trackParam.GetParamFrom(*muonTrack);
+       AliMUONTrackExtrap::ExtrapToVertex(&trackParam, fXVertex, fYVertex, fZVertex);
+       trackParam.SetParamFor(*muonTrack);
+      }
       thetaX = muonTrack->GetThetaX();
       thetaY = muonTrack->GetThetaY();
 
@@ -236,10 +260,16 @@ Bool_t MUONmassPlot(char* filename = "galice.root", Int_t FirstEvent = 0, Int_t
          
          AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTrack2);
 
+         if (!Vertex->GetNContributors()) {
+           trackParam.GetParamFrom(*muonTrack);
+           AliMUONTrackExtrap::ExtrapToVertex(&trackParam, fXVertex, fYVertex, fZVertex);
+           trackParam.SetParamFor(*muonTrack);
+         }
+
          thetaX = muonTrack->GetThetaX();
          thetaY = muonTrack->GetThetaY();
 
-         pYZ     =  1./TMath::Abs(muonTrack->GetInverseBendingMomentum());
+         pYZ      =  1./TMath::Abs(muonTrack->GetInverseBendingMomentum());
          fPzRec2  = - pYZ / TMath::Sqrt(1.0 + TMath::Tan(thetaY)*TMath::Tan(thetaY));
          fPxRec2  = fPzRec2 * TMath::Tan(thetaX);
          fPyRec2  = fPzRec2 * TMath::Tan(thetaY);
@@ -273,9 +303,9 @@ Bool_t MUONmassPlot(char* filename = "galice.root", Int_t FirstEvent = 0, Int_t
              hInvMassAll_vs_Pt->Fill(invMass,fVtot.Pt());
              Int_t ptTrig;
              if (ResType == 553) 
-               ptTrig =  0x400;// mask for Hpt unlike sign pair
+               ptTrig =  0x20;// mask for Hpt unlike sign pair
              else 
-               ptTrig =  0x200;// mask for Lpt unlike sign pair
+               ptTrig =  0x10;// mask for Lpt unlike sign pair
 
              if (esd->GetTriggerMask() &  ptTrig) NbTrigger++; 
              if (invMass > massMin && invMass < massMax) {