AliAODEvent::GetHeader() returns AliVHeader
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / MuonHadron / AliAnalysisTaskDiMuonCorrelations.cxx
index 2c82ba5..f0832b8 100644 (file)
@@ -21,6 +21,7 @@ AliAnalysisTaskDiMuonCorrelations::AliAnalysisTaskDiMuonCorrelations() :
   AliAnalysisTaskSE(), 
   fAOD(0x0),
   fPoolMgr(0x0),
+  fLikeSign(kTRUE),
   fMaxChi2Muon(5.), 
   fMinEtaMuon(-4.0), 
   fMaxEtaMuon(-2.5),
@@ -71,6 +72,7 @@ AliAnalysisTaskDiMuonCorrelations::AliAnalysisTaskDiMuonCorrelations(const char
   AliAnalysisTaskSE(name), 
   fAOD(0x0),
   fPoolMgr(0x0),
+  fLikeSign(kTRUE),
   fMaxChi2Muon(5.), 
   fMinEtaMuon(-4.0), 
   fMaxEtaMuon(-2.5),
@@ -207,20 +209,20 @@ void AliAnalysisTaskDiMuonCorrelations::UserCreateOutputObjects() {
 
     fHistNMuons_vs_NMuons[iCent] = new TH2D(Form("fHistNMuons_vs_NMuons_Cent%02d",iCent),
                                                  Form("%d-%d %%",Int_t(fCentAxis->GetBinLowEdge(iCent+1)),Int_t(fCentAxis->GetBinUpEdge(iCent+1))),
-                                                 100, 0, 500, 20, 0, 20);
+                                                 20, 0, 20, 20, 0, 20);
     fHistNMuons_vs_NMuons[iCent] -> SetXTitle("N_{tracks} Muon Arm");
     fHistNMuons_vs_NMuons[iCent] -> SetYTitle("N_{tracks} Muon Arm");
     fHistNMuons_vs_NMuons[iCent] -> Sumw2();
 
     fHistNMuons_vs_NMuons_Mixed[iCent] = new TH2D(Form("fHistNMuons_vs_NMuons_Mixed_Cent%02d",iCent),
                                                  Form("%d-%d %% MIXED",Int_t(fCentAxis->GetBinLowEdge(iCent+1)),Int_t(fCentAxis->GetBinUpEdge(iCent+1))),
-                                                 100, 0, 500, 20, 0, 20);
+                                                 20, 0, 20, 20, 0, 20);
     fHistNMuons_vs_NMuons_Mixed[iCent] -> SetXTitle("N_{tracks} Muon Arm");
     fHistNMuons_vs_NMuons_Mixed[iCent] -> SetYTitle("N_{tracks} Muon Arm");
     fHistNMuons_vs_NMuons_Mixed[iCent] -> Sumw2();
 
-    fHistTracksEtavsEta[iCent]       = new TH2D(Form("fHistTracksEtavsEta_%02d",iCent),       "#eta 1st muon vs #eta 2nd muon", 100,-4.5,-2.,100,-1.5,1.5);
-    fHistTracksEtavsEta_Mixed[iCent] = new TH2D(Form("fHistTracksEtavsEta_Mixed_%02d",iCent), "#eta 1st muon vs #eta 2nd muon", 100,-4.5,-2.,100,-1.5,1.5);
+    fHistTracksEtavsEta[iCent]       = new TH2D(Form("fHistTracksEtavsEta_%02d",iCent),       "#eta 1st muon vs #eta 2nd muon", 100,-4.5,-2.,100,-4.5,-2.);
+    fHistTracksEtavsEta_Mixed[iCent] = new TH2D(Form("fHistTracksEtavsEta_Mixed_%02d",iCent), "#eta 1st muon vs #eta 2nd muon", 100,-4.5,-2.,100,-4.5,-2.);
 
     fOutputList -> Add(fHistNMuons_vs_NMuons[iCent]);
     fOutputList -> Add(fHistNMuons_vs_NMuons_Mixed[iCent]);
@@ -298,27 +300,22 @@ void AliAnalysisTaskDiMuonCorrelations::UserExec(Option_t *) {
   fHistCentrality->Fill(percentile);
 
   // Vertex selection
-  const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
-  if (!trkVtx || trkVtx->GetNContributors()<=0) return;
-  TString vtxTtl = trkVtx->GetTitle();
-  if (!vtxTtl.Contains("VertexerTracks")) return;
-  fHistEvStat->Fill(cutIndex++);
-  Double_t zvtx = trkVtx->GetZ();
   const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
   if (spdVtx->GetNContributors()<=0) return;
+  fHistEvStat->Fill(cutIndex++);
   TString vtxTyp = spdVtx->GetTitle();
   Double_t cov[6]={0};
   spdVtx->GetCovarianceMatrix(cov);
   Double_t zRes = TMath::Sqrt(cov[5]);
   if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
-  if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
   fHistEvStat->Fill(cutIndex++);
 
+  Double_t zvtx = spdVtx->GetZ();
   if (TMath::Abs(zvtx) > 10.) return;
   fHistEvStat->Fill(cutIndex++);
 
   TObjArray *tracksMuonArm = GetAcceptedTracksMuonArm(fAOD);
-  if (tracksMuonArm->GetEntriesFast() < 2) {
+  if (tracksMuonArm->GetEntriesFast() == 0) {
     delete tracksMuonArm;
     return;
   }
@@ -333,7 +330,8 @@ void AliAnalysisTaskDiMuonCorrelations::UserExec(Option_t *) {
     fMuonTrack[0] = (AliAODTrack*) tracksMuonArm->At(iTrMuon1);
     fHistSingleMuonsPt[centBin]->Fill(fMuonTrack[0]->Pt());
     fHistSingleMuonsEtaPt[centBin]->Fill(fMuonTrack[0]->Pt(),fMuonTrack[0]->Eta());
-    for (Int_t iTrMuon2=iTrMuon1+1; iTrMuon2<tracksMuonArm->GetEntriesFast(); iTrMuon2++) {
+    for (Int_t iTrMuon2=0; iTrMuon2<tracksMuonArm->GetEntriesFast(); iTrMuon2++) {
+      if (iTrMuon2 == iTrMuon1) continue;
       fMuonTrack[1] = (AliAODTrack*) tracksMuonArm -> At(iTrMuon2);
       FillHistograms(centBin, kSingleEvent);
     }
@@ -344,7 +342,7 @@ void AliAnalysisTaskDiMuonCorrelations::UserExec(Option_t *) {
   //pool->PrintInfo();
   if (pool->IsReady() || pool->NTracksInPool() > 2000 || pool->GetCurrentNEvents() >= 5) {
     for (Int_t jMix=0; jMix<pool->GetCurrentNEvents(); jMix++) {
-      TObjArray *mixedTracks = pool->GetEvent(jMix);     // Cvetan, here we would need to retrieve the MUON tracks of the event we mix...
+      TObjArray *mixedTracks = pool->GetEvent(jMix);
       fHistNMuons_vs_NMuons_Mixed[centBin]->Fill(mixedTracks->GetEntriesFast(), tracksMuonArm->GetEntriesFast());
       for (Int_t iTrMuon1=0; iTrMuon1<tracksMuonArm->GetEntriesFast(); iTrMuon1++) {
        fMuonTrack[0] = (AliAODTrack*) tracksMuonArm->At(iTrMuon1);
@@ -357,9 +355,7 @@ void AliAnalysisTaskDiMuonCorrelations::UserExec(Option_t *) {
       }
     }
   }
-  //  pool->UpdatePool(tracksCentralBarrel);    // Cvetan, I think I do not fully understand what this line does, and how it should be modified in a Di-Muon analysis
-
-  delete tracksMuonArm;
+  pool->UpdatePool(tracksMuonArm);
 
   PostData(1, fOutputList); 
 
@@ -369,11 +365,20 @@ void AliAnalysisTaskDiMuonCorrelations::UserExec(Option_t *) {
 
 void AliAnalysisTaskDiMuonCorrelations::FillHistograms(Int_t centrality, Int_t option) {
 
+  if (fLikeSign) {
+    if ((fMuonTrack[0]->Charge()*fMuonTrack[1]->Charge()) <= 0) return;
+  }
+  else {
+    if ((fMuonTrack[0]->Charge()*fMuonTrack[1]->Charge()) >= 0) return;
+  }
+
   Int_t ptBinTrackMuon1 = fPtAxis -> FindBin(fMuonTrack[0]->Pt());
   Int_t ptBinTrackMuon2 = fPtAxis -> FindBin(fMuonTrack[1]->Pt());
 
   if (ptBinTrackMuon1<1 || ptBinTrackMuon1>fNbinsPt || ptBinTrackMuon2<1 || ptBinTrackMuon2>fNbinsPt) return;
 
+  if (fMuonTrack[0]->Pt() < fMuonTrack[1]->Pt()) return;
+
   Double_t deltaPhi = fMuonTrack[0]->Phi() - fMuonTrack[1]->Phi();
   if (deltaPhi >  1.5*TMath::Pi()) deltaPhi -= TMath::TwoPi();
   if (deltaPhi < -0.5*TMath::Pi()) deltaPhi += TMath::TwoPi();
@@ -393,7 +398,8 @@ void AliAnalysisTaskDiMuonCorrelations::FillHistograms(Int_t centrality, Int_t o
 
 Bool_t AliAnalysisTaskDiMuonCorrelations::IsTriggerFired() {
   
-  Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kINT7); 
+  Bool_t isSelected = ((((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMUL7) ||
+                      (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMUU7));
 
   return isSelected;
 }
@@ -417,7 +423,7 @@ TObjArray* AliAnalysisTaskDiMuonCorrelations::GetAcceptedTracksMuonArm(AliAODEve
   TObjArray *tracks = new TObjArray;
   tracks->SetOwner(kFALSE);
 
-  Int_t nTracks = aodEvent->GetNTracks();
+  Int_t nTracks = aodEvent->GetNumberOfTracks();
 
   AliAODTrack *track = 0;
   
@@ -505,7 +511,7 @@ Int_t AliAnalysisTaskDiMuonCorrelations::GetCentBin() {
 
 Double_t AliAnalysisTaskDiMuonCorrelations::GetITSMultiplicity() {
 
-  Double_t multiplicity = fAOD->GetHeader()->GetNumberOfITSClusters(1);
+  Double_t multiplicity = ((AliVAODHeader*)fAOD->GetHeader())->GetNumberOfITSClusters(1);
 
   return multiplicity;