]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
update DHC task (Constantin Loizides <cloizides@lbl.gov>)
authormiweber <miweber@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 28 Jan 2013 09:21:15 +0000 (09:21 +0000)
committermiweber <miweber@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 28 Jan 2013 09:21:15 +0000 (09:21 +0000)
PWGCF/Correlations/DPhi/FourierDecomposition/AliDhcTask.cxx
PWGCF/Correlations/DPhi/FourierDecomposition/AliDhcTask.h
PWGCF/Correlations/DPhi/FourierDecomposition/AliMuonEffMC.cxx
PWGCF/Correlations/DPhi/FourierDecomposition/AliMuonEffMC.h

index 5d0d9bbce2a33fd5e319554dd5db1a14952903af..77aa89f142231f551150703a7d2d2ee77b4684e1 100644 (file)
@@ -520,46 +520,43 @@ void AliDhcTask::GetESDTracks(MiniEvent* miniEvt)
       Int_t    sign = esdtrack->Charge() > 0 ? 1 : -1;
       miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
     }
-    return;
-  }
-
-  TList *list = InputEvent()->GetList();
-  TClonesArray *tcaTracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracksName));
+  } else {
+    TList *list = InputEvent()->GetList();
+    TClonesArray *tcaTracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracksName));
 
-  if(!tcaTracks){
-    AliError("Ptr to tcaTracks zero");
-    return;
-  }
+    if(!tcaTracks){
+      AliError("Ptr to tcaTracks zero");
+      return;
+    }
 
-  const Int_t ntracks = tcaTracks->GetEntries();
-  if (miniEvt)
-    miniEvt->reserve(ntracks);
-  else {
-    AliError("Ptr to miniEvt zero");
-    return;
-  }
+    const Int_t ntracks = tcaTracks->GetEntries();
+    if (miniEvt)
+      miniEvt->reserve(ntracks);
+    else {
+      AliError("Ptr to miniEvt zero");
+      return;
+    }
 
-  for(Int_t itrack = 0; itrack < ntracks; itrack++) {
-    AliVTrack *esdtrack = static_cast<AliESDtrack*>(tcaTracks->At(itrack));
-    if(!esdtrack) {
-      AliError(Form("ERROR: Could not retrieve esdtrack %d",itrack));
-      continue;
+    for (Int_t itrack = 0; itrack < ntracks; itrack++) {
+      AliVTrack *vtrack = static_cast<AliVTrack*>(tcaTracks->At(itrack));
+      if (!vtrack) {
+        AliError(Form("ERROR: Could not retrieve track %d",itrack));
+        continue;
+      }
+      Double_t pt   = vtrack->Pt();
+      Double_t eta  = vtrack->Eta();
+      Double_t phi  = vtrack->Phi();
+      Int_t    sign = vtrack->Charge() > 0 ? 1 : -1;
+      miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
     }
-    Double_t pt = esdtrack->Pt();
-    Double_t eta  = esdtrack->Eta();
-    Double_t phi  = esdtrack->Phi();
-    Int_t    sign = esdtrack->Charge() > 0 ? 1 : -1;
-    miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
   }
 
   if (fFillMuons) {
-    Double_t ptMu, etaMu, phiMu;
-    Int_t signMu;
     // count good muons
     Int_t nGoodMuons = 0;
     for (Int_t iMu = 0; iMu<fESD->GetNumberOfMuonTracks(); iMu++) {
       AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iMu);
-      if(muonTrack) {
+      if (muonTrack) {
           if (IsGoodMUONtrack(*muonTrack)) nGoodMuons++;
       }
     }
@@ -567,12 +564,13 @@ void AliDhcTask::GetESDTracks(MiniEvent* miniEvt)
     // fill them into the mini event
     for (Int_t iMu = 0; iMu<fESD->GetNumberOfMuonTracks(); iMu++) {
       AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iMu);
-      if(muonTrack) {
-        if(!IsGoodMUONtrack(*muonTrack)) continue;
-        ptMu   = muonTrack->Pt();
-        etaMu  = muonTrack->Eta();
-        phiMu  = muonTrack->Phi();
-        signMu = muonTrack->Charge() > 0 ? 1 : -1;
+      if (muonTrack) {
+        if (!IsGoodMUONtrack(*muonTrack)) 
+          continue;
+        Double_t ptMu   = muonTrack->Pt();
+        Double_t etaMu  = muonTrack->Eta();
+        Double_t phiMu  = muonTrack->Phi();
+        Double_t signMu = muonTrack->Charge() > 0 ? 1 : -1;
         miniEvt->push_back(AliMiniTrack(ptMu, etaMu, phiMu, signMu));
       }
     }
@@ -584,65 +582,122 @@ void AliDhcTask::GetAODTracks(MiniEvent* miniEvt)
 {
   // Loop twice: 1. Count sel. tracks. 2. Fill vector.
 
-  Int_t nTrax = fAOD->GetNumberOfTracks();
-  Int_t nSelTrax = 0;
+  if (fTracksName.IsNull()) {
+    Int_t nTrax = fAOD->GetNumberOfTracks();
+    Int_t nSelTrax = 0;
 
-  if (fVerbosity > 2)
-    AliInfo(Form("%d tracks in event",nTrax));
+    if (fVerbosity > 2)
+      AliInfo(Form("%d tracks in event",nTrax));
 
-  // Loop 1.
-  for (Int_t i = 0; i < nTrax; ++i) {
-    AliAODTrack* aodtrack = fAOD->GetTrack(i);
-    if (!aodtrack) {
-      AliError(Form("Couldn't get AOD track %d\n", i));
-      continue;
+    // Loop 1.
+    for (Int_t i = 0; i < nTrax; ++i) {
+      AliAODTrack* aodtrack = fAOD->GetTrack(i);
+      if (!aodtrack) {
+        AliError(Form("Couldn't get AOD track %d\n", i));
+        continue;
+      }
+      // See $ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C
+      UInt_t tpcOnly = 1 << 7;
+      Bool_t trkOK = aodtrack->TestFilterBit(tpcOnly);
+      if (!trkOK)
+        continue;
+      Double_t pt = aodtrack->Pt();
+      Bool_t ptOK = pt >= fPtMin && pt < fPtMax;
+      if (!ptOK)
+        continue;
+      Double_t eta = aodtrack->Eta();
+      if (TMath::Abs(eta) > fEtaMax)
+        continue;
+      nSelTrax++;
     }
-    // See $ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C
-    UInt_t tpcOnly = 1 << 7;
-    Bool_t trkOK = aodtrack->TestFilterBit(tpcOnly);
-    if (!trkOK)
-      continue;
-    Double_t pt = aodtrack->Pt();
-    Bool_t ptOK = pt >= fPtMin && pt < fPtMax;
-    if (!ptOK)
-      continue;
-    Double_t eta = aodtrack->Eta();
-    if (TMath::Abs(eta) > fEtaMax)
-      continue;
-    nSelTrax++;
-  }
 
-  if (miniEvt)
-    miniEvt->reserve(nSelTrax);
-  else {
-    AliError("!miniEvt");
-    return;
-  }
-  
-  // Loop 2.  
-  for (Int_t i = 0; i < nTrax; ++i) {
-    AliAODTrack* aodtrack = fAOD->GetTrack(i);
-    if (!aodtrack) {
-      AliError(Form("Couldn't get AOD track %d\n", i));
-      continue;
+    if (miniEvt)
+      miniEvt->reserve(nSelTrax);
+    else {
+      AliError("!miniEvt");
+      return;
     }
+  
+    // Loop 2.  
+    for (Int_t i = 0; i < nTrax; ++i) {
+      AliAODTrack* aodtrack = fAOD->GetTrack(i);
+      if (!aodtrack) {
+        AliError(Form("Couldn't get AOD track %d\n", i));
+        continue;
+      }
     
-    // See $ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C
-    UInt_t tpcOnly = 1 << 7;
-    Bool_t trkOK = aodtrack->TestFilterBit(tpcOnly);
-    if (!trkOK)
-      continue;
-    Double_t pt = aodtrack->Pt();
-    Bool_t ptOK = pt >= fPtMin && pt < fPtMax;
-    if (!ptOK)
-      continue;
-    Double_t eta  = aodtrack->Eta();
-    if (TMath::Abs(eta) > fEtaMax)
-      continue;
+      // See $ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C
+      UInt_t tpcOnly = 1 << 7;
+      Bool_t trkOK = aodtrack->TestFilterBit(tpcOnly);
+      if (!trkOK)
+        continue;
+      Double_t pt = aodtrack->Pt();
+      Bool_t ptOK = pt >= fPtMin && pt < fPtMax;
+      if (!ptOK)
+        continue;
+      Double_t eta  = aodtrack->Eta();
+      if (TMath::Abs(eta) > fEtaMax)
+        continue;
+      
+      Double_t phi  = aodtrack->Phi();
+      Int_t    sign = aodtrack->Charge() > 0 ? 1 : -1;
+      miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
+    }
+  } else {
+    TList *list = InputEvent()->GetList();
+    TClonesArray *tcaTracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracksName));
+
+    if (!tcaTracks){
+      AliError("Ptr to tcaTracks zero");
+      return;
+    }
+
+    const Int_t ntracks = tcaTracks->GetEntries();
+    if (miniEvt)
+      miniEvt->reserve(ntracks);
+    else {
+      AliError("Ptr to miniEvt zero");
+      return;
+    }
+
+    for (Int_t itrack = 0; itrack < ntracks; itrack++) {
+      AliVTrack *vtrack = static_cast<AliVTrack*>(tcaTracks->At(itrack));
+      if (!vtrack) {
+        AliError(Form("ERROR: Could not retrieve vtrack %d",itrack));
+        continue;
+      }
+      Double_t pt   = vtrack->Pt();
+      Double_t eta  = vtrack->Eta();
+      Double_t phi  = vtrack->Phi();
+      Int_t    sign = vtrack->Charge() > 0 ? 1 : -1;
+      miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
+    }
+  }
 
-    Double_t phi  = aodtrack->Phi();
-    Int_t    sign = aodtrack->Charge() > 0 ? 1 : -1;
-    miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
+  if (fFillMuons) {
+    // count good muons
+    Int_t nGoodMuons = 0;
+    for (Int_t iMu = 0; iMu<fAOD->GetNumberOfTracks(); iMu++) {
+      AliAODTrack* muonTrack = fAOD->GetTrack(iMu);
+      if(muonTrack) {
+        if (IsGoodMUONtrack(*muonTrack)) 
+          nGoodMuons++;
+      }
+    }
+    miniEvt->reserve(miniEvt->size()+nGoodMuons);
+    // fill them into the mini event
+    for (Int_t iMu = 0; iMu<fAOD->GetNumberOfTracks(); iMu++) {
+      AliAODTrack* muonTrack = fAOD->GetTrack(iMu);
+      if (muonTrack) {
+        if (!IsGoodMUONtrack(*muonTrack)) 
+          continue;
+        Double_t ptMu   = muonTrack->Pt();
+        Double_t etaMu  = muonTrack->Eta();
+        Double_t phiMu  = muonTrack->Phi();
+        Double_t signMu = muonTrack->Charge() > 0 ? 1 : -1;
+        miniEvt->push_back(AliMiniTrack(ptMu, etaMu, phiMu, signMu));
+      }
+    }
   }
 }
 
@@ -687,8 +742,8 @@ Int_t AliDhcTask::Correlate(const MiniEvent &evt1, const MiniEvent &evt2, Int_t
   TH2  **hist = fHMs;
   if (pairing == kSameEvt) {
     hist = fHSs;
-    fHCent->AddBinContent(cbin);
-    fHZvtx->AddBinContent(zbin);
+    fHCent->Fill(fCentrality);
+    fHZvtx->Fill(fZVertex);
   }
 
   Int_t nZvtx = fHZvtx->GetNbinsX();
@@ -806,7 +861,7 @@ Int_t AliDhcTask::Correlate(const MiniEvent &evt1, const MiniEvent &evt2, Int_t
       bCountTrg = kTRUE;
 
       if (pairing == kSameEvt) {
-        fHPtAss->AddBinContent(bbin);
+        fHPtAss->Fill(ptb);
       }
     }
     if (bCountTrg) {
@@ -826,12 +881,6 @@ void AliDhcTask::Terminate(Option_t *)
 {
   // Draw result to the screen
   // Called once at the end of the query
-
-  delete fPoolMgr;
-  fHCent->SetEntries(fHCent->Integral());
-  fHZvtx->SetEntries(fHZvtx->Integral());
-  fHPtTrg->SetEntries(fHPtTrg->Integral());
-  fHPtAss->SetEntries(fHPtAss->Integral());
 }
 
 //________________________________________________________________________
@@ -877,15 +926,45 @@ Bool_t AliDhcTask::VertexOk(TObject* obj) const
 //________________________________________________________________________
 Bool_t AliDhcTask::IsGoodMUONtrack(AliESDMuonTrack &track)
 {
-    // Applying track cuts for MUON tracks
-    if(!track.ContainTrackerData()) return kFALSE;
-    if(!track.ContainTriggerData()) return kFALSE;
-    Double_t thetaTrackAbsEnd = TMath::ATan(track.GetRAtAbsorberEnd()/505.) * TMath::RadToDeg();
-    Double_t eta = track.Eta();
-    if(!(thetaTrackAbsEnd >= 2. && thetaTrackAbsEnd <= 10. && eta >= -4. && eta <= -2.5)) return kFALSE;
-    if(track.GetMatchTrigger() <= 0) return kFALSE;
-    // if(track.Pt() <= 1.0) return kFALSE;
-    //  if(track.GetNormalizedChi2() >= 4.0) return kFALSE;
-    
-    return kTRUE;
+  // Applying track cuts for MUON tracks
+
+  if (!track.ContainTrackerData()) 
+    return kFALSE;
+  if (!track.ContainTriggerData()) 
+    return kFALSE;
+  Double_t thetaTrackAbsEnd = TMath::ATan(track.GetRAtAbsorberEnd()/505.) * TMath::RadToDeg();
+  if ((thetaTrackAbsEnd < 2.) || (thetaTrackAbsEnd > 10.)) 
+    return kFALSE;
+  Double_t eta = track.Eta();
+  if ((eta < -4.) || (eta > -2.5))
+    return kFALSE;
+  if (track.GetMatchTrigger() < 0.5) 
+    return kFALSE;
+  return kTRUE;
+}
+
+//________________________________________________________________________
+Bool_t AliDhcTask::IsGoodMUONtrack(AliAODTrack &track)
+{
+  // Applying track cuts for MUON tracks
+
+  if (!track.IsMuonTrack()) 
+    return kFALSE;
+  Double_t dThetaAbs = TMath::ATan(track.GetRAtAbsorberEnd()/505.)* TMath::RadToDeg();
+  if ((dThetaAbs<2.) || (dThetaAbs>10.)) 
+    return kFALSE;
+  Double_t dEta = track.Eta();
+  if ((dEta<-4.) || (dEta>2.5)) 
+    return kFALSE;
+  if (track.GetMatchTrigger()<0.5) 
+    return kFALSE;
+  return kTRUE;
+}
+
+//________________________________________________________________________
+AliDhcTask::~AliDhcTask()
+{
+  //Destructor
+  if (fPoolMgr) 
+    delete fPoolMgr;
 }
index b5f870138961b8545bfc248e4bfc13e2dbff45aa..f887dacd2cd5eea4f843d8c3a72f5530c5f82fbc 100644 (file)
@@ -21,6 +21,7 @@ class AliAODEvent;
 class AliESDEvent;
 class AliESDtrackCuts;
 class AliESDMuonTrack;
+class AliAODTrack;
 class AliEvtPoolManager;
 
 
@@ -28,7 +29,7 @@ class AliDhcTask : public AliAnalysisTaskSE {
  public:
   AliDhcTask();
   AliDhcTask(const char *name);
-  virtual ~AliDhcTask() {}
+  virtual ~AliDhcTask();
   
   void         SetCentBins(TAxis *bins)               { fBCent=bins;              }
   void         SetCentMethod(const char *name)        { fCentMethod = name;       }
@@ -62,6 +63,7 @@ class AliDhcTask : public AliAnalysisTaskSE {
   void         GetAODTracks(MiniEvent*);
   Bool_t       VertexOk(TObject* obj) const;
   Bool_t       IsGoodMUONtrack(AliESDMuonTrack &track);
+  Bool_t       IsGoodMUONtrack(AliAODTrack &track);
   Double_t     DeltaPhi(Double_t phia, Double_t phib,
                        Double_t rangeMin = -TMath::Pi()/2, 
                        Double_t rangeMax = 3*TMath::Pi()/2) const;
index 9636648dd69a3b43457c1204cc6fede4e751e22e..75254976b4adcde8ec6b3579125cea703e0a8a88 100644 (file)
@@ -17,6 +17,7 @@
 #include "AliESDEvent.h"
 #include "AliAODEvent.h"
 #include "AliESDMuonTrack.h"
+#include "AliAODTrack.h"
 #include "AliESDVertex.h"
 #include "AliAODVertex.h"
 #include "AliCentrality.h"
@@ -213,54 +214,53 @@ void AliMuonEffMC::UserCreateOutputObjects()
 void AliMuonEffMC::UserExec(Option_t *) 
 {
   // Main loop, Called for each event
-  fESD = dynamic_cast<AliESDEvent*>(InputEvent());
-  if (!fESD) 
+  Int_t ntrks = 0; // number of tracks in an event
+
+  if(((TString)InputEvent()->IsA()->GetName())=="AliAODEvent")
   {
     fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
-  }
-
-  if (!fESD && !fAOD) 
+    if (!fAOD) { AliError("AOD event not found. Nothing done!"); return; }
+    ntrks = fAOD->GetNTracks();
+  } 
+  else
   {
-    AliError("Neither fESD nor fAOD available");
-    return;
+    fESD = dynamic_cast<AliESDEvent*>(InputEvent());
+    if (!fESD) { AliError("ESD event not found. Nothing done!"); return; }
+    ntrks = fESD->GetNumberOfMuonTracks();
   }
        
   fHEventStat->Fill(0.5);
   if(fIsMc) 
   {
     fMC = MCEvent();
-    if (!fMC) {
-      printf("ERROR: fMC not available\n");
-      return;
-    }
+    if (!fMC) { AliError("MC event not avaliable."); return; }
   }
 
-  const AliESDVertex* vertex = fESD->GetPrimaryVertex();
-  fZVertex = vertex->GetZ();
-  if(fESD->GetCentrality()) fCentrality = fESD->GetCentrality()->GetCentralityPercentile("fCentralityEstimator");
-
-  // Fill Event histogram
-  fHEvt->Fill(fZVertex, fCentrality);
-
-  Int_t iVerb = 0;
-
-   // Centrality, vertex, other event variables...
-  if (!VertexOk(fESD)) { 
-    if (iVerb>1)
-      AliInfo(Form("Event REJECTED. z = %.1f", fZVertex));  
-    return; 
+  // Centrality, vertex, other event variables...
+  if(fAOD)
+  { 
+    const AliAODVertex* vertex = fAOD->GetPrimaryVertex();
+    fZVertex = vertex->GetZ();
+    if(fAOD->GetCentrality())  fCentrality = fAOD->GetCentrality()->GetCentralityPercentile("fCentralityEstimator");
   }
+  else if(fESD) 
+  {
+    const AliESDVertex* vertex = fESD->GetPrimaryVertex();
+    fZVertex = vertex->GetZ();
+    if(fESD->GetCentrality()) fCentrality = fESD->GetCentrality()->GetCentralityPercentile("fCentralityEstimator");
+  }   
 
-  if (fCentrality > 100. || fCentrality < -1.5) { 
-    if (iVerb>1)
-      AliInfo(Form("Event REJECTED. fCentrality = %.1f", fCentrality)); 
-    return; 
-  }
+  if ((fESD && !VertexOk(fESD)) || (fAOD && !VertexOk(fAOD))) { AliInfo(Form("Event REJECTED. z = %.1f", fZVertex)); return; }
+  if (fCentrality > 100. || fCentrality < -1.5) { AliInfo(Form("Event REJECTED. fCentrality = %.1f", fCentrality)); return; }
  
-  if(fCentrality < 0) fCentrality = 1.0;
+  if(fCentrality < 0) fCentrality = 100.5;
+  // Fill Event histogram
+  fHEvt->Fill(fZVertex, fCentrality);
   fHEventStat->Fill(1.5);
  
-  ULong64_t trigword=fESD->GetTriggerMask();
+  ULong64_t trigword = 0;
+  if(fAOD) trigword=fAOD->GetTriggerMask();
+  else if(fESD) trigword=fESD->GetTriggerMask();
  
   if (trigword & 0x01) fHEventStat->Fill(17.5);
   if (trigword & 0x02) fHEventStat->Fill(3.5);
@@ -280,72 +280,99 @@ void AliMuonEffMC::UserExec(Option_t *)
 
   if(fIsMc)
   {
-    for (Int_t iTrack = 0; iTrack<fESD->GetNumberOfMuonTracks(); iTrack++) 
+    for (Int_t iTrack = 0; iTrack<ntrks; iTrack++) 
     { 
       // loop on muon tracks
-      AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iTrack);
-      if(muonTrack)
+      Int_t label = 0;
+      Double_t trackpt = 0;
+      Double_t tracketa = 0;
+      Double_t trackphi = 0;
+      Double_t dcavalue = 0;
+      if(fAOD)
       {
-       if(!IsGoodMUONtrack(*muonTrack)) continue;
-       Double_t fillArrayDetRec[5] = { muonTrack->Eta(), muonTrack->Pt(), fCentrality, fZVertex, muonTrack->Phi() };
-       fHMuonDetRec->Fill(fillArrayDetRec); 
-       
-       Int_t label = TMath::Abs(muonTrack->GetLabel());
-       AliMCParticle *McParticle  = (AliMCParticle*)fMC->GetTrack(label);
-       if(TMath::Abs(McParticle->PdgCode()) != 13) 
+       AliAODTrack* muonTrack = (AliAODTrack*)fAOD->GetTrack(iTrack);
+       if(muonTrack)
        {
-         fHEtcDetRec->Fill(fillArrayDetRec); 
-         continue;
+         if(!(IsGoodMUONtrack(*muonTrack)) || !(muonTrack->IsMuonTrack())) continue;
+         trackpt = muonTrack->Pt();
+         tracketa = muonTrack->Eta();
+         trackphi = muonTrack->Phi();
+         label =  TMath::Abs(muonTrack->GetLabel());
        }
-       Double_t fillArrayDetGen[5] = { McParticle->Eta(), McParticle->Pt(), fCentrality, fZVertex, McParticle->Phi() };
-       fHMuonDetGen->Fill(fillArrayDetGen);
+      }
+      else if(fESD)
+      {
+       AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iTrack);
+       if(muonTrack)
+       {
+         if(!IsGoodMUONtrack(*muonTrack)) continue;
+         trackpt = muonTrack->Pt();
+         tracketa = muonTrack->Eta();
+         trackphi = muonTrack->Phi();
+         label =  TMath::Abs(muonTrack->GetLabel());
+         dcavalue = muonTrack->GetDCA();
+       }
+      }
+  
+
+      Double_t fillArrayDetRec[5] = { tracketa, trackpt, fCentrality, fZVertex, trackphi };
+      fHMuonDetRec->Fill(fillArrayDetRec); 
+       
+      AliMCParticle *McParticle  = (AliMCParticle*)fMC->GetTrack(label);
+      if(TMath::Abs(McParticle->PdgCode()) != 13) 
+      {
+       fHEtcDetRec->Fill(fillArrayDetRec); 
+       continue;
+      }
+      Double_t fillArrayDetGen[5] = { McParticle->Eta(), McParticle->Pt(), fCentrality, fZVertex, McParticle->Phi() };
+      fHMuonDetGen->Fill(fillArrayDetGen);
        
-       if(fMDProcess)
+      if(fMDProcess)
+      {
+       if(McParticle->GetMother() > 0)
        {
-         if(McParticle->GetMother() > 0)
-         {
-           AliMCParticle *MotherParticle  = (AliMCParticle*)fMC->GetTrack(McParticle->GetMother());
-           Int_t motherlabel = TMath::Abs(MotherParticle->PdgCode());
+         AliMCParticle *MotherParticle  = (AliMCParticle*)fMC->GetTrack(McParticle->GetMother());
+         Int_t motherlabel = TMath::Abs(MotherParticle->PdgCode());
            
-           if(motherlabel==411 || motherlabel==413 || motherlabel==421 || motherlabel==423 || motherlabel==431 || motherlabel==433 || motherlabel==10413 || motherlabel==10411 || motherlabel==10423 || motherlabel==10421 || motherlabel==10433 || motherlabel==10431 || motherlabel==20413 || motherlabel==415 || motherlabel==20423 || motherlabel==425 || motherlabel==20433 || motherlabel==435)
-           {  
-             fHMuMotherGenPt[2]->Fill(McParticle->Pt(), MotherParticle->Pt());
-             fHMuMotherRecPt[2]->Fill(muonTrack->Pt(), MotherParticle->Pt());
-             fHMuMotherGenPhi[2]->Fill(McParticle->Phi(), MotherParticle->Phi());
-             fHMuMotherRecPhi[2]->Fill(muonTrack->Phi(), MotherParticle->Phi());
-             fHMuMotherGenEta[2]->Fill(McParticle->Eta(), MotherParticle->Eta());
-             fHMuMotherRecEta[2]->Fill(muonTrack->Eta(), MotherParticle->Eta());
-             fHMuDCA[2]->Fill(muonTrack->GetDCA());
-           }
-           else if(motherlabel==211) 
+         if(motherlabel==411 || motherlabel==413 || motherlabel==421 || motherlabel==423 || motherlabel==431 || motherlabel==433 || motherlabel==10413 || motherlabel==10411 || motherlabel==10423 || motherlabel==10421 || motherlabel==10433 || motherlabel==10431 || motherlabel==20413 || motherlabel==415 || motherlabel==20423 || motherlabel==425 || motherlabel==20433 || motherlabel==435)
+         {  
+           fHMuMotherGenPt[2]->Fill(McParticle->Pt(), MotherParticle->Pt());
+           fHMuMotherRecPt[2]->Fill(trackpt, MotherParticle->Pt());
+           fHMuMotherGenPhi[2]->Fill(McParticle->Phi(), MotherParticle->Phi());
+           fHMuMotherRecPhi[2]->Fill(trackphi, MotherParticle->Phi());
+           fHMuMotherGenEta[2]->Fill(McParticle->Eta(), MotherParticle->Eta());
+           fHMuMotherRecEta[2]->Fill(tracketa, MotherParticle->Eta());
+           if(fESD) fHMuDCA[2]->Fill(dcavalue);
+         }
+         else if(motherlabel==211) 
            {
              fHMuMotherGenPt[0]->Fill(McParticle->Pt(), MotherParticle->Pt());
-             fHMuMotherRecPt[0]->Fill(muonTrack->Pt(), MotherParticle->Pt());
+             fHMuMotherRecPt[0]->Fill(trackpt, MotherParticle->Pt());
              fHMuMotherGenPhi[0]->Fill(McParticle->Phi(), MotherParticle->Phi());
-             fHMuMotherRecPhi[0]->Fill(muonTrack->Phi(), MotherParticle->Phi());
+             fHMuMotherRecPhi[0]->Fill(trackphi, MotherParticle->Phi());
              fHMuMotherGenEta[0]->Fill(McParticle->Eta(), MotherParticle->Eta());
-             fHMuMotherRecEta[0]->Fill(muonTrack->Eta(), MotherParticle->Eta());
-             fHMuDCA[0]->Fill(muonTrack->GetDCA());
+             fHMuMotherRecEta[0]->Fill(tracketa, MotherParticle->Eta());
+             if(fESD) fHMuDCA[0]->Fill(dcavalue);
            }
            else if(motherlabel==321)
            {
              fHMuMotherGenPt[1]->Fill(McParticle->Pt(), MotherParticle->Pt());
-             fHMuMotherRecPt[1]->Fill(muonTrack->Pt(), MotherParticle->Pt());
+             fHMuMotherRecPt[1]->Fill(trackpt, MotherParticle->Pt());
              fHMuMotherGenPhi[1]->Fill(McParticle->Phi(), MotherParticle->Phi());
-             fHMuMotherRecPhi[1]->Fill(muonTrack->Phi(), MotherParticle->Phi());
+             fHMuMotherRecPhi[1]->Fill(trackphi, MotherParticle->Phi());
              fHMuMotherGenEta[1]->Fill(McParticle->Eta(), MotherParticle->Eta());
-             fHMuMotherRecEta[1]->Fill(muonTrack->Eta(), MotherParticle->Eta());
-             fHMuDCA[1]->Fill(muonTrack->GetDCA());
+             fHMuMotherRecEta[1]->Fill(tracketa, MotherParticle->Eta());
+             if(fESD) fHMuDCA[1]->Fill(dcavalue);
            }   
            else 
            {
              fHMuMotherGenPt[3]->Fill(McParticle->Pt(), MotherParticle->Pt());
-             fHMuMotherRecPt[3]->Fill(muonTrack->Pt(), MotherParticle->Pt());
+             fHMuMotherRecPt[3]->Fill(trackpt, MotherParticle->Pt());
              fHMuMotherGenPhi[3]->Fill(McParticle->Phi(), MotherParticle->Phi());
-             fHMuMotherRecPhi[3]->Fill(muonTrack->Phi(), MotherParticle->Phi());
+             fHMuMotherRecPhi[3]->Fill(trackphi, MotherParticle->Phi());
              fHMuMotherGenEta[3]->Fill(McParticle->Eta(), MotherParticle->Eta());
-             fHMuMotherRecEta[3]->Fill(muonTrack->Eta(), MotherParticle->Eta());
-             fHMuDCA[3]->Fill(muonTrack->GetDCA());
+             fHMuMotherRecEta[3]->Fill(tracketa, MotherParticle->Eta());
+             if(fESD) fHMuDCA[3]->Fill(dcavalue);
            }
          }    
        } // (mother hadron) : (daughter muon) QA 
@@ -361,7 +388,7 @@ void AliMuonEffMC::UserExec(Option_t *)
        fHMuonParGen->Fill(fillArrayParGen);
       }
     }  
-  }
+
   PostData(1, fOutputList);
   return;
 }
@@ -372,11 +399,6 @@ void AliMuonEffMC::Terminate(Option_t *)
   // Draw result to the screen
   // Called once at the end of the query
 
-  fOutputList = dynamic_cast<TList*> (GetOutputData(1));
-  if (!fOutputList) {
-    AliError("Output list not available");
-    return;
-  }
 }
 
 //________________________________________________________________________
@@ -425,7 +447,6 @@ Bool_t AliMuonEffMC::IsGoodMUONtrack(AliESDMuonTrack &track)
 {
   // Applying track cuts for MUON tracks
   if(!track.ContainTrackerData()) return kFALSE;
-  if(!track.ContainTriggerData()) return kFALSE;
 
   Double_t thetaTrackAbsEnd = TMath::ATan(track.GetRAtAbsorberEnd()/505.) * TMath::RadToDeg();
   Double_t eta = track.Eta();
@@ -438,3 +459,20 @@ Bool_t AliMuonEffMC::IsGoodMUONtrack(AliESDMuonTrack &track)
 
   return kTRUE;
 }
+
+//________________________________________________________________________
+Bool_t AliMuonEffMC::IsGoodMUONtrack(AliAODTrack &track)
+{
+  if (!track.IsMuonTrack()) return kFALSE;
+
+  Double_t dThetaAbs = TMath::ATan(track.GetRAtAbsorberEnd()/505.)
+                     * TMath::RadToDeg();
+  if ((dThetaAbs<2.) || (dThetaAbs>10.)) return kFALSE;
+
+  Double_t dEta = track.Eta();
+  if ((dEta<-4.) || (dEta>2.5)) return kFALSE;
+
+  if (track.GetMatchTrigger()<0.5) return kFALSE;
+
+  return kTRUE;
+}
index ee52235a967551a10f97952a78f9517e63b4fe69..63f127fc8e0c0b14d4062f77d8e4d89d58fbe1c8 100644 (file)
@@ -20,6 +20,7 @@ class AliESDtrackCuts;
 class AliEvtPoolManager;
 class AliMCEvent;
 class AliESDMuonTrack;
+class AliAODTrack;
 #include "AliAnalysisTaskSE.h"
 
 
@@ -45,6 +46,7 @@ class AliMuonEffMC : public AliAnalysisTaskSE {
  protected:
   Bool_t       VertexOk(TObject* obj) const;
   Bool_t       IsGoodMUONtrack(AliESDMuonTrack &track);
+  Bool_t       IsGoodMUONtrack(AliAODTrack &track);
 
  private:
   AliESDEvent *fESD;               //! ESD object
@@ -56,15 +58,15 @@ class AliMuonEffMC : public AliAnalysisTaskSE {
   TH1D        *fHEventStat;        //! statistics histo
   TH2F        *fHEvt;              //! Cent, vtx
 
-  Bool_t       fIsMc;              //
-  Bool_t       fMDProcess;         //! (mother hadron) : (daughter muon) QA 
+  Bool_t       fIsMc;              //
+  Bool_t       fMDProcess;         // (mother hadron) : (daughter muon) QA 
 
-  TString      fCentralityEstimator;//! 
-  Int_t        fNEtaBins;          //! number of eta bins
-  Int_t        fNpTBins;           //! number of p_T bins
-  Int_t        fNCentBins;         //! number of centrality bins
-  Int_t        fNZvtxBins;         //! number of Z-vertex bins
-  Int_t        fNPhiBins;          //! number of phi bins
+  TString      fCentralityEstimator;// 
+  Int_t        fNEtaBins;          // number of eta bins
+  Int_t        fNpTBins;           // number of p_T bins
+  Int_t        fNCentBins;         // number of centrality bins
+  Int_t        fNZvtxBins;         // number of Z-vertex bins
+  Int_t        fNPhiBins;          // number of phi bins
 
   THn         *fHMuonParGen;       //! truth muon track eta, p_T, Centrality, Z-vertex, phi 
   THn         *fHMuonDetGen;       //! detector level muon track generated eta, p_T, Centrality, Z-vertex, phi 
@@ -82,7 +84,7 @@ class AliMuonEffMC : public AliAnalysisTaskSE {
   AliMuonEffMC(const AliMuonEffMC&);            // not implemented
   AliMuonEffMC &operator=(const AliMuonEffMC&); // not implemented
 
-  ClassDef(AliMuonEffMC, 1);
+  ClassDef(AliMuonEffMC, 2);
 };
 
 #endif