]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Introducing p-A muon-hadron correlation analysis task (Antonio)
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Jan 2013 11:12:30 +0000 (11:12 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Jan 2013 11:12:30 +0000 (11:12 +0000)
PWGCF/Correlations/DPhi/MuonHadron/AliAnalysisTaskMuonHadronCorrelations.cxx [new file with mode: 0644]
PWGCF/Correlations/DPhi/MuonHadron/AliAnalysisTaskMuonHadronCorrelations.h [new file with mode: 0644]
PWGCF/Correlations/DPhi/MuonHadron/RunAnalysisTaskMuonHadronCorrelations.C [new file with mode: 0644]

diff --git a/PWGCF/Correlations/DPhi/MuonHadron/AliAnalysisTaskMuonHadronCorrelations.cxx b/PWGCF/Correlations/DPhi/MuonHadron/AliAnalysisTaskMuonHadronCorrelations.cxx
new file mode 100644 (file)
index 0000000..3154307
--- /dev/null
@@ -0,0 +1,433 @@
+#include "AliLog.h"
+#include "TH1D.h"
+#include "TH2D.h"
+#include "TTree.h"
+#include "TAxis.h"
+#include "AliAODEvent.h"
+#include "AliAODTrack.h"
+#include "TMath.h"
+#include "TString.h"
+
+#include "AliAnalysisTaskMuonHadronCorrelations.h"
+
+ClassImp(AliAnalysisTaskMuonHadronCorrelations)
+
+//====================================================================================================================================================
+
+AliAnalysisTaskMuonHadronCorrelations::AliAnalysisTaskMuonHadronCorrelations() : 
+  AliAnalysisTaskSE(), 
+  fAOD(0x0),
+  fTracksCentralBarrel(0x0),
+  fTracksMuonArm(0x0),
+  fTrackCB(0x0),
+  fTrackMA(0x0),
+  fFilterBitCentralBarrel(0),
+  fMaxEtaCentralBarrel(1.0),
+  fMaxChi2Muon(9999999999), 
+  fMinRAbsMuon(0), 
+  fMaxRAbsMuon(9999999999),
+  fTriggerMatchLevelMuon(0),
+  fTriggerWord(""),
+  fIsTriggerSet(kFALSE),
+  fNbinsCent(1), 
+  fNbinsPt(1),
+  fCentAxis(0x0), 
+  fMultAxis(0x0),
+  fPtAxis(0x0),
+  fHistV0Multiplicity(0x0), 
+  fHistITSMultiplicity(0x0),
+  fHistCentrality(0x0),
+  fCentMethod(0),
+  fEvt(0),
+  fOutputList(0x0)
+{
+
+  // Default constructor
+
+  for (Int_t iCent=0; iCent<fNMaxBinsCentrality; iCent++) {
+    for (Int_t iPtBinCB=0; iPtBinCB<fNMaxBinsPt; iPtBinCB++) {
+      for (Int_t iPtBinMA=0; iPtBinMA<fNMaxBinsPt; iPtBinMA++) {
+       fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA]    = NULL;
+       fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = NULL;
+      }
+    }
+    fHistNTracksCB_vs_NTracksMA[iCent]  = NULL;
+  }  
+  
+}
+
+
+//====================================================================================================================================================
+
+AliAnalysisTaskMuonHadronCorrelations::AliAnalysisTaskMuonHadronCorrelations(const char *name) : 
+  AliAnalysisTaskSE(name), 
+  fAOD(0x0),
+  fTracksCentralBarrel(0x0),
+  fTracksMuonArm(0x0),
+  fTrackCB(0x0),
+  fTrackMA(0x0),
+  fFilterBitCentralBarrel(0),
+  fMaxEtaCentralBarrel(1.0),
+  fMaxChi2Muon(9999999999), 
+  fMinRAbsMuon(0), 
+  fMaxRAbsMuon(9999999999),
+  fTriggerMatchLevelMuon(0),
+  fTriggerWord(""),
+  fIsTriggerSet(kFALSE),
+  fNbinsCent(1), 
+  fNbinsPt(1),
+  fCentAxis(0x0), 
+  fMultAxis(0x0),
+  fPtAxis(0x0),
+  fHistV0Multiplicity(0x0), 
+  fHistITSMultiplicity(0x0),
+  fHistCentrality(0x0),
+  fCentMethod(0),
+  fEvt(0),
+  fOutputList(0x0)
+{
+
+  // Constructor
+
+  for (Int_t iCent=0; iCent<fNMaxBinsCentrality; iCent++) {
+    for (Int_t iPtBinCB=0; iPtBinCB<fNMaxBinsPt; iPtBinCB++) {
+      for (Int_t iPtBinMA=0; iPtBinMA<fNMaxBinsPt; iPtBinMA++) {
+       fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA]    = NULL;
+       fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = NULL;
+      }
+    }
+    fHistNTracksCB_vs_NTracksMA[iCent]  = NULL;
+  }  
+  
+  // Define input and output slots here
+  DefineOutput(1, TList::Class());
+  
+}
+
+//====================================================================================================================================================
+
+AliAnalysisTaskMuonHadronCorrelations::~AliAnalysisTaskMuonHadronCorrelations() {
+  
+  delete fAOD;
+  delete fTrackCB;
+  delete fTrackMA;
+  
+  delete fCentAxis;
+  delete fPtAxis;
+
+  for (Int_t iCent=0; iCent<fNMaxBinsCentrality; iCent++) {
+    for (Int_t iPtBinCB=0; iPtBinCB<fNMaxBinsPt; iPtBinCB++) {
+      for (Int_t iPtBinMA=0; iPtBinMA<fNMaxBinsPt; iPtBinMA++) {
+       delete fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA];
+       delete fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA];
+      }
+    }
+    delete fHistNTracksCB_vs_NTracksMA[iCent];
+  }
+  
+}
+
+//====================================================================================================================================================
+
+void AliAnalysisTaskMuonHadronCorrelations::UserCreateOutputObjects() {
+  
+  fOutputList = new TList();
+  fOutputList->SetOwner(kTRUE);
+
+  for (Int_t iCent=0; iCent<fNbinsCent; iCent++) {
+    for (Int_t iPtBinCB=0; iPtBinCB<fNbinsPt; iPtBinCB++) {
+      for (Int_t iPtBinMA=0; iPtBinMA<fNbinsPt; iPtBinMA++) {
+       
+       fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA]    = new TH1D(Form("fHistDeltaPhi_Cent%02d_PtBin%02d_%02d",iCent,iPtBinCB,iPtBinMA), 
+                                                              Form("%d-%d %%, %3.1f<p_{T}^{TPC}<%3.1f, %3.1f<p_{T}^{Muon}<%3.1f",
+                                                                   Int_t(fCentAxis->GetBinLowEdge(iCent+1)),
+                                                                   Int_t(fCentAxis->GetBinUpEdge(iCent+1)),
+                                                                   fPtAxis->GetBinLowEdge(iPtBinCB+1),
+                                                                   fPtAxis->GetBinUpEdge(iPtBinCB+1),
+                                                                   fPtAxis->GetBinLowEdge(iPtBinMA+1),
+                                                                   fPtAxis->GetBinUpEdge(iPtBinMA+1)),
+                                                              100, -0.5*TMath::RadToDeg()*TMath::Pi(), 1.5*TMath::RadToDeg()*TMath::Pi());
+       
+       fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA]    = new TH1D(Form("fHistDeltaPhiMix_Cent%02d_PtBin%02d_%02d",iCent,iPtBinCB,iPtBinMA), 
+                                                                 Form("%d-%d %%, %3.1f<p_{T}^{TPC}<%3.1f, %3.1f<p_{T}^{Muon}<%3.1f MIXED",
+                                                                      Int_t(fCentAxis->GetBinLowEdge(iCent+1)),
+                                                                      Int_t(fCentAxis->GetBinUpEdge(iCent+1)),
+                                                                      fPtAxis->GetBinLowEdge(iPtBinCB+1),
+                                                                      fPtAxis->GetBinUpEdge(iPtBinCB+1),
+                                                                      fPtAxis->GetBinLowEdge(iPtBinMA+1),
+                                                                      fPtAxis->GetBinUpEdge(iPtBinMA+1)),
+                                                                 100, -0.5*TMath::RadToDeg()*TMath::Pi(), 1.5*TMath::RadToDeg()*TMath::Pi());
+       
+       fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA]    -> SetXTitle("#Delta#varphi  [degrees]");
+       fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> SetXTitle("#Delta#varphi  [degrees]");
+
+       fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA]    -> Sumw2();
+       fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> Sumw2();
+       
+       fOutputList -> Add(fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA]);
+       fOutputList -> Add(fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA]);
+
+      }
+    }
+
+    fHistNTracksCB_vs_NTracksMA[iCent] = new TH2D(Form("fHistNTracksCB_vs_NTracksMA_Cent%02d",iCent),
+                                                 Form("%d-%d %%",Int_t(fCentAxis->GetBinLowEdge(iCent+1)),Int_t(fCentAxis->GetBinUpEdge(iCent+1))),
+                                                 100, 0, 1000, 100, 0, 100);
+    fHistNTracksCB_vs_NTracksMA[iCent] -> SetXTitle("N_{tracks} Central Barrel");
+    fHistNTracksCB_vs_NTracksMA[iCent] -> SetYTitle("N_{tracks} Muon Arm");
+
+    fHistNTracksCB_vs_NTracksMA[iCent] -> Sumw2();
+
+    fOutputList -> Add(fHistNTracksCB_vs_NTracksMA[iCent]);
+    
+  }
+  
+  fHistV0Multiplicity = new TH1D("fHistV0Multiplicity", "V0 Multiplicity", 500, 0, 1000);
+  fHistV0Multiplicity -> SetXTitle("Multiplicity");
+  fHistV0Multiplicity -> Sumw2();
+
+  fHistITSMultiplicity = new TH1D("fHistITSMultiplicity", "ITS Multiplicity", 500, 0, 500);
+  fHistITSMultiplicity -> SetXTitle("N_{Clusters}");
+  fHistITSMultiplicity -> Sumw2();
+
+  fHistCentrality = new TH1D("fHistCentrality", Form("%s Centrality",fCentMethod.Data()), 300, -100, 200);
+  fHistCentrality -> SetXTitle("Centrality  [%]");
+  fHistCentrality -> Sumw2();
+
+  fOutputList -> Add(fHistV0Multiplicity);
+  fOutputList -> Add(fHistITSMultiplicity);
+  fOutputList -> Add(fHistCentrality);
+
+  PostData(1, fOutputList); 
+
+}
+
+//====================================================================================================================================================
+
+void AliAnalysisTaskMuonHadronCorrelations::UserExec(Option_t *) {
+
+  AliDebug(2, Form("Single Event analysis : event %05d",fEvt));
+
+  fAOD = dynamic_cast<AliAODEvent *>(InputEvent());  
+  if (!fAOD) return;  
+  
+  // Trigger selection
+  if (!(IsTriggerFired())) return;
+  
+  fHistV0Multiplicity  -> Fill(GetV0Multiplicity());
+  fHistITSMultiplicity -> Fill(GetITSMultiplicity());
+  
+  Int_t centBin = GetCentBin();
+  if (centBin<0) return;
+  
+  fTracksCentralBarrel = GetAcceptedTracksCentralBarrel(fAOD);
+  fTracksMuonArm       = GetAcceptedTracksMuonArm(fAOD);
+  
+  fHistNTracksCB_vs_NTracksMA[centBin] -> Fill(fTracksCentralBarrel->GetEntries(), fTracksMuonArm->GetEntries());
+
+  AliDebug(1, Form("Single Event analysis : event %05d, nTracksCB = %4d, nTracksMA = %4d",fEvt, fTracksCentralBarrel->GetEntries(), fTracksMuonArm->GetEntries()));
+  
+  for (Int_t iTrCB=0; iTrCB<fTracksCentralBarrel->GetEntriesFast(); iTrCB++) {
+    for (Int_t iTrMA=0; iTrMA<fTracksMuonArm->GetEntriesFast(); iTrMA++) {
+      fTrackCB = (AliAODTrack*) fTracksCentralBarrel -> At(iTrCB);
+      fTrackMA = (AliAODTrack*) fTracksMuonArm       -> At(iTrMA);
+      FillHistograms(centBin, kSingleEvent);
+    }
+  }
+
+  delete fTracksCentralBarrel;
+  delete fTracksMuonArm;
+
+  PostData(1, fOutputList); 
+
+}
+
+//====================================================================================================================================================
+
+void AliAnalysisTaskMuonHadronCorrelations::FillHistograms(Int_t centrality, Int_t option) {
+
+  Int_t ptBinTrackCB = fPtAxis -> FindBin(fTrackCB->Pt());
+  Int_t ptBinTrackMA = fPtAxis -> FindBin(fTrackMA->Pt());
+
+  if (ptBinTrackCB<1 || ptBinTrackCB>fNbinsPt || ptBinTrackMA<1 || ptBinTrackMA>fNbinsPt) return;
+
+  Double_t deltaPhi = fTrackCB->Phi() - fTrackMA->Phi();
+  if (deltaPhi >  1.5*TMath::Pi()) deltaPhi -= TMath::TwoPi();
+  if (deltaPhi < -0.5*TMath::Pi()) deltaPhi += TMath::TwoPi();
+
+  if (option==kSingleEvent)     fHistDeltaPhi[centrality][ptBinTrackCB-1][ptBinTrackMA-1]    -> Fill(TMath::RadToDeg()*deltaPhi);
+  else if (option==kMixedEvent) fHistDeltaPhiMix[centrality][ptBinTrackCB-1][ptBinTrackMA-1] -> Fill(TMath::RadToDeg()*deltaPhi);
+
+}
+
+//====================================================================================================================================================
+
+Bool_t AliAnalysisTaskMuonHadronCorrelations::IsTriggerFired() {
+  
+  Bool_t v0and = ((fAOD->GetVZEROData()->GetV0ADecision()==1) && (fAOD->GetVZEROData()->GetV0CDecision()==1)); 
+  TString trigStr(fAOD->GetHeader()->GetFiredTriggerClasses());
+  return (trigStr.Contains(fTriggerWord) && v0and);
+
+}
+
+//====================================================================================================================================================
+
+Float_t AliAnalysisTaskMuonHadronCorrelations::GetV0Multiplicity() {
+  
+  Float_t multiplicity=0;
+  for (Int_t iChannel=0; iChannel<64; iChannel++) multiplicity += fAOD->GetVZEROData()->GetMultiplicity(iChannel);
+  return multiplicity;
+
+}
+
+//====================================================================================================================================================
+
+TClonesArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksCentralBarrel(AliAODEvent *aodEvent) {
+
+  // fills the array of central barrel tracks that pass the cuts
+
+  TClonesArray *tracks = new TClonesArray("AliAODTrack");
+
+  Int_t nTracks = aodEvent->GetNTracks();
+
+  AliAODTrack *track = 0;
+
+  for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
+    track = aodEvent->GetTrack(iTrack);
+    if (track->TestFilterBit(fFilterBitCentralBarrel) && TMath::Abs(track->Eta())<fMaxEtaCentralBarrel) {
+      new ((*tracks)[tracks->GetEntries()]) AliAODTrack(*track);
+    }
+  }
+
+  return tracks;
+
+}
+
+//====================================================================================================================================================
+
+TClonesArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksMuonArm(AliAODEvent *aodEvent) {
+
+  // fills the array of muon tracks that pass the cuts
+
+  TClonesArray *tracks = new TClonesArray("AliAODTrack");
+
+  Int_t nTracks = aodEvent->GetNTracks();
+
+  AliAODTrack *track = 0;
+  
+  for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
+    track = aodEvent->GetTrack(iTrack);
+    if (track->IsMuonTrack() && track->GetMatchTrigger()>=fTriggerMatchLevelMuon) {
+      new ((*tracks)[tracks->GetEntries()]) AliAODTrack(*track);
+    }
+  }
+
+  return tracks;
+
+}
+
+//====================================================================================================================================================
+
+void AliAnalysisTaskMuonHadronCorrelations::SetCentBinning(Int_t nBins, Double_t *limits) {
+
+  if (nBins>fNMaxBinsCentrality) {
+    AliInfo(Form("WARNING : only %d centrality bins (out of the %d proposed) will be considered",fNMaxBinsCentrality,nBins));
+    nBins = fNMaxBinsCentrality;
+  }
+  if (nBins<=0) {
+    AliInfo("WARNING : at least one centrality bin must be considered");
+    nBins = 1;
+  }
+  
+  fNbinsCent = nBins;
+  fCentAxis  = new TAxis(fNbinsCent, limits);
+
+}
+
+//====================================================================================================================================================
+
+void AliAnalysisTaskMuonHadronCorrelations::SetMultBinning(Int_t nBins, Double_t *limits) {
+
+  if (nBins>fNMaxBinsCentrality) {
+    AliInfo(Form("WARNING : only %d centrality bins (out of the %d proposed) will be considered",fNMaxBinsCentrality,nBins));
+    nBins = fNMaxBinsCentrality;
+  }
+  if (nBins<=0) {
+    AliInfo("WARNING : at least one centrality bin must be considered");
+    nBins = 1;
+  }
+  
+  fNbinsCent = nBins;
+  fMultAxis  = new TAxis(fNbinsCent, limits);
+
+}
+
+//====================================================================================================================================================
+
+void AliAnalysisTaskMuonHadronCorrelations::SetPtBinning(Int_t nBins, Double_t *limits) {
+
+  if (nBins>fNMaxBinsPt) {
+    AliInfo(Form("WARNING : only %d pt bins (out of the %d proposed) will be considered",fNMaxBinsPt,nBins));
+    nBins = fNMaxBinsPt;
+  }
+  if (nBins<=0) {
+    AliInfo("WARNING : at least one pt bin must be considered");
+    nBins = 1;
+  }
+  
+  fNbinsPt = nBins;
+  fPtAxis  = new TAxis(fNbinsPt, limits);
+
+}
+
+//====================================================================================================================================================
+
+Int_t AliAnalysisTaskMuonHadronCorrelations::GetCentBin() {
+  
+  if (fCentMethod.CompareTo("V0M")==0) return GetMultBin();
+  if (fCentMethod.CompareTo("CL1")==0) return GetMultBin();
+
+  return -1;
+  
+}
+
+//====================================================================================================================================================
+
+Int_t AliAnalysisTaskMuonHadronCorrelations::GetMultBin() {
+  
+  Double_t multiplicity = 0;
+  
+  if (fCentMethod.CompareTo("V0M")==0) multiplicity = GetV0Multiplicity();
+  if (fCentMethod.CompareTo("CL1")==0) multiplicity = GetITSMultiplicity();
+  
+  Int_t multBin = fMultAxis->FindBin(-1.*multiplicity);
+  if (0<multBin && multBin<=fNbinsCent) return multBin-1;
+  
+  return -1;
+  
+}
+
+//====================================================================================================================================================
+
+Double_t AliAnalysisTaskMuonHadronCorrelations::GetITSMultiplicity() {
+
+  Double_t multiplicity = 0.5 * (fAOD->GetHeader()->GetNumberOfITSClusters(0) + fAOD->GetHeader()->GetNumberOfITSClusters(1));
+
+  return multiplicity;
+
+}
+
+//====================================================================================================================================================
+
+void AliAnalysisTaskMuonHadronCorrelations::Terminate(Option_t *) {
+
+  fOutputList = dynamic_cast<TList*> (GetOutputData(1));
+  if (!fOutputList) {
+    printf("ERROR: Output list not available\n");
+    return;
+  }  
+
+}
+
+//====================================================================================================================================================
+
diff --git a/PWGCF/Correlations/DPhi/MuonHadron/AliAnalysisTaskMuonHadronCorrelations.h b/PWGCF/Correlations/DPhi/MuonHadron/AliAnalysisTaskMuonHadronCorrelations.h
new file mode 100644 (file)
index 0000000..300e5c5
--- /dev/null
@@ -0,0 +1,97 @@
+#ifndef AliAnalysisTaskMuonHadronCorrelations_H
+#define AliAnalysisTaskMuonHadronCorrelations_H
+
+#include "AliAnalysisTaskSE.h"
+#include "TString.h"
+#include "AliAODEvent.h"
+#include "AliAODTrack.h"
+#include "TAxis.h"
+#include "TH1D.h"
+#include "TClonesArray.h"
+#include "TH2D.h"
+
+//====================================================================================================================================================
+
+class  AliAnalysisTaskMuonHadronCorrelations : public AliAnalysisTaskSE {
+
+ public:
+  enum {kSingleEvent, kMixedEvent};
+
+  AliAnalysisTaskMuonHadronCorrelations();
+  AliAnalysisTaskMuonHadronCorrelations(const Char_t *name);
+  virtual ~AliAnalysisTaskMuonHadronCorrelations();
+
+  virtual void UserCreateOutputObjects();
+  virtual void UserExec(Option_t *option);
+  virtual void Terminate(Option_t *);
+
+  // ------------- Cuts -----------------
+
+  void SetFilterBitCentralBarrel(Int_t filter) { fFilterBitCentralBarrel = filter; }
+  void SetMaxEtaCentralBarrel(Double_t eta) { fMaxEtaCentralBarrel = eta; }
+  void SetTriggerMatchLevelMuon(Short_t level) { fTriggerMatchLevelMuon = level; }
+  //  void SetMaxChi2Muon(Double_t chi2Max) { fMaxChi2Muon = chi2Max; }
+  void SetRAbsRangeMuon (Double_t rAbsMin,Double_t rAbsMax) { fMinRAbsMuon = rAbsMin; fMaxRAbsMuon = rAbsMax; }
+
+  void SetTriggerWord(TString triggerWord) { fTriggerWord = triggerWord; fIsTriggerSet = kTRUE; }
+
+  // ------------- Analysis -------------
+
+  Float_t GetV0Multiplicity();
+  Double_t GetITSMultiplicity();
+  Bool_t IsTriggerFired();
+  TClonesArray* GetAcceptedTracksCentralBarrel(AliAODEvent *aodEvent);
+  TClonesArray* GetAcceptedTracksMuonArm(AliAODEvent *aodEvent);
+  void SetPtBinning(Int_t nBins, Double_t *limits);
+  void SetCentBinning(Int_t nBins, Double_t *limits);
+  void SetMultBinning(Int_t nBins, Double_t *limits);
+  void SetCentMethod(const Char_t *method) { fCentMethod = method; }
+  void FillHistograms(Int_t centrality, Int_t option);
+  Int_t GetCentBin();
+  Int_t GetMultBin();
+
+ private:
+
+  static const Int_t fNMaxBinsCentrality = 20;
+  static const Int_t fNMaxBinsPt = 10;
+
+  AliAODEvent *fAOD;
+  TClonesArray *fTracksCentralBarrel, *fTracksMuonArm;
+  AliAODTrack *fTrackCB, *fTrackMA;
+  
+  Int_t fFilterBitCentralBarrel;
+  Double_t fMaxEtaCentralBarrel;
+
+  Double_t fMaxChi2Muon, fMinRAbsMuon, fMaxRAbsMuon;
+  Short_t fTriggerMatchLevelMuon;
+
+  TString fTriggerWord;
+  Bool_t fIsTriggerSet;
+
+  Int_t fNbinsCent, fNbinsPt;
+  
+  TAxis *fCentAxis, *fMultAxis, *fPtAxis;
+
+  TH1D *fHistDeltaPhi[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt], *fHistDeltaPhiMix[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt];
+  TH2D *fHistNTracksCB_vs_NTracksMA[fNMaxBinsCentrality];
+
+  TH1D *fHistV0Multiplicity, *fHistITSMultiplicity;
+  TH1D *fHistCentrality;
+
+  TString fCentMethod;
+
+  Int_t fEvt;
+
+  TList *fOutputList;
+
+  AliAnalysisTaskMuonHadronCorrelations(const AliAnalysisTaskMuonHadronCorrelations&);//not implimented
+  AliAnalysisTaskMuonHadronCorrelations& operator=(const AliAnalysisTaskMuonHadronCorrelations&);//not implimnted
+  
+  ClassDef(AliAnalysisTaskMuonHadronCorrelations, 1)  // example of analysis
+
+};
+
+//====================================================================================================================================================
+
+#endif
diff --git a/PWGCF/Correlations/DPhi/MuonHadron/RunAnalysisTaskMuonHadronCorrelations.C b/PWGCF/Correlations/DPhi/MuonHadron/RunAnalysisTaskMuonHadronCorrelations.C
new file mode 100644 (file)
index 0000000..057a180
--- /dev/null
@@ -0,0 +1,189 @@
+Bool_t RunAnalysisTaskMuonHadronCorrelations(Int_t runNumber = 188362, const char * runMode="full", TString centMethod="V0M") {
+  
+  TString rootVersion = "v5-34-02-1";
+  TString alirootVersion = "v5-04-22-AN";
+  gSystem->AddIncludePath("-I$ALICE_ROOT/include ");
+  
+  gSystem->Load("libTree.so")          ;
+  gSystem->Load("libGeom.so")          ;
+  gSystem->Load("libVMC.so")           ;
+  gSystem->Load("libMinuit.so")        ;
+  gSystem->Load("libPhysics.so")       ;
+  gSystem->Load("libSTEERBase.so")     ;
+  gSystem->Load("libESD.so")           ;
+  gSystem->Load("libAOD.so")           ;
+  gSystem->Load("libANALYSIS.so")      ;
+  gSystem->Load("libOADB.so")          ;
+  gSystem->Load("libANALYSISalice.so") ;
+  gSystem->Load("libCORRFW.so")        ;
+  gSystem->Load("libPWGmuon.so")       ;
+  
+  // -------------------------------
+  // ANALYSIS MANAGER
+  // -------------------------------
+
+  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+  if (mgr) delete mgr;
+  mgr = new AliAnalysisManager("AM","Analysis Manager");
+  
+  // -------------------------------
+  // INPUT EVENT HANDLER
+  // -------------------------------
+
+  AliAODInputHandler* inputHandler = new AliAODInputHandler();
+  mgr->SetInputEventHandler(inputHandler);
+  
+  // -------------------------------
+  // ANALYSIS PLUGIN CONFIGURATION
+  // -------------------------------
+
+  AliAnalysisAlien *analysisPlugin = new AliAnalysisAlien();
+  if (!analysisPlugin) { Printf("Error : analysisPlugin is null !!!"); return kFALSE; }
+  analysisPlugin->SetAPIVersion("V1.1x");
+  //analysisPlugin->SetROOTVersion(rootVersion.Data());
+  analysisPlugin->SetAliROOTVersion(alirootVersion.Data());
+  analysisPlugin->SetExecutableCommand("aliroot -b -q");
+
+  // Overwrite all generated files, datasets and output results from a previous session
+  analysisPlugin->SetOverwriteMode();
+  // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
+  analysisPlugin->SetRunMode(runMode);  // VERY IMPORTANT 
+  
+  analysisPlugin->SetAdditionalRootLibs("CORRFW");
+  analysisPlugin->SetAdditionalRootLibs("PWGmuon");
+  
+  // -------------------------------
+  // GRID CONFIG
+  // -------------------------------
+
+  // Location of Data
+  analysisPlugin->SetGridDataDir("/alice/data/2012/LHC12g");
+  analysisPlugin->SetDataPattern("*ESDs/pass2/AOD/*/AliAOD.root");
+  analysisPlugin->SetRunPrefix("000");   // real data
+
+  analysisPlugin->AddRunNumber(runNumber);
+
+  // Define alien work directory where all files will be copied. Relative to alien $HOME.
+  //              analysisPlugin->SetGridWorkingDir("LHC11h_MUON");
+  analysisPlugin->SetGridWorkingDir("MuonHadronCorrelations_LHC12g");
+  
+  // Declare alien output directory. Relative to working directory.
+  analysisPlugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
+
+  // Declare the analysis source files names separated by blancs. To be compiled runtime
+  // using ACLiC on the worker nodes.
+  analysisPlugin->SetAnalysisSource("AliAnalysisTaskMuonHadronCorrelations.cxx");
+
+  // Declare all libraries (other than the default ones for the framework. These will be
+  // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
+  analysisPlugin->SetAdditionalLibs("libCORRFW.so libPWGmuon.so AliAnalysisTaskMuonHadronCorrelations.h AliAnalysisTaskMuonHadronCorrelations.cxx");
+  
+  analysisPlugin->AddIncludePath("-I.");
+
+  //les repertoires individuels d'output des jobs sur la grille ont comme nom le numero du run
+  analysisPlugin->SetOutputToRunNo();
+  
+  // Optionally define the files to be archived.
+  //   analysisPlugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:*.root@ALICE::NIHAM::File");
+  //   analysisPlugin->SetOutputArchive("log_archive.zip:stdout,stderr");
+
+  // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
+  analysisPlugin->SetAnalysisMacro("MuonHadronCorr.C");
+
+  // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
+  //      analysisPlugin->SetSplitMaxInputFileNumber(20);
+  analysisPlugin->SetSplitMaxInputFileNumber(40);
+  // Number of runs per master job
+  analysisPlugin->SetNrunsPerMaster(1);
+  
+  // Optionally modify the executable name (default analysis.sh)
+  analysisPlugin->SetExecutable("MuonHadronCorr.sh");
+
+  // Optionally set number of failed jobs that will trigger killing waiting sub-jobs.
+  //   analysisPlugin->SetMaxInitFailed(5);
+
+  // Optionally resubmit threshold.
+  //   analysisPlugin->SetMasterResubmitThreshold(90);
+
+  // Optionally set time to live (default 30000 sec)
+  analysisPlugin->SetTTL(30000);
+  // Optionally set input format (default xml-single)
+  analysisPlugin->SetInputFormat("xml-single");
+  // Optionally modify the name of the generated JDL (default analysis.jdl)
+  analysisPlugin->SetJDLName("MuonHadronCorr.jdl");
+  // Optionally modify job price (default 1)
+  analysisPlugin->SetPrice(1);      
+  // Optionally modify split mode (default 'se')    
+  analysisPlugin->SetSplitMode("se");
+  
+  analysisPlugin->SetNtestFiles(5);
+  //   analysisPlugin->SetMergeViaJDL(1);
+  analysisPlugin->SetOverwriteMode(kTRUE);
+  
+  mgr->SetGridHandler(analysisPlugin);
+  
+  // -------------------------------
+  // PHYSICS SELECTION
+  // -------------------------------
+  //  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
+  //  AddTaskPhysicsSelection(0);
+  mgr->AddStatisticsTask(AliVEvent::kAny);
+  
+  // -------------------------------
+  // MUON TRACK CUTS CONFIGURATION
+  // -------------------------------
+
+  gROOT->LoadMacro("AliAnalysisTaskMuonHadronCorrelations.cxx++g");
+  AliAnalysisTaskMuonHadronCorrelations *task = new AliAnalysisTaskMuonHadronCorrelations("AliAnalysisTaskMuonHadronCorrelations");
+
+  task->SetTriggerWord("CINT5-B-");
+
+  // Set analysis cuts   
+  task->SetFilterBitCentralBarrel(7);  // -> 128
+  task->SetMaxEtaCentralBarrel(1.0);
+  task->SetTriggerMatchLevelMuon(1);
+
+  const Int_t nBinCent = 3;
+  Double_t centLimits[nBinCent+1] = {0., 20.,  60.,  100.};
+  task->SetCentBinning(nBinCent, centLimits);
+
+  if (centMethod.CompareTo("V0M")==0) {
+    Double_t multLimits[nBinCent+1] = {-1000., -312., -136., 0.};
+    task->SetMultBinning(nBinCent, multLimits);
+  }
+
+  if (centMethod.CompareTo("CL1")==0) {
+    Double_t multLimits[nBinCent+1] = {-500., -119.,  -49., 0.};
+    task->SetMultBinning(nBinCent, multLimits);
+  }
+
+  task->SetCentMethod(centMethod);
+
+  const Int_t nBinPt = 3;
+  Double_t ptLimits[nBinPt+1] = {0., 1., 2., 4.};
+  task->SetPtBinning(nBinPt, ptLimits);
+
+  mgr->AddTask(task);
+
+  // create output container
+  AliAnalysisDataContainer *output1 = mgr->CreateContainer("list", TList::Class(), AliAnalysisManager::kOutputContainer, "MuonHadronCorrelations.root");
+  
+  // finaly connect input and output
+  mgr->ConnectInput(task, 0,  mgr->GetCommonInputContainer());
+  mgr->ConnectOutput(task, 1, output1);
+    
+  TStopwatch timer;
+  timer.Start();
+  // -------------------------------
+  // RUN ANALYSIS
+  // -------------------------------
+  mgr->InitAnalysis();
+  mgr->PrintStatus();
+  
+  mgr->StartAnalysis("grid");
+  
+  timer.Stop();
+  timer.Print();
+  return kTRUE;
+
+};