]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Updated working version of the ebye charge fluctuation code
authorpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 2 Feb 2011 15:07:01 +0000 (15:07 +0000)
committerpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 2 Feb 2011 15:07:01 +0000 (15:07 +0000)
PWG2/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTask.cxx
PWG2/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTask.h
PWG2/EBYE/macros/AddTaskFluctuations.C
PWG2/EBYE/macros/CreateAlienHandler.C
PWG2/EBYE/macros/configFluctuationsAnalysis.C
PWG2/EBYE/macros/runTaskFluctuations.C

index bdf450692c1fc14c801cf0b6f6c955d2388ad489..f7478cfa22ad157fe59c0dbcd91a4967246981ef 100644 (file)
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: Satyajit Jena.                                                 *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * Permission to use, copy, modify and distribute this software and its   *
- * documentation strictly for non-commercial purposes is hereby granted   *
- * without fee, provided that the above copyright notice appears in all   *
- * copies and that both the copyright notice and this permission notice   *
- * appear in the supporting documentation. The authors make no claims     *
- * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
-
-/* $Id$ sjena*/
-
-//-------------------------------------------------------------------------
-//                 AliEbyEFluctuationAnalysisTask
-//   This is the class to deal with the EbyE Charge Fluctuation  analysis
-//               Origin: Satyajit Jena, sjena@cern.ch
-//-------------------------------------------------------------------------
-
-#include "Riostream.h"
 #include "TChain.h"
 #include "TTree.h"
 #include "TH1F.h"
 #include "TH2F.h"
 #include "TCanvas.h"
-#include "TList.h"
-#include "AliAnalysisTaskSE.h"
+#include "TParticle.h"
+#include "AliAnalysisTask.h"
 #include "AliAnalysisManager.h"
+
 #include "AliStack.h"
-#include "AliESDtrackCuts.h"
+#include "AliMCEvent.h"
 #include "AliESDEvent.h"
 #include "AliESDInputHandler.h"
-#include "AliESDVZERO.h"
-#include "AliAODEvent.h"
-#include "AliMCEvent.h"
-#include "AliMultiplicity.h"
-#include "AliVertexerTracks.h"
+#include "AliESDtrackCuts.h"
 #include "AliCentrality.h"
-#include "AliEbyEFluctuationAnalysisTask.h"
 
-ClassImp(AliEbyEFluctuationAnalysisTask)
+#include "AliEbyEFluctuationAnalysisTask.h"
 
-//________________________________________________________________________
-AliEbyEFluctuationAnalysisTask::AliEbyEFluctuationAnalysisTask() 
-  :AliAnalysisTaskSE(),
-   fTrackCut(0),
-   fListQA(0),
-   fListResults(0),
-   fAnalysisType("ESD"),
-   fAnalysisMode("TPC"),
-   fCentType("M"),
-   fCentBin(10),
-   fCentMode("F"),
-   fCentEstimator("V0M"),
-   fVx(5.),
-   fVy(5.),
-   fVz(10.),
-   fHistEventStats(0),
-   fhVertex(0),
-   fhVzeroMult(0),
-   fCentVsMult(0),
-   fhVnT(0) {
-  // Dummy constructor ALWAYS needed for I/O.
-  for(Int_t i = 0; i < 20; i++) fHCentrality[i] = NULL;
-}
+// Event by event charge fluctuation analysis
+// Authors: Satyajit Jena and Panos Cristakoglou
+// 
 
+ClassImp(AliEbyEFluctuationAnalysisTask)
 
 //________________________________________________________________________
 AliEbyEFluctuationAnalysisTask::AliEbyEFluctuationAnalysisTask(const char *name) 
-  :AliAnalysisTaskSE(name),
-   fTrackCut(0),
-   fListQA(0),
-   fListResults(0),
-   fAnalysisType("ESD"),
-   fAnalysisMode("TPC"),
-   fCentType("M"),
-   fCentBin(5),
-   fCentMode("F"),
-   fCentEstimator("V0M"),
-   fVx(5.),
-   fVy(5.),
-   fVz(10.),
-   fHistEventStats(0),
-   fhVertex(0),
-   fhVzeroMult(0),
-   fCentVsMult(0),
-   fhVnT(0) {
-  //Constructor
-  for(Int_t i = 0; i < 20; i++) fHCentrality[i] = NULL;
-  
-  DefineOutput(1, TList::Class());                                         
-  DefineOutput(2, TList::Class());                                         
-}
-
-//________________________________________________________________________
-AliEbyEFluctuationAnalysisTask::~AliEbyEFluctuationAnalysisTask() {
-  //Destructor
-  if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
-    if(fListQA) delete fListQA;
-    if(fTrackCut) delete fTrackCut;
+  : AliAnalysisTaskSE(name), fESD(0), fOutputList(0), 
+    fHistEventStats(0), fHistCentrality(0),
+    fHistNMultMC(0), fHistNPlusNMinusMC(0), 
+    fESDtrackCuts(0),
+    fAnalysisType("ESD"), fAnalysisMode("TPC"),
+    fCentralityEstimator("V0M"), fCentralityBins20(kFALSE),
+    fVxMax(3.), fVyMax(3.), fVzMax(10.) {
+  // Constructor
+  
+  for(Int_t iBin = 1; iBin <= nCentralityBins; iBin++) {
+    fHistNMult[iBin-1] = NULL;
+    fHistNPlusNMinus[iBin-1] = NULL;
   }
+
+  // Define input and output slots here
+  // Input slot #0 works with a TChain
+  DefineInput(0, TChain::Class());
+  // Output slot #0 id reserved by the base class for AOD
+  // Output slot #1 writes into a TH1 container
+  DefineOutput(1, TList::Class());
 }
 
 //________________________________________________________________________
 void AliEbyEFluctuationAnalysisTask::UserCreateOutputObjects() {
-  //Output objects
-  fListQA = new TList();
-  fListQA->SetName("fListQA");
-  
-  //InitTrackCuts();
-  
-  Int_t lbin = 100/fCentBin + 2; 
-  
-  TString gCutName[4] = {"Total","Offline trigger","Vertex","Analyzed"};
-  fHistEventStats = new TH1F("fHistEventStats","Event statistics;;N_{events}",4,0.5,4.5);
+  // Create histograms
+  // Called once
+
+  fOutputList = new TList();
+
+  //Event stats.
+  TString gCutName[4] = {"Total","Offline trigger",
+                         "Vertex","Analyzed"};
+  fHistEventStats = new TH1F("fHistEventStats",
+                             "Event statistics;;N_{events}",
+                             4,0.5,4.5);
   for(Int_t i = 1; i <= 4; i++)
     fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data());
-  
-  fListQA->Add(fHistEventStats);
-  
-  fhVertex = new TH2F("hVertex","Vertexer;Bin For Different Vertexer;Value",7,0,7,1000,-25,25);
-  fListQA->Add(fhVertex);
-  
-  fhVzeroMult = new TH2F("hVzMultilicity","",lbin,0,(Double_t)lbin,1000,0,25000);
-  fListQA->Add(fhVzeroMult);
-  
-  fhVnT = new TH2F("hVzAndTrack","",lbin,0,(Double_t)lbin,1000,0,25000);
-  fListQA->Add(fhVnT);
-  
-  fCentVsMult = new TH2F("hCentVsMult","Centrality vs Multiplicity[N_{+} + N_{-}];Centrality; Multiplicity[N_{+} + N_{-}]",lbin,0,(Double_t)lbin,4000,0,25000);
-  
-  fListQA->Add(fCentVsMult);
-  
-  //===========================================================//
-  fListResults = new TList();
-  fListResults->SetName("fListResults");
-  TString histName;
-  for(Int_t iBin = 0; iBin < 20 ; iBin++) {
-    histName = "fHistPN"; histName += "Centrality"; histName += iBin;
-    fHCentrality[iBin] = new TH2F(histName.Data(),
+  fOutputList->Add(fHistEventStats);
+
+  //ESD analysis
+  if(fAnalysisType == "ESD") {
+    fHistCentrality = new TH1F("fHistCentrality",";Centrality bin;Events",
+                              nCentralityBins,0.5,nCentralityBins+0.5);
+    fOutputList->Add(fHistCentrality);
+    
+    TString histName;
+    for(Int_t iBin = 1; iBin <= nCentralityBins; iBin++) {
+      histName = "fHistNMult"; histName += "Centrality"; histName += iBin; 
+      fHistNMult[iBin-1] = new TH1F(histName.Data(), 
+                                   ";N_{mult.}",
+                                   500,0,3000);
+      fOutputList->Add(fHistNMult[iBin-1]);
+    }
+    for(Int_t iBin = 1; iBin <= nCentralityBins; iBin++) {
+      histName = "fHistNPlusNMinus"; histName += "Centrality"; histName += iBin; 
+      fHistNPlusNMinus[iBin-1] = new TH2F(histName.Data(), 
+                                         ";N_{+};N_{-}",
+                                         2000,0.5,2000.5,2000,0.5,2000.5);  
+      fOutputList->Add(fHistNPlusNMinus[iBin-1]);
+    }
+  }//ESD analysis
+  else if(fAnalysisType == "MC") {
+    TString histName = "fHistNMultMC";
+    fHistNMultMC = new TH1F(histName.Data(), 
+                           ";N_{mult.}",
+                           600,0,6000);
+    fOutputList->Add(fHistNMultMC);
+    
+    histName = "fHistNPlusNMinusMC";
+    fHistNPlusNMinusMC = new TH2F(histName.Data(), 
                                  ";N_{+};N_{-}",
-                                 2000,0.5,2000.5,2000,0.5,2000.5);
-    fListResults->Add(fHCentrality[iBin]);
-  }
-  
-  PostData(1, fListQA); 
-  PostData(2, fListResults); 
+                                 3000,0.5,3000.5,3000,0.5,3000.5);  
+    fOutputList->Add(fHistNPlusNMinusMC);
+  }//MC analysis
 }
 
 //________________________________________________________________________
 void AliEbyEFluctuationAnalysisTask::UserExec(Option_t *) {
-  //Analysis part
-  fHistEventStats->Fill(1); //all events 
-  TString gAnalysisLevel = "ESD";
-  
-  //AliCentrality *centrality = esd->GetCentrality();  
-  Double_t mult = 0;
-  Int_t pch  = 0;
-  Int_t nch  = 0;
-  Int_t cent = 0;  
+  // Main loop
+  // Called for each event
   
+  Int_t nPlus = 0, nMinus = 0;
+
+  // Post output data.
   //ESD analysis
-  if(fAnalysisType.CompareTo("ESD") == 0) {
-    AliESDEvent* gESD = dynamic_cast<AliESDEvent*>(InputEvent()); // from Task
-    if (!gESD) {
-      Printf("ERROR: gESD not available");
+  if(fAnalysisType == "ESD") {
+    fESD = dynamic_cast<AliESDEvent*>(InputEvent());
+    if (!fESD) {
+      printf("ERROR: fESD not available\n");
+      return;
+    }
+  
+    fHistEventStats->Fill(1); //all events
+    
+    //Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
+    //if(isSelected) {
+      fHistEventStats->Fill(2); //triggered + centrality
+      Printf("Event accepted");
+
+      //Centrality stuff
+      AliCentrality *centrality = fESD->GetCentrality();
+      Int_t nCentrality = 0;
+      if(fCentralityBins20) 
+       nCentrality = centrality->GetCentralityClass5(fCentralityEstimator.Data());
+      else
+       nCentrality = centrality->GetCentralityClass10(fCentralityEstimator.Data());
+
+      if((nCentrality < 0)||(nCentrality > 19)) return;
+      
+      if(fAnalysisMode = "TPC") {
+       const AliESDVertex *vertex = fESD->GetPrimaryVertexTPC();
+       if(vertex) {
+         if(vertex->GetNContributors() > 0) {
+           if(vertex->GetZRes() != 0) {
+             fHistEventStats->Fill(3); //events with a proper vertex
+             if(TMath::Abs(vertex->GetXv()) < fVxMax) {
+               if(TMath::Abs(vertex->GetYv()) < fVyMax) {
+                 if(TMath::Abs(vertex->GetZv()) < fVzMax) {
+                   fHistEventStats->Fill(4); //analyzed events
+                   
+                   //Printf("Centrality percentile: %lf - Centrality: %d - Total tracks: %d",
+                   //centrality->GetCentralityPercentile(fCentralityEstimator.Data()),
+                   //nCentrality,fESD->GetNumberOfTracks());
+                                   
+                   // 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\n", iTracks);
+                       continue;
+                     }
+                     
+                     //ESD track cuts
+                     if(fESDtrackCuts) {
+                       AliESDtrack *tpcOnlyTrack = fESDtrackCuts->GetTPCOnlyTrack(fESD,iTracks);
+                       if(!tpcOnlyTrack) continue;
+                       
+                       if(!fESDtrackCuts->AcceptTrack(tpcOnlyTrack)) continue;
+                       
+                       Short_t gCharge = tpcOnlyTrack->Charge();
+                       if(gCharge > 0) nPlus += 1;
+                       if(gCharge < 0) nMinus += 1;
+                     }//ESD track cut object
+                   }//track loop
+                   //if((nCentrality >= 1)&&(nCentrality <= 20)) {
+                     
+                   fHistCentrality->Fill(nCentrality);
+                   fHistNPlusNMinus[nCentrality-1]->Fill(nPlus,nMinus);
+                   fHistNMult[nCentrality-1]->Fill(nPlus+nMinus);
+                   //}
+                 }//Vz cut
+               }//Vy cut
+             }//Vx cut
+           }//Vz resolution
+         }//number of contributors
+       }//valid vertex
+      }//TPC analysis mode
+      //}//physics selection
+  }//ESD analysis level
+
+  //MC analysis
+  if(fAnalysisType == "MC") {
+    AliMCEvent* mcEvent = MCEvent();
+    if (!mcEvent) {
+      Printf("ERROR: Could not retrieve MC event");
+      return;
+    }
+    AliStack* stack = mcEvent->Stack();
+    if (!stack) {
+      Printf("ERROR: Could not retrieve MC stack");
       return;
     }
-       
-    Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
-    if(!isSelected) return; 
-    fHistEventStats->Fill(2); //physics selection
-    AliESDVZERO* esdV0 = gESD->GetVZEROData();
-    mult = esdV0->GetMTotV0A() + esdV0->GetMTotV0C();
-
-    const AliESDVertex *vertex = GetVertex(gESD);
-    if(!vertex) return;
-    fHistEventStats->Fill(3); //vertexcut
-
-    AliCentrality *centrality = gESD->GetCentrality();
-    cent = centrality->GetCentralityClass5(fCentEstimator.Data());
-
-    // cent = GetCentrality(gESD);
-    if(cent < 0 || cent > 19 ) return;
-    fHistEventStats->Fill(4); //Analysed Events
     
-    //Track loop
-    for (Int_t iTracks = 0; iTracks < gESD->GetNumberOfTracks(); iTracks++) {
-      AliESDtrack* track = gESD->GetTrack(iTracks);
+    fHistEventStats->Fill(1); 
+    fHistEventStats->Fill(2); 
+    fHistEventStats->Fill(3); 
+    fHistEventStats->Fill(4); //analyzed events
+    for (Int_t iTracks = 0; iTracks < mcEvent->GetNumberOfTracks(); iTracks++) {
+      AliVParticle* track = mcEvent->GetTrack(iTracks);
       if (!track) {
-       Printf("ERROR: Could not receive track %d", iTracks);
+       Printf("ERROR: Could not receive track %d (mc loop)", iTracks);
        continue;
       }
       
-      if(fTrackCut) {
-       if(fAnalysisMode = "TPC") {
-         AliESDtrack *tpcOnlyTrack = fTrackCut->GetTPCOnlyTrack(gESD,iTracks);
-         if(!tpcOnlyTrack) continue;
-         if(!fTrackCut->AcceptTrack(tpcOnlyTrack)) continue;
-       }
-       else 
-         if(!fTrackCut->AcceptTrack(track)) continue;
-      }
+      if(!stack->IsPhysicalPrimary(iTracks)) continue;
+      if((track->Pt() < 0.3) && (track->Pt() > 1.5)) continue;
+      if(TMath::Abs(track->Eta()) > 0.8) continue;
+      
+      Short_t gCharge = track->Charge();
+      if(gCharge > 0) nPlus += 1;
+      if(gCharge < 0) nMinus += 1;
+    }//particle loop
+    fHistNPlusNMinusMC->Fill(nPlus,nMinus);
+    fHistNMultMC->Fill(nPlus+nMinus);
+    
+  }//MC analysis level
 
-      //----------------
-      Short_t charge = track->Charge();
-      if(charge > 0) pch += 1; 
-      if(charge < 0) nch += 1; 
-      //---------------
-    }//track loop
-  }//ESD analysis
 
-  fCentVsMult->Fill(cent,pch+nch);
-  fHCentrality[cent]->Fill(pch,nch);
-  
-  fhVnT->Fill(cent,mult);
-  fhVnT->Fill(cent,pch+nch);
-}
+  PostData(1, fOutputList);
+}      
 
 //________________________________________________________________________
 void AliEbyEFluctuationAnalysisTask::Terminate(Option_t *) {
-  //Terminate
-  fListQA = dynamic_cast<TList*> (GetOutputData(1));
-  if(!fListQA) { Printf("ERROR: could not retrieve TList fListQA"); return; }
-}
+  // Draw result to the screen
+  // Called once at the end of the query
 
-//____________________________________________________________________//
-Int_t AliEbyEFluctuationAnalysisTask::GetCentrality(AliESDEvent *esd) const {
-  //Return the centrality
-  Int_t cent = -1;
-  
-  Int_t lbin = 100/fCentBin + 1;
-
-  AliESDVZERO* esdV0 = esd->GetVZEROData();
-  Double_t mult = esdV0->GetMTotV0A() + esdV0->GetMTotV0C();
-  fhVzeroMult->Fill(lbin,mult);
-  
-  if(fCentType.CompareTo("M") == 0) {
-   
-    if(fAnalysisType.CompareTo("ESD") == 0) 
-      cent = FindCentralityESD(mult);
-    if(fAnalysisType.CompareTo("MC") == 0) 
-      cent = FindCentralityMC(mult);
-    if(cent > -1)  fhVzeroMult->Fill(cent,mult);
-    return cent;
+  fOutputList = dynamic_cast<TList*> (GetOutputData(1));
+  if (!fOutputList) {
+    printf("ERROR: Output list not available\n");
+    return;
   }
-  
-
- if(fCentType.CompareTo("G") == 0) {
-   //   printf("========= Inside Official Centrality Selection ======\n");
-   AliCentrality *centrality = esd->GetCentrality();
-   if(fCentBin == 10)
-     cent = centrality->GetCentralityClass10(fCentEstimator);
-   else
-     cent = centrality->GetCentralityClass5(fCentEstimator);
-
-   return cent;
- }
-
- return cent;
-}
-
-//____________________________________________________________________//
-Int_t AliEbyEFluctuationAnalysisTask::FindCentralityESD(Double_t mult) const {
-  //hardcoded centrality bins (to be removed)
-  Double_t data[101] = { 250000.0,
-                        17760.0,  16870.0,  16070.0,  15360.0,  14660.0, 
-                        13970.0,  13320.0,  12700.0,  12140.0,  11570.0, 
-                        11020.0,  10530.0,  10030.0,   9560.0,   9110.0, 
-                        8680.0,   8270.0,   7870.0,   7490.0,   7120.0, 
-                        6780.0,   6440.0,   6120.0,   5810.0,   5510.0, 
-                        5230.0,   4950.0,   4690.0,   4440.0,   4190.0, 
-                        3960.0,   3740.0,   3530.0,   3330.0,   3130.0, 
-                        2940.0,   2770.0,   2600.0,   2440.0,   2290.0, 
-                        2150.0,   2010.0,   1880.0,   1760.0,   1640.0, 
-                        1540.0,   1440.0,   1350.0,   1260.0,   1180.0, 
-                        1110.0,   1030.0,    970.0,    900.0,    840.0, 
-                        790.0,    740.0,    700.0,    650.0,    610.0, 
-                        580.0,    540.0,    510.0,    480.0,    450.0, 
-                        430.0,    400.0,    380.0,    360.0,    340.0, 
-                        320.0,    300.0,    290.0,    270.0,    250.0, 
-                        240.0,    230.0,    210.0,    200.0,    190.0, 
-                        180.0,    170.0,    160.0,    150.0,    150.0, 
-                        140.0,    130.0,    120.0,    120.0,    110.0, 
-                        100.0,    100.0,     90.0,     90.0,     80.0, 
-                        80.0,     80.0,     70.0,     70.0,     70.0 };
-  
-
- if(fCentMode.CompareTo("F") == 0) { 
-   for(Int_t i = 0; i < 100; i+=fCentBin) {
-      
-     if( (mult < data[i]) && (mult >= data[i+fCentBin]) ) 
-       return i/fCentBin;
-      }
-  }
-  if(fCentMode.CompareTo("A") == 0) {
-    for(int i = 0; i < 100; i+=fCentBin) {
-      if((mult < data[0]) && (mult >data[i+fCentBin]) ) {
-       return i/fCentBin; 
-      }
-    }
-  } 
-  
-return -2;
-  
-  
-}
-
-//____________________________________________________________________//
-Int_t AliEbyEFluctuationAnalysisTask::FindCentralityMC(Double_t mult) const {
-  //hardcoded centrality bins (MC) ==> to be removed
-  Double_t data[101] = { 250000.0, 17760.0,  16870.0,  16070.0,  15360.0,  
-                        14660.0, 13970.0,  13320.0,  12700.0,  12140.0,  
-                        11570.0, 11020.0,  10530.0,  10030.0,   9560.0,   9110.0, 
-                        8680.0,   8270.0,   7870.0,   7490.0,   7120.0, 
-                        6780.0,   6440.0,   6120.0,   5810.0,   5510.0, 
-                        5230.0,   4950.0,   4690.0,   4440.0,   4190.0, 
-                        3960.0,   3740.0,   3530.0,   3330.0,   3130.0, 
-                        2940.0,   2770.0,   2600.0,   2440.0,   2290.0, 
-                        2150.0,   2010.0,   1880.0,   1760.0,   1640.0, 
-                        1540.0,   1440.0,   1350.0,   1260.0,   1180.0, 
-                        1110.0,   1030.0,    970.0,    900.0,    840.0, 
-                        790.0,    740.0,    700.0,    650.0,    610.0, 
-                        580.0,    540.0,    510.0,    480.0,    450.0, 
-                        430.0,    400.0,    380.0,    360.0,    340.0, 
-                        320.0,    300.0,    290.0,    270.0,    250.0, 
-                        240.0,    230.0,    210.0,    200.0,    190.0, 
-                        180.0,    170.0,    160.0,    150.0,    150.0, 
-                        140.0,    130.0,    120.0,    120.0,    110.0, 
-                        100.0,    100.0,     90.0,     90.0,     80.0, 
-                        80.0,     80.0,     70.0,     70.0,     70.0 
-  };
-
-  if(fCentMode.CompareTo("F") == 0) { 
-    for(Int_t i = 0; i < 100; i+=fCentBin) {
-      if( (mult < data[i]) && (mult >= data[i+fCentBin]) ) 
-       return i/fCentBin;
-      }
-  }
-  if(fCentMode.CompareTo("A") == 0) {
-    for(int i = 0; i < 100; i+=fCentBin) {
-      if((mult < data[0]) && (mult >= data[i+fCentBin]) ) {
-       return i/fCentBin; 
-      }
-    }
-  } 
-  
-  return -3;
-}
-
-//____________________________________________________________________//
-const AliESDVertex* AliEbyEFluctuationAnalysisTask::GetVertex(AliESDEvent* esd) {
-  //Return the primary vertex
-  const AliESDVertex* vertex = 0;
-
-  if(fAnalysisMode = "TPC") 
-    vertex = esd->GetPrimaryVertexTPC();
-  if(fAnalysisMode = "Hybrid") 
-    vertex = esd->GetPrimaryVertexSPD();
-  if(fAnalysisMode = "Global") 
-    vertex = esd->GetPrimaryVertex();
-
-  if(vertex) {
-    if(vertex->GetNContributors() > 0) {
-      if(vertex->GetZRes() != 0) {
-       fhVertex->Fill(1,vertex->GetXv());
-       fhVertex->Fill(2,vertex->GetYv());
-       fhVertex->Fill(3,vertex->GetZv());
-       
-       if(TMath::Abs(vertex->GetXv()) < fVx) {
-         if(TMath::Abs(vertex->GetYv()) < fVy) {
-           if(TMath::Abs(vertex->GetZv()) < fVz) {
-             
-             fhVertex->Fill(4,vertex->GetXv());
-             fhVertex->Fill(5,vertex->GetYv());
-             fhVertex->Fill(6,vertex->GetZv());
-             return vertex;    
-             
-           }
-         }
-       }
-      }
-    }
-  }
-  
-  return vertex;
 }
index 5c05ddf6c50a689b4584110e057269906780767d..a576925a73fc410273cb933a48c5a71cc1784379 100644 (file)
@@ -1,88 +1,73 @@
-#ifndef AliEbyEFluctuationAnalysisTask_cxx
-#define AliEbyEFluctuationAnalysisTask_cxx
-
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-//-------------------------------------------------------------------------
-//                 AliEbyEFluctuationAnalysisTask
-//   This is the class to deal with the EbyE Charge Fluctuation  analysis
-//               Origin: Satyajit Jena, sjena@cern.ch
-//-------------------------------------------------------------------------
-
-class TH1F;
-class TH2F;
-class TList;
-class TTree;
-class AliESDVertex;
-class AliESDtrackCuts;
-class AliESDEvent;
-
-#ifndef ALIANALYSISTASKSE_H
-#include "AliAnalysisTaskSE.h"
-#endif
-
-
-class AliEbyEFluctuationAnalysisTask : public AliAnalysisTaskSE {
- public:
-    AliEbyEFluctuationAnalysisTask();
-    AliEbyEFluctuationAnalysisTask(const char *name);
-    virtual ~AliEbyEFluctuationAnalysisTask();
-    
-    virtual void     UserCreateOutputObjects();
-    virtual void     UserExec(Option_t *option);
-    virtual void     Terminate(Option_t *);
-    
-    void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) {
-      fTrackCut = trackCuts;}
-    void SetCentralityType(const char *centtype, 
-                          const char *centmode, 
-                          Int_t cbin) { //To be removed
-      fCentType = centtype; 
-      fCentMode = centmode; 
-      fCentBin = cbin;
-    } 
-
-    void SetAnalysisType(const char *analysistype) { fAnalysisType = analysistype;}
-    void SetAnalysisMode(const char *analysisMode) { fAnalysisMode = analysisMode;}
-    void SetCentralityEstimator(const char *centestimator) { fCentEstimator = centestimator;}
-    void SetCentType(const char *centtype) { fCentType = centtype;}
-
-    void SetVertex(Double_t vx, Double_t vy, Double_t vz) {fVx = vx; fVy = vy; fVz = vz; }
-
-    Int_t GetCentrality(AliESDEvent *esd) const;
-    Int_t FindCentralityESD(Double_t mult) const;
-    Int_t FindCentralityMC(Double_t mult) const;
-    const AliESDVertex *GetVertex(AliESDEvent* esd);
-
- private:
-    AliESDtrackCuts *fTrackCut;//cut object
-    
-    TList   *fListQA;//! Output QA list
-    TList   *fListResults;//!Output results list
-    TString  fAnalysisType;//"ESD","MC","AOD"
-    TString  fAnalysisMode;//"TPC","Global","Hybrid"
-    TString  fCentType;//to be removed
-    Int_t    fCentBin;
-    TString  fCentMode;
-    TString  fCentEstimator;//Centrality estimator "V0M","TKL","TRK","FMD","CL0","CL1"
-    Double_t fVx;//Vx
-    Double_t fVy;//Vy
-    Double_t fVz;//Vz
-     
-    TH1F  *fHistEventStats;//event stats
-    TH2F  *fhVertex; // 1-vx,2-vy,3-vz,4-vxacc,5-vyAcc,6-vzAcc
-    TH2F  *fhVzeroMult;//V0 amplitude
-    TH2F  *fCentVsMult; //centraltiy vs multiplicity
-    TH2F  *fhVnT;//
-    TH2F  *fHCentrality[20];//nPos vs nNeg vs centrality
-
-    //_________________________________________________
-    AliEbyEFluctuationAnalysisTask(const AliEbyEFluctuationAnalysisTask&); // not implemented
-    AliEbyEFluctuationAnalysisTask& operator=(const AliEbyEFluctuationAnalysisTask&); // not implemented
-    
-    ClassDef(AliEbyEFluctuationAnalysisTask, 1); 
-};
-
-#endif
-
+#ifndef AliEbyEFluctuationAnalysisTask_cxx\r
+#define AliEbyEFluctuationAnalysisTask_cxx\r
+\r
+// Event by event charge fluctuation analysis\r
+// Authors: Satyajit Jena and Panos Cristakoglou\r
+\r
+class TH1F;\r
+class TH2F;\r
+class TString;\r
+class AliESDEvent;\r
+class AliESDtrackCuts;\r
+\r
+#include "AliAnalysisTaskSE.h"\r
+\r
+const Int_t nCentralityBins = 20;\r
+\r
+class AliEbyEFluctuationAnalysisTask : public AliAnalysisTaskSE {\r
+ public:\r
+  AliEbyEFluctuationAnalysisTask() : AliAnalysisTaskSE(), fESD(0), fOutputList(0), fHistEventStats(0), fHistCentrality(0), fHistNMultMC(0), fHistNPlusNMinusMC(0), fESDtrackCuts(0), fAnalysisType(0), fAnalysisMode(0), fCentralityEstimator("V0M"), fCentralityBins20(kFALSE), fVxMax(3.0),fVyMax(3.0), fVzMax(10.) {}\r
+  AliEbyEFluctuationAnalysisTask(const char *name);\r
+  virtual ~AliEbyEFluctuationAnalysisTask() {}\r
+  \r
+  virtual void   UserCreateOutputObjects();\r
+  virtual void   UserExec(Option_t *option);\r
+  virtual void   Terminate(Option_t *);\r
+  \r
+  void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) {\r
+    fESDtrackCuts = trackCuts;}\r
+  void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {\r
+    fVxMax = vx;\r
+    fVyMax = vy;\r
+    fVzMax = vz;\r
+  }\r
\r
+  //Centrality\r
+  void SetCentralityEstimator(const char* centralityEstimator) {\r
+    fCentralityEstimator = centralityEstimator;}\r
+  void SetCentralityBins20() {fCentralityBins20 = kTRUE;}\r
+\r
+  void SetAnalysisType(const char* analysisType) {\r
+    fAnalysisType = analysisType;}\r
+  void SetAnalysisMode(const char* analysisMode) {\r
+    fAnalysisMode = analysisMode;}\r
+\r
+ private:\r
+  AliESDEvent *fESD;    //! ESD object\r
+  TList       *fOutputList; //! Output list\r
+  TH1F        *fHistEventStats; //!event stats\r
+  TH1F        *fHistCentrality; //!centrality\r
+  TH1F        *fHistNMult[nCentralityBins]; //! nmult\r
+  TH2F        *fHistNPlusNMinus[nCentralityBins];//!nplus vs nminus correlation\r
+  TH1F        *fHistNMultMC; //!nmult MC\r
+  TH2F        *fHistNPlusNMinusMC;//!nplus vs nminus correlation\r
+\r
+  AliESDtrackCuts *fESDtrackCuts; //ESD track cuts\r
+\r
+  TString fAnalysisType;//"MC", "ESD", "AOD"\r
+  TString fAnalysisMode;//"TPC", "Global"\r
+\r
+  TString fCentralityEstimator;//"V0M","TRK","TKL","ZDC","FMD"\r
+  Bool_t fCentralityBins20;//centrality bins of 5% width\r
+\r
+  Double_t fVxMax;//vxmax\r
+  Double_t fVyMax;//vymax\r
+  Double_t fVzMax;//vzmax\r
+\r
+  AliEbyEFluctuationAnalysisTask(const AliEbyEFluctuationAnalysisTask&); // not implemented\r
+  AliEbyEFluctuationAnalysisTask& operator=(const AliEbyEFluctuationAnalysisTask&); // not implemented\r
+  \r
+  ClassDef(AliEbyEFluctuationAnalysisTask, 1); // example of analysis\r
+};\r
+\r
+#endif\r
index 0847a26d9e1dda2f1c3e99b3d3eed7708b5650d0..a2ba931208816c53fa785035b658a4da1ea2b23c 100644 (file)
@@ -1,8 +1,13 @@
+//=============================================//
+const char* centralityEstimator = "TRK";
+//=============================================//
+
+//_________________________________________________________//
 AliEbyEFluctuationAnalysisTask *AddTaskFluctuations(const char* analysisType = "ESD", 
                                                    const char *analysisMode = "TPC") {
   // Creates a fluctuations analysis task and adds it to the analysis manager.
   // Get the pointer to the existing analysis manager via the static access method.
-  //==============================================================================
+  //===========================================================================
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
     ::Error("AddTaskFluctuations", "No analysis manager to connect to.");
@@ -10,39 +15,41 @@ AliEbyEFluctuationAnalysisTask *AddTaskFluctuations(const char* analysisType = "
   }
 
   // Check the analysis type using the event handlers connected to the analysis manager.
-  //==============================================================================
+  //===========================================================================
   if (!mgr->GetInputEventHandler()) {
     ::Error("AddTaskFluctuations", "This task requires an input event handler");
     return NULL;
   }
   TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
-  gROOT->LoadMacro("configFluctuationsAnalysis.C");
 
   // Create the task, add it to manager and configure it.
   //===========================================================================
   AliEbyEFluctuationAnalysisTask *taskFluctuations = new AliEbyEFluctuationAnalysisTask("FluctuationsTask");
   mgr->AddTask(taskFluctuations);
   taskFluctuations->SetAnalysisType(analysisType);
-  taskFluctuations->SetAnalysisMode(analysisMode);
-  taskFluctuations->SetVertex(3.,3.,10.);
-  taskFluctuations->SetCentralityEstimator("V0M");
+  if(analysisType == "ESD") {
+    taskFluctuations->SetAnalysisMode(analysisMode);
+    taskFluctuations->SetVertexDiamond(3.,3.,10.);
+    taskFluctuations->SetCentralityEstimator(centralityEstimator);
+    taskFluctuations->SetCentralityBins20();
+    taskFluctuations->SelectCollisionCandidates(AliVEvent::kMB);
+  }
 
   TString type = analysisType;
-  if (type=="ESD") {
+  if (analysisType=="ESD") {
+    gROOT->LoadMacro("configFluctuationsAnalysis.C");
     AliESDtrackCuts *trackCuts = GetTrackCutsObject();
     taskFluctuations->SetAnalysisCutObject(trackCuts);
   }
-
+  
   // Create ONLY the output containers for the data produced by the task.
   // Get and connect other common input/output containers via the manager as below
   //==============================================================================
   TString outputFileName = AliAnalysisManager::GetCommonFileName();
   outputFileName += ":outputFluctuationAnalysis.root";
-  AliAnalysisDataContainer *coutFAQA = mgr->CreateContainer("fluctuationsOutputQA", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
-  AliAnalysisDataContainer *coutFA = mgr->CreateContainer("fluctuationsOutputResults", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
+  AliAnalysisDataContainer *coutFA = mgr->CreateContainer("fluctuationsOutput", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
   mgr->ConnectInput(taskFluctuations, 0, mgr->GetCommonInputContainer());
-  mgr->ConnectOutput(taskFluctuations, 1, coutFAQA);
-  mgr->ConnectOutput(taskFluctuations, 2, coutFA);
+  mgr->ConnectOutput(taskFluctuations, 1, coutFA);
 
   // Return task pointer at the end
   return taskFluctuations;
index 41797c337e97372fe913ec2f6acb4681777a75fd..40aaf24e0615c81e4fea7db4adeaa69a257a922c 100644 (file)
@@ -2,9 +2,6 @@ AliAnalysisGrid* CreateAlienHandler() {
   // Check if user has a valid token, otherwise make one. This has limitations.
   // One can always follow the standard procedure of calling alien-token-init then
   //   source /tmp/gclient_env_$UID in the current shell.
-  // Set if you want to use par files on Grid:
-  Bool_t bUseParFiles = kTRUE;
-
   AliAnalysisAlien *plugin = new AliAnalysisAlien();
   
   // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
@@ -44,27 +41,25 @@ AliAnalysisGrid* CreateAlienHandler() {
   plugin->SetOutputToRunNo();  
 
   // Define alien work directory where all files will be copied. Relative to alien $HOME.
-  plugin->SetGridWorkingDir("Fluctuations/PbPb/2.76TeV/LHC10h/Pass1_4Plus/TPCOnly");
+  plugin->SetGridWorkingDir("Fluctuations/PbPb/2.76TeV/LHC10h/Pass1_4Plus/Systematics/Centrality/TPC/TPCOnly");
   // Declare alien output directory. Relative to working directory.
   plugin->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.
-  plugin->SetAnalysisSource("AliAnalysisFluctuationsTask.cxx");
+  plugin->SetAnalysisSource("AliEbyEFluctuationAnalysisTask.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.
-  //plugin->SetAdditionalLibs("AliAnalysisFluctuationsTask.h AliAnalysisFluctuationsTask.cxx");
-  if(!bUseParFiles) 
-    plugin->SetAdditionalLibs("libPWG2ebye.so");
-  else 
-    plugin->EnablePackage("PWG2ebye.par");
-
+  plugin->SetAdditionalLibs("AliEbyEFluctuationAnalysisTask.h AliEbyEFluctuationAnalysisTask.cxx");
+  
   // Do not specify your outputs by hand anymore:
   plugin->SetDefaultOutputs(kTRUE);
   // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
   plugin->SetAnalysisMacro("fluctuationsAnalysis.C");
   // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
-  plugin->SetSplitMaxInputFileNumber(450);
-  
+  plugin->SetSplitMaxInputFileNumber(100);
+  // Optionally set number of runs per masterjob:
+  plugin->SetNrunsPerMaster(7);
   // Optionally set time to live (default 30000 sec)
   plugin->SetTTL(30000);
   // Optionally set input format (default xml-single)
@@ -75,6 +70,9 @@ AliAnalysisGrid* CreateAlienHandler() {
   plugin->SetPrice(1);      
   // Optionally modify split mode (default 'se')    
   plugin->SetSplitMode("se");
-  
+
+  //Merging
+  plugin->SetMergeViaJDL(kTRUE);
+
   return plugin;
 }
index 663834105d0b08593132898f613fcbe4fc800076..100f6a12bc115919679b5b2037489a6a76735253 100644 (file)
@@ -3,17 +3,18 @@ AliESDtrackCuts *GetTrackCutsObject() {
   //Function to setup the AliESDtrackCuts object and return it
   AliESDtrackCuts *cuts = new AliESDtrackCuts("ebyeTrackCuts","ebyeTrackCuts");
   cuts->SetMinNClustersTPC(80);
+  //cuts->SetMinNClustersITS(2);
   cuts->SetMaxChi2PerClusterTPC(4.0);
   cuts->SetRequireTPCRefit();
+  //cuts->SetRequireITSRefit();
   cuts->SetAcceptKinkDaughters(kFALSE);
   cuts->SetMaxDCAToVertexXY(3.0);
   cuts->SetMaxDCAToVertexZ(3.0);
-
-  //cuts->SetMinNClustersITS(2);
-  //cuts->SetRequireITSRefit();
   
   cuts->SetPtRange(0.3,1.5);
   cuts->SetEtaRange(-0.8,0.8);
 
+  cuts->SaveHistograms("trackCuts");
+
   return cuts;
 }
index 44b0b6d4118c213f29ba3b8d43d21f11b33f2291..8c7512efe5d0be1425af99b2f06534a43c9b37e9 100644 (file)
@@ -11,10 +11,8 @@ const TString analysisMode = "TPC"; //"TPC", "Global"
 
 //void runTaskFluctuations(Int_t mode = mPROOF, Int_t nRuns = 600000, 
 //Bool_t DATA = kTRUE, const Char_t* dataDir="/alice/data/LHC10h_000137161_p1_4plus#esdTree", Int_t offset=0) {
-//void runTaskFluctuations(Int_t mode = mLocal, Bool_t DATA = kTRUE) {
+void runTaskFluctuations(Int_t mode = mLocal, Bool_t DATA = kTRUE) {
 //void runTaskFluctuations(Int_t mode = mGrid, Bool_t DATA = kTRUE) {
-//void runTaskFluctuations(Int_t mode = mGridPAR, Bool_t DATA = kTRUE) {
-void runTaskFluctuations(Int_t mode = mLocalPAR, Bool_t DATA = kTRUE) {
   // Time:
   TStopwatch timer;
   timer.Start();
@@ -27,24 +25,35 @@ void runTaskFluctuations(Int_t mode = mLocalPAR, Bool_t DATA = kTRUE) {
     gROOT->LoadMacro("CreateAlienHandler.C");
     AliAnalysisGrid *alienHandler = CreateAlienHandler();  
     if (!alienHandler) return;
-    //gROOT->LoadMacro("AliEbyEFluctuationAnalysisTask.cxx++");
+    gROOT->LoadMacro("AliEbyEFluctuationAnalysisTask.cxx++");
   }
   // Chains:   
   if(mode==mLocal || mode == mLocalPAR) {
-    //gROOT->LoadMacro("AliEbyEFluctuationAnalysisTask.cxx++");
-    if (analysisType!="AOD") { 
+    gROOT->LoadMacro("AliEbyEFluctuationAnalysisTask.cxx++");
+    if (analysisType=="ESD") { 
       TChain* chain = new TChain("esdTree");
-      chain->Add("/home/pchrist/ALICE/HeavyIons/Data/137161/pass1_4plus/Set1/AliESDs.root");
-      chain->Add("/home/pchrist/ALICE/HeavyIons/Data/137161/pass1_4plus/Set2/AliESDs.root");
-      chain->Add("/home/pchrist/ALICE/HeavyIons/Data/137161/pass1_4plus/Set3/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set1/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set2/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set3/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set4/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set5/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set6/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set7/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set8/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set9/AliESDs.root");
+      chain->Add("/data/alice2/pchrist/HeavyIons/Data/Pass1_4Plus/Set10/AliESDs.root");
     }
-    else  
+    else if(analysisType == "MC") {
+      TChain *chain = new TChain("TE");
+      chain->AddFile("galice.root");
+    }
+    else
       TChain* chain = CreateAODChain(dataDir, nRuns, offset);
   }
   //Proof
   if(mode == mPROOF) {
     gROOT->ProcessLine(Form(".include %s/include", gSystem->ExpandPathName("$ALICE_ROOT")));
-    //gProof->Load("AliEbyEFluctuationAnalysisTask.cxx++");
+    gProof->Load("AliEbyEFluctuationAnalysisTask.cxx++");
   }
 
   // Create analysis manager:
@@ -64,38 +73,41 @@ void runTaskFluctuations(Int_t mode = mLocalPAR, Bool_t DATA = kTRUE) {
   } // end of if(analysisType == "AOD")  
   if(analysisType == "MC") {
     AliVEventHandler* esdH = new AliESDInputHandler;
-    mgr->SetInputEventHandler(esdH); 
+    mgr->SetInputEventHandler(esdH);
     AliMCEventHandler *mc = new AliMCEventHandler();
+    mc->SetReadTR(kFALSE);
     mgr->SetMCtruthEventHandler(mc); 
   } // end of  if(analysisType == "MC")
-  
+    
+  // Task to check the offline trigger:
+  //if(mode == mLocal || mode == mGrid || mode == mGridPAR)
+  if(analysisType != "MC") {
+    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); 
+    AliPhysicsSelectionTask* physicsSelTask = AddTaskPhysicsSelection(!DATA);
+    if(!DATA){physicsSelTask->GetPhysicsSelection()->SetAnalyzeMC();}
+    // Enable debug printouts:
+    mgr->SetDebugLevel(2);
+    
+    //Add the centrality determination task
+    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
+    AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
+    //taskCentrality->SelectCollisionCandidates(AliVEvent::kMB);
+  }
+
   // Load the analysis task:
   gROOT->LoadMacro("AddTaskFluctuations.C");
   AliEbyEFluctuationAnalysisTask* taskFA = AddTaskFluctuations(analysisType.Data(),
                                                               analysisMode.Data());
-  
-  // Task to check the offline trigger:
-  //if(mode == mLocal || mode == mGrid || mode == mGridPAR)
-  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); 
-  AliPhysicsSelectionTask* physicsSelTask = AddTaskPhysicsSelection();
-  if(!DATA){physicsSelTask->GetPhysicsSelection()->SetAnalyzeMC();}
-  // Enable debug printouts:
-  mgr->SetDebugLevel(2);
-  
-  //Add the centrality determination task
-  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
-  AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
-  taskCentrality->SelectCollisionCandidates(AliVEvent::kMB);
 
   // Run the analysis:
   if(!mgr->InitAnalysis()){return;}
   mgr->PrintStatus(); 
   if(mode == mLocal || mode == mLocalPAR) 
-    //mgr->StartAnalysis("local",chain);
+    mgr->StartAnalysis("local",chain);
   else if(mode == mPROOF) 
     mgr->StartAnalysis("proof",dataDir,nRuns,offset);
   else if(mode == mGrid || mode == mGridPAR) 
-    //mgr->StartAnalysis("grid");
+    mgr->StartAnalysis("grid");
 
   // Print real and CPU time used for analysis:  
   timer.Stop();
@@ -127,6 +139,8 @@ void LoadLibraries(const anaModes mode) {
     gSystem->Load("libAOD");
     gSystem->Load("libANALYSIS");
     gSystem->Load("libANALYSISalice");
+    // Use AliRoot includes to compile our task                                   
+    gROOT->ProcessLine(".include $ALICE_ROOT/include");
     if(mode==mLocal || mode==mGrid)
       gSystem->Load("libPWG2ebye");
     if(mode==mGridPAR)
@@ -137,16 +151,11 @@ void LoadLibraries(const anaModes mode) {
     //--------------------------------------------------------
     //If you want to use root and par files from aliroot
     //--------------------------------------------------------  
-    gSystem->Load("libSTEERBase");
-    gSystem->Load("libESD");
-    gSystem->Load("libAOD");
-    gSystem->Load("libANALYSIS");
-    gSystem->Load("libANALYSISalice");
-    //SetupPar("STEERBase");
-    //SetupPar("ESD");
-    //SetupPar("AOD");
-    //SetupPar("ANALYSIS");
-    //SetupPar("ANALYSISalice");
+    SetupPar("STEERBase");
+    SetupPar("ESD");
+    SetupPar("AOD");
+    SetupPar("ANALYSIS");
+    SetupPar("ANALYSISalice");
     SetupPar("PWG2ebye");
 }
   
@@ -163,12 +172,7 @@ void LoadLibraries(const anaModes mode) {
     //TProof::Open("prf000-iep-grid.saske.sk");
 
     gProof->EnablePackage("VO_ALICE@AliRoot::v4-21-12-AN");
-    gSystem->Load("libSTEERBase");
-    gSystem->Load("libESD");
-    gSystem->Load("libAOD");
-    gSystem->Load("libANALYSIS");
-    gSystem->Load("libANALYSISalice");
-
     // Clear the Packages    
     //gProof->ClearPackage("STEERBase.par");
     //gProof->ClearPackage("ESD.par");
@@ -184,7 +188,7 @@ void LoadLibraries(const anaModes mode) {
     //gProof->UploadPackage("ANALYSIS.par"); 
     //gProof->UploadPackage("ANALYSISalice.par");
     //gProof->UploadPackage("CORRFW.par");
-    gProof->UploadPackage("PWG2ebye.par");
+    //gProof->UploadPackage("PWG2ebye");
 
     // Enable the Packages 
     //gProof->EnablePackage("STEERBase");
@@ -192,7 +196,7 @@ void LoadLibraries(const anaModes mode) {
     //gProof->EnablePackage("AOD");
     //gProof->EnablePackage("ANALYSIS");
     //gProof->EnablePackage("ANALYSISalice");
-    gProof->EnablePackage("PWG2ebye");
+    //gProof->EnablePackage("PWG2ebye");
 
     // Show enables Packages
     //gProof->ShowEnabledPackages();