]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/GammaConv/AliAnalysisTaskdPhi.cxx
changes from gsi. Using mult if no centrality. testfilterbit 128
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskdPhi.cxx
index b27dc5f8425358c29419635a30351806462e5f0a..d8b117c05203c1ef37e67e02db3fede42421f806 100644 (file)
@@ -33,6 +33,7 @@
 #include <AliAODInputHandler.h>
 #include <AliAnalysisFilter.h>
 
+#include "AliConversionTrackCuts.h"
 #include "AliConversionCuts.h"
 #include "AliAODConversionPhoton.h"
 #include "AliAODConversionMother.h"
@@ -50,11 +51,8 @@ AliAnalysisTaskdPhi::AliAnalysisTaskdPhi(const char *name) : AliAnalysisTaskSE(n
   fHistograms(NULL),
   fHistoGamma(NULL),
   fHistoPion(NULL),
-  fDielV0TrackFilter(NULL), 
-  fDielV0Filter(NULL),
-  fDielPi0Filter(NULL),
-  fDielTrackFilter(NULL),
   fV0Filter(NULL),
+  fTrackCuts(NULL),
   fGammas(NULL),
   fPions(NULL),
   hMETracks(NULL), 
@@ -64,8 +62,6 @@ AliAnalysisTaskdPhi::AliAnalysisTaskdPhi(const char *name) : AliAnalysisTaskSE(n
   fPhotonCorr(NULL),
   fPionCorr(NULL), 
   fIsoAna(NULL),
-  fL1(-1),
-  fL2(-1),
   fDeltaAODBranchName("AliAODGammaConversion_gamma"), 
   fAxistPt(),
   fAxiscPt(),
@@ -90,21 +86,21 @@ AliAnalysisTaskdPhi::AliAnalysisTaskdPhi(const char *name) : AliAnalysisTaskSE(n
 
   fAxisZ.SetNameTitle("ZAxis", "Z");
   fAxisZ.Set(4, -10, 10);
-  fAxisCent.SetNameTitle("CentAxis", "Cent");
 
+  fAxisCent.SetNameTitle("CentAxis", "Cent");
   Double_t centbins[5] = {0, 10, 30, 60, 100.1};
   fAxisCent.Set(4, centbins);
 
-  Double_t mbins[7] = {0.1, 0.11, 0.12, 0.15, 0.16, 0.18, 0.2};
+  Double_t mbins[8] = {0.11, 0.12, 0.13, 0.132, 0.138, 0.14, 0.15, 0.16};
   fAxisPiM.SetNameTitle("InvMassPi0", "Invariant mass");
-  fAxisPiM.Set(6, mbins);
+  fAxisPiM.Set(7, mbins);
 
   fGammas = new TObjArray();
   fGammas->SetOwner(kFALSE);
 
   fPions = new TObjArray();
   fPions->SetOwner(kFALSE);
-  
+
   // Define input and output slots here
   DefineInput(0, TChain::Class());
   //DefineInput(1, TClonesArray::Class());
@@ -138,7 +134,7 @@ AliAnalysisTaskdPhi::~AliAnalysisTaskdPhi(){
        delete fHistograms;
   fHistograms = NULL;
 
-if(fHistoPion)
+  if(fHistoPion)
        delete fHistoPion;
   fHistoPion = NULL;
 
@@ -168,28 +164,28 @@ void AliAnalysisTaskdPhi::SetUpCorrObjects() {
   fHistoPion->Add(hPion);
 
 
-  for(Int_t iz = 0; iz < fAxisZ.GetNbins(); iz++) {
+       for(Int_t ic = 0; ic < fAxisCent.GetNbins(); ic++) {
        TObjArray * photonArray = new TObjArray();
        photonArray->SetOwner(kTRUE);
-       fPhotonCorr->AddAt(photonArray, iz);
+       fPhotonCorr->AddAt(photonArray, ic);
 
        TObjArray * pionArray = new TObjArray();
        pionArray->SetOwner(kTRUE);
-       fPionCorr->AddAt(pionArray, iz);
+       fPionCorr->AddAt(pionArray, ic);
 
        TList * photonList = new TList();
-       photonList->SetName(Form("photon_%d", iz));
+       photonList->SetName(Form("photon_%d", ic));
        photonList->SetOwner(kTRUE);
-       hPhoton->AddAt(photonList, iz);
+       hPhoton->AddAt(photonList, ic);
 
        TList * pionList = new TList();
-       pionList->SetName(Form("pion_%d", iz));
+       pionList->SetName(Form("pion_%d", ic));
        pionList->SetOwner(kTRUE);
-       hPion->AddAt(pionList, iz);
+       hPion->AddAt(pionList, ic);
        
-       for(Int_t ic = 0; ic < fAxisCent.GetNbins(); ic++) {
          
-         TString nameString = Form("%d_%d", iz, ic);
+       for(Int_t iz = 0; iz < fAxisZ.GetNbins(); iz++) {
+         TString nameString = Form("%d_%d", ic, iz);
          TString titleString = Form("%f < Z < %f ... %f cent %f", 
                                                                 fAxisZ.GetBinLowEdge(iz+1), fAxisZ.GetBinUpEdge(iz+1), 
                                                                 fAxisCent.GetBinLowEdge(ic+1), fAxisCent.GetBinUpEdge(ic+1));
@@ -197,14 +193,14 @@ void AliAnalysisTaskdPhi::SetUpCorrObjects() {
 
 
          AliAnaConvCorrPhoton * photonCorr = new AliAnaConvCorrPhoton(Form("PhotonCorr_%s", nameString.Data()), Form("photon %s", titleString.Data()));
-         photonArray->AddAt(photonCorr, ic);
+         photonArray->AddAt(photonCorr, iz);
          photonCorr->GetAxistPt().Set(fAxistPt.GetNbins(), fAxistPt.GetXbins()->GetArray());
          photonCorr->GetAxiscPt().Set(fAxiscPt.GetNbins(), fAxiscPt.GetXbins()->GetArray());
          photonCorr->CreateHistograms();
          photonList->Add(photonCorr->GetHistograms());
 
          AliAnaConvCorrPion * pionCorr = new AliAnaConvCorrPion(Form("PionCorr_%s", nameString.Data()), Form("pion %s", titleString.Data()));
-         pionArray->AddAt(pionCorr, ic);
+         pionArray->AddAt(pionCorr, iz);
          pionCorr->GetAxistPt().Set(fAxistPt.GetNbins(), fAxistPt.GetXbins()->GetArray());
          pionCorr->GetAxiscPt().Set(fAxiscPt.GetNbins(), fAxiscPt.GetXbins()->GetArray());
          pionCorr->GetAxisM().Set(fAxisPiM.GetNbins(), fAxisPiM.GetXbins()->GetArray());
@@ -237,6 +233,9 @@ void AliAnalysisTaskdPhi::UserCreateOutputObjects() {
   }
   
 
+  AliConversionTrackCuts * tc = dynamic_cast<AliConversionTrackCuts*>(fTrackCuts);
+  if(tc) fHistograms->Add(tc->CreateHistograms());
+
   SetUpCorrObjects();
 
 
@@ -246,19 +245,6 @@ void AliAnalysisTaskdPhi::UserCreateOutputObjects() {
   MEHistograms->SetOwner(kTRUE);
   fHistograms->Add(MEHistograms);
 
-  hMETracks = new TObjArray();
-  hMETracks->SetName("TrackArray");
-  hMETracks->SetOwner(kTRUE);
-  hMEPhotons = new TObjArray();
-  hMEPhotons->SetName("PhotonArray");
-  hMEPhotons->SetOwner(kTRUE);
-  hMEPions = new TObjArray();
-  hMEPions->SetName("PionArray");
-  hMEPions->SetOwner(kTRUE);
-
-  MEHistograms->Add(hMETracks);
-  MEHistograms->Add(hMEPions);
-  MEHistograms->Add(hMEPhotons);
 
   hMEvents = new TH2I("hMEvents", "Nevents vs centrality vertexz",
                                          fAxisZ.GetNbins(), fAxisZ.GetBinLowEdge(1), fAxisZ.GetBinUpEdge(fAxisZ.GetNbins()),
@@ -266,64 +252,11 @@ void AliAnalysisTaskdPhi::UserCreateOutputObjects() {
   hMEvents->GetYaxis()->Set(fAxisCent.GetNbins(), fAxisCent.GetXbins()->GetArray());
   MEHistograms->Add(hMEvents);
 
-
-  TList axesList;
-  axesList.AddAt(&GetAxisEta(), 0);
-  axesList.AddAt(&GetAxisPhi(), 1);
-  axesList.AddAt(&GetAxistPt(), 2);
-  axesList.SetOwner(kFALSE);
-  
-  TList piAxesList;
-  piAxesList.AddAt(&GetAxisEta(), 0);
-  piAxesList.AddAt(&GetAxisPhi(), 1);
-  piAxesList.AddAt(&GetAxistPt(), 2);
-  piAxesList.AddAt(&GetAxisPiMass(), 3);
-  piAxesList.SetOwner(kFALSE);
-
-
   TList * outAxesList = new TList();
   outAxesList->Add(&fAxisCent);
   outAxesList->Add(&fAxisZ);
   fHistograms->Add(outAxesList);
 
-  // for(Int_t iz = 0; iz < fAxisZ.GetNbins(); iz++) {
-  //   TObjArray * trackArray = new TObjArray();
-  //   trackArray->SetName(Form("METracks_%d", iz));
-  //   trackArray->SetOwner(kTRUE);
-  //   TObjArray * photonArray = new TObjArray();
-  //   photonArray->SetName(Form("MEPhotons_%d", iz));
-  //   photonArray->SetOwner(kTRUE);
-  //   TObjArray * pionArray = new TObjArray();
-  //   pionArray->SetName(Form("MEPions_%d", iz));
-  //   pionArray->SetOwner(kTRUE);
-
-
-  //   hMEPions->AddAt(pionArray, iz);
-  //   hMETracks->AddAt(trackArray, iz);
-  //   hMEPhotons->AddAt(photonArray, iz);
-
-  //   for(Int_t ic = 0; ic < fAxisCent.GetNbins(); ic++) {
-
-  //     TString nameString = Form("%d_%d", iz, ic);
-  //     TString titleString = Form("%f < Z < %f ... %f cent %f", 
-  //                                                            fAxisZ.GetBinLowEdge(iz+1), fAxisZ.GetBinUpEdge(iz+1), 
-  //                                                            fAxisCent.GetBinLowEdge(ic+1), fAxisCent.GetBinUpEdge(ic+1));
-
-
-  //     THnSparseF * trackHistogram = CreateSparse(Form("tracks_%s", nameString.Data()), 
-  //                                                                                            Form("tracks %s", titleString.Data()), &axesList );
-  //     trackArray->AddAt(trackHistogram, ic);
-
-  //     THnSparseF * photonHistogram = CreateSparse(Form("photons_%s", nameString.Data()), 
-  //                                                                                            Form("photons %s", titleString.Data()), &axesList );
-  //     photonArray->AddAt(photonHistogram, ic);
-
-  //     THnSparseF * pionHistogram = CreateSparse(Form("pions_%s", nameString.Data()), 
-  //                                                                                            Form("pions %s", titleString.Data()), &piAxesList );
-  //     pionArray->AddAt(pionHistogram, ic);
-  //   }
-  // }
-
   PostData(1, fHistograms);
   PostData(2, fHistoGamma);
   PostData(3, fHistoPion);
@@ -332,7 +265,7 @@ void AliAnalysisTaskdPhi::UserCreateOutputObjects() {
 
 ///________________________________________________________________________
 THnSparseF * AliAnalysisTaskdPhi::CreateSparse(TString nameString, TString titleString, TList * axesList) {
-  ///Creat sparse
+  ///Create sparse
   const Int_t dim = axesList->GetSize();
 
   TAxis * axes[dim];
@@ -376,7 +309,6 @@ void AliAnalysisTaskdPhi::UserExec(Option_t *) {
 
   //if(! fV0Filter->EventIsSelected(fInputEvent)) return;
 
-
   AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
   Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
   
@@ -402,28 +334,38 @@ void AliAnalysisTaskdPhi::UserExec(Option_t *) {
   }
 
   Double_t centrality = 0.0;
+  Double_t multiplicity = 0.0;
   Double_t eventPlane = 0.0;
   Double_t vertexz = fInputEvent->GetPrimaryVertex()->GetZ();
+  
   if(isAOD) {
     AliAODHeader * header = static_cast<AliAODHeader*>(fInputEvent->GetHeader());
        centrality = header->GetCentrality();
        eventPlane = header->GetEventplane();
+       multiplicity = header->GetRefMultiplicity();
+       if(centrality < 0) centrality = multiplicity;
   } else {
-       centrality = static_cast<AliESDEvent*>(fInputEvent)->GetCentrality()->GetCentralityPercentile("kV0M");
+       centrality = static_cast<AliESDEvent*>(fInputEvent)->GetCentrality()->GetCentralityPercentile("V0M");
        eventPlane = fInputEvent->GetEventplane()->GetEventplane("Q");
   }
 
+
+  const Int_t centBin = GetBin(fAxisCent, centrality);
+  const Int_t vertexBin = GetBin(fAxisZ, vertexz);
+
+
   if(DebugLevel () > 4) {
        cout << "centrality: " << centrality <<  " " << GetBin(fAxisCent, centrality) << endl;
        cout << "vertexz: " << vertexz <<  " " << GetBin(fAxisZ, vertexz) << endl;
        cout << "eventPlane: " << eventPlane <<  " " << endl;
+       cout << "multiplicity: "<<  multiplicity << endl;
+
   }
 
-  const Int_t centBin = GetBin(fAxisCent, centrality);
-  const Int_t vertexBin = GetBin(fAxisZ, vertexz);
 
   if(centBin < 0 || vertexBin < 0) {
        AliError("bin out of range");
+       //cout << "bad bin"<<endl;
        return;
   }
 
@@ -431,47 +373,53 @@ void AliAnalysisTaskdPhi::UserExec(Option_t *) {
   fPions->Clear();
 
   TClonesArray * aodGammas = GetConversionGammas(isAOD);
+
   if(!aodGammas) {
        AliError("no aod gammas found!");
        return;
   }
 
-  if(aodGammas->GetEntriesFast() > 0) {
-       if( static_cast<AliAODConversionParticle*>(aodGammas->At(0))->GetLabel(0) == fL1 && 
-               static_cast<AliAODConversionParticle*>(aodGammas->At(0))->GetLabel(1) == fL2 
-               ) {
-         return;
-       }
-       fL1 = static_cast<AliAODConversionParticle*>(aodGammas->At(0))->GetLabel(0);
-       fL2 = static_cast<AliAODConversionParticle*>(aodGammas->At(0))->GetLabel(1);
-       //cout << aodGammas->GetEntriesFast() << " " << fInputEvent->GetNumberOfTracks() << "c" << endl;
-  }
 
   if(DebugLevel() > 1) printf("Number of conversion gammas %d \n", aodGammas->GetEntriesFast());
   for(Int_t ig = 0; ig < aodGammas->GetEntriesFast(); ig++) {
-    AliAODConversionPhoton * photon = dynamic_cast<AliAODConversionPhoton*>(aodGammas->At(ig));
+   AliAODConversionPhoton * photon = dynamic_cast<AliAODConversionPhoton*>(aodGammas->At(ig));
     
-    if(!photon) continue;
+    if(!photon) {
+         cout << "can't get photon"<<endl;
+         continue;
+       }
+       if(!VerifyAODGamma(photon)) { 
+         continue;
+       }
+
     if(!fV0Filter || fV0Filter->PhotonIsSelected(static_cast<AliConversionPhotonBase*>(photon), fInputEvent)) {
       fGammas->Add(static_cast<TObject*>(photon));
     }
   }
   
   if(DebugLevel() > 4) printf("Number of accepted gammas %d \n", fGammas->GetEntriesFast());
-
-  // THnSparseF * trackMehist = GetMEHistogram(vertexBin, centBin, hMETracks); 
-  // hMEvents->Fill(vertexz, centrality);
+  hMEvents->Fill(vertexz, centrality);
+  
+  
   
-  ///Add tracks to array
+  ///create track array
   TObjArray tracks;
+  const Double_t etalim[2] = { fAxisEta.GetBinLowEdge(1), fAxisEta.GetBinUpEdge(fAxisEta.GetNbins())};
   for(Int_t iTrack = 0; iTrack < fInputEvent->GetNumberOfTracks(); iTrack++) {
 
-       AliVTrack * track = static_cast<AliVTrack*>(fInputEvent->GetTrack(iTrack));
-       if(track->Pt() < 0.5) continue;
-       if(TMath::Abs(track->Eta()) > 0.8) continue;
-       tracks.Add(track);
+    AliVTrack * track = static_cast<AliVTrack*>(fInputEvent->GetTrack(iTrack));
+    if(track->Pt() < fAxiscPt.GetBinLowEdge(1) ) continue;
+    if(track->Eta() < etalim[0] || track->Eta() > etalim[1]) continue;
+    
+    
+    if(!fTrackCuts || fTrackCuts->IsSelected((track))) {
+      tracks.Add(track);
+      //cout <<"a"<<endl;
+    } // else {
+    //       cout <<"b"<<endl;
+    //     }
   }
-  
+
   Process(fGammas, &tracks, vertexBin, centBin);
 
   PostData(1, fHistograms);
@@ -485,10 +433,11 @@ void AliAnalysisTaskdPhi::UserExec(Option_t *) {
 void AliAnalysisTaskdPhi::Process(TObjArray * gammas, TObjArray * tracks, Int_t vertexBin, Int_t centBin) {
   ///Process stuff
 
-  if(DebugLevel() > 4) printf("Number of accepted tracks %d \n", tracks->GetEntriesFast());
+  if(DebugLevel() > 4) printf("Number of accepted gammas, tracks %d  %d \n", gammas->GetEntriesFast(), tracks->GetEntriesFast());
+
  
   AliAnaConvCorrBase * gCorr = GetCorrObject(vertexBin, centBin, fPhotonCorr);
-  AliAnaConvCorrBase * piCorr = GetCorrObject(vertexBin, centBin, fPionCorr);
+  AliAnaConvCorrPion * piCorr = dynamic_cast<AliAnaConvCorrPion*>(GetCorrObject(vertexBin, centBin, fPionCorr));
   
   if(!gCorr || !piCorr) {
        AliError("corr object missing");
@@ -517,10 +466,15 @@ void AliAnalysisTaskdPhi::Process(TObjArray * gammas, TObjArray * tracks, Int_t
          pion->SetLabels(i1, i2);
          
          if(!fV0Filter || fV0Filter->MesonIsSelected(pion, kTRUE) ) {
+       
                Int_t leadingpi = fIsoAna->IsLeading(static_cast<AliAODConversionParticle*>(pion), tracks, tIDs);
+               piCorr->FillTriggerCounters(pion, leadingpi);
+               
                tIDs[2] = ph2->GetLabel(0);
                tIDs[3] = ph2->GetLabel(1);
-               if(pion->Pt() > fAxistPt.GetBinLowEdge(1)) {
+               if(pion->Pt() > fAxistPt.GetBinLowEdge(1) && 
+                  pion->M() > fAxisPiM.GetBinLowEdge(1) && 
+                  pion->M() < fAxisPiM.GetBinUpEdge(fAxisPiM.GetNbins())) {
                  piCorr->CorrelateWithTracks(pion, tracks, tIDs, leadingpi);
                }
          }
@@ -528,6 +482,7 @@ void AliAnalysisTaskdPhi::Process(TObjArray * gammas, TObjArray * tracks, Int_t
   }
 }
 
+
 //________________________________________________________________________
 void AliAnalysisTaskdPhi::Terminate(Option_t *) {
  
@@ -566,9 +521,79 @@ void AliAnalysisTaskdPhi::FindDeltaAODBranchName(AliVEvent * event){
        if(name.BeginsWith("GammaConv")&&name.EndsWith("gamma")){
          fDeltaAODBranchName=name;
          AliInfo(Form("Set DeltaAOD BranchName to: %s",fDeltaAODBranchName.Data()));
+         cout <<fDeltaAODBranchName << endl;
          return;
        }
   }
 }
   
 
+
+
+///________________________________________________________________________
+Bool_t AliAnalysisTaskdPhi::VerifyAODGamma(AliAODConversionPhoton * gamma) {
+
+  AliAODEvent * event = static_cast<AliAODEvent*>(fInputEvent);
+
+  //cout << "label "<< gamma->GetV0Index() << endl;
+
+  AliAODv0 * v0 =  NULL;
+
+  //Int_t v0idx =  gamma->GetV0Index();
+  for(Int_t i = 0; i < event->GetNumberOfV0s(); i++) {
+       AliAODv0 * tv0 = event->GetV0(i);
+
+       //cout << i << " " << v0->GetID() << " " << v0->GetSecondaryVtx()->GetID() << " " << v0->GetLabel() << " " << v0->GetSecondaryVtx()->GetLabel() << endl;
+   
+       if(tv0->GetSecondaryVtx()->GetID() == gamma->GetV0Index() ) {
+         v0 = tv0;
+         //cout << "found it" << endl;
+         break;
+       }       
+  }
+
+  if(!v0) {
+       //cout << "v0 not found"<<endl;
+       return kFALSE;
+  } 
+
+
+  AliAODTrack * d1 = dynamic_cast<AliAODTrack*>(v0->GetDaughter(0));
+  AliAODTrack * d2 = dynamic_cast<AliAODTrack*>(v0->GetDaughter(1));
+
+  Int_t t1 = -1;
+  Int_t t2 = -2;
+
+  if(d1) t1 = d1->GetID();
+  if(d2) t2 = d2->GetID();
+
+  Int_t g1 = gamma->GetLabel(0);
+  Int_t g2 = gamma->GetLabel(1);
+
+  if((t1 == g1 && 
+         t2 == g2) || 
+        (t1 == g2 && 
+         t2 == g1) ) {
+       //cout <<"match"<< " " <<  gamma->Pt() << " " <<  d1->Pt() + d2->Pt() <<endl;
+  }
+                
+  else {
+
+       cout << g1 << " " << g2 <<endl;
+       cout << t1 << " " << t2 <<endl;
+       
+       for(Int_t i = 0; i < event->GetNumberOfV0s(); i++) {
+       v0 = event->GetV0(i);
+       cout << i << " " << v0->GetSecondaryVtx()->GetID() << " " <<dynamic_cast<AliAODTrack*>(v0->GetDaughter(0))->GetID() << " " << dynamic_cast<AliAODTrack*>(v0->GetDaughter(1))->GetID() << endl; 
+       
+       }
+  }
+  
+  // Float_t sumdpt = d1->Pt() + d2->Pt();
+  // cout << "pt: " << sumdpt << " " << gamma->Pt() << endl;
+
+  return kTRUE;
+
+
+
+}