// 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
//
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.);
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);
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++) {
}
// 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() ;
// 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();
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);
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) {