Adding the first version of the MC+AOD analysis for the BF
authorpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 22 Jul 2009 11:47:14 +0000 (11:47 +0000)
committerpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 22 Jul 2009 11:47:14 +0000 (11:47 +0000)
PWG2/EBYE/AliAnalysisTaskBF.cxx
PWG2/EBYE/AliAnalysisTaskBF.h
PWG2/EBYE/AliBalance.cxx

index 351711c..6eaafd2 100755 (executable)
@@ -9,6 +9,11 @@
 
 #include "AliESDEvent.h"
 #include "AliESDInputHandler.h"
+#include "AliAODEvent.h"
+#include "AliAODInputHandler.h"
+#include "AliMCEventHandler.h"
+#include "AliMCEvent.h"
+#include "AliStack.h"
 
 #include "AliBalance.h"
 
@@ -21,7 +26,7 @@ ClassImp(AliAnalysisTaskBF)
 
 //________________________________________________________________________
 AliAnalysisTaskBF::AliAnalysisTaskBF(const char *name) 
-  : AliAnalysisTask(name, ""), fESD(0), fBalance(0) {
+  : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0), fBalance(0) {
   // Constructor
 
   // Define input and output slots here
@@ -35,19 +40,40 @@ AliAnalysisTaskBF::AliAnalysisTaskBF(const char *name)
 void AliAnalysisTaskBF::ConnectInputData(Option_t *) {
   // Connect ESD or AOD here
   // Called once
+  TString gAnalysisLevel = fBalance->GetAnalysisLevel();
 
   TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
   if (!tree) {
     Printf("ERROR: Could not read chain from input slot 0");
   } 
   else {
-    AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-    
-    if (!esdH) {
-      Printf("ERROR: Could not get ESDInputHandler");
-    } 
+    if(gAnalysisLevel == "ESD") {
+      AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+      
+      if (!esdH) {
+       Printf("ERROR: Could not get ESDInputHandler");
+      } 
+      else
+       fESD = esdH->GetEvent();
+    }//ESD
+    else if(gAnalysisLevel == "AOD") {
+      AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+      
+      if (!aodH) {
+       Printf("ERROR: Could not get AODInputHandler");
+      } else
+       fAOD = aodH->GetEvent();
+    }//AOD
+    else if(gAnalysisLevel == "MC") {
+      AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
+      if (!mcH) {
+       Printf("ERROR: Could not retrieve MC event handler");
+      }
+      else
+       fMC = mcH->MCEvent();
+    }//MC
     else
-      fESD = esdH->GetEvent();
+      Printf("Wrong analysis type: Only ESD, AOD and MC types are allowed!");
   }
 }
 
@@ -56,39 +82,72 @@ void AliAnalysisTaskBF::CreateOutputObjects() {
   // Create histograms
   // Called once
   
-  //fBalance = new AliBalance();
-  //fBalance->SetAnalysisType(1);
-  //fBalance->SetNumberOfBins(18);
-  //fBalance->SetInterval(-0.9,0.9);
-  //cout<<fBalance->GetAnalysisType()<<endl;
 }
 
 //________________________________________________________________________
 void AliAnalysisTaskBF::Exec(Option_t *) {
   // Main loop
   // Called for each event
-  
-  if (!fESD) {
-    Printf("ERROR: fESD not available");
-    return;
-  }
-
-  Printf("There are %d tracks in this event", fESD->GetNumberOfTracks());
+  TString gAnalysisLevel = fBalance->GetAnalysisLevel();
 
   TObjArray *array = new TObjArray();
-
-  // Track loop to fill a pT spectrum
-  for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
-    AliESDtrack* track = fESD->GetTrack(iTracks);
-    if (!track) {
-      Printf("ERROR: Could not receive track %d", iTracks);
-      continue;
+  
+  //ESD analysis
+  if(gAnalysisLevel == "ESD") {
+    if (!fESD) {
+      Printf("ERROR: fESD not available");
+      return;
     }
-    array->Add(track);
-  } //track loop 
+    
+    Printf("There are %d tracks in this event", fESD->GetNumberOfTracks());
+    for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
+      AliESDtrack* track = fESD->GetTrack(iTracks);
+      if (!track) {
+       Printf("ERROR: Could not receive track %d", iTracks);
+       continue;
+      }
+      array->Add(track);
+    } //track loop
+  }//ESD analysis
+  //AOD analysis
+  else if(gAnalysisLevel == "AOD") {
+    if (!fAOD) {
+      Printf("ERROR: fAOD not available");
+      return;
+    }
+    
+    Printf("There are %d tracks in this event", fAOD->GetNumberOfTracks());
+    for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {
+      AliAODtrack* track = fAOD->GetTrack(iTracks);
+      if (!track) {
+       Printf("ERROR: Could not receive track %d", iTracks);
+       continue;
+      }
+      array->Add(track);
+    } //track loop
+  }//AOD analysis
+  //MC analysis
+  else if(gAnalysisLevel == "MC") {
+    if (!fMC) {
+      Printf("ERROR: fMC not available");
+      return;
+    }
+    
+    Printf("There are %d tracks in this event", fMC->GetNumberOfPrimaries());
+    for (Int_t iTracks = 0; iTracks < fMC->GetNumberOfPrimaries(); iTracks++) {
+      AliMCParticle* track = fMC->GetTrack(iTracks);
+      if (!track) {
+       Printf("ERROR: Could not receive particle %d", iTracks);
+       continue;
+      }
+      array->Add(track);
+    } //track loop
+  }//MC analysis
+
   fBalance->CalculateBalance(array);
   
   delete array;
+
   // Post output data.
   PostData(0, fBalance);
 }      
index 8d534cf..d921edc 100755 (executable)
@@ -6,6 +6,8 @@
 \r
 class AliBalance;\r
 class AliESDEvent;\r
+class AliAODEvent;\r
+class AliMCEvent;\r
 \r
 #include "AliAnalysisTask.h"\r
 \r
@@ -24,6 +26,8 @@ class AliAnalysisTaskBF : public AliAnalysisTask {
   \r
  private:\r
   AliESDEvent *fESD;    //ESD object\r
+  AliAODEvent *fAOD;    //AOD object\r
+  AliMCEvent  *fMC;     //MC object\r
 \r
   AliBalance *fBalance; //BF object\r
    \r
index 34af434..3c0882b 100644 (file)
 #include <TGraphErrors.h>
 #include <TString.h>
 
+#include "AliVParticle.h"
+#include "AliMCParticle.h"
 #include "AliESDtrack.h"
+#include "AliAODTrack.h"
+
 #include "AliBalance.h"
 
 ClassImp(AliBalance)
@@ -216,14 +220,18 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
   Int_t i = 0 , j = 0;
   Int_t ibin = 0;
   
-  AliESDtrack* track = 0;
-  AliESDtrack* track1 = 0;
-  AliESDtrack* track2 = 0;
+  AliVParticle* track = 0;
+  AliVParticle* track1 = 0;
+  AliVParticle* track2 = 0;
     
   Int_t gNtrack = gTrackArray->GetEntries();
   for(i = 0; i < gNtrack; i++) {
     if(fAnalysisLevel == "ESD")
       track = dynamic_cast<AliESDtrack *>(gTrackArray->At(i));
+    else if(fAnalysisLevel == "AOD")
+      track = dynamic_cast<AliAODTrack *>(gTrackArray->At(i));
+    else if(fAnalysisLevel == "MC")
+      track = dynamic_cast<AliMCParticle *>(gTrackArray->At(i));
     Short_t charge = track->Charge();
     if(charge > 0) fNp += 1.;
     if(charge < 0) fNn += 1.;
@@ -235,6 +243,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
     for(i = 1; i < gNtrack; i++) {
       if(fAnalysisLevel == "ESD")
        track1 = dynamic_cast<AliESDtrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "AOD")
+       track1 = dynamic_cast<AliAODTrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "MC")
+       track1 = dynamic_cast<AliMCParticle *>(gTrackArray->At(i));
       Short_t charge1 = track1->Charge();
       Double_t pZ1 = track1->Pz();
       Double_t energy1 = TMath::Sqrt(TMath::Power(track1->P(),2) +
@@ -242,6 +254,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
       for(j = 0; j < i; j++) {
        if(fAnalysisLevel == "ESD")
          track2 = dynamic_cast<AliESDtrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "AOD")
+         track2 = dynamic_cast<AliAODTrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "MC")
+         track2 = dynamic_cast<AliMCParticle *>(gTrackArray->At(j));
        Short_t charge2 = track2->Charge();
        Double_t pZ2 = track2->Pz();
        Double_t energy2 = TMath::Sqrt(TMath::Power(track2->P(),2) +
@@ -262,12 +278,20 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
     for(i = 1; i < gNtrack; i++) {
       if(fAnalysisLevel == "ESD")
        track1 = dynamic_cast<AliESDtrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "AOD")
+       track1 = dynamic_cast<AliAODTrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "MC")
+       track1 = dynamic_cast<AliMCParticle *>(gTrackArray->At(i));
       Short_t charge1 = track1->Charge();
       Double_t pZ1 = track1->Pz();
       Double_t p1 = track1->P();
       for(j = 0; j < i; j++) {
        if(fAnalysisLevel == "ESD")
          track2 = dynamic_cast<AliESDtrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "AOD")
+         track2 = dynamic_cast<AliAODTrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "MC")
+         track2 = dynamic_cast<AliMCParticle *>(gTrackArray->At(j));
        Short_t charge2 = track2->Charge();
        Double_t pZ2 = track2->Pz();
        Double_t p2 = track2->P();
@@ -288,6 +312,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
     for(i = 1; i < gNtrack; i++) {
       if(fAnalysisLevel == "ESD")
        track1 = dynamic_cast<AliESDtrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "AOD")
+       track1 = dynamic_cast<AliAODTrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "MC")
+       track1 = dynamic_cast<AliMCParticle *>(gTrackArray->At(i));
       Short_t charge1 = track1->Charge();
       Double_t pX1 = track1->Px();
       Double_t pY1 = track1->Py();
@@ -297,6 +325,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
       for(j = 0; j < i; j++) {
        if(fAnalysisLevel == "ESD")
          track2 = dynamic_cast<AliESDtrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "AOD")
+         track2 = dynamic_cast<AliAODTrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "MC")
+         track2 = dynamic_cast<AliMCParticle *>(gTrackArray->At(j));
        Short_t charge2 = track2->Charge();
        Double_t pX2 = track2->Px();
        Double_t pY2 = track2->Py();
@@ -325,6 +357,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
     for(i = 1; i < gNtrack; i++) {
       if(fAnalysisLevel == "ESD")
        track1 = dynamic_cast<AliESDtrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "AOD")
+       track1 = dynamic_cast<AliAODTrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "MC")
+       track1 = dynamic_cast<AliMCParticle *>(gTrackArray->At(i));
       Short_t charge1 = track1->Charge();
       Double_t pX1 = track1->Px();
       Double_t pY1 = track1->Py();
@@ -334,6 +370,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
       for(j = 0; j < i; j++) {
        if(fAnalysisLevel == "ESD")
          track2 = dynamic_cast<AliESDtrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "AOD")
+         track2 = dynamic_cast<AliAODTrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "MC")
+         track2 = dynamic_cast<AliMCParticle *>(gTrackArray->At(j));
        Short_t charge2 = track2->Charge();
        Double_t pX2 = track2->Px();
        Double_t pY2 = track2->Py();
@@ -362,6 +402,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
     for(i = 1; i < gNtrack; i++) {
       if(fAnalysisLevel == "ESD")
        track1 = dynamic_cast<AliESDtrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "AOD")
+       track1 = dynamic_cast<AliAODTrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "MC")
+       track1 = dynamic_cast<AliMCParticle *>(gTrackArray->At(i));
       Short_t charge1 = track1->Charge();
       Double_t pX1 = track1->Px();
       Double_t pY1 = track1->Py();
@@ -370,6 +414,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
       for(j = 0; j < i; j++) {
        if(fAnalysisLevel == "ESD")
          track2 = dynamic_cast<AliESDtrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "AOD")
+         track2 = dynamic_cast<AliAODTrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "MC")
+         track2 = dynamic_cast<AliMCParticle *>(gTrackArray->At(j));
        Short_t charge2 = track2->Charge();
        Double_t pX2 = track2->Px();
        Double_t pY2 = track2->Py();
@@ -395,6 +443,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
     for(i = 1; i < gNtrack; i++) {
       if(fAnalysisLevel == "ESD")
        track1 = dynamic_cast<AliESDtrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "AOD")
+       track1 = dynamic_cast<AliAODTrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "MC")
+       track1 = dynamic_cast<AliMCParticle *>(gTrackArray->At(i));
       Short_t charge1 = track1->Charge();
       Double_t pX1 = track1->Px();
       Double_t pY1 = track1->Py();
@@ -404,6 +456,10 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
       for(j = 0; j < i; j++) {
        if(fAnalysisLevel == "ESD")
          track2 = dynamic_cast<AliESDtrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "AOD")
+         track2 = dynamic_cast<AliAODTrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "MC")
+         track2 = dynamic_cast<AliMCParticle *>(gTrackArray->At(j));
        Short_t charge2 = track2->Charge();
        Double_t pX2 = track2->Px();
        Double_t pY2 = track2->Py();
@@ -428,11 +484,19 @@ void AliBalance::CalculateBalance(TObjArray *gTrackArray) {
     for(i = 1; i < gNtrack; i++) {
       if(fAnalysisLevel == "ESD")
        track1 = dynamic_cast<AliESDtrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "AOD")
+       track1 = dynamic_cast<AliAODTrack *>(gTrackArray->At(i));
+      else if(fAnalysisLevel == "MC")
+       track1 = dynamic_cast<AliMCParticle *>(gTrackArray->At(i));
       Short_t charge1 = track1->Charge();
       Double_t phi1 = track1->Phi();
       for(j = 0; j < i; j++) {
        if(fAnalysisLevel == "ESD")
          track2 = dynamic_cast<AliESDtrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "AOD")
+         track2 = dynamic_cast<AliAODTrack *>(gTrackArray->At(j));
+       else if(fAnalysisLevel == "MC")
+         track2 = dynamic_cast<AliMCParticle *>(gTrackArray->At(j));
        Short_t charge2 = track2->Charge();
        Double_t phi2 = track2->Phi();
        Double_t dphi = TMath::Abs(phi1 - phi2);